Skip to content

Commit 7306ab9

Browse files
refactor: use direct PaymentService imports instead of .lib structure
- Update app-store-cli to import directly from lib/PaymentService.ts files - Modify all payment handlers to access PaymentService directly - Update test mocks to match new direct import structure - Remove .lib property access pattern across payment system - Maintain backward compatibility while improving import efficiency Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
1 parent ca77702 commit 7306ab9

9 files changed

Lines changed: 41 additions & 61 deletions

File tree

packages/app-store-cli/src/build.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -420,8 +420,8 @@ function generateFiles() {
420420
"PaymentServiceMap",
421421
{
422422
importConfig: {
423-
fileToBeImported: "index.ts",
424-
importName: "default",
423+
fileToBeImported: "lib/PaymentService.ts",
424+
importName: "PaymentService",
425425
},
426426
lazyImport: true,
427427
},

packages/app-store/payment.services.generated.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
Don't modify this file manually.
44
**/
55
export const PaymentServiceMap = {
6-
alby: import("./alby/index"),
7-
btcpayserver: import("./btcpayserver/index"),
8-
hitpay: import("./hitpay/index"),
9-
"mock-payment-app": import("./mock-payment-app/index"),
10-
paypal: import("./paypal/index"),
11-
stripepayment: import("./stripepayment/index"),
6+
alby: import("./alby/lib/PaymentService"),
7+
btcpayserver: import("./btcpayserver/lib/PaymentService"),
8+
hitpay: import("./hitpay/lib/PaymentService"),
9+
"mock-payment-app": import("./mock-payment-app/lib/PaymentService"),
10+
paypal: import("./paypal/lib/PaymentService"),
11+
stripepayment: import("./stripepayment/lib/PaymentService"),
1212
};

packages/lib/getConnectedApps.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,8 +186,8 @@ export async function getConnectedApps({
186186
const paymentAppImportFn = PaymentServiceMap[app.dirName as keyof typeof PaymentServiceMap];
187187
if (paymentAppImportFn) {
188188
const paymentApp = await paymentAppImportFn;
189-
if (paymentApp && "lib" in paymentApp && paymentApp?.lib && "PaymentService" in paymentApp?.lib) {
190-
const PaymentService = paymentApp.lib.PaymentService;
189+
if (paymentApp && "PaymentService" in paymentApp && paymentApp?.PaymentService) {
190+
const PaymentService = paymentApp.PaymentService;
191191
const paymentInstance = new PaymentService(credential);
192192
isSetupAlready = paymentInstance.isSetupAlready();
193193
}

packages/lib/payment/deletePayment.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,12 @@ const deletePayment = async (
2222
return false;
2323
}
2424

25-
const paymentApp = await paymentAppImportFn;
26-
if (!paymentApp?.lib?.PaymentService) {
27-
console.warn(`payment App service of type ${paymentApp} is not implemented`);
25+
const paymentAppModule = await paymentAppImportFn;
26+
if (!paymentAppModule?.PaymentService) {
27+
console.warn(`payment App service not found for key: ${key}`);
2828
return false;
2929
}
30-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
31-
const PaymentService = paymentApp.lib.PaymentService as any;
30+
const PaymentService = paymentAppModule.PaymentService;
3231
const paymentInstance = new PaymentService(paymentAppCredentials) as IAbstractPaymentService;
3332
const deleted = await paymentInstance.deletePayment(paymentId);
3433
return deleted;

packages/lib/payment/handlePayment.ts

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,10 @@ import type { EventTypeAppsList } from "@calcom/app-store/utils";
55
import type { CompleteEventType } from "@calcom/prisma/zod";
66
import { eventTypeAppMetadataOptionalSchema } from "@calcom/prisma/zod-utils";
77
import type { CalendarEvent } from "@calcom/types/Calendar";
8-
import type { IAbstractPaymentService, PaymentApp } from "@calcom/types/PaymentService";
8+
import type { IAbstractPaymentService } from "@calcom/types/PaymentService";
99

10-
const isPaymentApp = (x: unknown): x is PaymentApp =>
11-
!!x &&
12-
typeof x === "object" &&
13-
"lib" in x &&
14-
typeof x.lib === "object" &&
15-
!!x.lib &&
16-
"PaymentService" in x.lib;
10+
const isPaymentService = (x: unknown): x is { PaymentService: any } =>
11+
!!x && typeof x === "object" && "PaymentService" in x && typeof x.PaymentService === "function";
1712

1813
const isKeyOf = <T extends object>(obj: T, key: unknown): key is keyof T =>
1914
typeof key === "string" && key in obj;
@@ -59,12 +54,12 @@ const handlePayment = async ({
5954
return null;
6055
}
6156

62-
const paymentApp = await paymentAppImportFn;
63-
if (!isPaymentApp(paymentApp)) {
64-
console.warn(`payment App service of type ${paymentApp} is not implemented`);
57+
const paymentAppModule = await paymentAppImportFn;
58+
if (!isPaymentService(paymentAppModule)) {
59+
console.warn(`payment App service not found for key: ${key}`);
6560
return null;
6661
}
67-
const PaymentService = paymentApp.lib.PaymentService;
62+
const PaymentService = paymentAppModule.PaymentService;
6863
const paymentInstance = new PaymentService(paymentAppCredentials) as IAbstractPaymentService;
6964

7065
const apps = eventTypeAppMetadataOptionalSchema.parse(selectedEventType?.metadata?.apps);

packages/lib/payment/handlePaymentRefund.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,12 @@ const handlePaymentRefund = async (
2222
return false;
2323
}
2424

25-
const paymentApp = await paymentAppImportFn;
26-
if (!paymentApp?.lib?.PaymentService) {
27-
console.warn(`payment App service of type ${paymentApp} is not implemented`);
25+
const paymentAppModule = await paymentAppImportFn;
26+
if (!paymentAppModule?.PaymentService) {
27+
console.warn(`payment App service not found for key: ${key}`);
2828
return false;
2929
}
30-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
31-
const PaymentService = paymentApp.lib.PaymentService as any;
30+
const PaymentService = paymentAppModule.PaymentService;
3231
const paymentInstance = new PaymentService(paymentAppCredentials) as IAbstractPaymentService;
3332
const refund = await paymentInstance.refund(paymentId);
3433
return refund;

packages/trpc/server/routers/viewer/payments.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,11 @@ export const paymentsRouter = router({
114114
}
115115

116116
const paymentApp = await paymentAppImportFn;
117-
if (!(paymentApp && paymentApp.lib && "lib" in paymentApp && "PaymentService" in paymentApp.lib)) {
117+
if (!(paymentApp && "PaymentService" in paymentApp && paymentApp?.PaymentService)) {
118118
throw new TRPCError({ code: "BAD_REQUEST", message: "Payment service not found" });
119119
}
120120

121-
const PaymentService = paymentApp.lib.PaymentService;
121+
const PaymentService = paymentApp.PaymentService;
122122
const paymentInstance = new PaymentService(paymentCredential);
123123

124124
try {

packages/trpc/server/routers/viewer/payments/chargeCard.handler.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,10 @@ export const chargeCardHandler = async ({ ctx, input }: ChargeCardHandlerOptions
132132
}
133133

134134
const paymentApp = await paymentAppImportFn;
135-
if (!paymentApp?.lib?.PaymentService) {
135+
if (!paymentApp?.PaymentService) {
136136
throw new TRPCError({ code: "BAD_REQUEST", message: "Payment service not found" });
137137
}
138-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
139-
const PaymentService = paymentApp.lib.PaymentService as any;
138+
const PaymentService = paymentApp.PaymentService;
140139
const paymentInstance = new PaymentService(paymentCredential) as IAbstractPaymentService;
141140

142141
try {

setupVitest.ts

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -127,48 +127,36 @@ class MockPaymentService {
127127
}
128128

129129
vi.mock("@calcom/app-store/stripepayment/index", () => ({
130-
lib: {
131-
PaymentService: MockPaymentService,
132-
},
130+
PaymentService: MockPaymentService,
133131
}));
134132

135133
vi.mock("@calcom/app-store/paypal/index", () => ({
136-
lib: {
137-
PaymentService: MockPaymentService,
138-
},
134+
PaymentService: MockPaymentService,
139135
}));
140136

141137
vi.mock("@calcom/app-store/alby/index", () => ({
142-
lib: {
143-
PaymentService: MockPaymentService,
144-
},
138+
PaymentService: MockPaymentService,
145139
}));
146140

147141
vi.mock("@calcom/app-store/hitpay/index", () => ({
148-
lib: {
149-
PaymentService: MockPaymentService,
150-
},
142+
PaymentService: MockPaymentService,
151143
}));
152144

153145
vi.mock("@calcom/app-store/btcpayserver/index", () => ({
154-
lib: {
155-
PaymentService: MockPaymentService,
156-
},
146+
PaymentService: MockPaymentService,
157147
}));
158148

159149
vi.mock("@calcom/app-store/mock-payment-app/index", () => ({
160-
lib: {
161-
PaymentService: MockPaymentService,
162-
},
150+
PaymentService: MockPaymentService,
163151
}));
164152

165153
vi.mock("@calcom/app-store/payment.services.generated", () => ({
166154
PaymentServiceMap: {
167-
stripepayment: Promise.resolve({ lib: { PaymentService: MockPaymentService } }),
168-
paypal: Promise.resolve({ lib: { PaymentService: MockPaymentService } }),
169-
alby: Promise.resolve({ lib: { PaymentService: MockPaymentService } }),
170-
hitpay: Promise.resolve({ lib: { PaymentService: MockPaymentService } }),
171-
btcpayserver: Promise.resolve({ lib: { PaymentService: MockPaymentService } }),
172-
"mock-payment-app": Promise.resolve({ lib: { PaymentService: MockPaymentService } }),
155+
stripepayment: Promise.resolve({ PaymentService: MockPaymentService }),
156+
paypal: Promise.resolve({ PaymentService: MockPaymentService }),
157+
alby: Promise.resolve({ PaymentService: MockPaymentService }),
158+
hitpay: Promise.resolve({ PaymentService: MockPaymentService }),
159+
btcpayserver: Promise.resolve({ PaymentService: MockPaymentService }),
160+
"mock-payment-app": Promise.resolve({ PaymentService: MockPaymentService }),
173161
},
174162
}));

0 commit comments

Comments
 (0)