payment-kit 1.29.1 → 1.29.2

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 (310) hide show
  1. package/api/dev.ts +41 -2
  2. package/api/hono.d.ts +42 -0
  3. package/api/node-sqlite.d.ts +12 -0
  4. package/api/src/bootstrap.ts +36 -0
  5. package/api/src/crons/base.ts +3 -3
  6. package/api/src/crons/currency.ts +1 -1
  7. package/api/src/crons/index.ts +27 -24
  8. package/api/src/crons/metering-subscription-detection.ts +1 -1
  9. package/api/src/crons/overdue-detection.ts +2 -2
  10. package/api/src/crons/retry-pending-events.ts +6 -0
  11. package/api/src/index.ts +22 -161
  12. package/api/src/integrations/app-store/client.ts +3 -4
  13. package/api/src/integrations/app-store/handlers/subscription.ts +7 -7
  14. package/api/src/integrations/app-store/signed-data-verifier.ts +3 -2
  15. package/api/src/integrations/arcblock/token.ts +21 -7
  16. package/api/src/integrations/google-play/handlers/subscription.ts +6 -6
  17. package/api/src/integrations/google-play/handlers/voided.ts +2 -2
  18. package/api/src/integrations/google-play/verify.ts +3 -2
  19. package/api/src/integrations/iap-reconcile.ts +3 -5
  20. package/api/src/integrations/stripe/handlers/invoice.ts +2 -2
  21. package/api/src/integrations/stripe/handlers/subscription.ts +3 -3
  22. package/api/src/libs/archive/query.ts +19 -0
  23. package/api/src/libs/audit.ts +61 -4
  24. package/api/src/libs/auth.ts +99 -38
  25. package/api/src/libs/context.ts +78 -1
  26. package/api/src/libs/currency.ts +2 -2
  27. package/api/src/libs/dayjs.ts +8 -2
  28. package/api/src/libs/drivers/auth-storage.ts +118 -0
  29. package/api/src/libs/drivers/cron.ts +264 -0
  30. package/api/src/libs/drivers/db.ts +170 -0
  31. package/api/src/libs/drivers/identity.ts +81 -0
  32. package/api/src/libs/drivers/index.ts +40 -0
  33. package/api/src/libs/drivers/locks.ts +226 -0
  34. package/api/src/libs/drivers/migrate-runner.ts +70 -0
  35. package/api/src/libs/drivers/queue.ts +104 -0
  36. package/api/src/libs/drivers/secrets.ts +194 -0
  37. package/api/src/libs/env.ts +170 -54
  38. package/api/src/libs/exchange-rate/service.ts +7 -6
  39. package/api/src/libs/http-fetch-adapter.ts +50 -0
  40. package/api/src/libs/invoice.ts +1 -1
  41. package/api/src/libs/lock.ts +51 -47
  42. package/api/src/libs/logger.ts +48 -8
  43. package/api/src/libs/notification/index.ts +1 -1
  44. package/api/src/libs/notification/template/customer-credit-low-balance.ts +2 -1
  45. package/api/src/libs/notification/template/customer-revenue-succeeded.ts +1 -1
  46. package/api/src/libs/notification/template/customer-reward-succeeded.ts +1 -1
  47. package/api/src/libs/overdraft-protection.ts +1 -1
  48. package/api/src/libs/payout.ts +1 -1
  49. package/api/src/libs/queue/index.ts +259 -52
  50. package/api/src/libs/queue/runtime.ts +175 -0
  51. package/api/src/libs/resource.ts +3 -3
  52. package/api/src/libs/secrets.ts +38 -0
  53. package/api/src/libs/session.ts +3 -2
  54. package/api/src/libs/subscription.ts +5 -5
  55. package/api/src/libs/tenant.ts +92 -0
  56. package/api/src/libs/url.ts +3 -3
  57. package/api/src/libs/util.ts +21 -13
  58. package/api/src/middlewares/hono/cdn.ts +63 -0
  59. package/api/src/middlewares/hono/context.ts +73 -0
  60. package/api/src/middlewares/hono/csrf.ts +72 -0
  61. package/api/src/middlewares/hono/fallback.ts +194 -0
  62. package/api/src/middlewares/hono/pipeline.ts +73 -0
  63. package/api/src/middlewares/hono/resource-mount.ts +42 -0
  64. package/api/src/middlewares/hono/resource.ts +63 -0
  65. package/api/src/middlewares/hono/security.ts +214 -0
  66. package/api/src/middlewares/hono/session.ts +114 -0
  67. package/api/src/middlewares/hono/xss.ts +61 -0
  68. package/api/src/queues/auto-recharge.ts +12 -10
  69. package/api/src/queues/checkout-session.ts +17 -12
  70. package/api/src/queues/credit-consume.ts +40 -36
  71. package/api/src/queues/credit-grant.ts +25 -18
  72. package/api/src/queues/credit-reconciliation.ts +7 -5
  73. package/api/src/queues/discount-status.ts +9 -6
  74. package/api/src/queues/event.ts +12 -4
  75. package/api/src/queues/exchange-rate-health.ts +49 -30
  76. package/api/src/queues/invoice.ts +18 -15
  77. package/api/src/queues/notification.ts +14 -7
  78. package/api/src/queues/payment.ts +41 -28
  79. package/api/src/queues/payout.ts +9 -5
  80. package/api/src/queues/refund.ts +18 -12
  81. package/api/src/queues/subscription.ts +83 -53
  82. package/api/src/queues/token-transfer.ts +15 -10
  83. package/api/src/queues/usage-record.ts +8 -5
  84. package/api/src/queues/vendors/commission.ts +7 -5
  85. package/api/src/queues/vendors/fulfillment-coordinator.ts +17 -13
  86. package/api/src/queues/vendors/fulfillment.ts +4 -2
  87. package/api/src/queues/vendors/return-processor.ts +5 -3
  88. package/api/src/queues/vendors/return-scanner.ts +5 -4
  89. package/api/src/queues/vendors/status-check.ts +10 -7
  90. package/api/src/queues/webhook.ts +60 -32
  91. package/api/src/routes/connect/shared.ts +1 -2
  92. package/api/src/routes/connect/subscribe.ts +3 -3
  93. package/api/src/routes/{archive.ts → hono/archive.ts} +69 -64
  94. package/api/src/routes/{auto-recharge-configs.ts → hono/auto-recharge-configs.ts} +39 -28
  95. package/api/src/routes/{checkout-sessions.ts → hono/checkout-sessions.ts} +790 -923
  96. package/api/src/routes/{coupons.ts → hono/coupons.ts} +93 -76
  97. package/api/src/routes/{credit-grants.ts → hono/credit-grants.ts} +140 -126
  98. package/api/src/routes/hono/credit-tokens.ts +43 -0
  99. package/api/src/routes/{credit-transactions.ts → hono/credit-transactions.ts} +37 -29
  100. package/api/src/routes/{customers.ts → hono/customers.ts} +193 -223
  101. package/api/src/routes/{donations.ts → hono/donations.ts} +41 -32
  102. package/api/src/routes/{entitlements.ts → hono/entitlements.ts} +28 -25
  103. package/api/src/routes/{events.ts → hono/events.ts} +107 -71
  104. package/api/src/routes/{exchange-rate-providers.ts → hono/exchange-rate-providers.ts} +138 -126
  105. package/api/src/routes/hono/exchange-rates.ts +77 -0
  106. package/api/src/routes/hono/index.ts +115 -0
  107. package/api/src/routes/{integrations → hono/integrations}/app-store.ts +68 -48
  108. package/api/src/routes/{integrations → hono/integrations}/google-play.ts +78 -58
  109. package/api/src/routes/hono/integrations/stripe.ts +74 -0
  110. package/api/src/routes/{invoices.ts → hono/invoices.ts} +253 -244
  111. package/api/src/routes/{meter-events.ts → hono/meter-events.ts} +120 -110
  112. package/api/src/routes/hono/meters.ts +288 -0
  113. package/api/src/routes/hono/passports.ts +73 -0
  114. package/api/src/routes/{payment-currencies.ts → hono/payment-currencies.ts} +219 -197
  115. package/api/src/routes/{payment-intents.ts → hono/payment-intents.ts} +136 -132
  116. package/api/src/routes/{payment-links.ts → hono/payment-links.ts} +145 -128
  117. package/api/src/routes/{payment-methods.ts → hono/payment-methods.ts} +125 -93
  118. package/api/src/routes/{payment-stats.ts → hono/payment-stats.ts} +30 -25
  119. package/api/src/routes/{payouts.ts → hono/payouts.ts} +55 -47
  120. package/api/src/routes/{prices.ts → hono/prices.ts} +265 -242
  121. package/api/src/routes/{pricing-table.ts → hono/pricing-table.ts} +94 -87
  122. package/api/src/routes/{products.ts → hono/products.ts} +172 -159
  123. package/api/src/routes/{promotion-codes.ts → hono/promotion-codes.ts} +207 -185
  124. package/api/src/routes/hono/redirect.ts +24 -0
  125. package/api/src/routes/{refunds.ts → hono/refunds.ts} +96 -80
  126. package/api/src/routes/{settings.ts → hono/settings.ts} +64 -55
  127. package/api/src/routes/{subscription-items.ts → hono/subscription-items.ts} +64 -57
  128. package/api/src/routes/{subscriptions.ts → hono/subscriptions.ts} +475 -528
  129. package/api/src/routes/{tax-rates.ts → hono/tax-rates.ts} +71 -70
  130. package/api/src/routes/hono/tool.ts +69 -0
  131. package/api/src/routes/{usage-records.ts → hono/usage-records.ts} +47 -42
  132. package/api/src/routes/{vendor.ts → hono/vendor.ts} +315 -167
  133. package/api/src/routes/{webhook-attempts.ts → hono/webhook-attempts.ts} +17 -13
  134. package/api/src/routes/hono/webhook-endpoints.ts +126 -0
  135. package/api/src/service.ts +667 -0
  136. package/api/src/store/migrations/20230911-seeding.ts +2 -1
  137. package/api/src/store/migrations/20260609-remove-did-space-jobs.ts +23 -0
  138. package/api/src/store/migrations/20260610-tenant-columns.ts +40 -0
  139. package/api/src/store/migrations/20260611-tenant-backfill.ts +33 -0
  140. package/api/src/store/models/auto-recharge-config.ts +22 -10
  141. package/api/src/store/models/checkout-session.ts +15 -14
  142. package/api/src/store/models/coupon.ts +29 -20
  143. package/api/src/store/models/credit-grant.ts +38 -29
  144. package/api/src/store/models/credit-transaction.ts +32 -21
  145. package/api/src/store/models/customer.ts +19 -17
  146. package/api/src/store/models/discount.ts +11 -2
  147. package/api/src/store/models/entitlement-grant.ts +21 -9
  148. package/api/src/store/models/entitlement-product.ts +21 -9
  149. package/api/src/store/models/entitlement.ts +19 -10
  150. package/api/src/store/models/event.ts +18 -9
  151. package/api/src/store/models/exchange-rate-provider.ts +17 -4
  152. package/api/src/store/models/invoice-item.ts +18 -9
  153. package/api/src/store/models/invoice.ts +16 -8
  154. package/api/src/store/models/meter-event.ts +27 -9
  155. package/api/src/store/models/meter.ts +31 -22
  156. package/api/src/store/models/payment-currency.ts +25 -8
  157. package/api/src/store/models/payment-intent.ts +15 -6
  158. package/api/src/store/models/payment-link.ts +15 -6
  159. package/api/src/store/models/payment-method.ts +38 -22
  160. package/api/src/store/models/payment-stat.ts +18 -9
  161. package/api/src/store/models/payout.ts +15 -6
  162. package/api/src/store/models/price-quote.ts +17 -8
  163. package/api/src/store/models/price.ts +24 -12
  164. package/api/src/store/models/pricing-table.ts +29 -20
  165. package/api/src/store/models/product-vendor.ts +20 -10
  166. package/api/src/store/models/product.ts +15 -6
  167. package/api/src/store/models/promotion-code.ts +14 -6
  168. package/api/src/store/models/refund.ts +15 -6
  169. package/api/src/store/models/revenue-snapshot.ts +21 -9
  170. package/api/src/store/models/setting.ts +18 -9
  171. package/api/src/store/models/setup-intent.ts +36 -27
  172. package/api/src/store/models/subscription-item.ts +21 -9
  173. package/api/src/store/models/subscription-schedule.ts +21 -9
  174. package/api/src/store/models/subscription.ts +21 -10
  175. package/api/src/store/models/tax-rate.ts +29 -21
  176. package/api/src/store/models/usage-record.ts +11 -2
  177. package/api/src/store/models/webhook-attempt.ts +18 -9
  178. package/api/src/store/models/webhook-endpoint.ts +18 -9
  179. package/api/src/store/scoped-core.ts +55 -0
  180. package/api/src/store/scoped.ts +247 -0
  181. package/api/src/store/sequelize.ts +66 -22
  182. package/api/src/store/sql-migrations.ts +20 -0
  183. package/api/src/store/tenant-backfill.ts +260 -0
  184. package/api/src/store/tenant-model.ts +124 -0
  185. package/api/src/store/tenant-tables.ts +50 -0
  186. package/api/tests/embedded/embedded-multi-mode-d3.spec.ts +257 -0
  187. package/api/tests/fixtures/bare-query-violation.ts +13 -0
  188. package/api/tests/fixtures/core-env-violation.ts +10 -0
  189. package/api/tests/fixtures/host-read-violation.ts +19 -0
  190. package/api/tests/fixtures/tenants.ts +4 -0
  191. package/api/tests/integrations/iap-tenant.spec.ts +284 -0
  192. package/api/tests/libs/archive-query.spec.ts +26 -0
  193. package/api/tests/libs/audit-tenant.spec.ts +153 -0
  194. package/api/tests/libs/context.spec.ts +204 -0
  195. package/api/tests/libs/core-config.spec.ts +115 -0
  196. package/api/tests/libs/cron-driver-d2.spec.ts +237 -0
  197. package/api/tests/libs/crons-conservation-d2.spec.ts +52 -0
  198. package/api/tests/libs/lock-tenant.spec.ts +66 -0
  199. package/api/tests/libs/scoped.spec.ts +222 -0
  200. package/api/tests/libs/secrets-facade.spec.ts +52 -0
  201. package/api/tests/libs/tenancy-slot-authority.spec.ts +209 -0
  202. package/api/tests/libs/tenant-middleware.spec.ts +42 -0
  203. package/api/tests/libs/tenant-scanner.spec.ts +120 -0
  204. package/api/tests/middlewares/hono/cdn.spec.ts +70 -0
  205. package/api/tests/middlewares/hono/context.spec.ts +113 -0
  206. package/api/tests/middlewares/hono/csrf.spec.ts +136 -0
  207. package/api/tests/middlewares/hono/fallback.spec.ts +67 -0
  208. package/api/tests/middlewares/hono/pipeline.spec.ts +47 -0
  209. package/api/tests/middlewares/hono/security.spec.ts +181 -0
  210. package/api/tests/middlewares/hono/session.spec.ts +42 -0
  211. package/api/tests/middlewares/hono/xss.spec.ts +81 -0
  212. package/api/tests/models/tenant-backfill.spec.ts +287 -0
  213. package/api/tests/models/tenant-columns-model.spec.ts +46 -0
  214. package/api/tests/models/tenant-columns.spec.ts +161 -0
  215. package/api/tests/queues/credit-consume-batch.spec.ts +8 -1
  216. package/api/tests/queues/credit-consume.spec.ts +8 -1
  217. package/api/tests/queues/event-tenant.spec.ts +236 -0
  218. package/api/tests/queues/exchange-rate-health-tenant-d6.spec.ts +62 -0
  219. package/api/tests/queues/queue-parity.spec.ts +249 -0
  220. package/api/tests/queues/queue-runtime-surface.spec.ts +277 -0
  221. package/api/tests/queues/queue-teardown-d2.spec.ts +127 -0
  222. package/api/tests/queues/tenant-matrix-a.spec.ts +245 -0
  223. package/api/tests/queues/tenant-matrix-b.spec.ts +168 -0
  224. package/api/tests/routes/connect/hono-attach.spec.ts +107 -0
  225. package/api/tests/service/collapse.spec.ts +96 -0
  226. package/api/tests/store/tenant-crosscut.spec.ts +202 -0
  227. package/api/tests/store/tenant-model-spike.spec.ts +177 -0
  228. package/api/tests/store/tenant-model.spec.ts +162 -0
  229. package/api/tests/store/tenant-residual.spec.ts +196 -0
  230. package/api/third.d.ts +4 -0
  231. package/blocklet.yml +1 -1
  232. package/cloudflare/README.md +26 -6
  233. package/cloudflare/build.ts +28 -13
  234. package/cloudflare/did-connect-auth.ts +0 -217
  235. package/cloudflare/migrations/0006_tenant_columns.sql +46 -0
  236. package/cloudflare/migrations/0007_tenant_backfill_indexes.sql +65 -0
  237. package/cloudflare/migrations/0008_schema_parity.sql +16 -0
  238. package/cloudflare/migrations/0009_remove_did_space_jobs.sql +5 -0
  239. package/cloudflare/queue-runtime-mode.ts +13 -0
  240. package/cloudflare/run-build.js +10 -56
  241. package/cloudflare/shims/blocklet-sdk/asset-host-transformer.ts +20 -0
  242. package/cloudflare/shims/blocklet-sdk/config.ts +8 -1
  243. package/cloudflare/shims/blocklet-sdk/login.ts +12 -0
  244. package/cloudflare/shims/blocklet-sdk/service-api.ts +14 -0
  245. package/cloudflare/shims/blocklet-sdk/session.ts +4 -2
  246. package/cloudflare/shims/blocklet-sdk/util-constants.ts +8 -0
  247. package/cloudflare/shims/blocklet-sdk/util-csrf.ts +13 -0
  248. package/cloudflare/shims/blocklet-sdk/util-wallet.ts +8 -0
  249. package/cloudflare/shims/cron.ts +38 -158
  250. package/cloudflare/shims/events.ts +124 -0
  251. package/cloudflare/shims/fastq.ts +15 -1
  252. package/cloudflare/shims/nedb-storage.ts +16 -8
  253. package/cloudflare/shims/xss.ts +8 -0
  254. package/cloudflare/tenant-middleware.ts +36 -0
  255. package/cloudflare/tests/tenant-middleware.spec.ts +160 -0
  256. package/cloudflare/tests/worker-handler-gate.spec.ts +44 -0
  257. package/cloudflare/worker.ts +204 -433
  258. package/cloudflare/wrangler.local-e2e.jsonc +26 -0
  259. package/jest.config.js +3 -1
  260. package/package.json +33 -38
  261. package/scripts/core-env-whitelist.json +1 -0
  262. package/scripts/e2e-12b-runtime.ts +149 -0
  263. package/scripts/e2e-core-config.ts +125 -0
  264. package/scripts/e2e-d1-tenancy.ts +116 -0
  265. package/scripts/e2e-d2-cron-queue.ts +139 -0
  266. package/scripts/e2e-d3-embedded-multi.ts +171 -0
  267. package/scripts/e2e-hono-s2.ts +125 -0
  268. package/scripts/e2e-hono-s3e.ts +135 -0
  269. package/scripts/e2e-hono-s4.ts +114 -0
  270. package/scripts/e2e-migration-contract.ts +100 -0
  271. package/scripts/e2e-s0.ts +61 -0
  272. package/scripts/e2e-s1.ts +107 -0
  273. package/scripts/e2e-s2.ts +178 -0
  274. package/scripts/e2e-s3.ts +110 -0
  275. package/scripts/e2e-s4.ts +191 -0
  276. package/scripts/e2e-s5.ts +139 -0
  277. package/scripts/e2e-s6.ts +127 -0
  278. package/scripts/e2e-tenant-model.ts +119 -0
  279. package/scripts/e2e-tenant-worker.ts +199 -0
  280. package/scripts/gen-sql-migrations.js +46 -0
  281. package/scripts/phase8-codemod.js +219 -0
  282. package/scripts/phase9a-env-getters-codemod.js +82 -0
  283. package/scripts/scan-core-env.js +109 -0
  284. package/scripts/scan-tenant-queries.js +235 -0
  285. package/scripts/schema-drift-guard.ts +210 -0
  286. package/scripts/tenant-scan-whitelist.json +1 -0
  287. package/src/env.d.ts +13 -1
  288. package/tsconfig.json +1 -1
  289. package/api/src/libs/did-space.ts +0 -235
  290. package/api/src/libs/middleware.ts +0 -50
  291. package/api/src/libs/security.ts +0 -192
  292. package/api/src/queues/space.ts +0 -662
  293. package/api/src/routes/credit-tokens.ts +0 -38
  294. package/api/src/routes/exchange-rates.ts +0 -87
  295. package/api/src/routes/index.ts +0 -142
  296. package/api/src/routes/integrations/stripe.ts +0 -61
  297. package/api/src/routes/meters.ts +0 -274
  298. package/api/src/routes/passports.ts +0 -68
  299. package/api/src/routes/redirect.ts +0 -20
  300. package/api/src/routes/tool.ts +0 -65
  301. package/api/src/routes/webhook-endpoints.ts +0 -126
  302. package/api/tests/routes/credit-grants.spec.ts +0 -1261
  303. package/cloudflare/shims/did-space-js.ts +0 -17
  304. package/cloudflare/shims/did-space.ts +0 -11
  305. package/cloudflare/shims/express-compat/index.ts +0 -80
  306. package/cloudflare/shims/express-compat/types.ts +0 -41
  307. package/cloudflare/shims/lock.ts +0 -115
  308. package/cloudflare/shims/queue.ts +0 -611
  309. package/cloudflare/tests/shims/queue-delayed-persist.spec.ts +0 -87
  310. package/cloudflare/tests/shims/queue-scheduled.spec.ts +0 -186
