Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
109 commits
Select commit Hold shift + click to select a range
dd0555c
Initial plan
Copilot Nov 20, 2025
d499910
WIP: Add transactional email service packages and ReservationRequestC…
Copilot Nov 20, 2025
06c57c4
Complete transactional email service implementation with event structure
Copilot Nov 20, 2025
d45abc2
Resolve sonar issues
Nov 20, 2025
eea3351
Update replaceAll method
Nov 20, 2025
2f550a9
Update sonar
Nov 20, 2025
8c56988
Update test cases
Nov 20, 2025
8659e61
create test cases
Nov 20, 2025
188010c
update test cases
Nov 20, 2025
dd79dba
Update code for test cases
Nov 21, 2025
3d5c69b
Update test cases
Nov 21, 2025
49f9a84
Update test cases ServiceTransactionalEmailMock
Nov 21, 2025
5faf79d
Update EventBusInstance for email
Nov 24, 2025
b06c8cd
Update Infrastructure for email
Nov 24, 2025
e38593a
Update branch 'main' into copilot/refactor-service-sendgrid-facade
Nov 24, 2025
e4c183f
Update ReservationRequestCreated flow
Nov 25, 2025
cf1d701
Create sendReservationRequestNotification services
Nov 25, 2025
adcb0c3
Resolve Merge conflicts merge into main
Nov 25, 2025
6bfca80
Update template util
Nov 25, 2025
3953fe0
Fix issue of package.json
Nov 27, 2025
3918218
Update main branch
Dec 1, 2025
5b165b4
Update data
Dec 1, 2025
49d06aa
Fix build issue
Dec 1, 2025
149cf80
Update Reservation Period issue
Dec 1, 2025
25c3166
Fixed all suggested changes
Dec 1, 2025
a1638c9
Update ReservationRequest
Dec 1, 2025
d327581
Fix build issues
Dec 1, 2025
1ec1265
Update env variable for sendgrid
Dec 1, 2025
0790bc3
Fix sourcery changes
Dec 2, 2025
ba4d0e4
Update test cases
Dec 2, 2025
74d24b3
move transactional-email-service to the cellix area
Dec 2, 2025
26ad8be
Remove boiler plate copilot comments
Dec 2, 2025
7969f17
Add test files and feature flies of transactional-email-service
Dec 3, 2025
3ba9a3d
Merge branch 'main' of into copilot/refactor-service-sendgrid-facade
Dec 3, 2025
4b80735
Resolved Sonar issues
Dec 3, 2025
b50c10a
Update test Cases for service-transactional-email
Dec 4, 2025
a49ce7d
Merge branch 'main' into copilot/refactor-service-sendgrid-facade
rohit-r-kumar Dec 4, 2025
11d5742
Fix test coverage issues of sonar
Dec 4, 2025
e8ef3e4
Merge branch 'copilot/refactor-service-sendgrid-facade' of https://gi…
Dec 4, 2025
1b1c537
Add more of coverage of test cases
Dec 4, 2025
7f7b16c
Update test coverage
Dec 4, 2025
85a3103
Added to fix the jws vulnerability
Dec 4, 2025
332ea55
fix sonar issues
Dec 4, 2025
58233a2
Revert "fix sonar issues"
Dec 4, 2025
6685219
Revert " Added to fix the jws vulnerability"
Dec 4, 2025
b6e90d0
Merge branch 'main' into copilot/refactor-service-sendgrid-facade
rohit-r-kumar Dec 4, 2025
3b5a8cb
Revert "Update test coverage"
Dec 4, 2025
00acdb1
Revert "Add more of coverage of test cases"
Dec 4, 2025
fac018f
Merge branch 'copilot/refactor-service-sendgrid-facade' of https://gi…
Dec 4, 2025
cc35298
Fix sonar issues
Dec 4, 2025
37f8c96
comment code remove
Dec 4, 2025
87cf572
Update version of jsonwebtoken
Dec 4, 2025
ba4d3ed
Vulnerability Fixed of auth0/node-jws
Dec 4, 2025
6bcd114
Add more of coverage of test cases
Dec 5, 2025
cea9fec
Update test coverage for reservation
Dec 5, 2025
f900951
Update test cases
Dec 5, 2025
c592b70
Potential fix for pull request finding 'Unused variable, import, func…
rohit-r-kumar Dec 5, 2025
91ab234
fix sonar issue
Dec 5, 2025
3d1396b
fix: Build issue
Dec 5, 2025
2131789
Fix Sonar issues
Dec 8, 2025
a058287
Fix sonar issue
Dec 8, 2025
7beff94
Merge branch 'main' of https://github.com/simnova/sharethrift into co…
Dec 10, 2025
0b5784d
Update import issue
Dec 10, 2025
b8be34e
Update jws
Dec 10, 2025
a092364
Update pnpm-yaml file
Dec 10, 2025
7fc2299
Update test cases
Dec 10, 2025
bea476f
Add stroies file for Listing-Information
Dec 10, 2025
c4a8e10
Update test cases for coverge
Dec 10, 2025
1aa80ca
Update test cases
Dec 10, 2025
adf7633
Update packages : vitest
Dec 10, 2025
ea2375a
Update vitest
Dec 10, 2025
f6a3b8f
Update reservation feature file
Dec 11, 2025
d6d268c
Update package.json for event handler, transactional-email-service-mo…
Dec 11, 2025
e8a570b
Update mock
Dec 11, 2025
cb979a0
Merge branch 'main' of https://github.com/simnova/sharethrift into co…
Dec 11, 2025
2cfdfe7
Update vitest config
Dec 11, 2025
4e4a341
Fix linting warning in template-utils.ts
Copilot Dec 11, 2025
f2ce33f
Merge branch 'main' of https://github.com/simnova/sharethrift into co…
Dec 16, 2025
d1df3f4
Resolve suggested comment
Dec 16, 2025
8e4a233
Resolved package json issue
Dec 17, 2025
63b8259
Update yaml
Dec 17, 2025
20073da
Revert config changes and fix reservation-request event pattern
Copilot Dec 17, 2025
a8d194c
Fixed test cases
Dec 17, 2025
56b52eb
Update test cases of ReservationRequestNotificationService
Dec 17, 2025
d0b19e8
Update test cases of sendReservationRequestNotification
Dec 17, 2025
1ec7c58
Update send Reservation Request Notification test cases
Dec 17, 2025
dce0e1d
Update test cases of Reservation Request Notification Service
Dec 17, 2025
cb18930
Update test cases
Dec 17, 2025
a0d26ac
Update config json files
Dec 18, 2025
054a8bf
Update storybook
Dec 18, 2025
20f5f5a
Merge branch 'main' of https://github.com/simnova/sharethrift into co…
Dec 22, 2025
5e332ba
Update Item-listing test Cases
Dec 22, 2025
baa1979
Resolved comments
Dec 26, 2025
a408d7c
Update resolved comments
Dec 29, 2025
a232cfd
Merge branch 'main' in branch
Dec 29, 2025
66a387a
Update test cases
Dec 29, 2025
a27f720
Resolved knip issues
Dec 30, 2025
3d3ef19
Resolve synk issue
Dec 30, 2025
8f8cb7c
Resolve comments
Jan 6, 2026
29a8ac9
Update test cases
Jan 6, 2026
2e0d491
Merge branch 'main' into copilot/refactor-service-sendgrid-facade
rohit-r-kumar Jan 6, 2026
3054ec0
Merge branch 'main' of https://github.com/simnova/sharethrift into co…
Jan 8, 2026
17670b3
Merge branch 'copilot/refactor-service-sendgrid-facade' of https://gi…
Jan 8, 2026
f34a119
Update test cases
Jan 8, 2026
641fe76
chore: extend QS vulnerability expiration to prevent build failure
Jan 8, 2026
8e9f062
Update request comment
Jan 8, 2026
35942a3
Update test cases
Jan 8, 2026
39e3059
synk issue resolved
Jan 8, 2026
aa6bd29
Update loadSharer object
Jan 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,9 @@ __*
**/generated.tsx
**/graphql.schema.json
apps/ui-sharethrift/tsconfig.tsbuildinfo

