@strimz/shared-types 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 (109) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +69 -0
  3. package/dist/agents.cjs +148 -0
  4. package/dist/agents.cjs.map +1 -0
  5. package/dist/agents.d.cts +317 -0
  6. package/dist/agents.d.ts +317 -0
  7. package/dist/agents.js +137 -0
  8. package/dist/agents.js.map +1 -0
  9. package/dist/api-keys.cjs +91 -0
  10. package/dist/api-keys.cjs.map +1 -0
  11. package/dist/api-keys.d.cts +155 -0
  12. package/dist/api-keys.d.ts +155 -0
  13. package/dist/api-keys.js +84 -0
  14. package/dist/api-keys.js.map +1 -0
  15. package/dist/common.cjs +56 -0
  16. package/dist/common.cjs.map +1 -0
  17. package/dist/common.d.cts +82 -0
  18. package/dist/common.d.ts +82 -0
  19. package/dist/common.js +37 -0
  20. package/dist/common.js.map +1 -0
  21. package/dist/compliance.cjs +61 -0
  22. package/dist/compliance.cjs.map +1 -0
  23. package/dist/compliance.d.cts +59 -0
  24. package/dist/compliance.d.ts +59 -0
  25. package/dist/compliance.js +56 -0
  26. package/dist/compliance.js.map +1 -0
  27. package/dist/customers.cjs +56 -0
  28. package/dist/customers.cjs.map +1 -0
  29. package/dist/customers.d.cts +64 -0
  30. package/dist/customers.d.ts +64 -0
  31. package/dist/customers.js +53 -0
  32. package/dist/customers.js.map +1 -0
  33. package/dist/events.cjs +675 -0
  34. package/dist/events.cjs.map +1 -0
  35. package/dist/events.d.cts +7907 -0
  36. package/dist/events.d.ts +7907 -0
  37. package/dist/events.js +650 -0
  38. package/dist/events.js.map +1 -0
  39. package/dist/index.cjs +976 -0
  40. package/dist/index.cjs.map +1 -0
  41. package/dist/index.d.cts +113 -0
  42. package/dist/index.d.ts +113 -0
  43. package/dist/index.js +858 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/invoices.cjs +72 -0
  46. package/dist/invoices.cjs.map +1 -0
  47. package/dist/invoices.d.cts +159 -0
  48. package/dist/invoices.d.ts +159 -0
  49. package/dist/invoices.js +67 -0
  50. package/dist/invoices.js.map +1 -0
  51. package/dist/merchants.cjs +104 -0
  52. package/dist/merchants.cjs.map +1 -0
  53. package/dist/merchants.d.cts +259 -0
  54. package/dist/merchants.d.ts +259 -0
  55. package/dist/merchants.js +93 -0
  56. package/dist/merchants.js.map +1 -0
  57. package/dist/payment-sessions.cjs +125 -0
  58. package/dist/payment-sessions.cjs.map +1 -0
  59. package/dist/payment-sessions.d.cts +180 -0
  60. package/dist/payment-sessions.d.ts +180 -0
  61. package/dist/payment-sessions.js +120 -0
  62. package/dist/payment-sessions.js.map +1 -0
  63. package/dist/refunds.cjs +81 -0
  64. package/dist/refunds.cjs.map +1 -0
  65. package/dist/refunds.d.cts +91 -0
  66. package/dist/refunds.d.ts +91 -0
  67. package/dist/refunds.js +75 -0
  68. package/dist/refunds.js.map +1 -0
  69. package/dist/storefronts.cjs +223 -0
  70. package/dist/storefronts.cjs.map +1 -0
  71. package/dist/storefronts.d.cts +177 -0
  72. package/dist/storefronts.d.ts +177 -0
  73. package/dist/storefronts.js +216 -0
  74. package/dist/storefronts.js.map +1 -0
  75. package/dist/subscriptions.cjs +175 -0
  76. package/dist/subscriptions.cjs.map +1 -0
  77. package/dist/subscriptions.d.cts +290 -0
  78. package/dist/subscriptions.d.ts +290 -0
  79. package/dist/subscriptions.js +163 -0
  80. package/dist/subscriptions.js.map +1 -0
  81. package/dist/transactions.cjs +67 -0
  82. package/dist/transactions.cjs.map +1 -0
  83. package/dist/transactions.d.cts +78 -0
  84. package/dist/transactions.d.ts +78 -0
  85. package/dist/transactions.js +63 -0
  86. package/dist/transactions.js.map +1 -0
  87. package/dist/webhooks.cjs +116 -0
  88. package/dist/webhooks.cjs.map +1 -0
  89. package/dist/webhooks.d.cts +201 -0
  90. package/dist/webhooks.d.ts +201 -0
  91. package/dist/webhooks.js +107 -0
  92. package/dist/webhooks.js.map +1 -0
  93. package/package.json +134 -0
  94. package/src/agents.ts +149 -0
  95. package/src/api-keys.ts +78 -0
  96. package/src/common.ts +113 -0
  97. package/src/compliance.ts +40 -0
  98. package/src/customers.ts +40 -0
  99. package/src/events.ts +176 -0
  100. package/src/index.ts +23 -0
  101. package/src/invoices.ts +53 -0
  102. package/src/merchants.ts +104 -0
  103. package/src/payment-sessions.ts +131 -0
  104. package/src/refunds.ts +68 -0
  105. package/src/storefronts.ts +89 -0
  106. package/src/subscriptions.ts +180 -0
  107. package/src/tokens.ts +60 -0
  108. package/src/transactions.ts +52 -0
  109. package/src/webhooks.ts +109 -0
