mppx 0.1.0 → 0.1.1
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.
- package/README.md +1 -1
- package/dist/Challenge.d.ts +2 -2
- package/dist/Challenge.d.ts.map +1 -1
- package/dist/Challenge.js +1 -1
- package/dist/Challenge.js.map +1 -1
- package/dist/client/Mppx.d.ts +5 -0
- package/dist/client/Mppx.d.ts.map +1 -1
- package/dist/client/Mppx.js +7 -2
- package/dist/client/Mppx.js.map +1 -1
- package/dist/client/internal/Fetch.d.ts +3 -1
- package/dist/client/internal/Fetch.d.ts.map +1 -1
- package/dist/client/internal/Fetch.js +6 -2
- package/dist/client/internal/Fetch.js.map +1 -1
- package/dist/stripe/client/Charge.d.ts +11 -20
- package/dist/stripe/client/Charge.d.ts.map +1 -1
- package/dist/stripe/client/Charge.js +9 -12
- package/dist/stripe/client/Charge.js.map +1 -1
- package/dist/stripe/client/MethodIntents.d.ts +1 -1
- package/dist/stripe/client/MethodIntents.js +1 -1
- package/dist/tempo/client/SessionManager.d.ts.map +1 -1
- package/dist/tempo/client/SessionManager.js +9 -4
- package/dist/tempo/client/SessionManager.js.map +1 -1
- package/dist/tempo/internal/defaults.d.ts +1 -1
- package/dist/tempo/internal/defaults.js +1 -1
- package/dist/tempo/server/internal/transport.d.ts.map +1 -1
- package/dist/tempo/server/internal/transport.js +2 -1
- package/dist/tempo/server/internal/transport.js.map +1 -1
- package/package.json +1 -1
- package/src/Challenge.ts +2 -2
- package/src/client/Mppx.ts +19 -3
- package/src/client/internal/Fetch.test.ts +35 -1
- package/src/client/internal/Fetch.ts +15 -3
- package/src/stripe/Charge.integration.test.ts +4 -1
- package/src/stripe/client/Charge.ts +19 -23
- package/src/stripe/client/MethodIntents.ts +1 -1
- package/src/tempo/client/SessionManager.ts +10 -4
- package/src/tempo/internal/defaults.ts +1 -1
- package/src/tempo/server/internal/transport.ts +3 -2
package/README.md
CHANGED
|
@@ -25,7 +25,7 @@ import { Mppx, tempo } from 'mppx/server'
|
|
|
25
25
|
const mppx = Mppx.create({
|
|
26
26
|
methods: [
|
|
27
27
|
tempo({
|
|
28
|
-
currency: '
|
|
28
|
+
currency: '0x20c0000000000000000000000000000000000000',
|
|
29
29
|
recipient: '0x742d35Cc6634c0532925a3b844bC9e7595F8fE00',
|
|
30
30
|
}),
|
|
31
31
|
],
|
package/dist/Challenge.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export declare const Schema: z.ZodMiniObject<{
|
|
|
21
21
|
expires: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
22
22
|
/** Unique challenge identifier (HMAC-bound). */
|
|
23
23
|
id: z.ZodMiniString<string>;
|
|
24
|
-
/** Intent type (e.g., "charge", "
|
|
24
|
+
/** Intent type (e.g., "charge", "session"). */
|
|
25
25
|
intent: z.ZodMiniString<string>;
|
|
26
26
|
/** Payment method (e.g., "tempo", "stripe"). */
|
|
27
27
|
method: z.ZodMiniString<string>;
|
|
@@ -111,7 +111,7 @@ export declare namespace from {
|
|
|
111
111
|
digest?: string | undefined;
|
|
112
112
|
/** Optional expiration timestamp (ISO 8601). */
|
|
113
113
|
expires?: string | undefined;
|
|
114
|
-
/** Intent type (e.g., "charge", "
|
|
114
|
+
/** Intent type (e.g., "charge", "session"). */
|
|
115
115
|
intent: string;
|
|
116
116
|
/** Payment method (e.g., "tempo", "stripe"). */
|
|
117
117
|
method: string;
|
package/dist/Challenge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Challenge.d.ts","sourceRoot":"","sources":["../src/Challenge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAE7B;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM;IACjB,0DAA0D;;IAE1D,0EAA0E;;IAE1E,gDAAgD;;IAEhD,gDAAgD;;IAEhD
|
|
1
|
+
{"version":3,"file":"Challenge.d.ts","sourceRoot":"","sources":["../src/Challenge.ts"],"names":[],"mappings":"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"}
|
package/dist/Challenge.js
CHANGED
|
@@ -20,7 +20,7 @@ export const Schema = z.object({
|
|
|
20
20
|
expires: z.optional(z.datetime()),
|
|
21
21
|
/** Unique challenge identifier (HMAC-bound). */
|
|
22
22
|
id: z.string(),
|
|
23
|
-
/** Intent type (e.g., "charge", "
|
|
23
|
+
/** Intent type (e.g., "charge", "session"). */
|
|
24
24
|
intent: z.string(),
|
|
25
25
|
/** Payment method (e.g., "tempo", "stripe"). */
|
|
26
26
|
method: z.string(),
|
package/dist/Challenge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Challenge.js","sourceRoot":"","sources":["../src/Challenge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAA;AAGxC,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAA;AACrD,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAE7B;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,0DAA0D;IAC1D,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACnC,0EAA0E;IAC1E,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC,CAAC;IACnF,gDAAgD;IAChD,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACjC,gDAAgD;IAChD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd
|
|
1
|
+
{"version":3,"file":"Challenge.js","sourceRoot":"","sources":["../src/Challenge.ts"],"names":[],"mappings":"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"}
|
package/dist/client/Mppx.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type * as Challenge from '../Challenge.js';
|
|
1
2
|
import type * as MethodIntent from '../MethodIntent.js';
|
|
2
3
|
import type * as z from '../zod.js';
|
|
3
4
|
import * as Fetch from './internal/Fetch.js';
|
|
@@ -57,6 +58,10 @@ export declare namespace create {
|
|
|
57
58
|
type Config<methods extends Methods = Methods, transport extends Transport.Transport = Transport.Transport> = {
|
|
58
59
|
/** Custom fetch function to wrap. Defaults to `globalThis.fetch`. */
|
|
59
60
|
fetch?: typeof globalThis.fetch;
|
|
61
|
+
/** Called when a 402 challenge is received, before credential creation. */
|
|
62
|
+
onChallenge?: ((challenge: Challenge.Challenge, helpers: {
|
|
63
|
+
createCredential: (context?: AnyContextFor<FlattenMethods<methods>>) => Promise<string>;
|
|
64
|
+
}) => Promise<string | undefined>) | undefined;
|
|
60
65
|
/** Array of method intents to use. Accepts individual clients or tuples (e.g. from `tempo()`). */
|
|
61
66
|
methods: methods;
|
|
62
67
|
/** Whether to polyfill `globalThis.fetch` with the payment-aware wrapper. @default true */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mppx.d.ts","sourceRoot":"","sources":["../../src/client/Mppx.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Mppx.d.ts","sourceRoot":"","sources":["../../src/client/Mppx.ts"],"names":[],"mappings":"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"}
|
package/dist/client/Mppx.js
CHANGED
|
@@ -22,9 +22,14 @@ import * as Transport from './Transport.js';
|
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
24
|
export function create(config) {
|
|
25
|
-
const { polyfill = true, transport = Transport.http() } = config;
|
|
25
|
+
const { onChallenge, polyfill = true, transport = Transport.http() } = config;
|
|
26
26
|
const methods = config.methods.flat();
|
|
27
|
-
const
|
|
27
|
+
const resolvedOnChallenge = onChallenge;
|
|
28
|
+
const config_fetch = {
|
|
29
|
+
...(config.fetch && { fetch: config.fetch }),
|
|
30
|
+
...(resolvedOnChallenge && { onChallenge: resolvedOnChallenge }),
|
|
31
|
+
methods,
|
|
32
|
+
};
|
|
28
33
|
const fetch = Fetch.from(config_fetch);
|
|
29
34
|
if (polyfill)
|
|
30
35
|
Fetch.polyfill(config_fetch);
|
package/dist/client/Mppx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Mppx.js","sourceRoot":"","sources":["../../src/client/Mppx.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAA;AAC5C,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAwB3C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,MAAM,CAMpB,MAAyC;IACzC,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC,IAAI,EAAe,EAAE,GAAG,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"Mppx.js","sourceRoot":"","sources":["../../src/client/Mppx.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAA;AAC5C,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAwB3C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,MAAM,CAMpB,MAAyC;IACzC,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC,IAAI,EAAe,EAAE,GAAG,MAAM,CAAA;IAE1F,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAwC,CAAA;IAE3E,MAAM,mBAAmB,GAAG,WAEZ,CAAA;IAChB,MAAM,YAAY,GAAG;QACnB,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAC5C,GAAG,CAAC,mBAAmB,IAAI,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;QAChE,OAAO;KAC6C,CAAA;IACtD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAA0B,YAAY,CAAC,CAAA;IAE/D,IAAI,QAAQ;QAAE,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;IAC1C,OAAO;QACL,KAAK;QACL,OAAO;QACP,SAAS;QACT,KAAK,CAAC,gBAAgB,CAAC,QAAyC,EAAE,OAAiB;YACjF,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,QAAiB,CAAwB,CAAA;YAElF,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,CAAC,CAAA;YAC5F,IAAI,CAAC,EAAE;gBACL,MAAM,IAAI,KAAK,CACb,+BAA+B,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,iBAAiB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7I,CAAA;YAEH,MAAM,aAAa,GACjB,EAAE,CAAC,OAAO,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAE7E,OAAO,EAAE,CAAC,gBAAgB,CACxB,aAAa,KAAK,SAAS;gBACzB,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE;gBACvC,CAAC,CAAE,EAAE,SAAS,EAAY,CAC7B,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,OAAO;IACrB,KAAK,CAAC,OAAO,EAAE,CAAA;AACjB,CAAC"}
|
|
@@ -34,7 +34,9 @@ export declare namespace from {
|
|
|
34
34
|
/** Array of method intents to use. */
|
|
35
35
|
methods: methods;
|
|
36
36
|
/** Called when a 402 challenge is received, before credential creation. */
|
|
37
|
-
onChallenge?: ((challenge: Challenge.Challenge
|
|
37
|
+
onChallenge?: ((challenge: Challenge.Challenge, helpers: {
|
|
38
|
+
createCredential: (context?: AnyContextFor<methods>) => Promise<string>;
|
|
39
|
+
}) => Promise<string | undefined>) | undefined;
|
|
38
40
|
};
|
|
39
41
|
type Fetch<methods extends readonly MethodIntent.AnyClient[] = readonly MethodIntent.AnyClient[]> = (input: RequestInfo | URL, init?: RequestInit<methods>) => Promise<Response>;
|
|
40
42
|
type RequestInit<methods extends readonly MethodIntent.AnyClient[] = readonly MethodIntent.AnyClient[]> = globalThis.RequestInit & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fetch.d.ts","sourceRoot":"","sources":["../../../src/client/internal/Fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,KAAK,YAAY,MAAM,uBAAuB,CAAA;AAC1D,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAA;AAItC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,IAAI,CAAC,KAAK,CAAC,OAAO,SAAS,SAAS,YAAY,CAAC,SAAS,EAAE,EAC1E,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"Fetch.d.ts","sourceRoot":"","sources":["../../../src/client/internal/Fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAA;AAC/C,OAAO,KAAK,KAAK,YAAY,MAAM,uBAAuB,CAAA;AAC1D,OAAO,KAAK,KAAK,CAAC,MAAM,cAAc,CAAA;AAItC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,IAAI,CAAC,KAAK,CAAC,OAAO,SAAS,SAAS,YAAY,CAAC,SAAS,EAAE,EAC1E,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAiCrB;AAED,6EAA6E;AAC7E,KAAK,aAAa,CAAC,OAAO,SAAS,SAAS,YAAY,CAAC,SAAS,EAAE,IAAI;KACrE,CAAC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,aAAa,CAAC,GAClF,aAAa,SAAS,CAAC,CAAC,WAAW,GACjC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,GACtB,SAAS,GACX,SAAS;CACd,CAAC,MAAM,CAAC,CAAA;AAET,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,KAAK,MAAM,CACT,OAAO,SAAS,SAAS,YAAY,CAAC,SAAS,EAAE,GAAG,SAAS,YAAY,CAAC,SAAS,EAAE,IACnF;QACF,qEAAqE;QACrE,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;QAC/B,sCAAsC;QACtC,OAAO,EAAE,OAAO,CAAA;QAChB,2EAA2E;QAC3E,WAAW,CAAC,EACR,CAAC,CACC,SAAS,EAAE,SAAS,CAAC,SAAS,EAC9B,OAAO,EAAE;YACP,gBAAgB,EAAE,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;SACxE,KACE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,GACjC,SAAS,CAAA;KACd,CAAA;IAED,KAAK,KAAK,CACR,OAAO,SAAS,SAAS,YAAY,CAAC,SAAS,EAAE,GAAG,SAAS,YAAY,CAAC,SAAS,EAAE,IACnF,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IAEhF,KAAK,WAAW,CACd,OAAO,SAAS,SAAS,YAAY,CAAC,SAAS,EAAE,GAAG,SAAS,YAAY,CAAC,SAAS,EAAE,IACnF,UAAU,CAAC,WAAW,GAAG;QAC3B,+DAA+D;QAC/D,OAAO,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;KACjC,CAAA;CACF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,QAAQ,CAAC,KAAK,CAAC,OAAO,SAAS,SAAS,YAAY,CAAC,SAAS,EAAE,EAC9E,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,GAC/B,IAAI,CAGN;AAED,MAAM,CAAC,OAAO,WAAW,QAAQ,CAAC;IAChC,KAAK,MAAM,CACT,OAAO,SAAS,SAAS,YAAY,CAAC,SAAS,EAAE,GAAG,SAAS,YAAY,CAAC,SAAS,EAAE,IACnF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;CACzB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAK9B"}
|
|
@@ -29,11 +29,15 @@ export function from(config) {
|
|
|
29
29
|
if (response.status !== 402)
|
|
30
30
|
return response;
|
|
31
31
|
const challenge = Challenge.fromResponse(response);
|
|
32
|
-
onChallenge?.(challenge);
|
|
33
32
|
const mi = methods.find((m) => m.method === challenge.method && m.name === challenge.intent);
|
|
34
33
|
if (!mi)
|
|
35
34
|
throw new Error(`No method intent found for "${challenge.method}.${challenge.intent}". Available: ${methods.map((m) => `${m.method}.${m.name}`).join(', ')}`);
|
|
36
|
-
const
|
|
35
|
+
const onChallengeCredential = onChallenge
|
|
36
|
+
? await onChallenge(challenge, {
|
|
37
|
+
createCredential: async (overrideContext) => resolveCredential(challenge, mi, overrideContext ?? context),
|
|
38
|
+
})
|
|
39
|
+
: undefined;
|
|
40
|
+
const credential = onChallengeCredential ?? (await resolveCredential(challenge, mi, context));
|
|
37
41
|
return fetch(input, {
|
|
38
42
|
...fetchInit,
|
|
39
43
|
headers: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fetch.js","sourceRoot":"","sources":["../../../src/client/internal/Fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAA;AAI/C,IAAI,aAAkD,CAAA;AAEtD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,IAAI,CAClB,MAA4B;IAE5B,MAAM,EAAE,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAA;IAEjE,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI,IAAI,EAAE,CAAA;QAC5C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QAE9C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,QAAQ,CAAA;QAE5C,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"Fetch.js","sourceRoot":"","sources":["../../../src/client/internal/Fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAA;AAI/C,IAAI,aAAkD,CAAA;AAEtD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,IAAI,CAClB,MAA4B;IAE5B,MAAM,EAAE,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAAA;IAEjE,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI,IAAI,EAAE,CAAA;QAC5C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QAE9C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,QAAQ,CAAA;QAE5C,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;QAElD,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,CAAC,CAAA;QAC5F,IAAI,CAAC,EAAE;YACL,MAAM,IAAI,KAAK,CACb,+BAA+B,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,iBAAiB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7I,CAAA;QAEH,MAAM,qBAAqB,GAAG,WAAW;YACvC,CAAC,CAAC,MAAM,WAAW,CAAC,SAAS,EAAE;gBAC3B,gBAAgB,EAAE,KAAK,EAAE,eAAwC,EAAE,EAAE,CACnE,iBAAiB,CAAC,SAAS,EAAE,EAAE,EAAE,eAAe,IAAI,OAAO,CAAC;aAC/D,CAAC;YACJ,CAAC,CAAC,SAAS,CAAA;QACb,MAAM,UAAU,GAAG,qBAAqB,IAAI,CAAC,MAAM,iBAAiB,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;QAE7F,OAAO,KAAK,CAAC,KAAK,EAAE;YAClB,GAAG,SAAS;YACZ,OAAO,EAAE;gBACP,GAAG,SAAS,CAAC,OAAO;gBACpB,aAAa,EAAE,UAAU;aAC1B;SACF,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC;AA0CD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,QAAQ,CACtB,MAAgC;IAEhC,aAAa,GAAG,UAAU,CAAC,KAAK,CAAA;IAChC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAA4B,CAAA;AAC5D,CAAC;AAQD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,OAAO;IACrB,IAAI,aAAa,EAAE,CAAC;QAClB,UAAU,CAAC,KAAK,GAAG,aAAa,CAAA;QAChC,aAAa,GAAG,SAAS,CAAA;IAC3B,CAAC;AACH,CAAC;AAED,gBAAgB;AAChB,KAAK,UAAU,iBAAiB,CAC9B,SAA8B,EAC9B,EAA0B,EAC1B,OAAgB;IAEhB,MAAM,aAAa,GAAG,EAAE,CAAC,OAAO,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACjG,OAAO,EAAE,CAAC,gBAAgB,CACxB,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,CAAE,EAAE,SAAS,EAAY,CAC/F,CAAA;AACH,CAAC"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import type * as Challenge from '../../Challenge.js';
|
|
1
2
|
import * as MethodIntent from '../../MethodIntent.js';
|
|
2
3
|
import * as z from '../../zod.js';
|
|
4
|
+
import * as Intents from '../Intents.js';
|
|
3
5
|
/**
|
|
4
6
|
* Creates a Stripe charge method intent for usage on the client.
|
|
5
7
|
*
|
|
6
|
-
* Accepts a `
|
|
7
|
-
* a secret key, so typically proxied through a server endpoint)
|
|
8
|
+
* Accepts a `createToken` callback that handles SPT creation (requires
|
|
9
|
+
* a secret key, so typically proxied through a server endpoint) and
|
|
10
|
+
* returns a credential for retrying the request.
|
|
8
11
|
*
|
|
9
12
|
* The `paymentMethod` (e.g. from Stripe Elements) can be provided at
|
|
10
13
|
* initialization or at credential-creation time via `context`.
|
|
@@ -14,7 +17,7 @@ import * as z from '../../zod.js';
|
|
|
14
17
|
* import { stripe } from 'mppx/client'
|
|
15
18
|
*
|
|
16
19
|
* const charge = stripe.charge({
|
|
17
|
-
*
|
|
20
|
+
* createToken: async ({ amount, currency, expiresAt, metadata, networkId, paymentMethod }) => {
|
|
18
21
|
* const res = await fetch('/api/create-spt', {
|
|
19
22
|
* method: 'POST',
|
|
20
23
|
* headers: { 'Content-Type': 'application/json' },
|
|
@@ -24,12 +27,6 @@ import * as z from '../../zod.js';
|
|
|
24
27
|
* return spt
|
|
25
28
|
* },
|
|
26
29
|
* })
|
|
27
|
-
*
|
|
28
|
-
* // paymentMethod comes from Stripe Elements at credential-creation time
|
|
29
|
-
* const credential = await charge.createCredential({
|
|
30
|
-
* challenge,
|
|
31
|
-
* context: { paymentMethod: 'pm_xxx' },
|
|
32
|
-
* })
|
|
33
30
|
* ```
|
|
34
31
|
*/
|
|
35
32
|
export declare function charge(parameters: charge.Parameters): MethodIntent.Client<MethodIntent.MethodIntent<{
|
|
@@ -82,23 +79,17 @@ export declare function charge(parameters: charge.Parameters): MethodIntent.Clie
|
|
|
82
79
|
}, z.core.$strip>>;
|
|
83
80
|
export declare namespace charge {
|
|
84
81
|
type Parameters = {
|
|
85
|
-
/**
|
|
86
|
-
|
|
87
|
-
*
|
|
88
|
-
* SPT creation requires a Stripe secret key, so this typically
|
|
89
|
-
* proxies through a server endpoint (e.g. `POST /api/create-spt`).
|
|
90
|
-
* If you are running a client in an enviroment with a secret key, you can just create the
|
|
91
|
-
* SPT directly in this callback.
|
|
92
|
-
*/
|
|
93
|
-
createSpt: (parameters: CreateSptParameters) => Promise<string>;
|
|
82
|
+
/** Called when a Stripe challenge is received. Create an SPT to retry. */
|
|
83
|
+
createToken: (parameters: OnChallengeParameters) => Promise<string>;
|
|
94
84
|
/** Optional client-side external reference ID for the credential payload. */
|
|
95
85
|
externalId?: string | undefined;
|
|
96
86
|
/** Default payment method ID. Overridden by `context.paymentMethod`. */
|
|
97
87
|
paymentMethod?: string | undefined;
|
|
98
88
|
};
|
|
99
|
-
type
|
|
89
|
+
type OnChallengeParameters = {
|
|
90
|
+
challenge: Challenge.Challenge<z.output<typeof Intents.charge.schema.request>, typeof Intents.charge.name, typeof Intents.charge.method>;
|
|
100
91
|
/** Stripe payment method ID (e.g. from Stripe Elements). */
|
|
101
|
-
paymentMethod
|
|
92
|
+
paymentMethod?: string | undefined;
|
|
102
93
|
/** Payment amount (in smallest currency unit). */
|
|
103
94
|
amount: string;
|
|
104
95
|
/** Three-letter ISO currency code. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Charge.d.ts","sourceRoot":"","sources":["../../../src/stripe/client/Charge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Charge.d.ts","sourceRoot":"","sources":["../../../src/stripe/client/Charge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,SAAS,MAAM,oBAAoB,CAAA;AAEpD,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AACjC,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAkDnD;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,KAAK,UAAU,GAAG;QAChB,0EAA0E;QAC1E,WAAW,EAAE,CAAC,UAAU,EAAE,qBAAqB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;QACnE,6EAA6E;QAC7E,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC/B,wEAAwE;QACxE,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KACnC,CAAA;IAED,KAAK,qBAAqB,GAAG;QAC3B,SAAS,EAAE,SAAS,CAAC,SAAS,CAC5B,CAAC,CAAC,MAAM,CAAC,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAC9C,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,EAC1B,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAC7B,CAAA;QACD,4DAA4D;QAC5D,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAClC,kDAAkD;QAClD,MAAM,EAAE,MAAM,CAAA;QACd,sCAAsC;QACtC,QAAQ,EAAE,MAAM,CAAA;QAChB,0CAA0C;QAC1C,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;QAC7B,oDAAoD;QACpD,SAAS,EAAE,MAAM,CAAA;QACjB,mDAAmD;QACnD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;KAC9C,CAAA;CACF"}
|
|
@@ -5,8 +5,9 @@ import * as Intents from '../Intents.js';
|
|
|
5
5
|
/**
|
|
6
6
|
* Creates a Stripe charge method intent for usage on the client.
|
|
7
7
|
*
|
|
8
|
-
* Accepts a `
|
|
9
|
-
* a secret key, so typically proxied through a server endpoint)
|
|
8
|
+
* Accepts a `createToken` callback that handles SPT creation (requires
|
|
9
|
+
* a secret key, so typically proxied through a server endpoint) and
|
|
10
|
+
* returns a credential for retrying the request.
|
|
10
11
|
*
|
|
11
12
|
* The `paymentMethod` (e.g. from Stripe Elements) can be provided at
|
|
12
13
|
* initialization or at credential-creation time via `context`.
|
|
@@ -16,7 +17,7 @@ import * as Intents from '../Intents.js';
|
|
|
16
17
|
* import { stripe } from 'mppx/client'
|
|
17
18
|
*
|
|
18
19
|
* const charge = stripe.charge({
|
|
19
|
-
*
|
|
20
|
+
* createToken: async ({ amount, currency, expiresAt, metadata, networkId, paymentMethod }) => {
|
|
20
21
|
* const res = await fetch('/api/create-spt', {
|
|
21
22
|
* method: 'POST',
|
|
22
23
|
* headers: { 'Content-Type': 'application/json' },
|
|
@@ -26,24 +27,19 @@ import * as Intents from '../Intents.js';
|
|
|
26
27
|
* return spt
|
|
27
28
|
* },
|
|
28
29
|
* })
|
|
29
|
-
*
|
|
30
|
-
* // paymentMethod comes from Stripe Elements at credential-creation time
|
|
31
|
-
* const credential = await charge.createCredential({
|
|
32
|
-
* challenge,
|
|
33
|
-
* context: { paymentMethod: 'pm_xxx' },
|
|
34
|
-
* })
|
|
35
30
|
* ```
|
|
36
31
|
*/
|
|
37
32
|
export function charge(parameters) {
|
|
38
|
-
const {
|
|
33
|
+
const { createToken, externalId, paymentMethod: defaultPaymentMethod } = parameters;
|
|
39
34
|
return MethodIntent.toClient(Intents.charge, {
|
|
40
35
|
context: z.object({
|
|
41
36
|
paymentMethod: z.optional(z.string()),
|
|
42
37
|
}),
|
|
43
38
|
async createCredential({ challenge, context }) {
|
|
44
39
|
const paymentMethod = context?.paymentMethod ?? defaultPaymentMethod;
|
|
45
|
-
if (!paymentMethod)
|
|
40
|
+
if (!paymentMethod) {
|
|
46
41
|
throw new Error('paymentMethod is required (pass via context or parameters)');
|
|
42
|
+
}
|
|
47
43
|
const amount = challenge.request.amount;
|
|
48
44
|
const currency = challenge.request.currency;
|
|
49
45
|
const networkId = challenge.request.methodDetails?.networkId;
|
|
@@ -56,7 +52,8 @@ export function charge(parameters) {
|
|
|
56
52
|
const expiresAt = challenge.request.expires
|
|
57
53
|
? Math.floor(new Date(challenge.request.expires).getTime() / 1000)
|
|
58
54
|
: Math.floor(Date.now() / 1000) + 3600;
|
|
59
|
-
const spt = await
|
|
55
|
+
const spt = await createToken({
|
|
56
|
+
challenge,
|
|
60
57
|
paymentMethod,
|
|
61
58
|
amount,
|
|
62
59
|
currency,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Charge.js","sourceRoot":"","sources":["../../../src/stripe/client/Charge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Charge.js","sourceRoot":"","sources":["../../../src/stripe/client/Charge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,UAAU,MAAM,qBAAqB,CAAA;AACjD,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AACjC,OAAO,KAAK,OAAO,MAAM,eAAe,CAAA;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,MAAM,CAAC,UAA6B;IAClD,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,oBAAoB,EAAE,GAAG,UAAU,CAAA;IAEnF,OAAO,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE;QAC3C,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;YAChB,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACtC,CAAC;QAEF,KAAK,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE;YAC3C,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,oBAAoB,CAAA;YACpE,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;YAC/E,CAAC;YAED,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,MAAgB,CAAA;YACjD,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,QAAkB,CAAA;YACrD,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,SAA+B,CAAA;YAClF,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAA;YACnF,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,QAErC,CAAA;YACb,IAAI,QAAQ,EAAE,UAAU,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAA;YACH,CAAC;YAED,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO;gBACzC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAiB,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;gBAC5E,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;YAExC,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC;gBAC5B,SAAS;gBACT,aAAa;gBACb,MAAM;gBACN,QAAQ;gBACR,SAAS;gBACT,SAAS;gBACT,QAAQ;aACT,CAAC,CAAA;YAEF,OAAO,UAAU,CAAC,SAAS,CAAC;gBAC1B,SAAS;gBACT,OAAO,EAAE;oBACP,GAAG;oBACH,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACtC;aACF,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -9,7 +9,7 @@ import { charge as charge_ } from './Charge.js';
|
|
|
9
9
|
* const mppx = Mppx.create({
|
|
10
10
|
* methods: [
|
|
11
11
|
* stripe({
|
|
12
|
-
*
|
|
12
|
+
* createToken: async (params) => {
|
|
13
13
|
* const res = await fetch('/api/create-spt', {
|
|
14
14
|
* method: 'POST',
|
|
15
15
|
* headers: { 'Content-Type': 'application/json' },
|
|
@@ -9,7 +9,7 @@ import { charge as charge_ } from './Charge.js';
|
|
|
9
9
|
* const mppx = Mppx.create({
|
|
10
10
|
* methods: [
|
|
11
11
|
* stripe({
|
|
12
|
-
*
|
|
12
|
+
* createToken: async (params) => {
|
|
13
13
|
* const res = await fetch('/api/create-spt', {
|
|
14
14
|
* method: 'POST',
|
|
15
15
|
* headers: { 'Content-Type': 'application/json' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionManager.d.ts","sourceRoot":"","sources":["../../../src/tempo/client/SessionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,IAAI,CAAA;AAC7B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,KAAK,SAAS,MAAM,oBAAoB,CAAA;AAEpD,OAAO,KAAK,KAAK,OAAO,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAGnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAIvD,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IAExB,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC7E,GAAG,CACD,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,GAAG;QACnB,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;QAC1D,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;KACjC,GACA,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IACjC,KAAK,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAA;CAC5C,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG;IACvC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAA;IAC7B,SAAS,EAAE,SAAS,CAAC,SAAS,GAAG,IAAI,CAAA;IACrC,SAAS,EAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC,UAAU,GAAG,cAAc,
|
|
1
|
+
{"version":3,"file":"SessionManager.d.ts","sourceRoot":"","sources":["../../../src/tempo/client/SessionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,IAAI,CAAA;AAC7B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,KAAK,SAAS,MAAM,oBAAoB,CAAA;AAEpD,OAAO,KAAK,KAAK,OAAO,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,KAAK,MAAM,MAAM,sBAAsB,CAAA;AAGnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAIvD,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IAExB,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;IAC7E,GAAG,CACD,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,GAAG;QACnB,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;QAC1D,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;KACjC,GACA,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IACjC,KAAK,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAA;CAC5C,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG;IACvC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAA;IAC7B,SAAS,EAAE,SAAS,CAAC,SAAS,GAAG,IAAI,CAAA;IACrC,SAAS,EAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,cAAc,CAAC,UAAU,GAAG,cAAc,CA2MpF;AAED,MAAM,CAAC,OAAO,WAAW,cAAc,CAAC;IACtC,KAAK,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,GAC9C,MAAM,CAAC,WAAW,CAAC,UAAU,GAAG;QAC9B,4EAA4E;QAC5E,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QACtC,qEAAqE;QACrE,MAAM,CAAC,EAAE,OAAO,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1C,iFAAiF;QACjF,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC7B,+BAA+B;QAC/B,cAAc,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QACpC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,GAAG,SAAS,CAAA;QAC3C,kHAAkH;QAClH,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAChC,CAAA;CACJ"}
|
|
@@ -40,8 +40,9 @@ export function sessionManager(parameters) {
|
|
|
40
40
|
const wrappedFetch = Fetch.from({
|
|
41
41
|
fetch: fetchFn,
|
|
42
42
|
methods: [method],
|
|
43
|
-
onChallenge(
|
|
44
|
-
lastChallenge =
|
|
43
|
+
onChallenge: async (challenge, _helpers) => {
|
|
44
|
+
lastChallenge = challenge;
|
|
45
|
+
return undefined;
|
|
45
46
|
},
|
|
46
47
|
});
|
|
47
48
|
function toPaymentResponse(response) {
|
|
@@ -103,8 +104,12 @@ export function sessionManager(parameters) {
|
|
|
103
104
|
...fetchInit.headers,
|
|
104
105
|
Accept: 'text/event-stream',
|
|
105
106
|
},
|
|
107
|
+
...(signal ? { signal } : {}),
|
|
106
108
|
};
|
|
107
109
|
const response = await doFetch(input, sseInit);
|
|
110
|
+
// Snapshot the challenge at SSE open time so concurrent
|
|
111
|
+
// calls don't overwrite it.
|
|
112
|
+
const sseChallenge = lastChallenge;
|
|
108
113
|
if (!response.body)
|
|
109
114
|
throw new Error('Response has no body.');
|
|
110
115
|
const reader = response.body.getReader();
|
|
@@ -132,13 +137,13 @@ export function sessionManager(parameters) {
|
|
|
132
137
|
yield event.data;
|
|
133
138
|
break;
|
|
134
139
|
case 'payment-need-voucher': {
|
|
135
|
-
if (!channel || !
|
|
140
|
+
if (!channel || !sseChallenge)
|
|
136
141
|
break;
|
|
137
142
|
const required = BigInt(event.data.requiredCumulative);
|
|
138
143
|
channel.cumulativeAmount =
|
|
139
144
|
channel.cumulativeAmount > required ? channel.cumulativeAmount : required;
|
|
140
145
|
const credential = await method.createCredential({
|
|
141
|
-
challenge:
|
|
146
|
+
challenge: sseChallenge,
|
|
142
147
|
context: {
|
|
143
148
|
action: 'voucher',
|
|
144
149
|
channelId: channel.channelId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../src/tempo/client/SessionManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,gCAAgC,CAAA;AAGvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAG7C,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,cAAc,CAAA;AA0BvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,cAAc,CAAC,UAAqC;IAClE,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAA;IAEpD,IAAI,OAAO,GAAwB,IAAI,CAAA;IACvC,IAAI,aAAa,GAA+B,IAAI,CAAA;IACpD,IAAI,OAAO,GAA6B,IAAI,CAAA;IAE5C,MAAM,MAAM,GAAG,aAAa,CAAC;QAC3B,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;QAC7C,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,MAAO,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS;QAC9E,cAAc,EAAE,UAAU,CAAC,cAAc;QACzC,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,UAAU,EAAE,UAAU,CAAC,UAAU;QACjC,eAAe,CAAC,KAAK;YACnB,OAAO,GAAG,KAAK,CAAA;QACjB,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC;QAC9B,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,CAAC,MAAM,CAAC;QACjB,WAAW,
|
|
1
|
+
{"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../src/tempo/client/SessionManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,gCAAgC,CAAA;AAGvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAG7C,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,cAAc,CAAA;AA0BvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,cAAc,CAAC,UAAqC;IAClE,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAA;IAEpD,IAAI,OAAO,GAAwB,IAAI,CAAA;IACvC,IAAI,aAAa,GAA+B,IAAI,CAAA;IACpD,IAAI,OAAO,GAA6B,IAAI,CAAA;IAE5C,MAAM,MAAM,GAAG,aAAa,CAAC;QAC3B,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;QAC7C,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,MAAO,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS;QAC9E,cAAc,EAAE,UAAU,CAAC,cAAc;QACzC,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,UAAU,EAAE,UAAU,CAAC,UAAU;QACjC,eAAe,CAAC,KAAK;YACnB,OAAO,GAAG,KAAK,CAAA;QACjB,CAAC;KACF,CAAC,CAAA;IAEF,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC;QAC9B,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,CAAC,MAAM,CAAC;QACjB,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;YACzC,aAAa,GAAG,SAAS,CAAA;YACzB,OAAO,SAAS,CAAA;QAClB,CAAC;KACF,CAAC,CAAA;IAEF,SAAS,iBAAiB,CAAC,QAAkB;QAC3C,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;QAC7D,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC9E,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;YAC7B,OAAO;YACP,SAAS,EAAE,aAAa;YACxB,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;YACrC,UAAU,EAAE,OAAO,EAAE,gBAAgB,IAAI,EAAE;SAC5C,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,UAAU,OAAO,CAAC,KAAwB,EAAE,IAAkB;QACjE,OAAO,GAAG,KAAK,CAAA;QACf,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAChD,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IACpC,CAAC;IAED,MAAM,IAAI,GAAmB;QAC3B,IAAI,SAAS;YACX,OAAO,OAAO,EAAE,SAAS,CAAA;QAC3B,CAAC;QACD,IAAI,UAAU;YACZ,OAAO,OAAO,EAAE,gBAAgB,IAAI,EAAE,CAAA;QACxC,CAAC;QACD,IAAI,MAAM;YACR,OAAO,OAAO,EAAE,MAAM,IAAI,KAAK,CAAA;QACjC,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,OAAO;YAChB,IAAI,OAAO,EAAE,MAAM;gBAAE,OAAM;YAE3B,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH,CAAA;YACH,CAAC;YAED,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,CAAA;YAChC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC;gBAC/C,SAAS,EAAE,aAAsB;gBACjC,OAAO,EAAE;oBACP,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;iBACjE;aACF,CAAC,CAAA;YAEF,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;YACxF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE;gBACtC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE;aACvC,CAAC,CAAA;YACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;gBAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAA;gBAC9D,MAAM,IAAI,KAAK,CACb,mCAAmC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,uBAAuB,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAClI,CAAA;YACH,CAAC;QACH,CAAC;QAED,KAAK,EAAE,OAAO;QAEd,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI;YACnB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI,IAAI,EAAE,CAAA;YAEtD,MAAM,OAAO,GAAG;gBACd,GAAG,SAAS;gBACZ,OAAO,EAAE;oBACP,GAAG,SAAS,CAAC,OAAO;oBACpB,MAAM,EAAE,mBAAmB;iBAC5B;gBACD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9B,CAAA;YAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAE9C,wDAAwD;YACxD,4BAA4B;YAC5B,MAAM,YAAY,GAAG,aAAa,CAAA;YAElC,IAAI,CAAC,QAAQ,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;YAE5D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAA;YACxC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;YAEjC,KAAK,SAAS,CAAC,CAAC,OAAO;gBACrB,IAAI,MAAM,GAAG,EAAE,CAAA;gBAEf,IAAI,CAAC;oBACH,OAAO,IAAI,EAAE,CAAC;wBACZ,IAAI,MAAM,EAAE,OAAO;4BAAE,MAAK;wBAE1B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;wBAC3C,IAAI,IAAI;4BAAE,MAAK;wBAEf,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;wBAEjD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;wBAClC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAG,CAAA;wBAErB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;4BACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gCAAE,SAAQ;4BAE1B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;4BAC9B,IAAI,CAAC,KAAK;gCAAE,SAAQ;4BAEpB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gCACnB,KAAK,SAAS;oCACZ,MAAM,KAAK,CAAC,IAAI,CAAA;oCAChB,MAAK;gCAEP,KAAK,sBAAsB,CAAC,CAAC,CAAC;oCAC5B,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY;wCAAE,MAAK;oCACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;oCACtD,OAAO,CAAC,gBAAgB;wCACtB,OAAO,CAAC,gBAAgB,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAA;oCAE3E,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC;wCAC/C,SAAS,EAAE,YAAqB;wCAChC,OAAO,EAAE;4CACP,MAAM,EAAE,SAAS;4CACjB,SAAS,EAAE,OAAO,CAAC,SAAS;4CAC5B,mBAAmB,EAAE,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE;yCACzD;qCACF,CAAC,CAAA;oCACF,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE;wCAC3C,MAAM,EAAE,MAAM;wCACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE;qCACvC,CAAC,CAAA;oCACF,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC;wCACxB,MAAM,IAAI,KAAK,CAAC,mCAAmC,eAAe,CAAC,MAAM,EAAE,CAAC,CAAA;oCAC9E,CAAC;oCACD,MAAK;gCACP,CAAC;gCAED,KAAK,iBAAiB;oCACpB,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oCACvB,MAAK;4BACT,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,MAAM,CAAC,WAAW,EAAE,CAAA;gBACtB,CAAC;YACH,CAAC;YAED,OAAO,OAAO,EAAE,CAAA;QAClB,CAAC;QAED,KAAK,CAAC,KAAK;YACT,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,aAAa;gBAAE,OAAO,SAAS,CAAA;YAExD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC;gBAC/C,SAAS,EAAE,aAAsB;gBACjC,OAAO,EAAE;oBACP,MAAM,EAAE,OAAO;oBACf,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,mBAAmB,EAAE,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE;iBACzD;aACF,CAAC,CAAA;YAEF,IAAI,OAAkC,CAAA;YACtC,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE;oBACtC,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE;iBACvC,CAAC,CAAA;gBACF,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;gBAC7D,IAAI,aAAa;oBAAE,OAAO,GAAG,wBAAwB,CAAC,aAAa,CAAC,CAAA;YACtE,CAAC;YAED,OAAO,OAAO,CAAA;QAChB,CAAC;KACF,CAAA;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -8,7 +8,7 @@ export declare const escrowContract: {
|
|
|
8
8
|
};
|
|
9
9
|
export declare const testnetChainId = 42431;
|
|
10
10
|
/**
|
|
11
|
-
* Default token decimals for TIP-20 stablecoins (e.g.
|
|
11
|
+
* Default token decimals for TIP-20 stablecoins (e.g. pathUSD).
|
|
12
12
|
*
|
|
13
13
|
* All TIP-20 tokens on Tempo use 6 decimals, so there is no risk of
|
|
14
14
|
* client/server mismatch within the Tempo ecosystem. Other chains and
|
|
@@ -8,7 +8,7 @@ export const escrowContract = {
|
|
|
8
8
|
};
|
|
9
9
|
export const testnetChainId = 42431;
|
|
10
10
|
/**
|
|
11
|
-
* Default token decimals for TIP-20 stablecoins (e.g.
|
|
11
|
+
* Default token decimals for TIP-20 stablecoins (e.g. pathUSD).
|
|
12
12
|
*
|
|
13
13
|
* All TIP-20 tokens on Tempo use 6 decimals, so there is no risk of
|
|
14
14
|
* client/server mismatch within the Tempo ecosystem. Other chains and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../../src/tempo/server/internal/transport.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,SAAS,MAAM,8BAA8B,CAAA;AACzD,OAAO,KAAK,KAAK,YAAY,MAAM,8BAA8B,CAAA;AACjE,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAE/C,kDAAkD;AAClD,MAAM,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA;AAE1D;;;;;;;;GAQG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,GAAG;IAAE,KAAK,EAAE,YAAY,CAAC,YAAY,CAAA;CAAE,GAAG,GAAG,
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../../src/tempo/server/internal/transport.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,SAAS,MAAM,8BAA8B,CAAA;AACzD,OAAO,KAAK,KAAK,YAAY,MAAM,8BAA8B,CAAA;AACjE,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAE/C,kDAAkD;AAClD,MAAM,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA;AAE1D;;;;;;;;GAQG;AACH,wBAAgB,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,OAAO,GAAG;IAAE,KAAK,EAAE,YAAY,CAAC,YAAY,CAAA;CAAE,GAAG,GAAG,CAuEpF;AAED,MAAM,CAAC,OAAO,WAAW,GAAG,CAAC;IAC3B,KAAK,OAAO,GAAG;QACb;;;;;;;;;WASG;QACH,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QAC1B,sDAAsD;QACtD,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KACrC,CAAA;CACF;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,OAAO,EAAE;IACpC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;IAC7E,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,QAAQ,CAwBX"}
|
|
@@ -36,7 +36,7 @@ export function sse(options) {
|
|
|
36
36
|
if (credential) {
|
|
37
37
|
try {
|
|
38
38
|
const ctx = Sse_core.fromRequest(request);
|
|
39
|
-
contextMap.set(ctx.challengeId, ctx);
|
|
39
|
+
contextMap.set(ctx.challengeId, { ...ctx, signal: request.signal });
|
|
40
40
|
}
|
|
41
41
|
catch {
|
|
42
42
|
// ignore — non-SSE credentials won't have stream context
|
|
@@ -73,6 +73,7 @@ export function sse(options) {
|
|
|
73
73
|
tickCost: ctx.tickCost,
|
|
74
74
|
pollIntervalMs: pollingInterval,
|
|
75
75
|
generate,
|
|
76
|
+
signal: ctx.signal,
|
|
76
77
|
});
|
|
77
78
|
return Sse_core.toResponse(stream);
|
|
78
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/tempo/server/internal/transport.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,SAAS,MAAM,8BAA8B,CAAA;AAEzD,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAA;AAK/C;;;;;;;;GAQG;AACH,MAAM,UAAU,GAAG,CAAC,OAA2D;IAC7E,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IAEzC,oEAAoE;IACpE,6EAA6E;IAC7E,qEAAqE;IACrE,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE;QAClB,IAAI,CAAC,IAAI;YAAE,OAAO,OAAO,CAAC,KAAK,CAAA;QAC/B,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QACpD,OAAO,KAAK,CAAA;IACd,CAAC,CAAC,EAAE,CAAA;IAEJ,MAAM,UAAU,GAAG,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../src/tempo/server/internal/transport.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/Challenge.ts
CHANGED
|
@@ -23,7 +23,7 @@ export const Schema = z.object({
|
|
|
23
23
|
expires: z.optional(z.datetime()),
|
|
24
24
|
/** Unique challenge identifier (HMAC-bound). */
|
|
25
25
|
id: z.string(),
|
|
26
|
-
/** Intent type (e.g., "charge", "
|
|
26
|
+
/** Intent type (e.g., "charge", "session"). */
|
|
27
27
|
intent: z.string(),
|
|
28
28
|
/** Payment method (e.g., "tempo", "stripe"). */
|
|
29
29
|
method: z.string(),
|
|
@@ -151,7 +151,7 @@ export declare namespace from {
|
|
|
151
151
|
digest?: string | undefined
|
|
152
152
|
/** Optional expiration timestamp (ISO 8601). */
|
|
153
153
|
expires?: string | undefined
|
|
154
|
-
/** Intent type (e.g., "charge", "
|
|
154
|
+
/** Intent type (e.g., "charge", "session"). */
|
|
155
155
|
intent: string
|
|
156
156
|
/** Payment method (e.g., "tempo", "stripe"). */
|
|
157
157
|
method: string
|
package/src/client/Mppx.ts
CHANGED
|
@@ -54,12 +54,19 @@ export function create<
|
|
|
54
54
|
Response
|
|
55
55
|
>,
|
|
56
56
|
>(config: create.Config<methods, transport>): Mppx<methods, transport> {
|
|
57
|
-
const { polyfill = true, transport = Transport.http() as transport } = config
|
|
57
|
+
const { onChallenge, polyfill = true, transport = Transport.http() as transport } = config
|
|
58
58
|
|
|
59
59
|
const methods = config.methods.flat() as unknown as FlattenMethods<methods>
|
|
60
60
|
|
|
61
|
-
const
|
|
62
|
-
|
|
61
|
+
const resolvedOnChallenge = onChallenge as Fetch.from.Config<
|
|
62
|
+
FlattenMethods<methods>
|
|
63
|
+
>['onChallenge']
|
|
64
|
+
const config_fetch = {
|
|
65
|
+
...(config.fetch && { fetch: config.fetch }),
|
|
66
|
+
...(resolvedOnChallenge && { onChallenge: resolvedOnChallenge }),
|
|
67
|
+
methods,
|
|
68
|
+
} satisfies Fetch.from.Config<FlattenMethods<methods>>
|
|
69
|
+
const fetch = Fetch.from<FlattenMethods<methods>>(config_fetch)
|
|
63
70
|
|
|
64
71
|
if (polyfill) Fetch.polyfill(config_fetch)
|
|
65
72
|
return {
|
|
@@ -112,6 +119,15 @@ export declare namespace create {
|
|
|
112
119
|
> = {
|
|
113
120
|
/** Custom fetch function to wrap. Defaults to `globalThis.fetch`. */
|
|
114
121
|
fetch?: typeof globalThis.fetch
|
|
122
|
+
/** Called when a 402 challenge is received, before credential creation. */
|
|
123
|
+
onChallenge?:
|
|
124
|
+
| ((
|
|
125
|
+
challenge: Challenge.Challenge,
|
|
126
|
+
helpers: {
|
|
127
|
+
createCredential: (context?: AnyContextFor<FlattenMethods<methods>>) => Promise<string>
|
|
128
|
+
},
|
|
129
|
+
) => Promise<string | undefined>)
|
|
130
|
+
| undefined
|
|
115
131
|
/** Array of method intents to use. Accepts individual clients or tuples (e.g. from `tempo()`). */
|
|
116
132
|
methods: methods
|
|
117
133
|
/** Whether to polyfill `globalThis.fetch` with the payment-aware wrapper. @default true */
|
|
@@ -2,7 +2,7 @@ import { Receipt } from 'mppx'
|
|
|
2
2
|
import { tempo } from 'mppx/client'
|
|
3
3
|
import { Mppx as Mppx_server, tempo as tempo_server } from 'mppx/server'
|
|
4
4
|
import { createClient } from 'viem'
|
|
5
|
-
import { describe, expect, test } from 'vitest'
|
|
5
|
+
import { describe, expect, test, vi } from 'vitest'
|
|
6
6
|
import * as Http from '~test/Http.js'
|
|
7
7
|
import { accounts, asset, chain, client, http } from '~test/tempo/viem.js'
|
|
8
8
|
import * as Fetch from './Fetch.js'
|
|
@@ -232,6 +232,40 @@ describe('Fetch.from', () => {
|
|
|
232
232
|
|
|
233
233
|
httpServer.close()
|
|
234
234
|
})
|
|
235
|
+
|
|
236
|
+
test('behavior: onChallenge can create credential', async () => {
|
|
237
|
+
const onChallenge = vi.fn(async (_challenge, { createCredential }) =>
|
|
238
|
+
createCredential({ account: accounts[1] }),
|
|
239
|
+
)
|
|
240
|
+
|
|
241
|
+
const fetch = Fetch.from({
|
|
242
|
+
methods: [
|
|
243
|
+
tempo.charge({
|
|
244
|
+
getClient: () => client,
|
|
245
|
+
}),
|
|
246
|
+
],
|
|
247
|
+
onChallenge,
|
|
248
|
+
})
|
|
249
|
+
|
|
250
|
+
const httpServer = await Http.createServer(async (req, res) => {
|
|
251
|
+
const result = await Mppx_server.toNodeListener(
|
|
252
|
+
server.charge({
|
|
253
|
+
amount: '1',
|
|
254
|
+
currency: asset,
|
|
255
|
+
expires: new Date(Date.now() + 60_000).toISOString(),
|
|
256
|
+
recipient: accounts[0].address,
|
|
257
|
+
}),
|
|
258
|
+
)(req, res)
|
|
259
|
+
if (result.status === 402) return
|
|
260
|
+
res.end('OK')
|
|
261
|
+
})
|
|
262
|
+
|
|
263
|
+
const response = await fetch(httpServer.url)
|
|
264
|
+
expect(response.status).toBe(200)
|
|
265
|
+
expect(onChallenge).toHaveBeenCalledTimes(1)
|
|
266
|
+
|
|
267
|
+
httpServer.close()
|
|
268
|
+
})
|
|
235
269
|
})
|
|
236
270
|
|
|
237
271
|
describe('Fetch.polyfill', () => {
|
|
@@ -37,7 +37,6 @@ export function from<const methods extends readonly MethodIntent.AnyClient[]>(
|
|
|
37
37
|
if (response.status !== 402) return response
|
|
38
38
|
|
|
39
39
|
const challenge = Challenge.fromResponse(response)
|
|
40
|
-
onChallenge?.(challenge)
|
|
41
40
|
|
|
42
41
|
const mi = methods.find((m) => m.method === challenge.method && m.name === challenge.intent)
|
|
43
42
|
if (!mi)
|
|
@@ -45,7 +44,13 @@ export function from<const methods extends readonly MethodIntent.AnyClient[]>(
|
|
|
45
44
|
`No method intent found for "${challenge.method}.${challenge.intent}". Available: ${methods.map((m) => `${m.method}.${m.name}`).join(', ')}`,
|
|
46
45
|
)
|
|
47
46
|
|
|
48
|
-
const
|
|
47
|
+
const onChallengeCredential = onChallenge
|
|
48
|
+
? await onChallenge(challenge, {
|
|
49
|
+
createCredential: async (overrideContext?: AnyContextFor<methods>) =>
|
|
50
|
+
resolveCredential(challenge, mi, overrideContext ?? context),
|
|
51
|
+
})
|
|
52
|
+
: undefined
|
|
53
|
+
const credential = onChallengeCredential ?? (await resolveCredential(challenge, mi, context))
|
|
49
54
|
|
|
50
55
|
return fetch(input, {
|
|
51
56
|
...fetchInit,
|
|
@@ -75,7 +80,14 @@ export declare namespace from {
|
|
|
75
80
|
/** Array of method intents to use. */
|
|
76
81
|
methods: methods
|
|
77
82
|
/** Called when a 402 challenge is received, before credential creation. */
|
|
78
|
-
onChallenge?:
|
|
83
|
+
onChallenge?:
|
|
84
|
+
| ((
|
|
85
|
+
challenge: Challenge.Challenge,
|
|
86
|
+
helpers: {
|
|
87
|
+
createCredential: (context?: AnyContextFor<methods>) => Promise<string>
|
|
88
|
+
},
|
|
89
|
+
) => Promise<string | undefined>)
|
|
90
|
+
| undefined
|
|
79
91
|
}
|
|
80
92
|
|
|
81
93
|
type Fetch<
|
|
@@ -87,7 +87,10 @@ describe.skipIf(!stripeSecretKey)('stripe', () => {
|
|
|
87
87
|
})
|
|
88
88
|
|
|
89
89
|
const clientCharge = stripe_client.charge({
|
|
90
|
-
|
|
90
|
+
createToken: async (params) => {
|
|
91
|
+
if (!params.paymentMethod) throw new Error('paymentMethod is required')
|
|
92
|
+
return createTestSpt({ ...params, paymentMethod: params.paymentMethod })
|
|
93
|
+
},
|
|
91
94
|
paymentMethod: 'pm_card_visa',
|
|
92
95
|
externalId: 'client_order_789',
|
|
93
96
|
})
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type * as Challenge from '../../Challenge.js'
|
|
1
2
|
import * as Credential from '../../Credential.js'
|
|
2
3
|
import * as MethodIntent from '../../MethodIntent.js'
|
|
3
4
|
import * as z from '../../zod.js'
|
|
@@ -6,8 +7,9 @@ import * as Intents from '../Intents.js'
|
|
|
6
7
|
/**
|
|
7
8
|
* Creates a Stripe charge method intent for usage on the client.
|
|
8
9
|
*
|
|
9
|
-
* Accepts a `
|
|
10
|
-
* a secret key, so typically proxied through a server endpoint)
|
|
10
|
+
* Accepts a `createToken` callback that handles SPT creation (requires
|
|
11
|
+
* a secret key, so typically proxied through a server endpoint) and
|
|
12
|
+
* returns a credential for retrying the request.
|
|
11
13
|
*
|
|
12
14
|
* The `paymentMethod` (e.g. from Stripe Elements) can be provided at
|
|
13
15
|
* initialization or at credential-creation time via `context`.
|
|
@@ -17,7 +19,7 @@ import * as Intents from '../Intents.js'
|
|
|
17
19
|
* import { stripe } from 'mppx/client'
|
|
18
20
|
*
|
|
19
21
|
* const charge = stripe.charge({
|
|
20
|
-
*
|
|
22
|
+
* createToken: async ({ amount, currency, expiresAt, metadata, networkId, paymentMethod }) => {
|
|
21
23
|
* const res = await fetch('/api/create-spt', {
|
|
22
24
|
* method: 'POST',
|
|
23
25
|
* headers: { 'Content-Type': 'application/json' },
|
|
@@ -27,16 +29,10 @@ import * as Intents from '../Intents.js'
|
|
|
27
29
|
* return spt
|
|
28
30
|
* },
|
|
29
31
|
* })
|
|
30
|
-
*
|
|
31
|
-
* // paymentMethod comes from Stripe Elements at credential-creation time
|
|
32
|
-
* const credential = await charge.createCredential({
|
|
33
|
-
* challenge,
|
|
34
|
-
* context: { paymentMethod: 'pm_xxx' },
|
|
35
|
-
* })
|
|
36
32
|
* ```
|
|
37
33
|
*/
|
|
38
34
|
export function charge(parameters: charge.Parameters) {
|
|
39
|
-
const {
|
|
35
|
+
const { createToken, externalId, paymentMethod: defaultPaymentMethod } = parameters
|
|
40
36
|
|
|
41
37
|
return MethodIntent.toClient(Intents.charge, {
|
|
42
38
|
context: z.object({
|
|
@@ -45,8 +41,9 @@ export function charge(parameters: charge.Parameters) {
|
|
|
45
41
|
|
|
46
42
|
async createCredential({ challenge, context }) {
|
|
47
43
|
const paymentMethod = context?.paymentMethod ?? defaultPaymentMethod
|
|
48
|
-
if (!paymentMethod)
|
|
44
|
+
if (!paymentMethod) {
|
|
49
45
|
throw new Error('paymentMethod is required (pass via context or parameters)')
|
|
46
|
+
}
|
|
50
47
|
|
|
51
48
|
const amount = challenge.request.amount as string
|
|
52
49
|
const currency = challenge.request.currency as string
|
|
@@ -65,7 +62,8 @@ export function charge(parameters: charge.Parameters) {
|
|
|
65
62
|
? Math.floor(new Date(challenge.request.expires as string).getTime() / 1000)
|
|
66
63
|
: Math.floor(Date.now() / 1000) + 3600
|
|
67
64
|
|
|
68
|
-
const spt = await
|
|
65
|
+
const spt = await createToken({
|
|
66
|
+
challenge,
|
|
69
67
|
paymentMethod,
|
|
70
68
|
amount,
|
|
71
69
|
currency,
|
|
@@ -87,24 +85,22 @@ export function charge(parameters: charge.Parameters) {
|
|
|
87
85
|
|
|
88
86
|
export declare namespace charge {
|
|
89
87
|
type Parameters = {
|
|
90
|
-
/**
|
|
91
|
-
|
|
92
|
-
*
|
|
93
|
-
* SPT creation requires a Stripe secret key, so this typically
|
|
94
|
-
* proxies through a server endpoint (e.g. `POST /api/create-spt`).
|
|
95
|
-
* If you are running a client in an enviroment with a secret key, you can just create the
|
|
96
|
-
* SPT directly in this callback.
|
|
97
|
-
*/
|
|
98
|
-
createSpt: (parameters: CreateSptParameters) => Promise<string>
|
|
88
|
+
/** Called when a Stripe challenge is received. Create an SPT to retry. */
|
|
89
|
+
createToken: (parameters: OnChallengeParameters) => Promise<string>
|
|
99
90
|
/** Optional client-side external reference ID for the credential payload. */
|
|
100
91
|
externalId?: string | undefined
|
|
101
92
|
/** Default payment method ID. Overridden by `context.paymentMethod`. */
|
|
102
93
|
paymentMethod?: string | undefined
|
|
103
94
|
}
|
|
104
95
|
|
|
105
|
-
type
|
|
96
|
+
type OnChallengeParameters = {
|
|
97
|
+
challenge: Challenge.Challenge<
|
|
98
|
+
z.output<typeof Intents.charge.schema.request>,
|
|
99
|
+
typeof Intents.charge.name,
|
|
100
|
+
typeof Intents.charge.method
|
|
101
|
+
>
|
|
106
102
|
/** Stripe payment method ID (e.g. from Stripe Elements). */
|
|
107
|
-
paymentMethod
|
|
103
|
+
paymentMethod?: string | undefined
|
|
108
104
|
/** Payment amount (in smallest currency unit). */
|
|
109
105
|
amount: string
|
|
110
106
|
/** Three-letter ISO currency code. */
|
|
@@ -10,7 +10,7 @@ import { charge as charge_ } from './Charge.js'
|
|
|
10
10
|
* const mppx = Mppx.create({
|
|
11
11
|
* methods: [
|
|
12
12
|
* stripe({
|
|
13
|
-
*
|
|
13
|
+
* createToken: async (params) => {
|
|
14
14
|
* const res = await fetch('/api/create-spt', {
|
|
15
15
|
* method: 'POST',
|
|
16
16
|
* headers: { 'Content-Type': 'application/json' },
|
|
@@ -75,8 +75,9 @@ export function sessionManager(parameters: sessionManager.Parameters): SessionMa
|
|
|
75
75
|
const wrappedFetch = Fetch.from({
|
|
76
76
|
fetch: fetchFn,
|
|
77
77
|
methods: [method],
|
|
78
|
-
onChallenge(
|
|
79
|
-
lastChallenge =
|
|
78
|
+
onChallenge: async (challenge, _helpers) => {
|
|
79
|
+
lastChallenge = challenge
|
|
80
|
+
return undefined
|
|
80
81
|
},
|
|
81
82
|
})
|
|
82
83
|
|
|
@@ -150,10 +151,15 @@ export function sessionManager(parameters: sessionManager.Parameters): SessionMa
|
|
|
150
151
|
...fetchInit.headers,
|
|
151
152
|
Accept: 'text/event-stream',
|
|
152
153
|
},
|
|
154
|
+
...(signal ? { signal } : {}),
|
|
153
155
|
}
|
|
154
156
|
|
|
155
157
|
const response = await doFetch(input, sseInit)
|
|
156
158
|
|
|
159
|
+
// Snapshot the challenge at SSE open time so concurrent
|
|
160
|
+
// calls don't overwrite it.
|
|
161
|
+
const sseChallenge = lastChallenge
|
|
162
|
+
|
|
157
163
|
if (!response.body) throw new Error('Response has no body.')
|
|
158
164
|
|
|
159
165
|
const reader = response.body.getReader()
|
|
@@ -186,13 +192,13 @@ export function sessionManager(parameters: sessionManager.Parameters): SessionMa
|
|
|
186
192
|
break
|
|
187
193
|
|
|
188
194
|
case 'payment-need-voucher': {
|
|
189
|
-
if (!channel || !
|
|
195
|
+
if (!channel || !sseChallenge) break
|
|
190
196
|
const required = BigInt(event.data.requiredCumulative)
|
|
191
197
|
channel.cumulativeAmount =
|
|
192
198
|
channel.cumulativeAmount > required ? channel.cumulativeAmount : required
|
|
193
199
|
|
|
194
200
|
const credential = await method.createCredential({
|
|
195
|
-
challenge:
|
|
201
|
+
challenge: sseChallenge as never,
|
|
196
202
|
context: {
|
|
197
203
|
action: 'voucher',
|
|
198
204
|
channelId: channel.channelId,
|
|
@@ -11,7 +11,7 @@ export const escrowContract = {
|
|
|
11
11
|
export const testnetChainId = 42431
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
|
-
* Default token decimals for TIP-20 stablecoins (e.g.
|
|
14
|
+
* Default token decimals for TIP-20 stablecoins (e.g. pathUSD).
|
|
15
15
|
*
|
|
16
16
|
* All TIP-20 tokens on Tempo use 6 decimals, so there is no risk of
|
|
17
17
|
* client/server mismatch within the Tempo ecosystem. Other chains and
|
|
@@ -33,7 +33,7 @@ export function sse(options: sse.Options & { store: ChannelStore.ChannelStore })
|
|
|
33
33
|
return store
|
|
34
34
|
})()
|
|
35
35
|
|
|
36
|
-
const contextMap = new Map<string, Sse_core.fromRequest.Context>()
|
|
36
|
+
const contextMap = new Map<string, Sse_core.fromRequest.Context & { signal?: AbortSignal }>()
|
|
37
37
|
|
|
38
38
|
const base = Transport.http()
|
|
39
39
|
return Transport.from<Request, Response, Transport.ReceiptResponseOf<Sse>, Response>({
|
|
@@ -44,7 +44,7 @@ export function sse(options: sse.Options & { store: ChannelStore.ChannelStore })
|
|
|
44
44
|
if (credential) {
|
|
45
45
|
try {
|
|
46
46
|
const ctx = Sse_core.fromRequest(request)
|
|
47
|
-
contextMap.set(ctx.challengeId, ctx)
|
|
47
|
+
contextMap.set(ctx.challengeId, { ...ctx, signal: request.signal })
|
|
48
48
|
} catch {
|
|
49
49
|
// ignore — non-SSE credentials won't have stream context
|
|
50
50
|
}
|
|
@@ -84,6 +84,7 @@ export function sse(options: sse.Options & { store: ChannelStore.ChannelStore })
|
|
|
84
84
|
tickCost: ctx.tickCost,
|
|
85
85
|
pollIntervalMs: pollingInterval,
|
|
86
86
|
generate,
|
|
87
|
+
signal: ctx.signal,
|
|
87
88
|
})
|
|
88
89
|
return Sse_core.toResponse(stream)
|
|
89
90
|
}
|