# Mock email outputs
tmp-emails
**/tmp/emails
**/node_modules
**/dist
8 changes: 7 additions & 1 deletion .snyk
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,11 @@ ignore:
'SNYK-JS-QS-14724253':
- '* > qs':
reason: 'Transitive dependency in express, @docusaurus/core, @apollo/server, apollo-link-rest; not exploitable in current usage.'
expires: '2026-01-19T00:00:00.000Z'
expires: '2026-07-19T00:00:00.000Z'
created: '2026-01-05T09:39:00.000Z'
'SNYK-JS-PNPMNPMCONF-14897556':
- '@docusaurus/preset-classic@3.9.2 > @docusaurus/core@3.9.2 > update-notifier@6.0.2 > latest-version@7.0.0 > package-json@8.1.1 > registry-auth-token@5.1.0 > @pnpm/npm-conf@2.3.1':
reason: 'Transitive dependency in Docusaurus (dev-only documentation tool); not exploitable in production. The vulnerability (command injection) is not reachable in the current usage context where npm-conf is only used for reading npm configuration in development workflows.'
expires: '2026-07-09T00:00:00.000Z'
created: '2026-01-09T00:00:00.000Z'

98 changes: 50 additions & 48 deletions apps/api/package.json
Original file line number Diff line number Diff line change
@@ -1,50 +1,52 @@
{
"name": "@sthrift/api",
"version": "1.0.0",
"author": "",
"license": "MIT",
"description": "",
"type": "module",
"main": "dist/src/index.js",
"types": "dist/src/index.d.ts",

"scripts": {
"prebuild": "biome lint",
"build": "tsc --build",
"watch": "tsc -w",
"test:watch": "vitest",
"lint": "biome lint",
"clean": "rimraf dist",
"prestart": "pnpm run clean && pnpm run build",
"start": "func start --typescript",
"azurite": "azurite-blob --silent --location ../../__blobstorage__ & azurite-queue --silent --location ../../__queuestorage__ & azurite-table --silent --location ../../__tablestorage__"
},
"dependencies": {
"@azure/functions": "^4.0.0",
"@cellix/api-services-spec": "workspace:*",
"@cellix/messaging-service": "workspace:*",
"@cellix/mongoose-seedwork": "workspace:*",
"@opentelemetry/api": "^1.9.0",
"@sthrift/application-services": "workspace:*",
"@sthrift/context-spec": "workspace:*",
"@sthrift/event-handler": "workspace:*",
"@sthrift/graphql": "workspace:*",
"@sthrift/messaging-service-mock": "workspace:*",
"@sthrift/messaging-service-twilio": "workspace:*",
"@sthrift/persistence": "workspace:*",
"@sthrift/rest": "workspace:*",
"@sthrift/service-blob-storage": "workspace:*",
"@cellix/payment-service": "workspace:*",
"@sthrift/payment-service-mock": "workspace:*",
"@sthrift/payment-service-cybersource": "workspace:*",
"@sthrift/service-mongoose": "workspace:*",
"@sthrift/service-otel": "workspace:*",
"@sthrift/service-token-validation": "workspace:*"
},
"devDependencies": {
"@cellix/typescript-config": "workspace:*",
"@cellix/vitest-config": "workspace:*",
"rimraf": "^6.0.1",
"typescript": "^5.8.3"
}
"name": "@sthrift/api",
"version": "1.0.0",
"author": "",
"license": "MIT",
"description": "",
"type": "module",
"main": "dist/src/index.js",
"types": "dist/src/index.d.ts",
"scripts": {
"prebuild": "biome lint",
"build": "tsc --build",
"watch": "tsc -w",
"test:watch": "vitest",
"lint": "biome lint",
"clean": "rimraf dist",
"prestart": "pnpm run clean && pnpm run build",
"start": "func start --typescript",
"azurite": "azurite-blob --silent --location ../../__blobstorage__ & azurite-queue --silent --location ../../__queuestorage__ & azurite-table --silent --location ../../__tablestorage__"
},
"dependencies": {
"@azure/functions": "^4.0.0",
"@cellix/api-services-spec": "workspace:*",
"@cellix/messaging-service": "workspace:*",
"@cellix/mongoose-seedwork": "workspace:*",
"@opentelemetry/api": "^1.9.0",
"@sthrift/application-services": "workspace:*",
"@sthrift/context-spec": "workspace:*",
"@sthrift/event-handler": "workspace:*",
"@sthrift/graphql": "workspace:*",
"@sthrift/messaging-service-mock": "workspace:*",
"@sthrift/persistence": "workspace:*",
"@sthrift/rest": "workspace:*",
"@sthrift/service-blob-storage": "workspace:*",
"@cellix/payment-service": "workspace:*",
"@sthrift/payment-service-mock": "workspace:*",
"@sthrift/payment-service-cybersource": "workspace:*",
"@sthrift/service-mongoose": "workspace:*",
"@sthrift/service-otel": "workspace:*",
"@sthrift/service-token-validation": "workspace:*",
"@sthrift/messaging-service-twilio": "workspace:*",
"@cellix/transactional-email-service": "workspace:*",
"@sthrift/transactional-email-service-sendgrid": "workspace:*",
"@sthrift/transactional-email-service-mock": "workspace:*"
},
"devDependencies": {
"@cellix/typescript-config": "workspace:*",
"@cellix/vitest-config": "workspace:*",
"rimraf": "^6.0.1",
"typescript": "^5.8.3"
}
}
19 changes: 16 additions & 3 deletions apps/api/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ import type { MessagingService } from '@cellix/messaging-service';
import { ServiceMessagingTwilio } from '@sthrift/messaging-service-twilio';
import { ServiceMessagingMock } from '@sthrift/messaging-service-mock';

