punch-library 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/README.md +342 -0
  2. package/bin/punch.js +20 -0
  3. package/dist/app/health.controller.d.ts +5 -0
  4. package/dist/app/health.controller.js +29 -0
  5. package/dist/app/health.controller.js.map +1 -0
  6. package/dist/app.module.d.ts +4 -0
  7. package/dist/app.module.js +30 -0
  8. package/dist/app.module.js.map +1 -0
  9. package/dist/cli/punch.d.ts +2 -0
  10. package/dist/cli/punch.js +598 -0
  11. package/dist/cli/punch.js.map +1 -0
  12. package/dist/common/correlation-id.middleware.d.ts +12 -0
  13. package/dist/common/correlation-id.middleware.js +26 -0
  14. package/dist/common/correlation-id.middleware.js.map +1 -0
  15. package/dist/common/http-logging.interceptor.d.ts +7 -0
  16. package/dist/common/http-logging.interceptor.js +40 -0
  17. package/dist/common/http-logging.interceptor.js.map +1 -0
  18. package/dist/common/provider.constants.d.ts +1 -0
  19. package/dist/common/provider.constants.js +5 -0
  20. package/dist/common/provider.constants.js.map +1 -0
  21. package/dist/config/load-env.d.ts +1 -0
  22. package/dist/config/load-env.js +30 -0
  23. package/dist/config/load-env.js.map +1 -0
  24. package/dist/index.d.ts +7 -0
  25. package/dist/index.js +24 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/main.d.ts +1 -0
  28. package/dist/main.js +23 -0
  29. package/dist/main.js.map +1 -0
  30. package/dist/payments/application/dto/cancel-payment.dto.d.ts +4 -0
  31. package/dist/payments/application/dto/cancel-payment.dto.js +26 -0
  32. package/dist/payments/application/dto/cancel-payment.dto.js.map +1 -0
  33. package/dist/payments/application/dto/capture-payment.dto.d.ts +7 -0
  34. package/dist/payments/application/dto/capture-payment.dto.js +42 -0
  35. package/dist/payments/application/dto/capture-payment.dto.js.map +1 -0
  36. package/dist/payments/application/dto/create-intent.dto.d.ts +10 -0
  37. package/dist/payments/application/dto/create-intent.dto.js +52 -0
  38. package/dist/payments/application/dto/create-intent.dto.js.map +1 -0
  39. package/dist/payments/application/dto/custom-operation.dto.d.ts +11 -0
  40. package/dist/payments/application/dto/custom-operation.dto.js +60 -0
  41. package/dist/payments/application/dto/custom-operation.dto.js.map +1 -0
  42. package/dist/payments/application/dto/payment-provider.dto.d.ts +4 -0
  43. package/dist/payments/application/dto/payment-provider.dto.js +23 -0
  44. package/dist/payments/application/dto/payment-provider.dto.js.map +1 -0
  45. package/dist/payments/application/dto/refund-payment.dto.d.ts +8 -0
  46. package/dist/payments/application/dto/refund-payment.dto.js +46 -0
  47. package/dist/payments/application/dto/refund-payment.dto.js.map +1 -0
  48. package/dist/payments/application/dto/webhook-dlq-item.dto.d.ts +3 -0
  49. package/dist/payments/application/dto/webhook-dlq-item.dto.js +21 -0
  50. package/dist/payments/application/dto/webhook-dlq-item.dto.js.map +1 -0
  51. package/dist/payments/application/dto/webhook-provider.dto.d.ts +4 -0
  52. package/dist/payments/application/dto/webhook-provider.dto.js +23 -0
  53. package/dist/payments/application/dto/webhook-provider.dto.js.map +1 -0
  54. package/dist/payments/application/payments-exception.filter.d.ts +4 -0
  55. package/dist/payments/application/payments-exception.filter.js +58 -0
  56. package/dist/payments/application/payments-exception.filter.js.map +1 -0
  57. package/dist/payments/application/payments.controller.d.ts +50 -0
  58. package/dist/payments/application/payments.controller.js +231 -0
  59. package/dist/payments/application/payments.controller.js.map +1 -0
  60. package/dist/payments/application/payments.service.d.ts +43 -0
  61. package/dist/payments/application/payments.service.js +169 -0
  62. package/dist/payments/application/payments.service.js.map +1 -0
  63. package/dist/payments/domain/errors.d.ts +30 -0
  64. package/dist/payments/domain/errors.js +64 -0
  65. package/dist/payments/domain/errors.js.map +1 -0
  66. package/dist/payments/domain/payment-gateway.port.d.ts +12 -0
  67. package/dist/payments/domain/payment-gateway.port.js +3 -0
  68. package/dist/payments/domain/payment-gateway.port.js.map +1 -0
  69. package/dist/payments/domain/payment.types.d.ts +77 -0
  70. package/dist/payments/domain/payment.types.js +3 -0
  71. package/dist/payments/domain/payment.types.js.map +1 -0
  72. package/dist/payments/domain/provider-name.d.ts +3 -0
  73. package/dist/payments/domain/provider-name.js +25 -0
  74. package/dist/payments/domain/provider-name.js.map +1 -0
  75. package/dist/payments/infrastructure/gateway-registry.d.ts +6 -0
  76. package/dist/payments/infrastructure/gateway-registry.js +10 -0
  77. package/dist/payments/infrastructure/gateway-registry.js.map +1 -0
  78. package/dist/payments/infrastructure/json-file-state.store.d.ts +11 -0
  79. package/dist/payments/infrastructure/json-file-state.store.js +52 -0
  80. package/dist/payments/infrastructure/json-file-state.store.js.map +1 -0
  81. package/dist/payments/infrastructure/payment-outbox.service.d.ts +15 -0
  82. package/dist/payments/infrastructure/payment-outbox.service.js +46 -0
  83. package/dist/payments/infrastructure/payment-outbox.service.js.map +1 -0
  84. package/dist/payments/infrastructure/payment-provider-resilience.service.d.ts +35 -0
  85. package/dist/payments/infrastructure/payment-provider-resilience.service.js +105 -0
  86. package/dist/payments/infrastructure/payment-provider-resilience.service.js.map +1 -0
  87. package/dist/payments/infrastructure/payment-webhook-dlq.service.d.ts +21 -0
  88. package/dist/payments/infrastructure/payment-webhook-dlq.service.js +75 -0
  89. package/dist/payments/infrastructure/payment-webhook-dlq.service.js.map +1 -0
  90. package/dist/payments/infrastructure/payment-webhook-idempotency.service.d.ts +9 -0
  91. package/dist/payments/infrastructure/payment-webhook-idempotency.service.js +46 -0
  92. package/dist/payments/infrastructure/payment-webhook-idempotency.service.js.map +1 -0
  93. package/dist/payments/infrastructure/provider-registry.service.d.ts +8 -0
  94. package/dist/payments/infrastructure/provider-registry.service.js +42 -0
  95. package/dist/payments/infrastructure/provider-registry.service.js.map +1 -0
  96. package/dist/payments/payments.module.d.ts +2 -0
  97. package/dist/payments/payments.module.js +73 -0
  98. package/dist/payments/payments.module.js.map +1 -0
  99. package/dist/payments/providers/adyen/adyen.gateway.d.ts +42 -0
  100. package/dist/payments/providers/adyen/adyen.gateway.js +233 -0
  101. package/dist/payments/providers/adyen/adyen.gateway.js.map +1 -0
  102. package/dist/payments/providers/base-gateway.d.ts +26 -0
  103. package/dist/payments/providers/base-gateway.js +200 -0
  104. package/dist/payments/providers/base-gateway.js.map +1 -0
  105. package/dist/payments/providers/braintree/braintree.gateway.d.ts +5 -0
  106. package/dist/payments/providers/braintree/braintree.gateway.js +23 -0
  107. package/dist/payments/providers/braintree/braintree.gateway.js.map +1 -0
  108. package/dist/payments/providers/checkout/checkout.gateway.d.ts +5 -0
  109. package/dist/payments/providers/checkout/checkout.gateway.js +23 -0
  110. package/dist/payments/providers/checkout/checkout.gateway.js.map +1 -0
  111. package/dist/payments/providers/hepsipay/hepsipay.gateway.d.ts +5 -0
  112. package/dist/payments/providers/hepsipay/hepsipay.gateway.js +23 -0
  113. package/dist/payments/providers/hepsipay/hepsipay.gateway.js.map +1 -0
  114. package/dist/payments/providers/iyzico/iyzico.gateway.d.ts +5 -0
  115. package/dist/payments/providers/iyzico/iyzico.gateway.js +23 -0
  116. package/dist/payments/providers/iyzico/iyzico.gateway.js.map +1 -0
  117. package/dist/payments/providers/paddle/paddle.gateway.d.ts +5 -0
  118. package/dist/payments/providers/paddle/paddle.gateway.js +23 -0
  119. package/dist/payments/providers/paddle/paddle.gateway.js.map +1 -0
  120. package/dist/payments/providers/parampos/parampos.gateway.d.ts +5 -0
  121. package/dist/payments/providers/parampos/parampos.gateway.js +23 -0
  122. package/dist/payments/providers/parampos/parampos.gateway.js.map +1 -0
  123. package/dist/payments/providers/paypal/paypal.gateway.d.ts +30 -0
  124. package/dist/payments/providers/paypal/paypal.gateway.js +266 -0
  125. package/dist/payments/providers/paypal/paypal.gateway.js.map +1 -0
  126. package/dist/payments/providers/paytr/paytr.gateway.d.ts +5 -0
  127. package/dist/payments/providers/paytr/paytr.gateway.js +23 -0
  128. package/dist/payments/providers/paytr/paytr.gateway.js.map +1 -0
  129. package/dist/payments/providers/provider-catalog.d.ts +12 -0
  130. package/dist/payments/providers/provider-catalog.js +156 -0
  131. package/dist/payments/providers/provider-catalog.js.map +1 -0
  132. package/dist/payments/providers/razorpay/razorpay.gateway.d.ts +5 -0
  133. package/dist/payments/providers/razorpay/razorpay.gateway.js +23 -0
  134. package/dist/payments/providers/razorpay/razorpay.gateway.js.map +1 -0
  135. package/dist/payments/providers/sipay/sipay.gateway.d.ts +5 -0
  136. package/dist/payments/providers/sipay/sipay.gateway.js +23 -0
  137. package/dist/payments/providers/sipay/sipay.gateway.js.map +1 -0
  138. package/dist/payments/providers/square/square.gateway.d.ts +27 -0
  139. package/dist/payments/providers/square/square.gateway.js +207 -0
  140. package/dist/payments/providers/square/square.gateway.js.map +1 -0
  141. package/dist/payments/providers/stripe/stripe.gateway.d.ts +22 -0
  142. package/dist/payments/providers/stripe/stripe.gateway.js +175 -0
  143. package/dist/payments/providers/stripe/stripe.gateway.js.map +1 -0
  144. package/dist/payments/providers/stub-gateway.d.ts +19 -0
  145. package/dist/payments/providers/stub-gateway.js +256 -0
  146. package/dist/payments/providers/stub-gateway.js.map +1 -0
  147. package/dist/payments/providers/twocheckout/twocheckout.gateway.d.ts +5 -0
  148. package/dist/payments/providers/twocheckout/twocheckout.gateway.js +23 -0
  149. package/dist/payments/providers/twocheckout/twocheckout.gateway.js.map +1 -0
  150. package/dist/payments/providers/worldpay/worldpay.gateway.d.ts +5 -0
  151. package/dist/payments/providers/worldpay/worldpay.gateway.js +23 -0
  152. package/dist/payments/providers/worldpay/worldpay.gateway.js.map +1 -0
  153. package/dist/payments/punch-client.d.ts +4 -0
  154. package/dist/payments/punch-client.js +8 -0
  155. package/dist/payments/punch-client.js.map +1 -0
  156. package/dist/payments/punch.d.ts +39 -0
  157. package/dist/payments/punch.js +109 -0
  158. package/dist/payments/punch.js.map +1 -0
  159. package/dist/tsconfig.build.tsbuildinfo +1 -0
  160. package/package.json +83 -0
