Skip to content

Commit a39d3b9

Browse files
feat(stripe): stripe integration is now optional, based on env var (#1976)
* feat(wallet-backend): conditionally integrate Stripe services based on environment variable * feat(wallet-backend): update Stripe integration tests to always have use_stripe set on true * chore(wallet-backend): format
1 parent 066eb8f commit a39d3b9

File tree

5 files changed

+28
-15
lines changed

5 files changed

+28
-15
lines changed

packages/wallet/backend/src/app.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,9 @@ export class App {
156156
const grantController = this.container.resolve('grantController')
157157
const accountController = this.container.resolve('accountController')
158158
const rafikiController = this.container.resolve('rafikiController')
159-
const stripeController = this.container.resolve('stripeController')
159+
const stripeController = env.USE_STRIPE
160+
? this.container.resolve('stripeController')
161+
: undefined
160162
const gateHubController = this.container.resolve('gateHubController')
161163
const cardController = this.container.resolve('cardController')
162164

@@ -174,11 +176,13 @@ export class App {
174176
app.use(helmet())
175177

176178
// Stripe webhook signature validation requires raw body, parsing is done afterwards
177-
app.post(
178-
'/stripe-webhooks',
179-
stripeController.webhookMiddleware,
180-
stripeController.onWebHook
181-
)
179+
if (env.USE_STRIPE && stripeController) {
180+
app.post(
181+
'/stripe-webhooks',
182+
stripeController.webhookMiddleware,
183+
stripeController.onWebHook
184+
)
185+
}
182186

183187
app.use(express.json())
184188
app.use(express.urlencoded({ extended: true, limit: '25mb' }))

packages/wallet/backend/src/config/env.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ const envSchema = z.object({
5050
CARD_DATA_HREF: z.string().default('UPDATEME'),
5151
CARD_PIN_HREF: z.string().default('UPDATEME'),
5252
STRIPE_SECRET_KEY: z.string().default('STRIPE_SECRET_KEY'),
53-
STRIPE_WEBHOOK_SECRET: z.string().default('STRIPE_WEBHOOK_SECRET')
53+
STRIPE_WEBHOOK_SECRET: z.string().default('STRIPE_WEBHOOK_SECRET'),
54+
USE_STRIPE: z.boolean().default(false)
5455
})
5556

5657
export type Env = z.infer<typeof envSchema>

packages/wallet/backend/src/createContainer.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export interface Cradle {
7777
incomingPaymentService: IncomingPaymentService
7878
outgoingPaymentService: OutgoingPaymentService
7979
rafikiService: RafikiService
80-
stripeService: StripeService
80+
stripeService?: StripeService
8181
quoteService: QuoteService
8282
grantService: GrantService
8383
socketService: SocketService
@@ -89,7 +89,7 @@ export interface Cradle {
8989
incomingPaymentController: IncomingPaymentController
9090
outgoingPaymentController: OutgoingPaymentController
9191
rafikiController: RafikiController
92-
stripeController: StripeController
92+
stripeController?: StripeController
9393
quoteController: QuoteController
9494
grantController: GrantController
9595
walletAddressController: WalletAddressController
@@ -134,7 +134,12 @@ export async function createContainer(
134134
incomingPaymentService: asClass(IncomingPaymentService).singleton(),
135135
outgoingPaymentService: asClass(OutgoingPaymentService).singleton(),
136136
rafikiService: asClassSingletonWithLogger(RafikiService, logger),
137-
stripeService: asClassSingletonWithLogger(StripeService, logger),
137+
...(env.USE_STRIPE
138+
? {
139+
stripeService: asClassSingletonWithLogger(StripeService, logger),
140+
stripeController: asClassSingletonWithLogger(StripeController, logger)
141+
}
142+
: {}),
138143
quoteService: asClass(QuoteService).singleton(),
139144
grantService: asClass(GrantService).singleton(),
140145
socketService: asClassSingletonWithLogger(SocketService, logger),
@@ -147,7 +152,6 @@ export async function createContainer(
147152
incomingPaymentController: asClass(IncomingPaymentController).singleton(),
148153
outgoingPaymentController: asClass(OutgoingPaymentController).singleton(),
149154
rafikiController: asClassSingletonWithLogger(RafikiController, logger),
150-
stripeController: asClassSingletonWithLogger(StripeController, logger),
151155
quoteController: asClass(QuoteController).singleton(),
152156
grantController: asClass(GrantController).singleton(),
153157
walletAddressController: asClass(WalletAddressController).singleton(),

packages/wallet/backend/tests/stripe-integration/controller.test.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,13 @@ describe('Stripe Controller', () => {
7676
}
7777

7878
beforeAll(async (): Promise<void> => {
79-
bindings = await createContainer(env)
79+
const testEnv = { ...env, USE_STRIPE: true }
80+
bindings = await createContainer(testEnv)
8081
appContainer = await createApp(bindings)
8182
knex = appContainer.knex
82-
stripeController = await bindings.resolve('stripeController')
83+
stripeController = (await bindings.resolve(
84+
'stripeController'
85+
)) as StripeController
8386
})
8487

8588
beforeEach(async (): Promise<void> => {

packages/wallet/backend/tests/stripe-integration/service.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,11 @@ describe('Stripe Service', (): void => {
5252
})
5353

5454
beforeAll(async (): Promise<void> => {
55-
bindings = await createContainer(env)
55+
const testEnv = { ...env, USE_STRIPE: true }
56+
bindings = await createContainer(testEnv)
5657
appContainer = await createApp(bindings)
5758
knex = appContainer.knex
58-
stripeService = await bindings.resolve('stripeService')
59+
stripeService = (await bindings.resolve('stripeService')) as StripeService
5960
})
6061

6162
afterEach(async (): Promise<void> => {

0 commit comments

Comments
 (0)