import type { TransactionalEmailService } from '@cellix/transactional-email-service';
import { ServiceTransactionalEmailSendGrid } from '@sthrift/transactional-email-service-sendgrid';
import { ServiceTransactionalEmailMock } from '@sthrift/transactional-email-service-mock';

import { graphHandlerCreator } from '@sthrift/graphql';
import { restHandlerCreator } from '@sthrift/rest';

Expand Down Expand Up @@ -50,7 +54,11 @@ Cellix.initializeInfrastructureServices<ApiContextSpec, ApplicationServices>(
isDevelopment ? new ServiceMessagingMock() : new ServiceMessagingTwilio(),
)
.registerInfrastructureService(
isDevelopment ? new PaymentServiceMock() : new PaymentServiceCybersource()
// Use mock if in development OR if SendGrid API key is not available
isDevelopment ? new ServiceTransactionalEmailMock() : new ServiceTransactionalEmailSendGrid(),
)
.registerInfrastructureService(
isDevelopment ? new PaymentServiceMock() : new PaymentServiceCybersource()
);
},
)
Expand All @@ -69,8 +77,12 @@ Cellix.initializeInfrastructureServices<ApiContextSpec, ApplicationServices>(
? serviceRegistry.getInfrastructureService<PaymentService>(PaymentServiceMock)
: serviceRegistry.getInfrastructureService<PaymentService>(PaymentServiceCybersource);

const emailService = isDevelopment
? serviceRegistry.getInfrastructureService<TransactionalEmailService>(ServiceTransactionalEmailMock)
: serviceRegistry.getInfrastructureService<TransactionalEmailService>(ServiceTransactionalEmailSendGrid);

const { domainDataSource } = dataSourcesFactory.withSystemPassport();
RegisterEventHandlers(domainDataSource);
RegisterEventHandlers(domainDataSource, emailService);

return {
dataSourcesFactory,
Expand All @@ -79,7 +91,8 @@ Cellix.initializeInfrastructureServices<ApiContextSpec, ApplicationServices>(
ServiceTokenValidation,
),
paymentService,
messagingService,
messagingService,
emailService,
};
})
.initializeApplicationServices((context) =>
Expand Down
2 changes: 1 addition & 1 deletion apps/ui-sharethrift/.storybook/vitest.setup.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import '@testing-library/jest-dom';
import * as a11yAddonAnnotations from "@storybook/addon-a11y/preview";
import { setProjectAnnotations } from '@storybook/react-vite';
import * as projectAnnotations from './preview';
import * as projectAnnotations from './preview.tsx';

setProjectAnnotations([a11yAddonAnnotations, projectAnnotations]);
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,12 @@ export function AdminListings(): React.JSX.Element {
if (data.deleteItemListing?.status?.success) {
message.success('Listing deleted successfully');
refetch();
} else {
} else if (data.deleteItemListing?.status?.errorMessage) {
message.error(
`Failed to delete listing: ${data.deleteItemListing?.status?.errorMessage ?? 'Unknown error'}`,
`Failed to delete listing: ${data.deleteItemListing.status.errorMessage}`,
);
} else {
message.error('Failed to delete listing: Unknown error');
}
},
onError: (error) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ const meta: Meta<typeof AdminUsers> = {
result: {
data: {
allUsers: {
__typename: 'AdminUserSearchResults',
__typename: 'PersonalUserPage',
items: [
{
__typename: 'AdminUser',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ const mockListing = {
const mockCurrentUser = {
__typename: 'PersonalUser',
id: 'user-2',
userType: 'personal-user',
};

const meta: Meta<typeof ListingInformationContainer> = {
Expand Down
Loading
Loading