@@ -1,23 +1,27 @@
1
+ // Phase 3 (express→hono) — hono fork of routes/payouts.ts. Sub-app with
2
+ // routes relative to /api/payouts (mounted via mountResourceGroup). The
3
+ // business logic is unchanged; only the express plumbing becomes hono:
4
+ // req.body → c.get('sanitizedBody'); res.status(n).json(x) → c.json(x, n).
1
5
  import { isValid } from '@arcblock/did';
2
- import { Router } from 'express';
6
+ import { Hono } from 'hono';
3
7
  import Joi from 'joi';
4
8
  import pick from 'lodash/pick';
5
9
 
6
- import { sessionMiddleware } from '@blocklet/sdk/lib/middlewares/session';
7
10
  import type { WhereOptions } from 'sequelize';
8
- import { createListParamSchema, getOrder, getWhereFromKvQuery, MetadataSchema } from '../libs/api';
9
- import logger from '../libs/logger';
10
- import { authenticate } from '../libs/security';
11
- import { formatMetadata } from '../libs/util';
12
- import { PaymentLink, TPaymentIntentExpanded } from '../store/models';
13
- import { CheckoutSession } from '../store/models/checkout-session';
14
- import { Customer } from '../store/models/customer';
15
- import { PaymentCurrency } from '../store/models/payment-currency';
16
- import { PaymentIntent } from '../store/models/payment-intent';
17
- import { PaymentMethod } from '../store/models/payment-method';
18
- import { Payout } from '../store/models/payout';
19
-
20
- const router = Router();
11
+ import { createListParamSchema, getOrder, getWhereFromKvQuery, MetadataSchema } from '../../libs/api';
12
+ import logger from '../../libs/logger';
13
+ import { authenticate } from '../../middlewares/hono/security';
14
+ import { sessionMiddleware } from '../../middlewares/hono/session';
15
+ import { formatMetadata } from '../../libs/util';
16
+ import { PaymentLink, TPaymentIntentExpanded } from '../../store/models';
17
+ import { CheckoutSession } from '../../store/models/checkout-session';
18
+ import { Customer } from '../../store/models/customer';
19
+ import { PaymentCurrency } from '../../store/models/payment-currency';
20
+ import { PaymentIntent } from '../../store/models/payment-intent';
21
+ import { PaymentMethod } from '../../store/models/payment-method';
22
+ import { Payout } from '../../store/models/payout';
23
+
24
+ const app = new Hono();
21
25
  const authAdmin = authenticate<Payout>({ component: true, roles: ['owner', 'admin'] });
