mppx 0.1.0 → 0.2.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 (231) hide show
  1. package/README.md +1 -1
  2. package/dist/Challenge.d.ts +18 -18
  3. package/dist/Challenge.d.ts.map +1 -1
  4. package/dist/Challenge.js +8 -8
  5. package/dist/Challenge.js.map +1 -1
  6. package/dist/Errors.d.ts +58 -8
  7. package/dist/Errors.d.ts.map +1 -1
  8. package/dist/Errors.js +51 -9
  9. package/dist/Errors.js.map +1 -1
  10. package/dist/Method.d.ts +154 -0
  11. package/dist/Method.d.ts.map +1 -0
  12. package/dist/Method.js +81 -0
  13. package/dist/Method.js.map +1 -0
  14. package/dist/PaymentRequest.d.ts +5 -5
  15. package/dist/PaymentRequest.d.ts.map +1 -1
  16. package/dist/PaymentRequest.js +5 -5
  17. package/dist/cli.js +67 -18
  18. package/dist/cli.js.map +1 -1
  19. package/dist/client/Methods.d.ts +2 -2
  20. package/dist/client/Methods.d.ts.map +1 -1
  21. package/dist/client/Methods.js +2 -2
  22. package/dist/client/Methods.js.map +1 -1
  23. package/dist/client/Mppx.d.ts +12 -7
  24. package/dist/client/Mppx.d.ts.map +1 -1
  25. package/dist/client/Mppx.js +10 -5
  26. package/dist/client/Mppx.js.map +1 -1
  27. package/dist/client/internal/Fetch.d.ts +13 -11
  28. package/dist/client/internal/Fetch.d.ts.map +1 -1
  29. package/dist/client/internal/Fetch.js +8 -4
  30. package/dist/client/internal/Fetch.js.map +1 -1
  31. package/dist/index.d.ts +1 -2
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +1 -2
  34. package/dist/index.js.map +1 -1
  35. package/dist/mcp-sdk/client/McpClient.d.ts +6 -6
  36. package/dist/mcp-sdk/client/McpClient.d.ts.map +1 -1
  37. package/dist/mcp-sdk/client/McpClient.js +4 -4
  38. package/dist/mcp-sdk/client/McpClient.js.map +1 -1
  39. package/dist/middlewares/elysia.d.ts +1 -1
  40. package/dist/middlewares/express.d.ts +1 -1
  41. package/dist/middlewares/hono.d.ts +1 -1
  42. package/dist/middlewares/internal/mppx.d.ts +7 -7
  43. package/dist/middlewares/internal/mppx.d.ts.map +1 -1
  44. package/dist/middlewares/internal/mppx.js +5 -5
  45. package/dist/middlewares/internal/mppx.js.map +1 -1
  46. package/dist/middlewares/nextjs.d.ts +1 -1
  47. package/dist/proxy/Service.js +2 -2
  48. package/dist/proxy/Service.js.map +1 -1
  49. package/dist/server/Methods.d.ts +2 -2
  50. package/dist/server/Methods.d.ts.map +1 -1
  51. package/dist/server/Methods.js +2 -2
  52. package/dist/server/Methods.js.map +1 -1
  53. package/dist/server/Mppx.d.ts +17 -17
  54. package/dist/server/Mppx.d.ts.map +1 -1
  55. package/dist/server/Mppx.js +9 -9
  56. package/dist/server/Mppx.js.map +1 -1
  57. package/dist/stripe/{Intents.d.ts → Methods.d.ts} +22 -22
  58. package/dist/stripe/Methods.d.ts.map +1 -0
  59. package/dist/stripe/Methods.js +42 -0
  60. package/dist/stripe/Methods.js.map +1 -0
  61. package/dist/stripe/client/Charge.d.ts +48 -44
  62. package/dist/stripe/client/Charge.d.ts.map +1 -1
  63. package/dist/stripe/client/Charge.js +22 -17
  64. package/dist/stripe/client/Charge.js.map +1 -1
  65. package/dist/stripe/client/{MethodIntents.d.ts → Methods.d.ts} +25 -24
  66. package/dist/stripe/client/Methods.d.ts.map +1 -0
  67. package/dist/stripe/client/{MethodIntents.js → Methods.js} +4 -4
  68. package/dist/stripe/client/Methods.js.map +1 -0
  69. package/dist/stripe/client/index.d.ts +1 -1
  70. package/dist/stripe/client/index.d.ts.map +1 -1
  71. package/dist/stripe/client/index.js +1 -1
  72. package/dist/stripe/client/index.js.map +1 -1
  73. package/dist/stripe/index.d.ts +1 -1
  74. package/dist/stripe/index.d.ts.map +1 -1
  75. package/dist/stripe/index.js +1 -1
  76. package/dist/stripe/index.js.map +1 -1
  77. package/dist/stripe/internal/types.d.ts +25 -0
  78. package/dist/stripe/internal/types.d.ts.map +1 -0
  79. package/dist/stripe/internal/types.js +2 -0
  80. package/dist/stripe/internal/types.js.map +1 -0
  81. package/dist/stripe/server/Charge.d.ts +47 -28
  82. package/dist/stripe/server/Charge.d.ts.map +1 -1
  83. package/dist/stripe/server/Charge.js +90 -32
  84. package/dist/stripe/server/Charge.js.map +1 -1
  85. package/dist/stripe/server/{MethodIntents.d.ts → Methods.d.ts} +24 -23
  86. package/dist/stripe/server/Methods.d.ts.map +1 -0
  87. package/dist/stripe/server/{MethodIntents.js → Methods.js} +3 -3
  88. package/dist/stripe/server/Methods.js.map +1 -0
  89. package/dist/stripe/server/index.d.ts +1 -1
  90. package/dist/stripe/server/index.d.ts.map +1 -1
  91. package/dist/stripe/server/index.js +1 -1
  92. package/dist/stripe/server/index.js.map +1 -1
  93. package/dist/tempo/{Intents.d.ts → Methods.d.ts} +72 -69
  94. package/dist/tempo/Methods.d.ts.map +1 -0
  95. package/dist/tempo/Methods.js +118 -0
  96. package/dist/tempo/Methods.js.map +1 -0
  97. package/dist/tempo/client/ChannelOps.d.ts +1 -1
  98. package/dist/tempo/client/ChannelOps.js +1 -1
  99. package/dist/tempo/client/Charge.d.ts +25 -25
  100. package/dist/tempo/client/Charge.d.ts.map +1 -1
  101. package/dist/tempo/client/Charge.js +3 -3
  102. package/dist/tempo/client/Charge.js.map +1 -1
  103. package/dist/tempo/client/{MethodIntents.d.ts → Methods.d.ts} +74 -70
  104. package/dist/tempo/client/Methods.d.ts.map +1 -0
  105. package/dist/tempo/client/{MethodIntents.js → Methods.js} +3 -3
  106. package/dist/tempo/client/Methods.js.map +1 -0
  107. package/dist/tempo/client/Session.d.ts +49 -45
  108. package/dist/tempo/client/Session.d.ts.map +1 -1
  109. package/dist/tempo/client/Session.js +4 -4
  110. package/dist/tempo/client/Session.js.map +1 -1
  111. package/dist/tempo/client/SessionManager.d.ts +1 -1
  112. package/dist/tempo/client/SessionManager.d.ts.map +1 -1
  113. package/dist/tempo/client/SessionManager.js +10 -5
  114. package/dist/tempo/client/SessionManager.js.map +1 -1
  115. package/dist/tempo/client/index.d.ts +1 -1
  116. package/dist/tempo/client/index.d.ts.map +1 -1
  117. package/dist/tempo/client/index.js +1 -1
  118. package/dist/tempo/client/index.js.map +1 -1
  119. package/dist/tempo/index.d.ts +1 -1
  120. package/dist/tempo/index.d.ts.map +1 -1
  121. package/dist/tempo/index.js +1 -1
  122. package/dist/tempo/index.js.map +1 -1
  123. package/dist/tempo/internal/defaults.d.ts +1 -1
  124. package/dist/tempo/internal/defaults.js +1 -1
  125. package/dist/tempo/server/Charge.d.ts +27 -27
  126. package/dist/tempo/server/Charge.d.ts.map +1 -1
  127. package/dist/tempo/server/Charge.js +3 -3
  128. package/dist/tempo/server/Charge.js.map +1 -1
  129. package/dist/tempo/server/{MethodIntents.d.ts → Methods.d.ts} +73 -69
  130. package/dist/tempo/server/Methods.d.ts.map +1 -0
  131. package/dist/tempo/server/{MethodIntents.js → Methods.js} +4 -4
  132. package/dist/tempo/server/Methods.js.map +1 -0
  133. package/dist/tempo/server/Session.d.ts +51 -47
  134. package/dist/tempo/server/Session.d.ts.map +1 -1
  135. package/dist/tempo/server/Session.js +4 -4
  136. package/dist/tempo/server/Session.js.map +1 -1
  137. package/dist/tempo/server/index.d.ts +6 -0
  138. package/dist/tempo/server/index.d.ts.map +1 -0
  139. package/dist/tempo/server/index.js +6 -0
  140. package/dist/tempo/server/index.js.map +1 -0
  141. package/dist/tempo/server/internal/transport.d.ts.map +1 -1
  142. package/dist/tempo/server/internal/transport.js +2 -1
  143. package/dist/tempo/server/internal/transport.js.map +1 -1
  144. package/package.json +1 -1
  145. package/src/Challenge.test-d.ts +3 -3
  146. package/src/Challenge.test.ts +6 -6
  147. package/src/Challenge.ts +34 -34
  148. package/src/Errors.test.ts +75 -21
  149. package/src/Errors.ts +74 -9
  150. package/src/Method.test.ts +76 -0
  151. package/src/Method.ts +228 -0
  152. package/src/PaymentRequest.test.ts +4 -4
  153. package/src/PaymentRequest.ts +9 -9
  154. package/src/cli.test.ts +12 -22
  155. package/src/cli.ts +74 -21
  156. package/src/client/Methods.ts +2 -2
  157. package/src/client/Mppx.test-d.ts +6 -6
  158. package/src/client/Mppx.test.ts +26 -22
  159. package/src/client/Mppx.ts +29 -13
  160. package/src/client/Transport.test.ts +2 -2
  161. package/src/client/internal/Fetch.test.ts +35 -1
  162. package/src/client/internal/Fetch.ts +36 -27
  163. package/src/index.ts +1 -2
  164. package/src/mcp-sdk/client/McpClient.ts +11 -13
  165. package/src/middlewares/elysia.ts +1 -1
  166. package/src/middlewares/express.ts +1 -1
  167. package/src/middlewares/hono.ts +1 -1
  168. package/src/middlewares/internal/mppx.ts +10 -10
  169. package/src/middlewares/nextjs.ts +1 -1
  170. package/src/proxy/Service.ts +2 -2
  171. package/src/server/Methods.ts +2 -2
  172. package/src/server/Mppx.test-d.ts +27 -29
  173. package/src/server/Mppx.test.ts +23 -19
  174. package/src/server/Mppx.ts +43 -43
  175. package/src/server/Transport.test.ts +3 -3
  176. package/src/stripe/Charge.integration.test.ts +4 -1
  177. package/src/stripe/{Intents.test.ts → Methods.test.ts} +12 -12
  178. package/src/stripe/Methods.ts +45 -0
  179. package/src/stripe/client/Charge.test.ts +189 -0
  180. package/src/stripe/client/Charge.ts +40 -31
  181. package/src/stripe/client/{MethodIntents.ts → Methods.ts} +3 -3
  182. package/src/stripe/client/index.ts +1 -1
  183. package/src/stripe/index.ts +1 -1
  184. package/src/stripe/internal/types.ts +22 -0
  185. package/src/stripe/server/Charge.test.ts +241 -0
  186. package/src/stripe/server/Charge.ts +124 -38
  187. package/src/stripe/server/{MethodIntents.ts → Methods.ts} +2 -2
  188. package/src/stripe/server/index.ts +1 -1
  189. package/src/tempo/{Intents.test.ts → Methods.test.ts} +15 -15
  190. package/src/tempo/{Intents.ts → Methods.ts} +77 -22
  191. package/src/tempo/client/ChannelOps.ts +1 -1
  192. package/src/tempo/client/Charge.ts +3 -3
  193. package/src/tempo/client/{MethodIntents.ts → Methods.ts} +2 -2
  194. package/src/tempo/client/Session.ts +4 -4
  195. package/src/tempo/client/SessionManager.ts +11 -5
  196. package/src/tempo/client/index.ts +1 -1
  197. package/src/tempo/index.ts +1 -1
  198. package/src/tempo/internal/defaults.ts +1 -1
  199. package/src/tempo/server/Charge.ts +4 -7
  200. package/src/tempo/server/{MethodIntents.ts → Methods.ts} +3 -3
  201. package/src/tempo/server/Session.test.ts +4 -7
  202. package/src/tempo/server/Session.ts +6 -6
  203. package/src/tempo/server/index.ts +1 -1
  204. package/src/tempo/server/internal/transport.ts +3 -2
  205. package/dist/Intent.d.ts +0 -101
  206. package/dist/Intent.d.ts.map +0 -1
  207. package/dist/Intent.js +0 -83
  208. package/dist/Intent.js.map +0 -1
  209. package/dist/MethodIntent.d.ts +0 -225
  210. package/dist/MethodIntent.d.ts.map +0 -1
  211. package/dist/MethodIntent.js +0 -156
  212. package/dist/MethodIntent.js.map +0 -1
  213. package/dist/stripe/Intents.d.ts.map +0 -1
  214. package/dist/stripe/Intents.js +0 -27
  215. package/dist/stripe/Intents.js.map +0 -1
  216. package/dist/stripe/client/MethodIntents.d.ts.map +0 -1
  217. package/dist/stripe/client/MethodIntents.js.map +0 -1
  218. package/dist/stripe/server/MethodIntents.d.ts.map +0 -1
  219. package/dist/stripe/server/MethodIntents.js.map +0 -1
  220. package/dist/tempo/Intents.d.ts.map +0 -1
  221. package/dist/tempo/Intents.js +0 -81
  222. package/dist/tempo/Intents.js.map +0 -1
  223. package/dist/tempo/client/MethodIntents.d.ts.map +0 -1
  224. package/dist/tempo/client/MethodIntents.js.map +0 -1
  225. package/dist/tempo/server/MethodIntents.d.ts.map +0 -1
  226. package/dist/tempo/server/MethodIntents.js.map +0 -1
  227. package/src/Intent.test.ts +0 -180
  228. package/src/Intent.ts +0 -109
  229. package/src/MethodIntent.test.ts +0 -303
  230. package/src/MethodIntent.ts +0 -388
  231. package/src/stripe/Intents.ts +0 -27