@@ -0,0 +1,598 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const node_fs_1 = require("node:fs");
5
+ const node_path_1 = require("node:path");
6
+ const provider_name_1 = require("../payments/domain/provider-name");
7
+ const provider_catalog_1 = require("../payments/providers/provider-catalog");
8
+ const PROVIDER_MAP = provider_name_1.providerNames.reduce((acc, provider) => {
9
+ const item = provider_catalog_1.providerCatalog.find((entry) => entry.provider === provider);
10
+ if (!item) {
11
+ throw new Error(`Missing provider catalog entry: ${provider}`);
12
+ }
13
+ acc[provider] = { envKey: item.envKey, docs: item.paymentsApiUrl };
14
+ return acc;
15
+ }, {});
16
+ const MOCK_API_KEYS = {
17
+ stripe: 'sk_test_mock_stripe_123456',
18
+ paypal: 'paypal_mock_123456',
19
+ adyen: 'adyen_mock_123456',
20
+ square: 'square_mock_123456',
21
+ braintree: 'braintree_mock_123456',
22
+ checkout: 'checkout_mock_123456',
23
+ worldpay: 'worldpay_mock_123456',
24
+ razorpay: 'razorpay_mock_123456',
25
+ paddle: 'paddle_mock_123456',
26
+ twocheckout: 'twocheckout_mock_123456',
27
+ iyzico: 'iyzico_mock_123456',
28
+ paytr: 'paytr_mock_123456',
29
+ parampos: 'parampos_mock_123456',
30
+ sipay: 'sipay_mock_123456',
31
+ hepsipay: 'hepsipay_mock_123456'
32
+ };
33
+ const PROVIDER_EXTRA_ENV = {
34
+ stripe: [{ key: 'PUNCH_STRIPE_WEBHOOK_SECRET', value: 'whsec_mock_stripe_secret_123456' }],
35
+ paypal: [
36
+ { key: 'PUNCH_PAYPAL_CLIENT_SECRET', value: 'paypal_mock_client_secret_123456' },
37
+ { key: 'PUNCH_PAYPAL_WEBHOOK_ID', value: 'paypal_mock_webhook_id_123456' }
38
+ ],
39
+ adyen: [
40
+ { key: 'PUNCH_ADYEN_MERCHANT_ACCOUNT', value: 'adyen_mock_merchant_account' },
41
+ { key: 'PUNCH_ADYEN_HMAC_KEY', value: '00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff' }
42
+ ],
43
+ square: [
44
+ { key: 'PUNCH_SQUARE_LOCATION_ID', value: 'square_mock_location_id' },
45
+ { key: 'PUNCH_SQUARE_WEBHOOK_SIGNATURE_KEY', value: 'square_mock_webhook_signature_key' },
46
+ { key: 'PUNCH_SQUARE_WEBHOOK_NOTIFICATION_URL', value: 'https://localhost:3000/api/v1/payments/webhooks/square' }
47
+ ],
48
+ braintree: [],
49
+ checkout: [],
50
+ worldpay: [],
51
+ razorpay: [],
52
+ paddle: [],
53
+ twocheckout: [],
54
+ iyzico: [],
55
+ paytr: [],
56
+ parampos: [],
57
+ sipay: [],
58
+ hepsipay: []
59
+ };
60
+ const STUB_LIVE_PROVIDERS = new Set([
61
+ 'braintree',
62
+ 'checkout',
63
+ 'worldpay',
64
+ 'razorpay',
65
+ 'paddle',
66
+ 'twocheckout',
67
+ 'iyzico',
68
+ 'paytr',
69
+ 'parampos',
70
+ 'sipay',
71
+ 'hepsipay'
72
+ ]);
73
+ const isMockApiKey = (value) => value.includes('_mock_');
74
+ const stubProviderPrefix = (provider) => `PUNCH_${provider.toUpperCase()}`;
75
+ const CLI_BANNER = String.raw `
76
+ ██████╗ ██╗ ██╗███╗ ██╗ ██████╗██╗ ██╗
77
+ ██╔══██╗██║ ██║████╗ ██║██╔════╝██║ ██║
78
+ ██████╔╝██║ ██║██╔██╗ ██║██║ ███████║
79
+ ██╔═══╝ ██║ ██║██║╚██╗██║██║ ██╔══██║
80
+ ██║ ╚██████╔╝██║ ╚████║╚██████╗██║ ██║
81
+ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═════╝╚═╝ ╚═╝
82
+ L I B R A R Y
83
+ `;
84
+ const printBanner = () => {
85
+ process.stdout.write(`${CLI_BANNER}\n`);
86
+ };
87
+ const shouldPrintBanner = (parsed) => {
88
+ if (parsed.flags.json) {
89
+ return false;
90
+ }
91
+ if (process.env.PUNCH_NO_BANNER?.trim().toLowerCase() === 'true') {
92
+ return false;
93
+ }
94
+ return true;
95
+ };
96
+ const usage = () => {
97
+ process.stdout.write('Usage:\n');
98
+ process.stdout.write(' punch list [--json]\n');
99
+ process.stdout.write(' punch status [--json]\n');
100
+ process.stdout.write(' punch new <provider> [--key=<apiKey>] [--no-enable]\n');
101
+ process.stdout.write(' punch remove <provider>\n');
102
+ process.stdout.write(' punch doctor [--json] [--fix]\n');
103
+ process.stdout.write(' punch template <provider> [--print]\n');
104
+ };
105
+ const readEnvRows = (cwd) => {
106
+ const envPath = (0, node_path_1.resolve)(cwd, '.env');
107
+ if (!(0, node_fs_1.existsSync)(envPath)) {
108
+ return [];
109
+ }
110
+ return (0, node_fs_1.readFileSync)(envPath, 'utf8').split(/\r?\n/);
111
+ };
112
+ const writeEnvRows = (cwd, rows) => {
113
+ const envPath = (0, node_path_1.resolve)(cwd, '.env');
114
+ (0, node_fs_1.writeFileSync)(envPath, `${rows.filter((row) => row.length > 0).join('\n')}\n`, 'utf8');
115
+ };
116
+ const parseEnv = (rows) => {
117
+ const result = new Map();
118
+ for (const row of rows) {
119
+ const line = row.trim();
120
+ if (!line || line.startsWith('#')) {
121
+ continue;
122
+ }
123
+ const index = line.indexOf('=');
124
+ if (index < 1) {
125
+ continue;
126
+ }
127
+ const key = line.slice(0, index).trim();
128
+ const value = line.slice(index + 1).trim();
129
+ result.set(key, value);
130
+ }
131
+ return result;
132
+ };
133
+ const toOrderedProviders = (input) => {
134
+ const set = new Set();
135
+ for (const value of input) {
136
+ if ((0, provider_name_1.isProviderName)(value)) {
137
+ set.add(value);
138
+ }
139
+ }
140
+ return provider_name_1.providerNames.filter((provider) => set.has(provider));
141
+ };
142
+ const findRowIndex = (rows, key) => {
143
+ return rows.findIndex((row) => row.trimStart().startsWith(`${key}=`));
144
+ };
145
+ const upsertRow = (rows, key, value) => {
146
+ const next = [...rows];
147
+ const index = findRowIndex(next, key);
148
+ const line = `${key}=${value}`;
149
+ if (index >= 0) {
150
+ next[index] = line;
151
+ }
152
+ else {
153
+ next.push(line);
154
+ }
155
+ return next;
156
+ };
157
+ const removeRow = (rows, key) => {
158
+ return rows.filter((row) => !row.trimStart().startsWith(`${key}=`));
159
+ };
160
+ const readProviderConfig = (cwd) => {
161
+ const configPath = (0, node_path_1.resolve)(cwd, 'punch.providers.json');
162
+ if (!(0, node_fs_1.existsSync)(configPath)) {
163
+ return [];
164
+ }
165
+ try {
166
+ const parsed = JSON.parse((0, node_fs_1.readFileSync)(configPath, 'utf8'));
167
+ if (!Array.isArray(parsed.providers)) {
168
+ return [];
169
+ }
170
+ return toOrderedProviders(parsed.providers.filter((value) => typeof value === 'string'));
171
+ }
172
+ catch {
173
+ return [];
174
+ }
175
+ };
176
+ const writeProviderConfig = (cwd, providers) => {
177
+ const configPath = (0, node_path_1.resolve)(cwd, 'punch.providers.json');
178
+ (0, node_fs_1.writeFileSync)(configPath, `${JSON.stringify({ providers }, null, 2)}\n`, 'utf8');
179
+ };
180
+ const getEnabledProviders = (env) => {
181
+ const raw = env.get('PUNCH_ENABLED_PROVIDERS') ?? '';
182
+ return toOrderedProviders(raw.split(',').map((value) => value.trim()).filter(Boolean));
183
+ };
184
+ const listProviders = (json) => {
185
+ const list = provider_name_1.providerNames.map((provider) => ({
186
+ provider,
187
+ envKey: PROVIDER_MAP[provider].envKey,
188
+ docs: PROVIDER_MAP[provider].docs
189
+ }));
190
+ if (json) {
191
+ process.stdout.write(`${JSON.stringify(list, null, 2)}\n`);
192
+ return;
193
+ }
194
+ for (const item of list) {
195
+ process.stdout.write(`${item.provider} - ${item.envKey} - ${item.docs}\n`);
196
+ }
197
+ };
198
+ const statusProviders = (cwd) => {
199
+ const envRows = readEnvRows(cwd);
200
+ const env = parseEnv(envRows);
201
+ const enabled = new Set(getEnabledProviders(env));
202
+ const inConfig = new Set(readProviderConfig(cwd));
203
+ return provider_name_1.providerNames.map((provider) => {
204
+ const envKey = PROVIDER_MAP[provider].envKey;
205
+ return {
206
+ provider,
207
+ envKey,
208
+ configured: Boolean(env.get(envKey)),
209
+ enabled: enabled.has(provider),
210
+ inConfigFile: inConfig.has(provider)
211
+ };
212
+ });
213
+ };
214
+ const printStatus = (cwd, json) => {
215
+ const status = statusProviders(cwd);
216
+ if (json) {
217
+ process.stdout.write(`${JSON.stringify(status, null, 2)}\n`);
218
+ return;
219
+ }
220
+ for (const row of status) {
221
+ process.stdout.write(`${row.provider}: ${row.configured ? 'configured' : 'missing'} | ${row.enabled ? 'enabled' : 'disabled'} | ${row.inConfigFile ? 'in-config' : 'not-in-config'}\n`);
222
+ }
223
+ };
224
+ const addProvider = (cwd, provider, key, enable) => {
225
+ let envRows = readEnvRows(cwd);
226
+ const envKey = PROVIDER_MAP[provider].envKey;
227
+ envRows = upsertRow(envRows, envKey, key);
228
+ for (const item of PROVIDER_EXTRA_ENV[provider]) {
229
+ envRows = upsertRow(envRows, item.key, item.value);
230
+ }
231
+ const env = parseEnv(envRows);
232
+ const enabledProviders = new Set(getEnabledProviders(env));
233
+ if (enable) {
234
+ enabledProviders.add(provider);
235
+ envRows = upsertRow(envRows, 'PUNCH_ENABLED_PROVIDERS', toOrderedProviders(enabledProviders).join(','));
236
+ }
237
+ writeEnvRows(cwd, envRows);
238
+ const providers = new Set(readProviderConfig(cwd));
239
+ providers.add(provider);
240
+ writeProviderConfig(cwd, toOrderedProviders(providers));
241
+ process.stdout.write(`Configured '${provider}' provider.\n`);
242
+ };
243
+ const removeProvider = (cwd, provider) => {
244
+ let envRows = readEnvRows(cwd);
245
+ const envKey = PROVIDER_MAP[provider].envKey;
246
+ envRows = removeRow(envRows, envKey);
247
+ const env = parseEnv(envRows);
248
+ const enabledProviders = new Set(getEnabledProviders(env));
249
+ enabledProviders.delete(provider);
250
+ if (enabledProviders.size === 0) {
251
+ envRows = removeRow(envRows, 'PUNCH_ENABLED_PROVIDERS');
252
+ }
253
+ else {
254
+ envRows = upsertRow(envRows, 'PUNCH_ENABLED_PROVIDERS', toOrderedProviders(enabledProviders).join(','));
255
+ }
256
+ writeEnvRows(cwd, envRows);
257
+ const providers = new Set(readProviderConfig(cwd));
258
+ providers.delete(provider);
259
+ writeProviderConfig(cwd, toOrderedProviders(providers));
260
+ process.stdout.write(`Removed '${provider}' provider configuration.\n`);
261
+ };
262
+ const doctor = (cwd) => {
263
+ const env = parseEnv(readEnvRows(cwd));
264
+ const enabledProviders = getEnabledProviders(env);
265
+ const configProviders = readProviderConfig(cwd);
266
+ const errors = [];
267
+ const warnings = [];
268
+ if (!(0, node_fs_1.existsSync)((0, node_path_1.resolve)(cwd, '.env'))) {
269
+ errors.push('.env file is missing');
270
+ }
271
+ for (const provider of enabledProviders) {
272
+ const envKey = PROVIDER_MAP[provider].envKey;
273
+ const apiKey = env.get(envKey)?.trim();
274
+ if (!apiKey) {
275
+ errors.push(`Enabled provider '${provider}' is missing ${envKey}`);
276
+ continue;
277
+ }
278
+ if (STUB_LIVE_PROVIDERS.has(provider) && !isMockApiKey(apiKey)) {
279
+ const prefix = stubProviderPrefix(provider);
280
+ const requiredEndpoints = ['CREATE', 'CAPTURE', 'CANCEL', 'REFUND'];
281
+ for (const operation of requiredEndpoints) {
282
+ const endpointKey = `${prefix}_${operation}_ENDPOINT`;
283
+ if (!env.get(endpointKey)?.trim()) {
284
+ errors.push(`Enabled provider '${provider}' is in live mode but missing ${endpointKey}`);
285
+ }
286
+ }
287
+ const authMode = (env.get(`${prefix}_AUTH_MODE`) ?? 'bearer').trim().toLowerCase();
288
+ if (authMode !== 'bearer' && authMode !== 'basic' && authMode !== 'api_key') {
289
+ errors.push(`Enabled provider '${provider}' has invalid ${prefix}_AUTH_MODE='${authMode}' (allowed: bearer,basic,api_key)`);
290
+ }
291
+ else if (authMode === 'basic') {
292
+ if (!env.get(`${prefix}_BASIC_USERNAME`)?.trim() || !env.get(`${prefix}_BASIC_PASSWORD`)?.trim()) {
293
+ errors.push(`Enabled provider '${provider}' requires ${prefix}_BASIC_USERNAME and ${prefix}_BASIC_PASSWORD for basic auth`);
294
+ }
295
+ }
296
+ const signatureRequired = (env.get(`${prefix}_WEBHOOK_SIGNATURE_REQUIRED`) ?? 'false').trim().toLowerCase() === 'true';
297
+ if (signatureRequired) {
298
+ if (!env.get(`${prefix}_WEBHOOK_SIGNATURE_HEADER`)?.trim()) {
299
+ errors.push(`Enabled provider '${provider}' requires ${prefix}_WEBHOOK_SIGNATURE_HEADER for webhook signature checks`);
300
+ }
301
+ if (!env.get(`${prefix}_WEBHOOK_SIGNATURE_SECRET`)?.trim()) {
302
+ errors.push(`Enabled provider '${provider}' requires ${prefix}_WEBHOOK_SIGNATURE_SECRET for webhook signature checks`);
303
+ }
304
+ }
305
+ }
306
+ }
307
+ for (const provider of configProviders) {
308
+ const envKey = PROVIDER_MAP[provider].envKey;
309
+ if (!env.get(envKey)) {
310
+ warnings.push(`Configured provider '${provider}' has no ${envKey} in .env`);
311
+ }
312
+ }
313
+ const enabledSet = new Set(enabledProviders);
314
+ const configSet = new Set(configProviders);
315
+ for (const provider of provider_name_1.providerNames) {
316
+ if (enabledSet.has(provider) && !configSet.has(provider)) {
317
+ warnings.push(`Provider '${provider}' is enabled in .env but missing in punch.providers.json`);
318
+ }
319
+ if (configSet.has(provider) && !enabledSet.has(provider)) {
320
+ warnings.push(`Provider '${provider}' exists in punch.providers.json but not in PUNCH_ENABLED_PROVIDERS`);
321
+ }
322
+ }
323
+ return {
324
+ ok: errors.length === 0,
325
+ errors,
326
+ warnings
327
+ };
328
+ };
329
+ const printDoctorReport = (report, json) => {
330
+ if (json) {
331
+ process.stdout.write(`${JSON.stringify(report, null, 2)}\n`);
332
+ return;
333
+ }
334
+ process.stdout.write(`Doctor result: ${report.ok ? 'OK' : 'FAILED'}\n`);
335
+ for (const error of report.errors) {
336
+ process.stdout.write(`ERROR: ${error}\n`);
337
+ }
338
+ for (const warning of report.warnings) {
339
+ process.stdout.write(`WARN: ${warning}\n`);
340
+ }
341
+ };
342
+ const sameProviders = (left, right) => {
343
+ if (left.length !== right.length) {
344
+ return false;
345
+ }
346
+ for (let index = 0; index < left.length; index += 1) {
347
+ if (left[index] !== right[index]) {
348
+ return false;
349
+ }
350
+ }
351
+ return true;
352
+ };
353
+ const doctorFix = (cwd) => {
354
+ const fixes = [];
355
+ const envPath = (0, node_path_1.resolve)(cwd, '.env');
356
+ const hasEnvFile = (0, node_fs_1.existsSync)(envPath);
357
+ let envRows = readEnvRows(cwd);
358
+ let envChanged = false;
359
+ if (!hasEnvFile) {
360
+ writeEnvRows(cwd, envRows);
361
+ fixes.push('Created missing .env file');
362
+ }
363
+ const configProviders = readProviderConfig(cwd);
364
+ let env = parseEnv(envRows);
365
+ let enabledProviders = getEnabledProviders(env);
366
+ if (enabledProviders.length === 0 && configProviders.length > 0) {
367
+ enabledProviders = configProviders;
368
+ envRows = upsertRow(envRows, 'PUNCH_ENABLED_PROVIDERS', enabledProviders.join(','));
369
+ envChanged = true;
370
+ fixes.push('Added missing PUNCH_ENABLED_PROVIDERS from punch.providers.json');
371
+ env = parseEnv(envRows);
372
+ }
373
+ for (const provider of enabledProviders) {
374
+ const envKey = PROVIDER_MAP[provider].envKey;
375
+ if (env.get(envKey)) {
376
+ continue;
377
+ }
378
+ envRows = upsertRow(envRows, envKey, MOCK_API_KEYS[provider]);
379
+ envChanged = true;
380
+ fixes.push(`Added missing ${envKey} for enabled provider '${provider}'`);
381
+ env = parseEnv(envRows);
382
+ }
383
+ if (envChanged) {
384
+ writeEnvRows(cwd, envRows);
385
+ }
386
+ const normalizedProviders = toOrderedProviders(enabledProviders);
387
+ if (!sameProviders(configProviders, normalizedProviders)) {
388
+ writeProviderConfig(cwd, normalizedProviders);
389
+ fixes.push('Synchronized punch.providers.json with PUNCH_ENABLED_PROVIDERS');
390
+ }
391
+ return fixes;
392
+ };
393
+ const runDoctor = (cwd, json, fix) => {
394
+ const fixes = fix ? doctorFix(cwd) : [];
395
+ const report = doctor(cwd);
396
+ if (fixes.length > 0) {
397
+ report.fixes = fixes;
398
+ }
399
+ printDoctorReport(report, json);
400
+ if (!json && fixes.length > 0) {
401
+ for (const item of fixes) {
402
+ process.stdout.write(`FIX: ${item}\n`);
403
+ }
404
+ }
405
+ return report.ok ? 0 : 1;
406
+ };
407
+ const resolveTemplateOperations = (provider) => {
408
+ if (provider === 'stripe') {
409
+ return [
410
+ {
411
+ id: 'create_customer',
412
+ description: 'Create Stripe customer',
413
+ method: 'POST',
414
+ endpoint: '/customers',
415
+ authMode: 'auto',
416
+ bodyType: 'form',
417
+ sampleBody: { email: 'dev@company.com' }
418
+ },
419
+ {
420
+ id: 'create_subscription',
421
+ description: 'Create Stripe subscription',
422
+ method: 'POST',
423
+ endpoint: '/subscriptions',
424
+ authMode: 'auto',
425
+ bodyType: 'form',
426
+ sampleBody: { customer: 'cus_123', items: '[]' }
427
+ }
428
+ ];
429
+ }
430
+ if (provider === 'paypal') {
431
+ return [
432
+ {
433
+ id: 'create_order',
434
+ description: 'Create PayPal order',
435
+ method: 'POST',
436
+ endpoint: '/v2/checkout/orders',
437
+ authMode: 'auto',
438
+ bodyType: 'json',
439
+ sampleBody: {
440
+ intent: 'CAPTURE',
441
+ purchase_units: [{ amount: { currency_code: 'USD', value: '10.00' } }]
442
+ }
443
+ },
444
+ {
445
+ id: 'list_webhooks',
446
+ description: 'List PayPal webhooks',
447
+ method: 'GET',
448
+ endpoint: '/v1/notifications/webhooks',
449
+ authMode: 'auto',
450
+ bodyType: 'json'
451
+ }
452
+ ];
453
+ }
454
+ return [
455
+ {
456
+ id: 'custom_post',
457
+ description: 'Provider custom POST operation',
458
+ method: 'POST',
459
+ endpoint: '/replace/with/provider/endpoint',
460
+ authMode: 'auto',
461
+ bodyType: 'json',
462
+ sampleBody: { example: true }
463
+ },
464
+ {
465
+ id: 'custom_get',
466
+ description: 'Provider custom GET operation',
467
+ method: 'GET',
468
+ endpoint: '/replace/with/provider/endpoint',
469
+ authMode: 'auto',
470
+ bodyType: 'json'
471
+ }
472
+ ];
473
+ };
474
+ const buildProviderTemplate = (provider) => {
475
+ const item = provider_catalog_1.providerCatalog.find((entry) => entry.provider === provider);
476
+ if (!item) {
477
+ throw new Error(`Provider catalog missing: ${provider}`);
478
+ }
479
+ return {
480
+ provider,
481
+ generatedAt: new Date().toISOString(),
482
+ docs: {
483
+ payments: item.paymentsApiUrl,
484
+ webhooks: item.webhookDocsUrl
485
+ },
486
+ operations: resolveTemplateOperations(provider)
487
+ };
488
+ };
489
+ const writeProviderTemplate = (cwd, provider, print) => {
490
+ const template = buildProviderTemplate(provider);
491
+ if (print) {
492
+ process.stdout.write(`${JSON.stringify(template, null, 2)}\n`);
493
+ return;
494
+ }
495
+ const templatesDir = (0, node_path_1.resolve)(cwd, 'punch.templates');
496
+ (0, node_fs_1.mkdirSync)(templatesDir, { recursive: true });
497
+ const filePath = (0, node_path_1.resolve)(templatesDir, `${provider}.json`);
498
+ (0, node_fs_1.writeFileSync)(filePath, `${JSON.stringify(template, null, 2)}\n`, 'utf8');
499
+ process.stdout.write(`Created provider template: ${filePath}\n`);
500
+ };
501
+ const parseArgs = (argv) => {
502
+ const [, , commandToken, ...tokens] = argv;
503
+ const command = commandToken === 'list' ||
504
+ commandToken === 'status' ||
505
+ commandToken === 'new' ||
506
+ commandToken === 'remove' ||
507
+ commandToken === 'doctor' ||
508
+ commandToken === 'template'
509
+ ? commandToken
510
+ : undefined;
511
+ const flags = {
512
+ json: false,
513
+ fix: false,
514
+ print: false,
515
+ key: undefined,
516
+ noEnable: false
517
+ };
518
+ let providerToken;
519
+ for (const flag of tokens) {
520
+ if (flag === '--json') {
521
+ flags.json = true;
522
+ continue;
523
+ }
524
+ if (flag === '--no-enable') {
525
+ flags.noEnable = true;
526
+ continue;
527
+ }
528
+ if (flag === '--fix') {
529
+ flags.fix = true;
530
+ continue;
531
+ }
532
+ if (flag === '--print') {
533
+ flags.print = true;
534
+ continue;
535
+ }
536
+ if (flag.startsWith('--key=')) {
537
+ flags.key = flag.slice('--key='.length).trim();
538
+ continue;
539
+ }
540
+ if (!flag.startsWith('--') && !providerToken) {
541
+ providerToken = flag;
542
+ }
543
+ }
544
+ const provider = providerToken && (0, provider_name_1.isProviderName)(providerToken) ? providerToken : undefined;
545
+ return { command, provider, flags };
546
+ };
547
+ const main = () => {
548
+ const parsed = parseArgs(process.argv);
549
+ if (parsed.command && shouldPrintBanner(parsed)) {
550
+ printBanner();
551
+ }
552
+ if (!parsed.command) {
553
+ usage();
554
+ process.exit(1);
555
+ }
556
+ const cwd = process.cwd();
557
+ if (parsed.command === 'list') {
558
+ listProviders(parsed.flags.json);
559
+ return;
560
+ }
561
+ if (parsed.command === 'status') {
562
+ printStatus(cwd, parsed.flags.json);
563
+ return;
564
+ }
565
+ if (parsed.command === 'doctor') {
566
+ const code = runDoctor(cwd, parsed.flags.json, parsed.flags.fix);
567
+ process.exit(code);
568
+ }
569
+ if (parsed.command === 'new') {
570
+ if (!parsed.provider) {
571
+ process.stderr.write('Unknown or missing provider. Run `punch list`.\n');
572
+ process.exit(1);
573
+ }
574
+ const key = parsed.flags.key && parsed.flags.key.length > 0 ? parsed.flags.key : MOCK_API_KEYS[parsed.provider];
575
+ addProvider(cwd, parsed.provider, key, !parsed.flags.noEnable);
576
+ return;
577
+ }
578
+ if (parsed.command === 'template') {
579
+ if (!parsed.provider) {
580
+ process.stderr.write('Unknown or missing provider. Run `punch list`.\n');
581
+ process.exit(1);
582
+ }
583
+ writeProviderTemplate(cwd, parsed.provider, parsed.flags.print);
584
+ return;
585
+ }
586
+ if (parsed.command === 'remove') {
587
+ if (!parsed.provider) {
588
+ process.stderr.write('Unknown or missing provider. Run `punch list`.\n');
589
+ process.exit(1);
590
+ }
591
+ removeProvider(cwd, parsed.provider);
592
+ return;
593
+ }
594
+ usage();
595
+ process.exit(1);
596
+ };
597
+ main();
598
+ //# sourceMappingURL=punch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"punch.js","sourceRoot":"","sources":["../../src/cli/punch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { NestMiddleware } from '@nestjs/common';
2
+ type MutableRequest = {
3
+ headers: Record<string, string | string[] | undefined>;
4
+ correlationId?: string;
5
+ };
6
+ type MutableResponse = {
7
+ setHeader(name: string, value: string): void;
8
+ };
9
+ export declare class CorrelationIdMiddleware implements NestMiddleware {
10
+ use(req: MutableRequest, res: MutableResponse, next: () => void): void;
11
+ }
12
+ export {};
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CorrelationIdMiddleware = void 0;
10
+ const node_crypto_1 = require("node:crypto");
11
+ const common_1 = require("@nestjs/common");
12
+ let CorrelationIdMiddleware = class CorrelationIdMiddleware {
13
+ use(req, res, next) {
14
+ const incoming = req.headers['x-correlation-id'];
15
+ const value = Array.isArray(incoming) ? incoming[0] : incoming;
16
+ const correlationId = value?.trim() || (0, node_crypto_1.randomUUID)();
17
+ req.correlationId = correlationId;
18
+ res.setHeader('x-correlation-id', correlationId);
19
+ next();
20
+ }
21
+ };
22
+ exports.CorrelationIdMiddleware = CorrelationIdMiddleware;
23
+ exports.CorrelationIdMiddleware = CorrelationIdMiddleware = __decorate([
24
+ (0, common_1.Injectable)()
25
+ ], CorrelationIdMiddleware);
26
+ //# sourceMappingURL=correlation-id.middleware.js.map