22
26
  const authMine = authenticate<Payout>({ component: true, roles: ['owner', 'admin'], mine: true });
23
27
  const authPortal = authenticate<Payout>({
@@ -44,8 +48,8 @@ const paginationSchema = createListParamSchema<{
44
48
  customer_did: Joi.string().empty(''),
45
49
  currency_id: Joi.string().empty(''),
46
50
  });
47
- router.get('/', authMine, async (req, res) => {
48
- const { page, pageSize, status, livemode, ...query } = await paginationSchema.validateAsync(req.query, {
51
+ app.get('/', authMine, async (c) => {
52
+ const { page, pageSize, status, livemode, ...query } = await paginationSchema.validateAsync(c.req.query(), {
49
53
  stripUnknown: false,
50
54
  allowUnknown: true,
51
55
  });
@@ -57,16 +61,15 @@ router.get('/', authMine, async (req, res) => {
57
61
  .map((x) => x.trim())
58
62
  .filter(Boolean);
59
63
  }
60
- if (query.customer_id) {
61
- where.customer_id = query.customer_id;
64
+ if (c.get('customer_id') ?? query.customer_id) {
65
+ where.customer_id = c.get('customer_id') ?? query.customer_id;
62
66
  }
63
67
  if (query.customer_did && isValid(query.customer_did)) {
64
68
  const customer = await Customer.findOne({ where: { did: query.customer_did } });
65
69
  if (customer) {
66
70
  where.customer_id = customer.id;
67
71
  } else {
68
- res.json({ count: 0, list: [] });
69
- return;
72
+ return c.json({ count: 0, list: [] });
70
73
  }
71
74
  }
72
75
  if (query.payment_intent_id) {
@@ -91,7 +94,7 @@ router.get('/', authMine, async (req, res) => {
91
94
  try {
92
95
  const { rows: list, count } = await Payout.findAndCountAll({
93
96
  where,
94
- order: getOrder(req.query, [['created_at', query.o === 'asc' ? 'ASC' : 'DESC']]),
97
+ order: getOrder(c.req.query(), [['created_at', query.o === 'asc' ? 'ASC' : 'DESC']]),
95
98
  offset: (page - 1) * pageSize,
96
99
  limit: pageSize,
97
100
  include: [
@@ -102,10 +105,10 @@ router.get('/', authMine, async (req, res) => {
102
105
  ],
103
106
  });
104
107
 
105
- res.json({ count, list, paging: { page, pageSize } });
108
+ return c.json({ count, list, paging: { page, pageSize } });
106
109
  } catch (err) {
107
110
  logger.error(err);
108
- res.json({ count: 0, list: [], paging: { page, pageSize } });
111
+ return c.json({ count: 0, list: [], paging: { page, pageSize } });
109
112
  }
110
113
  });
111
114
 
@@ -117,7 +120,9 @@ const mineRecordPaginationSchema = createListParamSchema<{
117
120
  currency_id: Joi.string().empty(''),
118
121
  status: Joi.string().empty(''),
119
122
  });
120
- router.get('/mine', sessionMiddleware({ accessKey: true }), async (req, res) => {
123
+ // faithful fork of the express `sessionMiddleware({ accessKey: true })` populates
124
+ // c.get('user') from a login token OR access key, and does NOT gate (next() either way).
125
+ app.get('/mine', sessionMiddleware({ accessKey: true }), async (c) => {
121
126
  try {
122
127
  const {
123
128
  page,
@@ -125,16 +130,18 @@ router.get('/mine', sessionMiddleware({ accessKey: true }), async (req, res) =>
125
130
  currency_id: currencyId,
126
131
  customer_id: customerId,
127
132
  status,
128
- } = await mineRecordPaginationSchema.validateAsync(req.query, {
133
+ } = await mineRecordPaginationSchema.validateAsync(c.req.query(), {
129
134
  stripUnknown: true,
130
135
  allowUnknown: true,
131
136
  });
132
- if (!req.user) {
133
- return res.status(403).json({ code: 'REQUIRE_LOGIN', error: 'Please login to continue' });
137
+ if (!c.get('user')) {
138
+ return c.json({ code: 'REQUIRE_LOGIN', error: 'Please login to continue' }, 403);
134
139
  }
135
- const customer = await Customer.findOne({ where: { did: customerId || req.user?.did } });
140
+ const customer = await Customer.findOne({
141
+ where: { did: (c.get('customer_id') ?? customerId) || c.get('user')?.did },
142
+ });
136
143
  if (!customer) {
137
- throw new Error(`Customer not found: ${req.user?.did}`);
144
+ throw new Error(`Customer not found: ${c.get('user')?.did}`);
138
145
  }
139
146
 
140
147
  const where: WhereOptions = { customer_id: customer.id };
@@ -147,7 +154,7 @@ router.get('/mine', sessionMiddleware({ accessKey: true }), async (req, res) =>
147
154
 
148
155
  const { rows: list, count } = await Payout.findAndCountAll({
149
156
  where,
150
- order: getOrder(req.query, [['created_at', 'DESC']]),
157
+ order: getOrder(c.req.query(), [['created_at', 'DESC']]),
151
158
  offset: (page - 1) * pageSize,
152
159
  limit: pageSize,
153
160
  include: [
@@ -169,17 +176,17 @@ router.get('/mine', sessionMiddleware({ accessKey: true }), async (req, res) =>
169
176
  return x;
170
177
  })
171
178
  );
172
- return res.json({ count, list: result, paging: { page, pageSize } });
179
+ return c.json({ count, list: result, paging: { page, pageSize } });
173
180
  } catch (err) {
174
181
  logger.error(err);
175
- return res.status(400).json({ error: err.message });
182
+ return c.json({ error: err.message }, 400);
176
183
  }
177
184
  });
178
185
 
179
- router.get('/:id', authPortal, async (req, res) => {
186
+ app.get('/:id', authPortal, async (c) => {
180
187
  try {
181
188
  const doc = (await Payout.findOne({
182
- where: { id: req.params.id },
189
+ where: { id: c.req.param('id') },
183
190
  include: [
184
191
  { model: PaymentCurrency, as: 'paymentCurrency' },
185
192
  { model: PaymentMethod, as: 'paymentMethod' },
@@ -188,7 +195,7 @@ router.get('/:id', authPortal, async (req, res) => {
188
195
  ],
189
196
  })) as Payout & { paymentIntent: TPaymentIntentExpanded & { customer: Customer } };
190
197
  if (!doc) {
191
- return res.status(404).json(null);
198
+ return c.json(null, 404);
192
199
  }
193
200
  let checkoutSession = null;
194
201
  let paymentLink = null;
@@ -210,43 +217,44 @@ router.get('/:id', authPortal, async (req, res) => {
210
217
  if (paymentCustomer) {
211
218
  // @ts-ignore
212
219
  payout.paymentIntent.customer = paymentCustomer.toJSON();
213
- return res.json({
220
+ return c.json({
214
221
  ...payout,
215
222
  checkoutSession,
216
223
  paymentLink,
217
224
  });
218
225
  }
219
226
  }
220
- return res.json(payout);
227
+ return c.json(payout);
221
228
  } catch (err) {
222
229
  logger.error(err);
223
- return res.status(500).json({ error: `Failed to get payout: ${err.message}` });
230
+ return c.json({ error: `Failed to get payout: ${err.message}` }, 500);
224
231
  }
225
232
  });
226
233
 
227
234
  // eslint-disable-next-line consistent-return
228
- router.put('/:id', authAdmin, async (req, res) => {
235
+ app.put('/:id', authAdmin, async (c) => {
229
236
  try {
230
- const doc = await Payout.findByPk(req.params.id as string);
237
+ const doc = await Payout.findByPk(c.req.param('id') as string);
231
238
  if (!doc) {
232
- return res.status(404).json({ error: 'Payout not found' });
239
+ return c.json({ error: 'Payout not found' }, 404);
233
240
  }
234
241
 
235
- const raw = pick(req.body, ['metadata']);
242
+ const body = c.get('sanitizedBody') ?? {};
243
+ const raw = pick(body, ['metadata']);
236
244
  if (raw.metadata) {
237
245
  const { error: metadataError } = MetadataSchema.validate(raw.metadata);
238
246
  if (metadataError) {
239
- return res.status(400).json({ error: `metadata invalid: ${metadataError.message}` });
247
+ return c.json({ error: `metadata invalid: ${metadataError.message}` }, 400);
240
248
  }
241
249
  raw.metadata = formatMetadata(raw.metadata);
242
250
  }
243
251
 
244
252
  await doc.update(raw);
245
- res.json(doc);
253
+ return c.json(doc);
246
254
  } catch (err) {
247
255
  logger.error(err);
248
- res.json(null);
256
+ return c.json(null);
249
257
  }
250
258
  });
251
259
 
252
- export default router;
260
+ export default app;