package/dist/index.js ADDED
@@ -0,0 +1,858 @@
1
+ import { z } from 'zod';
2
+
3
+ // src/common.ts
4
+ var idSchema = z.string().min(1).max(64).regex(/^[a-zA-Z0-9_-]+$/, "id must be URL-safe");
5
+ var evmAddressSchema = z.string().regex(/^0x[a-fA-F0-9]{40}$/, "must be a 0x-prefixed 40-character hex EVM address").transform((v) => v.toLowerCase());
6
+ var evmTxHashSchema = z.string().regex(/^0x[a-fA-F0-9]{64}$/, "must be a 0x-prefixed 64-character hex EVM transaction hash");
7
+ var emailSchema = z.string().email().trim().toLowerCase().max(320);
8
+ var httpsUrlSchema = z.string().url().refine((v) => v.startsWith("https://"), {
9
+ message: "must be an https:// URL"
10
+ });
11
+ var httpUrlSchema = z.string().url();
12
+ var tokenAmountSchema = z.string().regex(/^[0-9]+$/, "must be a non-negative integer string (base-10)").refine((v) => BigInt(v) >= 0n, "must be >= 0");
13
+ var uintSchema = z.number().int().min(0).max(Number.MAX_SAFE_INTEGER);
14
+ var isoTimestampSchema = z.string().datetime({ offset: true, message: "must be an ISO-8601 timestamp" });
15
+ var countryCodeSchema = z.string().length(2).regex(/^[A-Z]{2}$/, "must be an ISO-3166 alpha-2 country code");
16
+ var paginationInputSchema = z.object({
17
+ limit: z.number().int().min(1).max(100).default(25),
18
+ cursor: z.string().min(1).max(200).nullish()
19
+ });
20
+ var makePaginatedSchema = (item) => z.object({
21
+ data: z.array(item),
22
+ nextCursor: z.string().nullable(),
23
+ hasMore: z.boolean()
24
+ });
25
+ var metadataSchema = z.record(
26
+ z.string().min(1).max(40),
27
+ z.union([z.string().max(500), z.number(), z.boolean(), z.null()])
28
+ ).refine((m) => Object.keys(m).length <= 50, "at most 50 metadata keys").default({});
29
+ var modeSchema = z.enum(["test", "live"]);
30
+ var paymentCurrencySchema = z.enum(["USDC", "EURC"]);
31
+ var tokenSymbolSchema = z.enum(["USDC", "EURC", "USYC"]);
32
+ var merchantTierSchema = z.enum(["free", "growth", "business", "enterprise"]);
33
+ var arcEnvironmentSchema = z.enum(["testnet", "mainnet"]);
34
+ var merchantStatusSchema = z.enum(["active", "suspended", "closed"]);
35
+ var merchantRoleSchema = z.enum(["owner", "admin", "developer", "read_only"]);
36
+ var merchantSchema = z.object({
37
+ id: idSchema,
38
+ onchainMerchantId: z.number().int().nonnegative().nullable(),
39
+ businessName: z.string().min(2).max(120),
40
+ email: emailSchema,
41
+ tier: merchantTierSchema,
42
+ status: merchantStatusSchema,
43
+ payoutAddress: evmAddressSchema.nullable(),
44
+ defaultCurrency: z.enum(["USDC", "EURC"]),
45
+ countryCode: z.string().length(2).nullable(),
46
+ websiteUrl: z.string().url().nullable(),
47
+ logoUrl: z.string().url().nullable(),
48
+ whitelabelEnabled: z.boolean(),
49
+ metadata: metadataSchema,
50
+ createdAt: isoTimestampSchema,
51
+ updatedAt: isoTimestampSchema
52
+ });
53
+ var createMerchantInputSchema = z.object({
54
+ businessName: z.string().min(2).max(120),
55
+ email: emailSchema,
56
+ password: z.string().min(12).max(128),
57
+ countryCode: z.string().length(2).optional(),
58
+ websiteUrl: z.string().url().optional()
59
+ });
60
+ var updateMerchantInputSchema = z.object({
61
+ businessName: z.string().min(2).max(120),
62
+ payoutAddress: evmAddressSchema,
63
+ defaultCurrency: z.enum(["USDC", "EURC"]),
64
+ websiteUrl: z.string().url().nullable(),
65
+ logoUrl: z.string().url().nullable(),
66
+ countryCode: z.string().length(2).nullable(),
67
+ metadata: metadataSchema
68
+ }).partial();
69
+ var changeTierInputSchema = z.object({
70
+ tier: merchantTierSchema
71
+ });
72
+ var merchantMemberSchema = z.object({
73
+ id: idSchema,
74
+ merchantId: idSchema,
75
+ email: emailSchema,
76
+ role: merchantRoleSchema,
77
+ invitedAt: isoTimestampSchema,
78
+ acceptedAt: isoTimestampSchema.nullable()
79
+ });
80
+ var inviteMemberInputSchema = z.object({
81
+ email: emailSchema,
82
+ role: merchantRoleSchema
83
+ });
84
+ var loginInputSchema = z.object({
85
+ email: emailSchema,
86
+ password: z.string().min(1).max(128)
87
+ });
88
+ var loginOutputSchema = z.object({
89
+ accessToken: z.string(),
90
+ refreshToken: z.string(),
91
+ merchant: merchantSchema
92
+ });
93
+ var apiKeyKindSchema = z.enum(["secret", "publishable"]);
94
+ var apiKeyScopeSchema = z.enum([
95
+ "sessions_read",
96
+ "sessions_write",
97
+ "subscriptions_read",
98
+ "subscriptions_write",
99
+ "refunds_read",
100
+ "refunds_write",
101
+ "transactions_read",
102
+ "webhooks_read",
103
+ "webhooks_write",
104
+ "invoices_read",
105
+ "invoices_write",
106
+ "storefronts_read",
107
+ "storefronts_write",
108
+ "agents_read",
109
+ "agents_write",
110
+ // Meta-tx relayer — submitting payer-signed EIP-3009 / EIP-2612
111
+ // authorizations on the merchant's behalf. Granted to keys used by
112
+ // hosted checkout and merchants embedding the SDK.
113
+ "relay_read",
114
+ "relay_write"
115
+ ]);
116
+ var apiKeySchema = z.object({
117
+ id: idSchema,
118
+ merchantId: idSchema,
119
+ name: z.string().min(1).max(60),
120
+ kind: apiKeyKindSchema,
121
+ mode: modeSchema,
122
+ prefix: z.string().min(8).max(24),
123
+ lastFour: z.string().length(4),
124
+ scopes: z.array(apiKeyScopeSchema).nonempty(),
125
+ createdAt: isoTimestampSchema,
126
+ lastUsedAt: isoTimestampSchema.nullable(),
127
+ revokedAt: isoTimestampSchema.nullable()
128
+ });
129
+ var createApiKeyInputSchema = z.object({
130
+ name: z.string().min(1).max(60),
131
+ kind: apiKeyKindSchema,
132
+ mode: modeSchema,
133
+ scopes: z.array(apiKeyScopeSchema).nonempty()
134
+ });
135
+ var createApiKeyOutputSchema = z.object({
136
+ apiKey: apiKeySchema,
137
+ /** Full plaintext key — shown exactly once. */
138
+ secret: z.string()
139
+ });
140
+ var rotateApiKeyInputSchema = z.object({
141
+ id: idSchema
142
+ });
143
+ var customerSchema = z.object({
144
+ id: idSchema,
145
+ merchantId: idSchema,
146
+ walletAddress: evmAddressSchema,
147
+ email: emailSchema.nullable(),
148
+ /** Merchant-provided external identifier (e.g. their own user id). */
149
+ externalRef: z.string().min(1).max(120).nullable(),
150
+ displayName: z.string().min(1).max(120).nullable(),
151
+ metadata: metadataSchema,
152
+ firstSeenAt: isoTimestampSchema,
153
+ lastSeenAt: isoTimestampSchema
154
+ });
155
+ var upsertCustomerInputSchema = z.object({
156
+ walletAddress: evmAddressSchema,
157
+ email: emailSchema.optional(),
158
+ externalRef: z.string().min(1).max(120).optional(),
159
+ displayName: z.string().min(1).max(120).optional(),
160
+ metadata: metadataSchema.optional()
161
+ });
162
+ var paymentSessionStatusSchema = z.enum([
163
+ "created",
164
+ "awaiting_payment",
165
+ "submitted",
166
+ "confirmed",
167
+ "failed",
168
+ "expired",
169
+ "cancelled"
170
+ ]);
171
+ var paymentSessionSchema = z.object({
172
+ id: idSchema,
173
+ merchantId: idSchema,
174
+ /**
175
+ * On-chain StrimzRegistry merchant id (uint96) as a decimal string.
176
+ * Set when the merchant has been registered on-chain; null when the
177
+ * merchant exists in our DB but the registry transaction hasn't
178
+ * been broadcast yet. Hosted checkout uses this to populate the
179
+ * meta-tx calldata; if null, the checkout refuses to accept
180
+ * payments.
181
+ */
182
+ chainMerchantId: z.string().regex(/^[0-9]+$/u, "must be a non-negative decimal integer string").nullable(),
183
+ /**
184
+ * ERC-20 token contract address resolved from `currency` on the
185
+ * active chain (Arc Testnet / Mainnet). Used as the `verifyingContract`
186
+ * in the EIP-712 domain for both EIP-3009 and EIP-2612 signing.
187
+ * Null on the (vanishingly unlikely) path where the API has no
188
+ * configured address for the session's currency.
189
+ */
190
+ tokenAddress: evmAddressSchema.nullable(),
191
+ customerId: idSchema.nullable(),
192
+ status: paymentSessionStatusSchema,
193
+ amount: tokenAmountSchema,
194
+ currency: paymentCurrencySchema,
195
+ feeAmount: tokenAmountSchema,
196
+ netAmount: tokenAmountSchema,
197
+ description: z.string().max(500).nullable(),
198
+ payerWalletAddress: evmAddressSchema.nullable(),
199
+ payerEmail: z.string().email().nullable(),
200
+ successUrl: z.string().url().nullable(),
201
+ cancelUrl: z.string().url().nullable(),
202
+ sourceChain: z.enum(["arc", "ethereum", "base", "polygon", "arbitrum", "optimism", "avalanche", "solana"]).nullable(),
203
+ bridgeTxHash: evmTxHashSchema.nullable(),
204
+ onchainTxHash: evmTxHashSchema.nullable(),
205
+ checkoutUrl: z.string().url(),
206
+ metadata: metadataSchema,
207
+ expiresAt: isoTimestampSchema,
208
+ createdAt: isoTimestampSchema,
209
+ updatedAt: isoTimestampSchema
210
+ });
211
+ var createPaymentSessionInputSchema = z.object({
212
+ amount: tokenAmountSchema,
213
+ currency: paymentCurrencySchema,
214
+ description: z.string().max(500).optional(),
215
+ customer: z.object({
216
+ walletAddress: evmAddressSchema.optional(),
217
+ email: z.string().email().optional(),
218
+ externalRef: z.string().max(120).optional()
219
+ }).optional(),
220
+ successUrl: z.string().url().optional(),
221
+ cancelUrl: z.string().url().optional(),
222
+ /** Minutes until the session expires. Default 30, max 60*24 (one day). */
223
+ expiresInMinutes: z.number().int().min(1).max(60 * 24).default(30),
224
+ /**
225
+ * Allowed source chains a payer can bridge USDC from via CCTP. Omit to
226
+ * accept every CCTP-supported chain.
227
+ */
228
+ supportedSourceChains: z.array(
229
+ z.enum(["arc", "ethereum", "base", "polygon", "arbitrum", "optimism", "avalanche", "solana"])
230
+ ).optional(),
231
+ metadata: metadataSchema.optional()
232
+ });
233
+ var submitPaymentSessionInputSchema = z.object({
234
+ sourceChain: z.enum([
235
+ "arc",
236
+ "ethereum",
237
+ "base",
238
+ "polygon",
239
+ "arbitrum",
240
+ "optimism",
241
+ "avalanche",
242
+ "solana"
243
+ ]),
244
+ onchainTxHash: evmTxHashSchema,
245
+ bridgeTxHash: evmTxHashSchema.optional(),
246
+ payerWalletAddress: evmAddressSchema
247
+ });
248
+ var transactionKindSchema = z.enum([
249
+ "one_shot",
250
+ "subscription_charge",
251
+ "refund",
252
+ "invoice_payment",
253
+ "storefront_purchase"
254
+ ]);
255
+ var transactionStatusSchema = z.enum(["pending", "confirmed", "failed"]);
256
+ var transactionSchema = z.object({
257
+ id: idSchema,
258
+ merchantId: idSchema,
259
+ kind: transactionKindSchema,
260
+ status: transactionStatusSchema,
261
+ sessionId: idSchema.nullable(),
262
+ subscriptionId: idSchema.nullable(),
263
+ subscriptionChargeId: idSchema.nullable(),
264
+ refundId: idSchema.nullable(),
265
+ customerId: idSchema.nullable(),
266
+ amount: tokenAmountSchema,
267
+ feeAmount: tokenAmountSchema,
268
+ netAmount: tokenAmountSchema,
269
+ currency: paymentCurrencySchema,
270
+ payerAddress: evmAddressSchema,
271
+ merchantAddress: evmAddressSchema,
272
+ onchainTxHash: evmTxHashSchema,
273
+ blockNumber: z.number().int().nonnegative(),
274
+ blockTimestamp: isoTimestampSchema,
275
+ createdAt: isoTimestampSchema
276
+ });
277
+ var subscriptionIntervalSchema = z.enum([
278
+ "daily",
279
+ "weekly",
280
+ "monthly",
281
+ "quarterly",
282
+ "yearly"
283
+ ]);
284
+ var subscriptionPlanStatusSchema = z.enum(["active", "archived"]);
285
+ var subscriptionPlanSchema = z.object({
286
+ id: idSchema,
287
+ merchantId: idSchema,
288
+ /**
289
+ * On-chain StrimzRegistry merchant id (uint96) as a decimal string.
290
+ * See `paymentSessionSchema.chainMerchantId`. Null when the merchant
291
+ * hasn't been registered on-chain yet — the hosted enrolment page
292
+ * refuses to take signatures in that state.
293
+ */
294
+ chainMerchantId: z.string().regex(/^[0-9]+$/u, "must be a non-negative decimal integer string").nullable(),
295
+ /**
296
+ * ERC-20 token contract address resolved from `currency` — the
297
+ * EIP-2612 `verifyingContract` the wallet signs over.
298
+ */
299
+ tokenAddress: evmAddressSchema.nullable(),
300
+ /**
301
+ * Charge cadence in seconds, derived from `interval` + `intervalCount`
302
+ * so the meta-tx layer can pass a uint32 to StrimzSubscriptions
303
+ * without re-deriving the conversion on the client.
304
+ */
305
+ intervalSeconds: z.number().int().positive(),
306
+ name: z.string().min(1).max(120),
307
+ description: z.string().max(500).nullable(),
308
+ amount: tokenAmountSchema,
309
+ currency: paymentCurrencySchema,
310
+ interval: subscriptionIntervalSchema,
311
+ intervalCount: z.number().int().min(1).max(365),
312
+ trialPeriodDays: z.number().int().min(0).max(365).nullable(),
313
+ status: subscriptionPlanStatusSchema,
314
+ metadata: metadataSchema,
315
+ createdAt: isoTimestampSchema,
316
+ updatedAt: isoTimestampSchema
317
+ });
318
+ var createSubscriptionPlanInputSchema = z.object({
319
+ name: z.string().min(1).max(120),
320
+ description: z.string().max(500).optional(),
321
+ amount: tokenAmountSchema,
322
+ currency: paymentCurrencySchema,
323
+ interval: subscriptionIntervalSchema,
324
+ intervalCount: z.number().int().min(1).max(365).default(1),
325
+ trialPeriodDays: z.number().int().min(0).max(365).optional(),
326
+ metadata: metadataSchema.optional()
327
+ });
328
+ var subscriptionStatusSchema = z.enum([
329
+ "trialing",
330
+ "active",
331
+ "at_risk",
332
+ "paused",
333
+ "cancelled",
334
+ "lapsed"
335
+ ]);
336
+ var subscriptionSchema = z.object({
337
+ id: idSchema,
338
+ onchainSubscriptionId: z.number().int().nonnegative().nullable(),
339
+ merchantId: idSchema,
340
+ customerId: idSchema,
341
+ planId: idSchema,
342
+ status: subscriptionStatusSchema,
343
+ payerAddress: evmAddressSchema,
344
+ currency: paymentCurrencySchema,
345
+ amount: tokenAmountSchema,
346
+ interval: subscriptionIntervalSchema,
347
+ intervalCount: z.number().int().min(1),
348
+ trialEndsAt: isoTimestampSchema.nullable(),
349
+ currentPeriodStartAt: isoTimestampSchema,
350
+ currentPeriodEndAt: isoTimestampSchema,
351
+ nextChargeAt: isoTimestampSchema.nullable(),
352
+ gracePeriodHours: z.number().int().min(0).max(72),
353
+ cancelledAt: isoTimestampSchema.nullable(),
354
+ metadata: metadataSchema,
355
+ createdAt: isoTimestampSchema,
356
+ updatedAt: isoTimestampSchema
357
+ });
358
+ var createSubscriptionInputSchema = z.object({
359
+ planId: idSchema,
360
+ customer: z.object({
361
+ walletAddress: evmAddressSchema,
362
+ email: z.string().email().optional(),
363
+ externalRef: z.string().max(120).optional()
364
+ }),
365
+ gracePeriodHours: z.union([z.literal(24), z.literal(48), z.literal(72)]).default(48),
366
+ metadata: metadataSchema.optional()
367
+ });
368
+ var cancelSubscriptionInputSchema = z.object({
369
+ id: idSchema,
370
+ reason: z.string().max(500).optional()
371
+ });
372
+ var subscriptionChargeOutcomeSchema = z.enum([
373
+ "charged",
374
+ "insufficient_funds",
375
+ "revoked_approval",
376
+ "cancelled",
377
+ "skipped"
378
+ ]);
379
+ var subscriptionChargeStatusSchema = z.enum([
380
+ "pending",
381
+ "in_flight",
382
+ "succeeded",
383
+ "failed",
384
+ "retrying",
385
+ "abandoned"
386
+ ]);
387
+ var subscriptionChargeSchema = z.object({
388
+ id: idSchema,
389
+ subscriptionId: idSchema,
390
+ merchantId: idSchema,
391
+ chargeAttemptId: z.string().length(66, "must be a 32-byte 0x-prefixed hex string"),
392
+ periodStartAt: isoTimestampSchema,
393
+ periodEndAt: isoTimestampSchema,
394
+ amount: tokenAmountSchema,
395
+ currency: paymentCurrencySchema,
396
+ status: subscriptionChargeStatusSchema,
397
+ outcome: subscriptionChargeOutcomeSchema.nullable(),
398
+ attemptNumber: z.number().int().min(1),
399
+ scheduledAt: isoTimestampSchema,
400
+ executedAt: isoTimestampSchema.nullable(),
401
+ onchainTxHash: evmTxHashSchema.nullable(),
402
+ failureReason: z.string().max(500).nullable(),
403
+ createdAt: isoTimestampSchema,
404
+ updatedAt: isoTimestampSchema
405
+ });
406
+ var refundReasonSchema = z.enum([
407
+ "customer_request",
408
+ "product_issue",
409
+ "duplicate_charge",
410
+ "fraudulent",
411
+ "other"
412
+ ]);
413
+ var refundStatusSchema = z.enum([
414
+ "pending",
415
+ "awaiting_signature",
416
+ "submitted",
417
+ "completed",
418
+ "failed",
419
+ "cancelled"
420
+ ]);
421
+ var refundSchema = z.object({
422
+ id: idSchema,
423
+ merchantId: idSchema,
424
+ transactionId: idSchema,
425
+ amount: tokenAmountSchema,
426
+ currency: paymentCurrencySchema,
427
+ reason: refundReasonSchema,
428
+ note: z.string().max(500).nullable(),
429
+ status: refundStatusSchema,
430
+ payerAddress: evmAddressSchema,
431
+ refundTxHash: evmTxHashSchema.nullable(),
432
+ failureReason: z.string().max(500).nullable(),
433
+ initiatedBy: idSchema,
434
+ createdAt: isoTimestampSchema,
435
+ completedAt: isoTimestampSchema.nullable()
436
+ });
437
+ var createRefundInputSchema = z.object({
438
+ transactionId: idSchema,
439
+ amount: tokenAmountSchema,
440
+ reason: refundReasonSchema,
441
+ note: z.string().max(500).optional()
442
+ });
443
+ var submitRefundSignatureInputSchema = z.object({
444
+ id: idSchema,
445
+ refundTxHash: evmTxHashSchema
446
+ });
447
+ var webhookEventNameSchema = z.enum([
448
+ "payment.created",
449
+ "payment.completed",
450
+ "payment.failed",
451
+ "subscription.created",
452
+ "subscription.charged",
453
+ "subscription.charge_failed",
454
+ "subscription.recovery_attempt",
455
+ "subscription.recovery_outcome",
456
+ "subscription.cancelled",
457
+ "subscription.lapsed",
458
+ "refund.created",
459
+ "refund.completed",
460
+ "refund.failed",
461
+ "invoice.created",
462
+ "invoice.paid",
463
+ "invoice.overdue",
464
+ "agent.action_executed",
465
+ "agent.job_proposed",
466
+ "agent.job_completed",
467
+ "agent.job_disputed",
468
+ "compliance.wallet_flagged",
469
+ "compliance.wallet_blocked"
470
+ ]);
471
+ var webhookEndpointStatusSchema = z.enum(["active", "disabled"]);
472
+ var webhookEndpointSchema = z.object({
473
+ id: idSchema,
474
+ merchantId: idSchema,
475
+ mode: modeSchema,
476
+ url: httpsUrlSchema,
477
+ description: z.string().max(200).nullable(),
478
+ events: z.array(webhookEventNameSchema).nonempty(),
479
+ status: webhookEndpointStatusSchema,
480
+ signingSecretPrefix: z.string().min(4).max(12),
481
+ lastDeliveredAt: isoTimestampSchema.nullable(),
482
+ createdAt: isoTimestampSchema,
483
+ updatedAt: isoTimestampSchema
484
+ });
485
+ var createWebhookEndpointInputSchema = z.object({
486
+ url: httpsUrlSchema,
487
+ events: z.array(webhookEventNameSchema).nonempty(),
488
+ description: z.string().max(200).optional(),
489
+ mode: modeSchema
490
+ });
491
+ var createWebhookEndpointOutputSchema = z.object({
492
+ endpoint: webhookEndpointSchema,
493
+ /** Full signing secret — shown exactly once. */
494
+ signingSecret: z.string()
495
+ });
496
+ var webhookDeliveryStatusSchema = z.enum([
497
+ "pending",
498
+ "delivered",
499
+ "retrying",
500
+ "permanently_failed"
501
+ ]);
502
+ var webhookDeliverySchema = z.object({
503
+ id: idSchema,
504
+ merchantId: idSchema,
505
+ endpointId: idSchema,
506
+ eventId: idSchema,
507
+ eventName: webhookEventNameSchema,
508
+ status: webhookDeliveryStatusSchema,
509
+ attempt: z.number().int().min(1).max(6),
510
+ responseCode: z.number().int().min(100).max(599).nullable(),
511
+ responseMs: z.number().int().min(0).nullable(),
512
+ lastError: z.string().max(1e3).nullable(),
513
+ nextAttemptAt: isoTimestampSchema.nullable(),
514
+ deliveredAt: isoTimestampSchema.nullable(),
515
+ createdAt: isoTimestampSchema
516
+ });
517
+ var replayDeliveryInputSchema = z.object({
518
+ id: idSchema
519
+ });
520
+ var complianceProviderSchema = z.enum(["trm", "elliptic", "disabled"]);
521
+ var complianceStatusSchema = z.enum(["clear", "flagged", "blocked", "error"]);
522
+ var complianceScreeningContextSchema = z.enum([
523
+ "merchant_onboarding",
524
+ "payer_checkout",
525
+ "subscriber_signup",
526
+ "refund_recipient"
527
+ ]);
528
+ var complianceLogSchema = z.object({
529
+ id: idSchema,
530
+ walletAddress: evmAddressSchema,
531
+ provider: complianceProviderSchema,
532
+ status: complianceStatusSchema,
533
+ riskScore: z.number().min(0).max(100).nullable(),
534
+ flags: z.array(z.string().max(120)).default([]),
535
+ context: complianceScreeningContextSchema,
536
+ merchantId: idSchema.nullable(),
537
+ sessionId: idSchema.nullable(),
538
+ subscriptionId: idSchema.nullable(),
539
+ providerRequestId: z.string().max(200).nullable(),
540
+ createdAt: isoTimestampSchema
541
+ });
542
+ var agentIdentitySchema = z.object({
543
+ id: idSchema,
544
+ /** ERC-8004 on-chain identity address. */
545
+ onchainAddress: evmAddressSchema,
546
+ /** Public key or agent credential digest, as emitted by ERC-8004. */
547
+ credentialDigest: z.string().regex(/^0x[a-fA-F0-9]+$/),
548
+ name: z.string().min(1).max(120),
549
+ version: z.string().min(1).max(40),
550
+ reputationScore: z.number().min(0).max(100).nullable(),
551
+ registeredAt: isoTimestampSchema
552
+ });
553
+ var agentCapabilitySchema = z.enum([
554
+ "identity",
555
+ "recovery",
556
+ "routing",
557
+ "cashflow",
558
+ "commerce",
559
+ "pricing_intelligence"
560
+ ]);
561
+ var agentMerchantConfigSchema = z.object({
562
+ merchantId: idSchema,
563
+ enabledCapabilities: z.array(agentCapabilitySchema).default([]),
564
+ recovery: z.object({
565
+ gracePeriodHours: z.union([z.literal(24), z.literal(48), z.literal(72)]).default(48),
566
+ strategy: z.enum(["once", "twice", "until_grace_ends"]).default("twice"),
567
+ notificationTemplate: z.string().max(2e3).nullable()
568
+ }),
569
+ cashflow: z.object({
570
+ digestEnabled: z.boolean().default(false),
571
+ anomalySensitivity: z.enum(["low", "medium", "high"]).default("medium"),
572
+ autoConvertToYield: z.boolean().default(false),
573
+ minimumLiquidReserveCents: z.number().int().nonnegative().default(1e5)
574
+ }),
575
+ commerce: z.object({
576
+ requireHumanApprovalAboveUsdCents: z.number().int().nonnegative().default(1e5),
577
+ approvedVendors: z.array(evmAddressSchema).default([]),
578
+ monthlySpendCapUsdCents: z.number().int().nonnegative().nullable()
579
+ }),
580
+ updatedAt: isoTimestampSchema
581
+ });
582
+ var updateAgentConfigInputSchema = agentMerchantConfigSchema.omit({ merchantId: true, updatedAt: true }).partial();
583
+ var agentActionTypeSchema = z.enum([
584
+ "recovery_notification_sent",
585
+ "recovery_retry_scheduled",
586
+ "recovery_retry_executed",
587
+ "recovery_abandoned",
588
+ "routing_bridge_initiated",
589
+ "routing_payment_completed",
590
+ "cashflow_digest_sent",
591
+ "cashflow_anomaly_flagged",
592
+ "cashflow_yield_converted",
593
+ "commerce_job_created",
594
+ "commerce_job_approved",
595
+ "commerce_job_completed",
596
+ "commerce_job_disputed"
597
+ ]);
598
+ var agentActionOutcomeSchema = z.enum(["success", "failure", "pending", "skipped"]);
599
+ var agentActivityLogSchema = z.object({
600
+ id: idSchema,
601
+ merchantId: idSchema,
602
+ capability: agentCapabilitySchema,
603
+ actionType: agentActionTypeSchema,
604
+ outcome: agentActionOutcomeSchema,
605
+ subscriptionId: idSchema.nullable(),
606
+ transactionId: idSchema.nullable(),
607
+ jobId: idSchema.nullable(),
608
+ metadata: metadataSchema,
609
+ createdAt: isoTimestampSchema
610
+ });
611
+ var agentJobStatusSchema = z.enum([
612
+ "proposed",
613
+ "accepted",
614
+ "in_progress",
615
+ "delivered",
616
+ "approved",
617
+ "completed",
618
+ "disputed",
619
+ "cancelled"
620
+ ]);
621
+ var agentJobSchema = z.object({
622
+ id: idSchema,
623
+ merchantId: idSchema,
624
+ /** On-chain job id from StrimzAgentEscrow. */
625
+ onchainJobId: z.number().int().nonnegative().nullable(),
626
+ vendorAddress: evmAddressSchema,
627
+ description: z.string().min(1).max(2e3),
628
+ amount: tokenAmountSchema,
629
+ currency: z.enum(["USDC", "EURC"]),
630
+ status: agentJobStatusSchema,
631
+ assessorAddress: evmAddressSchema,
632
+ deliverableHash: z.string().regex(/^0x[a-fA-F0-9]+$/).nullable(),
633
+ escrowTxHash: evmTxHashSchema.nullable(),
634
+ releaseTxHash: evmTxHashSchema.nullable(),
635
+ createdAt: isoTimestampSchema,
636
+ completedAt: isoTimestampSchema.nullable()
637
+ });
638
+ var createAgentJobInputSchema = z.object({
639
+ vendorAddress: evmAddressSchema,
640
+ description: z.string().min(1).max(2e3),
641
+ amount: tokenAmountSchema,
642
+ currency: z.enum(["USDC", "EURC"]),
643
+ assessorAddress: evmAddressSchema.optional()
644
+ });
645
+ var storefrontStatusSchema = z.enum(["draft", "published", "archived"]);
646
+ var storefrontSchema = z.object({
647
+ id: idSchema,
648
+ merchantId: idSchema,
649
+ slug: z.string().min(3).max(40).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, "slug must be lowercase alphanumeric with hyphens"),
650
+ name: z.string().min(2).max(120),
651
+ description: z.string().max(2e3).nullable(),
652
+ logoUrl: httpsUrlSchema.nullable(),
653
+ coverImageUrl: httpsUrlSchema.nullable(),
654
+ accentColor: z.string().regex(/^#[0-9a-fA-F]{6}$/).nullable(),
655
+ socialLinks: z.array(httpsUrlSchema).max(10).default([]),
656
+ status: storefrontStatusSchema,
657
+ createdAt: isoTimestampSchema,
658
+ updatedAt: isoTimestampSchema
659
+ });
660
+ var createStorefrontInputSchema = storefrontSchema.pick({
661
+ slug: true,
662
+ name: true,
663
+ description: true,
664
+ logoUrl: true,
665
+ coverImageUrl: true,
666
+ accentColor: true,
667
+ socialLinks: true
668
+ });
669
+ var storefrontProductTypeSchema = z.enum(["one_time", "subscription"]);
670
+ var storefrontProductSchema = z.object({
671
+ id: idSchema,
672
+ storefrontId: idSchema,
673
+ name: z.string().min(1).max(120),
674
+ description: z.string().max(2e3).nullable(),
675
+ imageUrl: httpsUrlSchema.nullable(),
676
+ price: tokenAmountSchema,
677
+ currency: paymentCurrencySchema,
678
+ type: storefrontProductTypeSchema,
679
+ interval: subscriptionIntervalSchema.nullable(),
680
+ intervalCount: z.number().int().min(1).max(365).nullable(),
681
+ /** null = unlimited stock. */
682
+ stock: z.number().int().min(0).nullable(),
683
+ planId: idSchema.nullable(),
684
+ isActive: z.boolean(),
685
+ sortOrder: z.number().int().nonnegative().default(0),
686
+ createdAt: isoTimestampSchema,
687
+ updatedAt: isoTimestampSchema
688
+ });
689
+ var createStorefrontProductInputSchema = storefrontProductSchema.omit({
690
+ id: true,
691
+ storefrontId: true,
692
+ planId: true,
693
+ createdAt: true,
694
+ updatedAt: true
695
+ }).extend({
696
+ imageUrl: httpsUrlSchema.optional()
697
+ });
698
+ var invoiceStatusSchema = z.enum(["draft", "sent", "paid", "overdue", "void"]);
699
+ var invoiceLineItemSchema = z.object({
700
+ description: z.string().min(1).max(500),
701
+ quantity: z.number().int().min(1).max(1e4),
702
+ unitAmount: tokenAmountSchema
703
+ });
704
+ var invoiceSchema = z.object({
705
+ id: idSchema,
706
+ merchantId: idSchema,
707
+ number: z.string().min(1).max(40),
708
+ customerName: z.string().min(1).max(200).nullable(),
709
+ customerEmail: emailSchema.nullable(),
710
+ lineItems: z.array(invoiceLineItemSchema).nonempty(),
711
+ subtotal: tokenAmountSchema,
712
+ total: tokenAmountSchema,
713
+ currency: paymentCurrencySchema,
714
+ status: invoiceStatusSchema,
715
+ note: z.string().max(2e3).nullable(),
716
+ sessionId: idSchema.nullable(),
717
+ dueAt: isoTimestampSchema,
718
+ paidAt: isoTimestampSchema.nullable(),
719
+ sentAt: isoTimestampSchema.nullable(),
720
+ createdAt: isoTimestampSchema,
721
+ updatedAt: isoTimestampSchema
722
+ });
723
+ var createInvoiceInputSchema = z.object({
724
+ customerName: z.string().min(1).max(200).optional(),
725
+ customerEmail: emailSchema.optional(),
726
+ lineItems: z.array(invoiceLineItemSchema).nonempty(),
727
+ currency: paymentCurrencySchema,
728
+ note: z.string().max(2e3).optional(),
729
+ dueInDays: z.number().int().min(1).max(90).default(7)
730
+ });
731
+ var envelope = (name, data) => z.object({
732
+ id: idSchema,
733
+ type: z.literal(name),
734
+ apiVersion: z.string().regex(/^\d{4}-\d{2}-\d{2}$/),
735
+ mode: modeSchema,
736
+ createdAt: isoTimestampSchema,
737
+ data
738
+ });
739
+ var paymentCreatedEventSchema = envelope("payment.created", paymentSessionSchema);
740
+ var paymentCompletedEventSchema = envelope(
741
+ "payment.completed",
742
+ z.object({ session: paymentSessionSchema, transaction: transactionSchema })
743
+ );
744
+ var paymentFailedEventSchema = envelope(
745
+ "payment.failed",
746
+ z.object({ session: paymentSessionSchema, reason: z.string() })
747
+ );
748
+ var subscriptionCreatedEventSchema = envelope("subscription.created", subscriptionSchema);
749
+ var subscriptionChargedEventSchema = envelope(
750
+ "subscription.charged",
751
+ z.object({
752
+ subscription: subscriptionSchema,
753
+ charge: subscriptionChargeSchema,
754
+ transaction: transactionSchema
755
+ })
756
+ );
757
+ var subscriptionChargeFailedEventSchema = envelope(
758
+ "subscription.charge_failed",
759
+ z.object({ subscription: subscriptionSchema, charge: subscriptionChargeSchema })
760
+ );
761
+ var subscriptionRecoveryAttemptEventSchema = envelope(
762
+ "subscription.recovery_attempt",
763
+ z.object({ subscription: subscriptionSchema, attemptNumber: z.number().int().min(1) })
764
+ );
765
+ var subscriptionRecoveryOutcomeEventSchema = envelope(
766
+ "subscription.recovery_outcome",
767
+ z.object({
768
+ subscription: subscriptionSchema,
769
+ outcome: z.enum(["recovered", "churned"])
770
+ })
771
+ );
772
+ var subscriptionCancelledEventSchema = envelope(
773
+ "subscription.cancelled",
774
+ subscriptionSchema
775
+ );
776
+ var subscriptionLapsedEventSchema = envelope("subscription.lapsed", subscriptionSchema);
777
+ var refundCreatedEventSchema = envelope("refund.created", refundSchema);
778
+ var refundCompletedEventSchema = envelope(
779
+ "refund.completed",
780
+ z.object({ refund: refundSchema, transaction: transactionSchema })
781
+ );
782
+ var refundFailedEventSchema = envelope(
783
+ "refund.failed",
784
+ z.object({ refund: refundSchema, reason: z.string() })
785
+ );
786
+ var invoiceCreatedEventSchema = envelope("invoice.created", invoiceSchema);
787
+ var invoicePaidEventSchema = envelope(
788
+ "invoice.paid",
789
+ z.object({ invoice: invoiceSchema, transaction: transactionSchema })
790
+ );
791
+ var invoiceOverdueEventSchema = envelope("invoice.overdue", invoiceSchema);
792
+ var agentActionExecutedEventSchema = envelope(
793
+ "agent.action_executed",
794
+ agentActivityLogSchema
795
+ );
796
+ var agentJobProposedEventSchema = envelope("agent.job_proposed", agentJobSchema);
797
+ var agentJobCompletedEventSchema = envelope("agent.job_completed", agentJobSchema);
798
+ var agentJobDisputedEventSchema = envelope("agent.job_disputed", agentJobSchema);
799
+ var complianceWalletFlaggedEventSchema = envelope(
800
+ "compliance.wallet_flagged",
801
+ complianceLogSchema
802
+ );
803
+ var complianceWalletBlockedEventSchema = envelope(
804
+ "compliance.wallet_blocked",
805
+ complianceLogSchema
806
+ );
807
+ var webhookEventSchema = z.discriminatedUnion("type", [
808
+ paymentCreatedEventSchema,
809
+ paymentCompletedEventSchema,
810
+ paymentFailedEventSchema,
811
+ subscriptionCreatedEventSchema,
812
+ subscriptionChargedEventSchema,
813
+ subscriptionChargeFailedEventSchema,
814
+ subscriptionRecoveryAttemptEventSchema,
815
+ subscriptionRecoveryOutcomeEventSchema,
816
+ subscriptionCancelledEventSchema,
817
+ subscriptionLapsedEventSchema,
818
+ refundCreatedEventSchema,
819
+ refundCompletedEventSchema,
820
+ refundFailedEventSchema,
821
+ invoiceCreatedEventSchema,
822
+ invoicePaidEventSchema,
823
+ invoiceOverdueEventSchema,
824
+ agentActionExecutedEventSchema,
825
+ agentJobProposedEventSchema,
826
+ agentJobCompletedEventSchema,
827
+ agentJobDisputedEventSchema,
828
+ complianceWalletFlaggedEventSchema,
829
+ complianceWalletBlockedEventSchema
830
+ ]);
831
+ var addressSchema = z.string().regex(/^0x[0-9a-fA-F]{40}$/u, "must be a 0x-prefixed 20-byte address");
832
+ var tokenCapabilitiesSchema = z.object({
833
+ permit2612: z.boolean(),
834
+ transferAuth3009: z.boolean()
835
+ });
836
+ var tokenMetadataSchema = z.object({
837
+ address: addressSchema,
838
+ name: z.string(),
839
+ symbol: z.string(),
840
+ /**
841
+ * EIP-712 domain version. Read from ERC-5267 `eip712Domain()` when
842
+ * available; otherwise defaults to "1". Used by typed-data builders
843
+ * — domain mismatch produces a different digest and the contract's
844
+ * ecrecover would recover a different address.
845
+ */
846
+ version: z.string(),
847
+ decimals: z.number().int().min(0).max(255),
848
+ capabilities: tokenCapabilitiesSchema
849
+ });
850
+ var tokenPermitNonceSchema = z.object({
851
+ token: addressSchema,
852
+ owner: addressSchema,
853
+ nonce: z.string().regex(/^[0-9]+$/u, "must be a decimal integer string")
854
+ });
855
+
856
+ export { agentActionExecutedEventSchema, agentActionOutcomeSchema, agentActionTypeSchema, agentActivityLogSchema, agentCapabilitySchema, agentIdentitySchema, agentJobCompletedEventSchema, agentJobDisputedEventSchema, agentJobProposedEventSchema, agentJobSchema, agentJobStatusSchema, agentMerchantConfigSchema, apiKeyKindSchema, apiKeySchema, apiKeyScopeSchema, arcEnvironmentSchema, cancelSubscriptionInputSchema, changeTierInputSchema, complianceLogSchema, complianceProviderSchema, complianceScreeningContextSchema, complianceStatusSchema, complianceWalletBlockedEventSchema, complianceWalletFlaggedEventSchema, countryCodeSchema, createAgentJobInputSchema, createApiKeyInputSchema, createApiKeyOutputSchema, createInvoiceInputSchema, createMerchantInputSchema, createPaymentSessionInputSchema, createRefundInputSchema, createStorefrontInputSchema, createStorefrontProductInputSchema, createSubscriptionInputSchema, createSubscriptionPlanInputSchema, createWebhookEndpointInputSchema, createWebhookEndpointOutputSchema, customerSchema, emailSchema, evmAddressSchema, evmTxHashSchema, httpUrlSchema, httpsUrlSchema, idSchema, inviteMemberInputSchema, invoiceCreatedEventSchema, invoiceLineItemSchema, invoiceOverdueEventSchema, invoicePaidEventSchema, invoiceSchema, invoiceStatusSchema, isoTimestampSchema, loginInputSchema, loginOutputSchema, makePaginatedSchema, merchantMemberSchema, merchantRoleSchema, merchantSchema, merchantStatusSchema, merchantTierSchema, metadataSchema, modeSchema, paginationInputSchema, paymentCompletedEventSchema, paymentCreatedEventSchema, paymentCurrencySchema, paymentFailedEventSchema, paymentSessionSchema, paymentSessionStatusSchema, refundCompletedEventSchema, refundCreatedEventSchema, refundFailedEventSchema, refundReasonSchema, refundSchema, refundStatusSchema, replayDeliveryInputSchema, rotateApiKeyInputSchema, storefrontProductSchema, storefrontProductTypeSchema, storefrontSchema, storefrontStatusSchema, submitPaymentSessionInputSchema, submitRefundSignatureInputSchema, subscriptionCancelledEventSchema, subscriptionChargeFailedEventSchema, subscriptionChargeOutcomeSchema, subscriptionChargeSchema, subscriptionChargeStatusSchema, subscriptionChargedEventSchema, subscriptionCreatedEventSchema, subscriptionIntervalSchema, subscriptionLapsedEventSchema, subscriptionPlanSchema, subscriptionPlanStatusSchema, subscriptionRecoveryAttemptEventSchema, subscriptionRecoveryOutcomeEventSchema, subscriptionSchema, subscriptionStatusSchema, tokenAmountSchema, tokenCapabilitiesSchema, tokenMetadataSchema, tokenPermitNonceSchema, tokenSymbolSchema, transactionKindSchema, transactionSchema, transactionStatusSchema, uintSchema, updateAgentConfigInputSchema, updateMerchantInputSchema, upsertCustomerInputSchema, webhookDeliverySchema, webhookDeliveryStatusSchema, webhookEndpointSchema, webhookEndpointStatusSchema, webhookEventNameSchema, webhookEventSchema };
857
+ //# sourceMappingURL=index.js.map
858
+ //# sourceMappingURL=index.js.map