@@ -1,156 +0,0 @@
1
- import * as Intent from './Intent.js';
2
- import * as z from './zod.js';
3
- /**
4
- * Creates a method-specific intent.
5
- *
6
- * @example
7
- * ```ts
8
- * import { z } from 'zod/mini'
9
- * import { MethodIntent } from 'mppx'
10
- *
11
- * const tempoCharge = MethodIntent.from({
12
- * method: 'tempo',
13
- * name: 'charge',
14
- * schema: {
15
- * credential: {
16
- * payload: z.object({
17
- * signature: z.string(),
18
- * type: z.literal('transaction'),
19
- * }),
20
- * },
21
- * request: z.object({
22
- * amount: z.string(),
23
- * currency: z.string(),
24
- * recipient: z.string(),
25
- * }),
26
- * },
27
- * })
28
- * ```
29
- */
30
- export function from(intent) {
31
- return intent;
32
- }
33
- /**
34
- * Creates a method-specific intent from a base intent.
35
- *
36
- * @example
37
- * ```ts
38
- * import { z } from 'zod/mini'
39
- * import { Intent, MethodIntent } from 'mppx'
40
- *
41
- * const tempoCharge = MethodIntent.fromIntent(Intent.charge, {
42
- * method: 'tempo',
43
- * schema: {
44
- * credential: {
45
- * payload: z.object({
46
- * signature: z.string(),
47
- * type: z.literal('transaction'),
48
- * }),
49
- * },
50
- * request: {
51
- * methodDetails: z.object({
52
- * chainId: z.number(),
53
- * }),
54
- * requires: ['recipient'],
55
- * },
56
- * },
57
- * })
58
- * ```
59
- */
60
- export function fromIntent(intent, options) {
61
- const { name } = intent;
62
- const { method, schema } = options;
63
- const requestShape = Intent.shapeOf(intent);
64
- const methodDetails = schema.request?.methodDetails;
65
- const requires = schema.request?.requires ?? [];
66
- const requestInputShape = {};
67
- for (const [key, field] of Object.entries(requestShape)) {
68
- if (requires.includes(key))
69
- requestInputShape[key] = z.unwrapOptional(field);
70
- else
71
- requestInputShape[key] = field;
72
- }
73
- const methodDetailsKeys = [];
74
- if (methodDetails)
75
- for (const [key, field] of Object.entries(methodDetails.shape)) {
76
- requestInputShape[key] = field;
77
- methodDetailsKeys.push(key);
78
- }
79
- const intentRequest = intent.schema.request;
80
- const hasPipe = !('shape' in intentRequest);
81
- const request = z.pipe(z.object(requestInputShape), z.transform((input) => {
82
- const transformed = hasPipe ? intentRequest.parse(input) : input;
83
- const result = {};
84
- const details = {};
85
- for (const [key, value] of Object.entries(transformed)) {
86
- result[key] = value;
87
- }
88
- for (const key of methodDetailsKeys) {
89
- const value = input[key];
90
- if (value !== undefined)
91
- details[key] = value;
92
- }
93
- if (Object.keys(details).length > 0)
94
- result.methodDetails = details;
95
- return result;
96
- }));
97
- return {
98
- method,
99
- name,
100
- schema: {
101
- credential: { payload: schema.credential.payload },
102
- request,
103
- },
104
- };
105
- }
106
- /**
107
- * Extends a method intent with client-side credential creation logic.
108
- *
109
- * @example
110
- * ```ts
111
- * import { MethodIntent } from 'mppx'
112
- * import { Intents } from 'mppx/tempo'
113
- *
114
- * const tempoCharge = MethodIntent.toClient(Intents.charge, {
115
- * async createCredential({ challenge }) {
116
- * return Credential.serialize({ challenge, payload: { ... } })
117
- * },
118
- * })
119
- * ```
120
- */
121
- export function toClient(intent, options) {
122
- const { context, createCredential } = options;
123
- return {
124
- ...intent,
125
- context,
126
- createCredential,
127
- };
128
- }
129
- /**
130
- * Extends a method intent with server-side verification logic.
131
- *
132
- * @example
133
- * ```ts
134
- * import { MethodIntent } from 'mppx'
135
- * import { Intents } from 'mppx/tempo'
136
- *
137
- * const tempoCharge = MethodIntent.toServer(Intents.charge, {
138
- * async verify({ credential }) {
139
- * // verification logic
140
- * return { status: 'success', ... }
141
- * },
142
- * })
143
- * ```
144
- */
145
- export function toServer(intent, options) {
146
- const { defaults, request, respond, transport, verify } = options;
147
- return {
148
- ...intent,
149
- defaults,
150
- request,
151
- respond,
152
- transport,
153
- verify,
154
- };
155
- }
156
- //# sourceMappingURL=MethodIntent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MethodIntent.js","sourceRoot":"","sources":["../src/MethodIntent.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Intents.d.ts","sourceRoot":"","sources":["../../src/stripe/Intents.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,CAAC,MAAM,WAAW,CAAA;AAE9B;;;;GAIG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBjB,CAAA"}
@@ -1,27 +0,0 @@
1
- import * as Intent from '../Intent.js';
2
- import * as MethodIntent from '../MethodIntent.js';
3
- import * as z from '../zod.js';
4
- /**
5
- * Stripe charge intent for one-time payments via Shared Payment Tokens (SPTs).
6
- *
7
- * @see https://github.com/tempoxyz/payment-auth-spec/blob/main/specs/methods/stripe/draft-stripe-charge-00.md
8
- */
9
- export const charge = MethodIntent.fromIntent(Intent.charge, {
10
- method: 'stripe',
11
- schema: {
12
- credential: {
13
- payload: z.object({
14
- spt: z.string(),
15
- externalId: z.optional(z.string()),
16
- }),
17
- },
18
- request: {
19
- methodDetails: z.object({
20
- networkId: z.string(),
21
- paymentMethodTypes: z.array(z.string()).check(z.minLength(1)),
22
- metadata: z.optional(z.record(z.string(), z.string())),
23
- }),
24
- },
25
- },
26
- });
27
- //# sourceMappingURL=Intents.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Intents.js","sourceRoot":"","sources":["../../src/stripe/Intents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,CAAC,MAAM,WAAW,CAAA;AAE9B;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE;IAC3D,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE;QACN,UAAU,EAAE;YACV,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;gBAChB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;gBACf,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACnC,CAAC;SACH;QACD,OAAO,EAAE;YACP,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC;gBACtB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;gBACrB,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC7D,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;aACvD,CAAC;SACH;KACF;CACF,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MethodIntents.d.ts","sourceRoot":"","sources":["../../../src/stripe/client/MethodIntents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,aAAa,CAAA;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAEnD;AAED,yBAAiB,MAAM,CAAC;IACtB,KAAY,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;IAE3C,6EAA6E;IACtE,MAAM,MAAM,gBAAU,CAAA;CAC9B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MethodIntents.js","sourceRoot":"","sources":["../../../src/stripe/client/MethodIntents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,aAAa,CAAA;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,MAAM,CAAC,UAA6B;IAClD,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAU,CAAA;AACvC,CAAC;AAED,WAAiB,MAAM;IAGrB,6EAA6E;IAChE,aAAM,GAAG,OAAO,CAAA;AAC/B,CAAC,EALgB,MAAM,KAAN,MAAM,QAKtB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MethodIntents.d.ts","sourceRoot":"","sources":["../../../src/stripe/server/MethodIntents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,aAAa,CAAA;AAE/C;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,KAAK,CAAC,UAAU,SAAS,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oDAExF;AAED,yBAAiB,MAAM,CAAC;IACtB,KAAY,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;IAE3C,sEAAsE;IAC/D,MAAM,MAAM,gBAAU,CAAA;CAC9B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MethodIntents.js","sourceRoot":"","sources":["../../../src/stripe/server/MethodIntents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,aAAa,CAAA;AAE/C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,MAAM,CAA6C,UAAsB;IACvF,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAU,CAAA;AAC7C,CAAC;AAED,WAAiB,MAAM;IAGrB,sEAAsE;IACzD,aAAM,GAAG,OAAO,CAAA;AAC/B,CAAC,EALgB,MAAM,KAAN,MAAM,QAKtB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Intents.d.ts","sourceRoot":"","sources":["../../src/tempo/Intents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,CAAC,MAAM,WAAW,CAAA;AAE9B;;;;GAIG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBjB,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmDlB,CAAA"}
@@ -1,81 +0,0 @@
1
- import * as Intent from '../Intent.js';
2
- import * as MethodIntent from '../MethodIntent.js';
3
- import * as z from '../zod.js';
4
- /**
5
- * Tempo charge intent for one-time TIP-20 token transfers.
6
- *
7
- * @see https://github.com/tempoxyz/payment-auth-spec/blob/main/specs/methods/tempo/draft-tempo-charge-00.md
8
- */
9
- export const charge = MethodIntent.fromIntent(Intent.charge, {
10
- method: 'tempo',
11
- schema: {
12
- credential: {
13
- payload: z.discriminatedUnion('type', [
14
- z.object({ hash: z.hash(), type: z.literal('hash') }),
15
- z.object({ signature: z.signature(), type: z.literal('transaction') }),
16
- ]),
17
- },
18
- request: {
19
- methodDetails: z.object({
20
- chainId: z.optional(z.number()),
21
- feePayer: z.optional(z.pipe(z.union([z.boolean(), z.custom()]), z.transform((v) => (typeof v === 'object' ? true : v)))),
22
- memo: z.optional(z.hash()),
23
- }),
24
- requires: ['decimals', 'recipient'],
25
- },
26
- },
27
- });
28
- /**
29
- * Tempo session intent for pay-as-you-go streaming payments.
30
- *
31
- * Uses cumulative vouchers over a payment channel. Credential payloads
32
- * are a discriminated union on `action`: open, topUp, voucher, close.
33
- */
34
- export const session = MethodIntent.fromIntent(Intent.session, {
35
- method: 'tempo',
36
- schema: {
37
- credential: {
38
- payload: z.discriminatedUnion('action', [
39
- z.object({
40
- action: z.literal('open'),
41
- type: z.literal('transaction'),
42
- channelId: z.hash(),
43
- transaction: z.signature(),
44
- authorizedSigner: z.optional(z.string()),
45
- cumulativeAmount: z.amount(),
46
- signature: z.signature(),
47
- }),
48
- z.object({
49
- action: z.literal('topUp'),
50
- type: z.literal('transaction'),
51
- channelId: z.hash(),
52
- transaction: z.signature(),
53
- additionalDeposit: z.amount(),
54
- }),
55
- z.object({
56
- action: z.literal('voucher'),
57
- channelId: z.hash(),
58
- cumulativeAmount: z.amount(),
59
- signature: z.signature(),
60
- }),
61
- z.object({
62
- action: z.literal('close'),
63
- channelId: z.hash(),
64
- cumulativeAmount: z.amount(),
65
- signature: z.signature(),
66
- }),
67
- ]),
68
- },
69
- request: {
70
- methodDetails: z.object({
71
- escrowContract: z.string(),
72
- channelId: z.optional(z.hash()),
73
- minVoucherDelta: z.optional(z.amount()),
74
- chainId: z.optional(z.number()),
75
- feePayer: z.optional(z.pipe(z.union([z.boolean(), z.custom()]), z.transform((v) => (typeof v === 'object' ? true : v)))),
76
- }),
77
- requires: ['decimals', 'recipient', 'currency'],
78
- },
79
- },
80
- });
81
- //# sourceMappingURL=Intents.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Intents.js","sourceRoot":"","sources":["../../src/tempo/Intents.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MethodIntents.d.ts","sourceRoot":"","sources":["../../../src/tempo/client/MethodIntents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAEhE;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,UAAU,GAAE,KAAK,CAAC,UAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAEtD;AAED,yBAAiB,KAAK,CAAC;IACrB,KAAY,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,cAAc,CAAC,UAAU,CAAA;IAEvE,yFAAyF;IAClF,MAAM,MAAM,gBAAU,CAAA;IAC7B,6EAA6E;IACtE,MAAM,OAAO,iBAAW,CAAA;CAChC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MethodIntents.js","sourceRoot":"","sources":["../../../src/tempo/client/MethodIntents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAEhE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,KAAK,CAAC,aAA+B,EAAE;IACrD,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAU,CAAA;AACnE,CAAC;AAED,WAAiB,KAAK;IAGpB,yFAAyF;IAC5E,YAAM,GAAG,OAAO,CAAA;IAC7B,6EAA6E;IAChE,aAAO,GAAG,QAAQ,CAAA;AACjC,CAAC,EAPgB,KAAK,KAAL,KAAK,QAOrB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MethodIntents.d.ts","sourceRoot":"","sources":["../../../src/tempo/server/MethodIntents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,cAAc,CAAA;AAErE;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,KAAK,CAAC,UAAU,SAAS,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8IAEvF;AAED,yBAAiB,KAAK,CAAC;IACrB,KAAY,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAA;IAEjE,kFAAkF;IAC3E,MAAM,MAAM,gBAAU,CAAA;IAC7B,uFAAuF;IAChF,MAAM,OAAO,iBAAW,CAAA;IAC/B,gFAAgF;IACzE,MAAM,MAAM,gBAAU,CAAA;CAC9B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MethodIntents.js","sourceRoot":"","sources":["../../../src/tempo/server/MethodIntents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,cAAc,CAAA;AAErE;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,KAAK,CAA4C,UAAuB;IACtF,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAU,CAAA;AACvE,CAAC;AAED,WAAiB,KAAK;IAGpB,kFAAkF;IACrE,YAAM,GAAG,OAAO,CAAA;IAC7B,uFAAuF;IAC1E,aAAO,GAAG,QAAQ,CAAA;IAC/B,gFAAgF;IACnE,YAAM,GAAG,OAAO,CAAA;AAC/B,CAAC,EATgB,KAAK,KAAL,KAAK,QASrB"}
@@ -1,180 +0,0 @@
1
- import { Intent } from 'mppx'
2
- import { describe, expect, test } from 'vitest'
3
-
4
- describe('charge', () => {
5
- test('behavior: validates valid request', () => {
6
- const result = Intent.charge.schema.request.parse({
7
- amount: '1000',
8
- currency: 'USD',
9
- decimals: 6,
10
- })
11
- expect(result.amount).toBe('1000000000')
12
- expect(result.currency).toBe('USD')
13
- expect(result.expires).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/)
14
- })
15
-
16
- test('behavior: validates with all optional fields', () => {
17
- expect(
18
- Intent.charge.schema.request.parse({
19
- amount: '1000',
20
- currency: 'USD',
21
- decimals: 6,
22
- description: 'Test payment',
23
- expires: '2030-01-01T00:00:00Z',
24
- externalId: 'order-123',
25
- recipient: '0x1234567890abcdef',
26
- }),
27
- ).toMatchInlineSnapshot(`
28
- {
29
- "amount": "1000000000",
30
- "currency": "USD",
31
- "description": "Test payment",
32
- "expires": "2030-01-01T00:00:00Z",
33
- "externalId": "order-123",
34
- "recipient": "0x1234567890abcdef",
35
- }
36
- `)
37
- })
38
-
39
- test('error: invalid amount (non-numeric)', () => {
40
- expect(() =>
41
- Intent.charge.schema.request.parse({
42
- amount: 'abc',
43
- currency: 'USD',
44
- }),
45
- ).toThrowErrorMatchingInlineSnapshot(`
46
- [$ZodError: [
47
- {
48
- "origin": "string",
49
- "code": "invalid_format",
50
- "format": "regex",
51
- "pattern": "/^\\\\d+(\\\\.\\\\d+)?$/",
52
- "path": [
53
- "amount"
54
- ],
55
- "message": "Invalid amount"
56
- },
57
- {
58
- "expected": "number",
59
- "code": "invalid_type",
60
- "path": [
61
- "decimals"
62
- ],
63
- "message": "Invalid input"
64
- }
65
- ]]
66
- `)
67
- })
68
-
69
- test('error: invalid amount (decimal)', () => {
70
- expect(() =>
71
- Intent.charge.schema.request.parse({
72
- amount: '100.50',
73
- currency: 'USD',
74
- }),
75
- ).toThrowErrorMatchingInlineSnapshot(`
76
- [$ZodError: [
77
- {
78
- "expected": "number",
79
- "code": "invalid_type",
80
- "path": [
81
- "decimals"
82
- ],
83
- "message": "Invalid input"
84
- }
85
- ]]
86
- `)
87
- })
88
-
89
- test('error: invalid expires (not ISO 8601)', () => {
90
- expect(() =>
91
- Intent.charge.schema.request.parse({
92
- amount: '1000',
93
- currency: 'USD',
94
- expires: 'not-a-date',
95
- }),
96
- ).toThrowErrorMatchingInlineSnapshot(`
97
- [$ZodError: [
98
- {
99
- "expected": "number",
100
- "code": "invalid_type",
101
- "path": [
102
- "decimals"
103
- ],
104
- "message": "Invalid input"
105
- },
106
- {
107
- "origin": "string",
108
- "code": "invalid_format",
109
- "format": "regex",
110
- "pattern": "/^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}(?:\\\\.\\\\d+)?(?:Z|[+-]\\\\d{2}:\\\\d{2})$/",
111
- "path": [
112
- "expires"
113
- ],
114
- "message": "Invalid ISO 8601 datetime"
115
- }
116
- ]]
117
- `)
118
- })
119
- })
120
-
121
- describe('session', () => {
122
- test('behavior: converts amount to base units', () => {
123
- const result = Intent.session.schema.request.parse({
124
- amount: '0.000025',
125
- unitType: 'llm_token',
126
- currency: '0x20c0000000000000000000000000000000000001',
127
- decimals: 6,
128
- recipient: '0x1234567890abcdef1234567890abcdef12345678',
129
- })
130
- expect(result.amount).toBe('25')
131
- expect(result.unitType).toBe('llm_token')
132
- expect(result.currency).toBe('0x20c0000000000000000000000000000000000001')
133
- expect(result).not.toHaveProperty('decimals')
134
- })
135
-
136
- test('behavior: converts suggestedDeposit to base units', () => {
137
- const result = Intent.session.schema.request.parse({
138
- amount: '0.000025',
139
- unitType: 'llm_token',
140
- currency: '0x20c0000000000000000000000000000000000001',
141
- decimals: 6,
142
- recipient: '0x1234567890abcdef1234567890abcdef12345678',
143
- suggestedDeposit: '10',
144
- })
145
- expect(result.amount).toBe('25')
146
- expect(result.suggestedDeposit).toBe('10000000')
147
- })
148
-
149
- test('behavior: works without suggestedDeposit', () => {
150
- const result = Intent.session.schema.request.parse({
151
- amount: '1',
152
- unitType: 'request',
153
- currency: '0x20c0000000000000000000000000000000000001',
154
- decimals: 6,
155
- })
156
- expect(result.amount).toBe('1000000')
157
- expect(result).not.toHaveProperty('suggestedDeposit')
158
- })
159
-
160
- test('error: rejects missing decimals', () => {
161
- expect(() =>
162
- Intent.session.schema.request.parse({
163
- amount: '25',
164
- unitType: 'llm_token',
165
- currency: '0x20c0000000000000000000000000000000000001',
166
- }),
167
- ).toThrow()
168
- })
169
-
170
- test('error: rejects invalid amount', () => {
171
- expect(() =>
172
- Intent.session.schema.request.parse({
173
- amount: 'abc',
174
- unitType: 'llm_token',
175
- currency: '0x20c0000000000000000000000000000000000001',
176
- decimals: 6,
177
- }),
178
- ).toThrow()
179
- })
180
- })
package/src/Intent.ts DELETED
@@ -1,109 +0,0 @@
1
- import { parseUnits } from 'viem'
2
- import * as Expires from './Expires.js'
3
- import * as z from './zod.js'
4
-
5
- /**
6
- * A payment intent.
7
- */
8
- export type Intent = {
9
- name: string
10
- schema: {
11
- request: z.z.ZodMiniObject | z.z.ZodMiniPipe<z.z.ZodMiniObject>
12
- }
13
- }
14
-
15
- /**
16
- * Creates an intent.
17
- *
18
- * @example
19
- * ```ts
20
- * import { z } from 'mppx'
21
- *
22
- * const charge = Intent.from({
23
- * name: 'charge',
24
- * schema: {
25
- * request: z.object({
26
- * amount: z.string(),
27
- * currency: z.string(),
28
- * recipient: z.optional(z.string()),
29
- * }),
30
- * },
31
- * })
32
- * ```
33
- */
34
- export function from<const intent extends Intent>(intent: intent): intent {
35
- return intent
36
- }
37
-
38
- /**
39
- * Charge intent for one-time immediate payments.
40
- *
41
- * @see https://github.com/tempoxyz/payment-auth-spec/blob/main/specs/intents/draft-payment-intent-charge-00.md
42
- */
43
- export const charge = from({
44
- name: 'charge',
45
- schema: {
46
- request: z.pipe(
47
- z.object({
48
- amount: z.amount(),
49
- currency: z.string(),
50
- decimals: z.number(),
51
- description: z.optional(z.string()),
52
- expires: z._default(z.datetime(), () => Expires.minutes(5)),
53
- externalId: z.optional(z.string()),
54
- recipient: z.optional(z.string()),
55
- }),
56
- // Note: Since the spec states we must have `amount` as a base unit, we
57
- // will transform the amount to decimal units based on `decimals`.
58
- z.transform(({ amount, decimals, ...rest }) => ({
59
- ...rest,
60
- amount: parseUnits(amount, decimals).toString(),
61
- })),
62
- ),
63
- },
64
- })
65
-
66
- /**
67
- * Session intent for pay-as-you-go streaming payments.
68
- *
69
- * Uses cumulative vouchers over a payment channel for
70
- * incremental micropayments without per-request transactions.
71
- */
72
- export const session = from({
73
- name: 'session',
74
- schema: {
75
- request: z.pipe(
76
- z.object({
77
- amount: z.amount(),
78
- unitType: z.string(),
79
- currency: z.string(),
80
- decimals: z.number(),
81
- recipient: z.optional(z.string()),
82
- suggestedDeposit: z.optional(z.amount()),
83
- }),
84
- z.transform(({ amount, decimals, suggestedDeposit, ...rest }) => ({
85
- ...rest,
86
- amount: parseUnits(amount, decimals).toString(),
87
- ...(suggestedDeposit
88
- ? { suggestedDeposit: parseUnits(suggestedDeposit, decimals).toString() }
89
- : {}),
90
- })),
91
- ),
92
- },
93
- })
94
-
95
- /** @internal Extracts shape from an intent's request schema, supporting both object and pipe. */
96
- export type ShapeOf<intent extends Intent> = intent['schema']['request'] extends z.z.ZodMiniObject
97
- ? intent['schema']['request']['shape']
98
- : intent['schema']['request'] extends z.z.ZodMiniPipe<infer A>
99
- ? A extends z.z.ZodMiniObject
100
- ? A['shape']
101
- : never
102
- : never
103
-
104
- /** @internal Extracts the inner object from a pipe or returns the schema directly. */
105
- export function shapeOf(intent: Intent): Record<string, z.z.ZodMiniType> {
106
- const { request } = intent.schema
107
- if ('shape' in request) return request.shape as Record<string, z.z.ZodMiniType>
108
- return (request as any)._zod.def.in.shape
109
- }