mppx 0.8.13 → 0.8.15
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/CHANGELOG.md +37 -0
- package/dist/Errors.d.ts +10 -0
- package/dist/Errors.d.ts.map +1 -1
- package/dist/Errors.js +11 -2
- package/dist/Errors.js.map +1 -1
- package/dist/Method.d.ts +105 -3
- package/dist/Method.d.ts.map +1 -1
- package/dist/Method.js +102 -2
- package/dist/Method.js.map +1 -1
- package/dist/cli/validate/payment.d.ts.map +1 -1
- package/dist/cli/validate/payment.js +18 -4
- package/dist/cli/validate/payment.js.map +1 -1
- package/dist/client/internal/Fetch.d.ts.map +1 -1
- package/dist/client/internal/Fetch.js +98 -5
- package/dist/client/internal/Fetch.js.map +1 -1
- package/dist/client/internal/MethodChallenge.d.ts +19 -0
- package/dist/client/internal/MethodChallenge.d.ts.map +1 -0
- package/dist/client/internal/MethodChallenge.js +15 -0
- package/dist/client/internal/MethodChallenge.js.map +1 -0
- package/dist/client/internal/MethodResponse.d.ts +15 -0
- package/dist/client/internal/MethodResponse.d.ts.map +1 -1
- package/dist/client/internal/MethodResponse.js +10 -0
- package/dist/client/internal/MethodResponse.js.map +1 -1
- package/dist/server/Mppx.d.ts +23 -4
- package/dist/server/Mppx.d.ts.map +1 -1
- package/dist/server/Mppx.js +91 -82
- package/dist/server/Mppx.js.map +1 -1
- package/dist/stripe/server/internal/html.gen.d.ts +1 -1
- package/dist/stripe/server/internal/html.gen.d.ts.map +1 -1
- package/dist/stripe/server/internal/html.gen.js +1 -1
- package/dist/stripe/server/internal/html.gen.js.map +1 -1
- package/dist/tempo/client/Methods.d.ts +1 -0
- package/dist/tempo/client/Methods.d.ts.map +1 -1
- package/dist/tempo/internal/fee-payer.d.ts +1 -0
- package/dist/tempo/internal/fee-payer.d.ts.map +1 -1
- package/dist/tempo/internal/fee-payer.js +7 -2
- package/dist/tempo/internal/fee-payer.js.map +1 -1
- package/dist/tempo/legacy/client/ChannelOps.d.ts.map +1 -1
- package/dist/tempo/legacy/client/ChannelOps.js +2 -1
- package/dist/tempo/legacy/client/ChannelOps.js.map +1 -1
- package/dist/tempo/server/Charge.d.ts +46 -77
- package/dist/tempo/server/Charge.d.ts.map +1 -1
- package/dist/tempo/server/Charge.js +289 -209
- package/dist/tempo/server/Charge.js.map +1 -1
- package/dist/tempo/server/Methods.d.ts +12 -1
- package/dist/tempo/server/Methods.d.ts.map +1 -1
- package/dist/tempo/server/Methods.js +4 -0
- package/dist/tempo/server/Methods.js.map +1 -1
- package/dist/tempo/server/Relay.d.ts +57 -0
- package/dist/tempo/server/Relay.d.ts.map +1 -0
- package/dist/tempo/server/Relay.js +179 -0
- package/dist/tempo/server/Relay.js.map +1 -0
- package/dist/tempo/server/SponsorBudget.d.ts +59 -0
- package/dist/tempo/server/SponsorBudget.d.ts.map +1 -0
- package/dist/tempo/server/SponsorBudget.js +150 -0
- package/dist/tempo/server/SponsorBudget.js.map +1 -0
- package/dist/tempo/server/internal/html.gen.d.ts +1 -1
- package/dist/tempo/server/internal/html.gen.d.ts.map +1 -1
- package/dist/tempo/server/internal/html.gen.js +1 -1
- package/dist/tempo/server/internal/html.gen.js.map +1 -1
- package/dist/tempo/session/client/ChannelOps.d.ts +7 -1
- package/dist/tempo/session/client/ChannelOps.d.ts.map +1 -1
- package/dist/tempo/session/client/ChannelOps.js +9 -4
- package/dist/tempo/session/client/ChannelOps.js.map +1 -1
- package/dist/tempo/session/client/CredentialState.d.ts +5 -1
- package/dist/tempo/session/client/CredentialState.d.ts.map +1 -1
- package/dist/tempo/session/client/CredentialState.js +37 -19
- package/dist/tempo/session/client/CredentialState.js.map +1 -1
- package/dist/tempo/session/client/Runtime.d.ts +8 -0
- package/dist/tempo/session/client/Runtime.d.ts.map +1 -1
- package/dist/tempo/session/client/Runtime.js +17 -0
- package/dist/tempo/session/client/Runtime.js.map +1 -1
- package/dist/tempo/session/client/Session.d.ts +15 -5
- package/dist/tempo/session/client/Session.d.ts.map +1 -1
- package/dist/tempo/session/client/Session.js +216 -45
- package/dist/tempo/session/client/Session.js.map +1 -1
- package/dist/tempo/session/client/SessionManager.d.ts +8 -1
- package/dist/tempo/session/client/SessionManager.d.ts.map +1 -1
- package/dist/tempo/session/client/SessionManager.js +114 -44
- package/dist/tempo/session/client/SessionManager.js.map +1 -1
- package/dist/tempo/session/client/Transports.d.ts +16 -6
- package/dist/tempo/session/client/Transports.d.ts.map +1 -1
- package/dist/tempo/session/client/Transports.js +84 -37
- package/dist/tempo/session/client/Transports.js.map +1 -1
- package/dist/tempo/session/precompile/Chain.d.ts.map +1 -1
- package/dist/tempo/session/precompile/Chain.js +96 -8
- package/dist/tempo/session/precompile/Chain.js.map +1 -1
- package/dist/tempo/session/precompile/Channel.d.ts +2 -0
- package/dist/tempo/session/precompile/Channel.d.ts.map +1 -1
- package/dist/tempo/session/precompile/Channel.js +4 -0
- package/dist/tempo/session/precompile/Channel.js.map +1 -1
- package/dist/tempo/session/server/RequestState.js +3 -1
- package/dist/tempo/session/server/RequestState.js.map +1 -1
- package/dist/tempo/session/server/Ws.d.ts.map +1 -1
- package/dist/tempo/session/server/Ws.js +3 -0
- package/dist/tempo/session/server/Ws.js.map +1 -1
- package/dist/tempo/subscription/KeyAuthorization.d.ts +1 -829
- package/dist/tempo/subscription/KeyAuthorization.d.ts.map +1 -1
- package/dist/tempo/subscription/KeyAuthorization.js +14 -3
- package/dist/tempo/subscription/KeyAuthorization.js.map +1 -1
- package/dist/viem/Client.d.ts.map +1 -1
- package/dist/viem/Client.js +6 -1
- package/dist/viem/Client.js.map +1 -1
- package/package.json +2 -2
- package/src/Errors.test.ts +23 -0
- package/src/Errors.ts +21 -2
- package/src/Method.test.ts +102 -1
- package/src/Method.ts +241 -5
- package/src/cli/validate/payment.ts +18 -4
- package/src/cli/validate.test.ts +16 -0
- package/src/client/Mppx.test-d.ts +3 -3
- package/src/client/internal/Fetch.test.ts +77 -0
- package/src/client/internal/Fetch.ts +122 -11
- package/src/client/internal/MethodChallenge.ts +35 -0
- package/src/client/internal/MethodResponse.ts +28 -0
- package/src/server/Mppx.test-d.ts +2 -0
- package/src/server/Mppx.test.ts +205 -0
- package/src/server/Mppx.ts +167 -103
- package/src/stripe/server/internal/html.gen.ts +1 -1
- package/src/tempo/PublicExports.test-d.ts +20 -0
- package/src/tempo/internal/fee-payer.ts +7 -3
- package/src/tempo/legacy/client/ChannelOps.test.ts +7 -0
- package/src/tempo/legacy/client/ChannelOps.ts +2 -1
- package/src/tempo/server/Charge.test.ts +337 -63
- package/src/tempo/server/Charge.ts +443 -267
- package/src/tempo/server/Methods.ts +11 -0
- package/src/tempo/server/Relay.test.ts +677 -0
- package/src/tempo/server/Relay.ts +297 -0
- package/src/tempo/server/SponsorBudget.test.ts +154 -0
- package/src/tempo/server/SponsorBudget.ts +219 -0
- package/src/tempo/server/internal/html.gen.ts +1 -1
- package/src/tempo/session/README.md +7 -0
- package/src/tempo/session/client/ChannelOps.test.ts +17 -2
- package/src/tempo/session/client/ChannelOps.ts +12 -4
- package/src/tempo/session/client/CredentialState.ts +61 -20
- package/src/tempo/session/client/Runtime.test.ts +12 -0
- package/src/tempo/session/client/Runtime.ts +22 -0
- package/src/tempo/session/client/Session.test.ts +506 -7
- package/src/tempo/session/client/Session.ts +279 -54
- package/src/tempo/session/client/SessionManager.test.ts +318 -13
- package/src/tempo/session/client/SessionManager.ts +132 -42
- package/src/tempo/session/client/Transports.test.ts +54 -1
- package/src/tempo/session/client/Transports.ts +137 -57
- package/src/tempo/session/precompile/Chain.integration.test.ts +19 -1
- package/src/tempo/session/precompile/Chain.test.ts +197 -10
- package/src/tempo/session/precompile/Chain.ts +102 -8
- package/src/tempo/session/precompile/Channel.test.ts +9 -0
- package/src/tempo/session/precompile/Channel.ts +5 -0
- package/src/tempo/session/server/RequestState.test.ts +8 -1
- package/src/tempo/session/server/RequestState.ts +2 -2
- package/src/tempo/session/server/Session.test.ts +66 -4
- package/src/tempo/session/server/Ws.ts +3 -0
- package/src/tempo/subscription/KeyAuthorization.test.ts +70 -1
- package/src/tempo/subscription/KeyAuthorization.ts +14 -3
- package/src/viem/Client.test.ts +18 -1
- package/src/viem/Client.ts +7 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyAuthorization.d.ts","sourceRoot":"","sources":["../../../src/tempo/subscription/KeyAuthorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"KeyAuthorization.d.ts","sourceRoot":"","sources":["../../../src/tempo/subscription/KeyAuthorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,UAAU,CAAA;AAC9D,OAAO,EAA6B,KAAK,OAAO,EAAE,MAAM,MAAM,CAAA;AAG9D,OAAO,KAAK,KAAK,OAAO,MAAM,eAAe,CAAA;AAC7C,OAAO,KAAK,EACV,qBAAqB,EACrB,6BAA6B,EAC7B,sBAAsB,EACvB,MAAM,YAAY,CAAA;AAEnB,8DAA8D;AAC9D,eAAO,MAAM,gBAAgB,eAAe,CAAA;AAE5C,8EAA8E;AAC9E,eAAO,MAAM,wBAAwB,eAAe,CAAA;AASpD,KAAK,mBAAmB,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAIvF;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAEjF;AAED,wBAAgB,2BAA2B,CAAC,mBAAmB,EAAE,IAAI,GAAG,MAAM,CAmB7E;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE;IACnD,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,sBAAsB,CAAA;CACnC,GAAG,MAAM,CAsBT;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE;IACnD,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,aAAa,GAAG,YAAY,GAAG,qBAAqB,CAAC,CAAA;CACzF,QAeA;AAED,mFAAmF;AACnF,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,WAAW,CAAC;;;;GAW7D;AAED,mFAAmF;AACnF,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,WAAW,CAAC;;;;;;GAc7D;AAED;;;GAGG;AACH,wBAAsB,gCAAgC,CAAC,UAAU,EAAE;IACjE,SAAS,EAAE,qBAAqB,CAAA;IAChC,OAAO,EAAE;QACP,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE;YAAE,IAAI,EAAE,KAAK,MAAM,EAAE,CAAA;SAAE,KAAK,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,CAAA;KACrF,CAAA;IACD,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,IAAI,CACX,mBAAmB,EACnB,QAAQ,GAAG,UAAU,GAAG,aAAa,GAAG,YAAY,GAAG,WAAW,GAAG,qBAAqB,CAC3F,CAAA;CACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAqBA;AAED;;;GAGG;AACH,wBAAgB,kCAAkC,CAAC,UAAU,EAAE;IAC7D,SAAS,CAAC,EAAE,qBAAqB,GAAG,SAAS,CAAA;IAC7C,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,6BAA6B,CAAA;IACtC,OAAO,EAAE,mBAAmB,CAAA;CAC7B;;;iBAsBwB,OAAO;;;EAI/B"}
|
|
@@ -120,8 +120,14 @@ export async function signSubscriptionKeyAuthorization(parameters) {
|
|
|
120
120
|
const signature = await account.sign({
|
|
121
121
|
hash: KeyAuthorization.getSignPayload(authorization),
|
|
122
122
|
});
|
|
123
|
+
const signatureEnvelope = SignatureEnvelope.from(signature);
|
|
124
|
+
if (signatureEnvelope.type === 'keychain' || signatureEnvelope.type === 'multisig') {
|
|
125
|
+
throw new VerificationFailedError({
|
|
126
|
+
reason: 'keyAuthorization must use a primitive signature',
|
|
127
|
+
});
|
|
128
|
+
}
|
|
123
129
|
return KeyAuthorization.from(authorization, {
|
|
124
|
-
signature
|
|
130
|
+
signature,
|
|
125
131
|
});
|
|
126
132
|
}
|
|
127
133
|
/**
|
|
@@ -173,13 +179,18 @@ function deserializeAuthorization(signature) {
|
|
|
173
179
|
try {
|
|
174
180
|
return KeyAuthorization.deserialize(signature);
|
|
175
181
|
}
|
|
176
|
-
catch {
|
|
182
|
+
catch (error) {
|
|
183
|
+
if (error instanceof KeyAuthorization.InvalidSignatureTypeError) {
|
|
184
|
+
throw new VerificationFailedError({
|
|
185
|
+
reason: 'keyAuthorization must use a primitive signature',
|
|
186
|
+
});
|
|
187
|
+
}
|
|
177
188
|
throw new VerificationFailedError({ reason: 'invalid keyAuthorization payload' });
|
|
178
189
|
}
|
|
179
190
|
}
|
|
180
191
|
function getPrimitiveSignature(authorization) {
|
|
181
192
|
const signature = authorization.signature;
|
|
182
|
-
if (!signature
|
|
193
|
+
if (!signature) {
|
|
183
194
|
throw new VerificationFailedError({
|
|
184
195
|
reason: 'keyAuthorization must use a primitive signature',
|
|
185
196
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KeyAuthorization.js","sourceRoot":"","sources":["../../../src/tempo/subscription/KeyAuthorization.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"KeyAuthorization.js","sourceRoot":"","sources":["../../../src/tempo/subscription/KeyAuthorization.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../../src/viem/Client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,MAAM,EAA+C,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../../src/viem/Client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,MAAM,EAA+C,MAAM,MAAM,CAAA;AAI3F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAOxD,wBAAgB,WAAW,CACzB,UAAU,EAAE,WAAW,CAAC,UAAU,GAAG;IACnC,4CAA4C;IAC5C,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;IACzB,mFAAmF;IACnF,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,kCAAkC;IAClC,MAAM,CAAC,EAAE,CAAC;QAAE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,GAAG,SAAS,CAAA;CAC9D,GACA,CAAC,UAAU,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,KAAK,YAAY,CAAC,MAAM,CAAC,CAiExE;AAED,MAAM,CAAC,OAAO,WAAW,WAAW,CAAC;IACnC,KAAK,UAAU,GAAG;QAChB,6DAA6D;QAC7D,SAAS,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;SAAE,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAA;KACjG,CAAA;CACF"}
|
package/dist/viem/Client.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { createClient, createTransport, custom, http } from 'viem';
|
|
2
2
|
import { withFeePayer } from 'viem/tempo';
|
|
3
|
+
import { tempo as tempoMainnetChain, tempoModerato } from 'viem/tempo/chains';
|
|
4
|
+
const knownTempoChains = {
|
|
5
|
+
[tempoMainnetChain.id]: tempoMainnetChain,
|
|
6
|
+
[tempoModerato.id]: tempoModerato,
|
|
7
|
+
};
|
|
3
8
|
export function getResolver(parameters) {
|
|
4
9
|
const { chain, feePayerUrl, getClient, rpcUrl } = parameters;
|
|
5
10
|
if (getClient) {
|
|
@@ -53,7 +58,7 @@ export function getResolver(parameters) {
|
|
|
53
58
|
throw new Error(`No \`rpcUrl\` configured for \`chainId\` (${resolvedChainId}).`);
|
|
54
59
|
const transport = feePayerUrl ? withFeePayer(http(url), http(feePayerUrl)) : http(url);
|
|
55
60
|
return createClient({
|
|
56
|
-
chain: { ...chain, id: resolvedChainId },
|
|
61
|
+
chain: (knownTempoChains[resolvedChainId] ?? { ...chain, id: resolvedChainId }),
|
|
57
62
|
transport,
|
|
58
63
|
});
|
|
59
64
|
};
|
package/dist/viem/Client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Client.js","sourceRoot":"","sources":["../../src/viem/Client.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"Client.js","sourceRoot":"","sources":["../../src/viem/Client.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mppx",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.8.
|
|
4
|
+
"version": "0.8.15",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"homepage": "https://github.com/wevm/mppx#readme",
|
|
@@ -170,7 +170,7 @@
|
|
|
170
170
|
"@stripe/stripe-js": "9.9.0",
|
|
171
171
|
"eventsource-parser": "3.1.0",
|
|
172
172
|
"incur": "^0.4.10",
|
|
173
|
-
"ox": "0.14.
|
|
173
|
+
"ox": "0.14.33",
|
|
174
174
|
"zod": "^4.4.3"
|
|
175
175
|
},
|
|
176
176
|
"repository": {
|
package/src/Errors.test.ts
CHANGED
|
@@ -124,6 +124,29 @@ describe('VerificationFailedError', () => {
|
|
|
124
124
|
}
|
|
125
125
|
`)
|
|
126
126
|
})
|
|
127
|
+
|
|
128
|
+
test('with relay metadata', () => {
|
|
129
|
+
const error = new VerificationFailedError({
|
|
130
|
+
details: { party: 'originator' },
|
|
131
|
+
reason: 'Originator matched a sanctions list',
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
expect(error.details).toEqual({ party: 'originator' })
|
|
135
|
+
expect(error.toProblemDetails('challenge-id')).toEqual({
|
|
136
|
+
challengeId: 'challenge-id',
|
|
137
|
+
detail: 'Payment verification failed: Originator matched a sanctions list.',
|
|
138
|
+
details: { party: 'originator' },
|
|
139
|
+
status: 402,
|
|
140
|
+
title: 'Verification Failed',
|
|
141
|
+
type: 'https://paymentauth.org/problems/verification-failed',
|
|
142
|
+
})
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
test('omits empty details', () => {
|
|
146
|
+
const error = new VerificationFailedError({ details: {} })
|
|
147
|
+
|
|
148
|
+
expect(error.toProblemDetails()).not.toHaveProperty('details')
|
|
149
|
+
})
|
|
127
150
|
})
|
|
128
151
|
|
|
129
152
|
describe('PaymentExpiredError', () => {
|
package/src/Errors.ts
CHANGED
|
@@ -12,6 +12,9 @@ export const Hints = {
|
|
|
12
12
|
* Base class for all payment-related errors.
|
|
13
13
|
*/
|
|
14
14
|
export abstract class PaymentError extends Error {
|
|
15
|
+
/** Safe method-specific context for diagnostics and relay responses. */
|
|
16
|
+
readonly details: Readonly<Record<string, unknown>> | undefined
|
|
17
|
+
|
|
15
18
|
/** RFC 9457 Problem Details type URI. */
|
|
16
19
|
abstract readonly type: string
|
|
17
20
|
|
|
@@ -24,6 +27,11 @@ export abstract class PaymentError extends Error {
|
|
|
24
27
|
/** Actionable hint for resolving the error (RFC 9457 extension member). */
|
|
25
28
|
readonly hint: string | undefined
|
|
26
29
|
|
|
30
|
+
protected constructor(message: string, options: PaymentError.Options = {}) {
|
|
31
|
+
super(message)
|
|
32
|
+
this.details = options.details
|
|
33
|
+
}
|
|
34
|
+
|
|
27
35
|
/** Converts the error to RFC 9457 Problem Details format. */
|
|
28
36
|
toProblemDetails(challengeId?: string): PaymentError.ProblemDetails {
|
|
29
37
|
return {
|
|
@@ -31,6 +39,7 @@ export abstract class PaymentError extends Error {
|
|
|
31
39
|
title: this.title,
|
|
32
40
|
status: this.status,
|
|
33
41
|
detail: this.message,
|
|
42
|
+
...(this.details && Object.keys(this.details).length > 0 && { details: this.details }),
|
|
34
43
|
...(this.hint && { hint: this.hint }),
|
|
35
44
|
...(challengeId && { challengeId }),
|
|
36
45
|
}
|
|
@@ -38,6 +47,10 @@ export abstract class PaymentError extends Error {
|
|
|
38
47
|
}
|
|
39
48
|
|
|
40
49
|
export declare namespace PaymentError {
|
|
50
|
+
type Options = {
|
|
51
|
+
details?: Record<string, unknown> | undefined
|
|
52
|
+
}
|
|
53
|
+
|
|
41
54
|
type ProblemDetails = {
|
|
42
55
|
/** RFC 9457 Problem Details type URI. */
|
|
43
56
|
type: string
|
|
@@ -47,6 +60,8 @@ export declare namespace PaymentError {
|
|
|
47
60
|
status: number
|
|
48
61
|
/** Human-readable explanation. */
|
|
49
62
|
detail: string
|
|
63
|
+
/** Safe method-specific diagnostic context. */
|
|
64
|
+
details?: Readonly<Record<string, unknown>>
|
|
50
65
|
/** Actionable hint for resolving the error (RFC 9457 extension member). */
|
|
51
66
|
hint?: string
|
|
52
67
|
/** Associated challenge ID, if applicable. */
|
|
@@ -112,13 +127,17 @@ export class VerificationFailedError extends PaymentError {
|
|
|
112
127
|
readonly type = 'https://paymentauth.org/problems/verification-failed'
|
|
113
128
|
|
|
114
129
|
constructor(options: VerificationFailedError.Options = {}) {
|
|
115
|
-
const { reason } = options
|
|
116
|
-
super(reason ? `Payment verification failed: ${reason}.` : 'Payment verification failed.'
|
|
130
|
+
const { details, reason } = options
|
|
131
|
+
super(reason ? `Payment verification failed: ${reason}.` : 'Payment verification failed.', {
|
|
132
|
+
details,
|
|
133
|
+
})
|
|
117
134
|
}
|
|
118
135
|
}
|
|
119
136
|
|
|
120
137
|
export declare namespace VerificationFailedError {
|
|
121
138
|
type Options = {
|
|
139
|
+
/** Safe method-specific diagnostic context. */
|
|
140
|
+
details?: Record<string, unknown> | undefined
|
|
122
141
|
/** Reason verification failed (e.g., "invalid signature", "insufficient amount"). */
|
|
123
142
|
reason?: string
|
|
124
143
|
}
|
package/src/Method.test.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Method, z } from 'mppx'
|
|
1
|
+
import { Challenge, Credential, Method, z } from 'mppx'
|
|
2
2
|
import { describe, expect, expectTypeOf, test } from 'vp/test'
|
|
3
3
|
|
|
4
4
|
describe('from', () => {
|
|
@@ -74,3 +74,104 @@ describe('from', () => {
|
|
|
74
74
|
expectTypeOf(method.schema.credential.payload).toEqualTypeOf(payloadSchema)
|
|
75
75
|
})
|
|
76
76
|
})
|
|
77
|
+
|
|
78
|
+
describe('credential execution', () => {
|
|
79
|
+
const base = Method.from({
|
|
80
|
+
name: 'alpha',
|
|
81
|
+
intent: 'charge',
|
|
82
|
+
schema: {
|
|
83
|
+
credential: { payload: z.object({ token: z.string() }) },
|
|
84
|
+
request: z.object({ amount: z.string() }),
|
|
85
|
+
},
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
function credential() {
|
|
89
|
+
return Credential.from({
|
|
90
|
+
challenge: Challenge.from({
|
|
91
|
+
id: 'challenge-id',
|
|
92
|
+
expires: new Date(Date.now() + 60_000).toISOString(),
|
|
93
|
+
intent: 'charge',
|
|
94
|
+
method: 'alpha',
|
|
95
|
+
realm: 'example.com',
|
|
96
|
+
request: { amount: '1000' },
|
|
97
|
+
}),
|
|
98
|
+
payload: { token: 'valid' },
|
|
99
|
+
})
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
test('types: requires broadcast with validate', () => {
|
|
103
|
+
// @ts-expect-error Split validation requires a terminal broadcast hook.
|
|
104
|
+
Method.toServer(base, {
|
|
105
|
+
validate: async () => ({}) as never,
|
|
106
|
+
verify: async () => ({}) as never,
|
|
107
|
+
})
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
test('types: excludes verify with broadcast', () => {
|
|
111
|
+
// @ts-expect-error A broadcast hook replaces the legacy verify hook.
|
|
112
|
+
Method.toServer(base, {
|
|
113
|
+
broadcast: async () => ({}) as never,
|
|
114
|
+
verify: async () => ({}) as never,
|
|
115
|
+
})
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
test('validates without broadcasting', async () => {
|
|
119
|
+
const calls: string[] = []
|
|
120
|
+
const method = Method.toServer(base, {
|
|
121
|
+
async validate({ credential, request }) {
|
|
122
|
+
calls.push('validate')
|
|
123
|
+
return {
|
|
124
|
+
challenge: credential.challenge,
|
|
125
|
+
credential,
|
|
126
|
+
details: {},
|
|
127
|
+
intent: 'charge',
|
|
128
|
+
method: 'alpha',
|
|
129
|
+
request,
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
async broadcast() {
|
|
133
|
+
calls.push('broadcast')
|
|
134
|
+
return {
|
|
135
|
+
method: 'alpha',
|
|
136
|
+
reference: 'reference',
|
|
137
|
+
status: 'success',
|
|
138
|
+
timestamp: new Date().toISOString(),
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
})
|
|
142
|
+
|
|
143
|
+
await Method.validateCredential([method], credential())
|
|
144
|
+
|
|
145
|
+
expect(calls).toEqual(['validate'])
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
test('revalidates before broadcasting', async () => {
|
|
149
|
+
const calls: string[] = []
|
|
150
|
+
const method = Method.toServer(base, {
|
|
151
|
+
async validate({ credential, request }) {
|
|
152
|
+
calls.push('validate')
|
|
153
|
+
return {
|
|
154
|
+
challenge: credential.challenge,
|
|
155
|
+
credential,
|
|
156
|
+
details: {},
|
|
157
|
+
intent: 'charge',
|
|
158
|
+
method: 'alpha',
|
|
159
|
+
request,
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
async broadcast() {
|
|
163
|
+
calls.push('broadcast')
|
|
164
|
+
return {
|
|
165
|
+
method: 'alpha',
|
|
166
|
+
reference: 'reference',
|
|
167
|
+
status: 'success',
|
|
168
|
+
timestamp: new Date().toISOString(),
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
})
|
|
172
|
+
|
|
173
|
+
await Method.broadcastCredential([method], credential())
|
|
174
|
+
|
|
175
|
+
expect(calls).toEqual(['validate', 'broadcast'])
|
|
176
|
+
})
|
|
177
|
+
})
|
package/src/Method.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type * as Challenge from './Challenge.js'
|
|
2
|
-
import
|
|
2
|
+
import * as Constants from './Constants.js'
|
|
3
|
+
import * as Credential from './Credential.js'
|
|
4
|
+
import * as Errors from './Errors.js'
|
|
5
|
+
import * as Expires from './Expires.js'
|
|
3
6
|
import type { ExactPartial, LooseOmit, MaybePromise } from './internal/types.js'
|
|
4
7
|
import type * as Receipt from './Receipt.js'
|
|
5
8
|
import type * as Html from './server/internal/html/config.js'
|
|
@@ -117,12 +120,72 @@ export type VerifyContext<method extends Method> = {
|
|
|
117
120
|
request: z.input<method['schema']['request']>
|
|
118
121
|
}
|
|
119
122
|
|
|
123
|
+
/** Validation hook parameters for a single method. */
|
|
124
|
+
export type ValidateContext<method extends Method> = VerifyContext<method>
|
|
125
|
+
|
|
120
126
|
/** Response hook parameters for a single method. */
|
|
121
127
|
export type RespondContext<method extends Method> = VerifyContext<method> & {
|
|
122
128
|
input: globalThis.Request
|
|
123
129
|
receipt: Receipt.Receipt
|
|
124
130
|
}
|
|
125
131
|
|
|
132
|
+
/**
|
|
133
|
+
* Non-mutating method-specific validation result.
|
|
134
|
+
*
|
|
135
|
+
* Returned by {@link ValidateFn} and exposed from `mppx.validateCredential()`.
|
|
136
|
+
* This confirms that a credential is currently acceptable to the payment
|
|
137
|
+
* method; it does not settle, reserve, or otherwise consume the payment.
|
|
138
|
+
*/
|
|
139
|
+
export type Validation<method extends Method = Method, details = unknown> = Readonly<{
|
|
140
|
+
/**
|
|
141
|
+
* The challenge echoed by the credential and accepted by the method.
|
|
142
|
+
*
|
|
143
|
+
* Callers using `Mppx.validateCredential()` receive a challenge whose HMAC,
|
|
144
|
+
* expiry, route binding, and method identity have already been checked.
|
|
145
|
+
* Lower-level `Method.validateCredential()` callers must verify challenge
|
|
146
|
+
* issuance and route binding themselves.
|
|
147
|
+
*/
|
|
148
|
+
challenge: Challenge.Challenge<
|
|
149
|
+
z.output<method['schema']['request']>,
|
|
150
|
+
method['intent'],
|
|
151
|
+
method['name']
|
|
152
|
+
>
|
|
153
|
+
/**
|
|
154
|
+
* The submitted credential with its method-specific payload parsed by the
|
|
155
|
+
* selected method schema. This is the exact credential validation examined.
|
|
156
|
+
*/
|
|
157
|
+
credential: Credential.Credential<
|
|
158
|
+
z.output<method['schema']['credential']['payload']>,
|
|
159
|
+
Challenge.Challenge<z.output<method['schema']['request']>, method['intent'], method['name']>
|
|
160
|
+
>
|
|
161
|
+
/**
|
|
162
|
+
* Method-defined, non-mutating validation data.
|
|
163
|
+
*
|
|
164
|
+
* Its shape is intentionally method-specific—for example, a recovered payer
|
|
165
|
+
* address or a simulation result. Consumers must not assume a particular
|
|
166
|
+
* shape or use it as a settlement receipt.
|
|
167
|
+
*/
|
|
168
|
+
details: details
|
|
169
|
+
/** The validated payment intent, repeated for convenient dispatch. */
|
|
170
|
+
intent: method['intent']
|
|
171
|
+
/** The validated payment method, repeated for convenient dispatch. */
|
|
172
|
+
method: method['name']
|
|
173
|
+
/**
|
|
174
|
+
* The validated method request after the method's schema transforms.
|
|
175
|
+
*
|
|
176
|
+
* For `Mppx.validateCredential()` with route options, this is the
|
|
177
|
+
* authoritative route request after defaults and request-hook transforms.
|
|
178
|
+
*/
|
|
179
|
+
request: z.output<method['schema']['request']>
|
|
180
|
+
/**
|
|
181
|
+
* Optional payer identity declared by the credential.
|
|
182
|
+
*
|
|
183
|
+
* This is an asserted identity, not independent proof of control; methods
|
|
184
|
+
* that rely on it must validate the relationship to the credential payload.
|
|
185
|
+
*/
|
|
186
|
+
source?: string | undefined
|
|
187
|
+
}>
|
|
188
|
+
|
|
126
189
|
/**
|
|
127
190
|
* A server-side configured method with verification logic.
|
|
128
191
|
*/
|
|
@@ -141,8 +204,15 @@ export type Server<
|
|
|
141
204
|
preflight?: PreflightFn<method> | undefined
|
|
142
205
|
request?: RequestFn<method> | undefined
|
|
143
206
|
respond?: RespondFn<method> | undefined
|
|
207
|
+
broadcast?: BroadcastFn<method> | undefined
|
|
144
208
|
stableBinding?: StableBindingFn<method> | undefined
|
|
145
209
|
transport?: transportOverride | undefined
|
|
210
|
+
validate?: ValidateFn<method> | undefined
|
|
211
|
+
/**
|
|
212
|
+
* @deprecated Use `validate` for the non-mutating pre-check and `broadcast`
|
|
213
|
+
* for settlement. `verify` combines both operations and may consume payment
|
|
214
|
+
* state, so it cannot support a safe pre-check endpoint.
|
|
215
|
+
*/
|
|
146
216
|
verify: VerifyFn<method>
|
|
147
217
|
}
|
|
148
218
|
export type AnyServer = Server<any, any, any, any, any>
|
|
@@ -221,11 +291,148 @@ export type StableBindingFn<method extends Method> = (
|
|
|
221
291
|
request: z.output<method['schema']['request']>,
|
|
222
292
|
) => Record<string, unknown>
|
|
223
293
|
|
|
224
|
-
/**
|
|
294
|
+
/**
|
|
295
|
+
* Legacy combined validation and settlement function for a single method.
|
|
296
|
+
*
|
|
297
|
+
* @deprecated Implement `validate` and `broadcast` instead. `validate` must
|
|
298
|
+
* be non-mutating; `broadcast` performs the terminal payment operation. This
|
|
299
|
+
* hook remains only for existing methods that cannot yet split those phases.
|
|
300
|
+
*/
|
|
225
301
|
export type VerifyFn<method extends Method> = (
|
|
226
302
|
parameters: VerifyContext<method>,
|
|
227
303
|
) => Promise<Receipt.Receipt>
|
|
228
304
|
|
|
305
|
+
/**
|
|
306
|
+
* Non-mutating validation function for a single method.
|
|
307
|
+
*
|
|
308
|
+
* @returns A {@link Validation} record describing the credential that was
|
|
309
|
+
* accepted. It must not settle, reserve, or otherwise consume payment state.
|
|
310
|
+
*/
|
|
311
|
+
export type ValidateFn<method extends Method> = (
|
|
312
|
+
parameters: ValidateContext<method>,
|
|
313
|
+
) => Promise<Validation<method>>
|
|
314
|
+
|
|
315
|
+
/** Terminal payment function for a single method. */
|
|
316
|
+
export type BroadcastFn<method extends Method> = (
|
|
317
|
+
parameters: VerifyContext<method>,
|
|
318
|
+
) => Promise<Receipt.Receipt>
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Validates a credential against one of the configured methods.
|
|
322
|
+
*
|
|
323
|
+
* This checks credential structure, challenge expiry, and method-specific
|
|
324
|
+
* validation. It does not prove that the challenge was issued by a particular
|
|
325
|
+
* server; hosts that issue challenges must verify that binding separately.
|
|
326
|
+
*/
|
|
327
|
+
export async function validateCredential<const methods extends readonly AnyServer[]>(
|
|
328
|
+
methods: methods,
|
|
329
|
+
input: string | Credential.Credential,
|
|
330
|
+
): Promise<Validation<methods[number]>> {
|
|
331
|
+
const prepared = prepareCredential(methods, input)
|
|
332
|
+
if (!prepared.method.validate)
|
|
333
|
+
throw new Errors.VerificationFailedError({
|
|
334
|
+
details: { intent: prepared.method.intent, method: prepared.method.name },
|
|
335
|
+
reason: `${prepared.method.name}/${prepared.method.intent} does not support non-mutating credential validation`,
|
|
336
|
+
})
|
|
337
|
+
return prepared.method.validate({
|
|
338
|
+
credential: prepared.credential,
|
|
339
|
+
request: prepared.request,
|
|
340
|
+
} as never) as Promise<Validation<methods[number]>>
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* Re-validates and performs the terminal payment operation for a credential.
|
|
345
|
+
*
|
|
346
|
+
* This does not prove that the challenge was issued by a particular server;
|
|
347
|
+
* hosts that issue challenges must verify that binding separately.
|
|
348
|
+
*/
|
|
349
|
+
export async function broadcastCredential<const methods extends readonly AnyServer[]>(
|
|
350
|
+
methods: methods,
|
|
351
|
+
input: string | Credential.Credential,
|
|
352
|
+
): Promise<Receipt.Receipt> {
|
|
353
|
+
const prepared = prepareCredential(methods, input)
|
|
354
|
+
const { method } = prepared
|
|
355
|
+
|
|
356
|
+
if (method.broadcast && method.validate)
|
|
357
|
+
await method.validate({ credential: prepared.credential, request: prepared.request } as never)
|
|
358
|
+
|
|
359
|
+
const broadcast = method.broadcast ?? method.verify
|
|
360
|
+
return broadcast({ credential: prepared.credential, request: prepared.request } as never)
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Parses a submitted credential into the inputs required for method execution.
|
|
365
|
+
*
|
|
366
|
+
* Dispatch is based on the challenge method and intent. When more than one
|
|
367
|
+
* server method handles the same wire identity, session protocol details select
|
|
368
|
+
* the appropriate implementation. The helper then asserts challenge expiry and
|
|
369
|
+
* parses the method-specific credential payload before returning the selected
|
|
370
|
+
* method and the unmodified challenge request.
|
|
371
|
+
*
|
|
372
|
+
* This intentionally does not verify that the challenge was issued by a
|
|
373
|
+
* particular host, authorize the caller or requested resource, validate the
|
|
374
|
+
* method request, or invoke method lifecycle hooks. Hosts that issue challenges
|
|
375
|
+
* must verify their challenge binding before accepting the credential.
|
|
376
|
+
*/
|
|
377
|
+
function prepareCredential(
|
|
378
|
+
methods: readonly AnyServer[],
|
|
379
|
+
input: string | Credential.Credential,
|
|
380
|
+
): {
|
|
381
|
+
credential: Credential.Credential
|
|
382
|
+
method: AnyServer
|
|
383
|
+
request: Record<string, unknown>
|
|
384
|
+
} {
|
|
385
|
+
const credential = typeof input === 'string' ? Credential.deserialize(input) : input
|
|
386
|
+
const candidates = methods.filter(
|
|
387
|
+
(method) =>
|
|
388
|
+
method.name === credential.challenge.method && method.intent === credential.challenge.intent,
|
|
389
|
+
)
|
|
390
|
+
const method = selectServerMethod(candidates, credential.challenge)
|
|
391
|
+
if (!method)
|
|
392
|
+
throw new Errors.InvalidChallengeError({
|
|
393
|
+
id: credential.challenge.id,
|
|
394
|
+
reason: `no registered method for ${credential.challenge.method}/${credential.challenge.intent}`,
|
|
395
|
+
})
|
|
396
|
+
|
|
397
|
+
Expires.assert(credential.challenge.expires, credential.challenge.id)
|
|
398
|
+
|
|
399
|
+
let payload: unknown
|
|
400
|
+
try {
|
|
401
|
+
payload = method.schema.credential.payload.parse(credential.payload)
|
|
402
|
+
} catch (error) {
|
|
403
|
+
throw new Errors.InvalidPayloadError(error instanceof Error ? { reason: error.message } : {})
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
return {
|
|
407
|
+
credential: { ...credential, payload },
|
|
408
|
+
method,
|
|
409
|
+
request: credential.challenge.request,
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/** @internal */
|
|
414
|
+
export function selectServerMethod(
|
|
415
|
+
methods: readonly AnyServer[],
|
|
416
|
+
challenge: Challenge.Challenge,
|
|
417
|
+
): AnyServer | undefined {
|
|
418
|
+
if (methods.length <= 1) return methods[0]
|
|
419
|
+
if (
|
|
420
|
+
challenge.method !== Constants.Methods.tempo ||
|
|
421
|
+
challenge.intent !== Constants.Intents.session
|
|
422
|
+
)
|
|
423
|
+
return methods[0]
|
|
424
|
+
|
|
425
|
+
const sessionProtocol = Constants.getMethodDetail(
|
|
426
|
+
challenge.request.methodDetails,
|
|
427
|
+
Constants.MethodDetailKeys.sessionProtocol,
|
|
428
|
+
)
|
|
429
|
+
if (sessionProtocol === undefined || sessionProtocol === Constants.SessionProtocols.v1)
|
|
430
|
+
return methods.find((method) => method.alias === 'sessionLegacy') ?? methods[0]
|
|
431
|
+
if (sessionProtocol === Constants.SessionProtocols.v2)
|
|
432
|
+
return methods.find((method) => method.alias === undefined) ?? methods[0]
|
|
433
|
+
return undefined
|
|
434
|
+
}
|
|
435
|
+
|
|
229
436
|
/**
|
|
230
437
|
* Optional respond function for a server-side method.
|
|
231
438
|
*
|
|
@@ -336,10 +543,22 @@ export function toServer<
|
|
|
336
543
|
preflight,
|
|
337
544
|
request,
|
|
338
545
|
respond,
|
|
546
|
+
broadcast,
|
|
339
547
|
stableBinding,
|
|
340
548
|
transport,
|
|
549
|
+
validate,
|
|
341
550
|
verify,
|
|
342
551
|
} = options
|
|
552
|
+
const effectiveVerify =
|
|
553
|
+
verify ??
|
|
554
|
+
(async (parameters: VerifyContext<method>) => {
|
|
555
|
+
if (validate) await validate(parameters)
|
|
556
|
+
if (!broadcast)
|
|
557
|
+
throw new Errors.VerificationFailedError({
|
|
558
|
+
reason: `${method.name}/${method.intent} does not support credential broadcast`,
|
|
559
|
+
})
|
|
560
|
+
return broadcast(parameters)
|
|
561
|
+
})
|
|
343
562
|
return {
|
|
344
563
|
...method,
|
|
345
564
|
alias,
|
|
@@ -350,9 +569,11 @@ export function toServer<
|
|
|
350
569
|
preflight,
|
|
351
570
|
request,
|
|
352
571
|
respond,
|
|
572
|
+
broadcast,
|
|
353
573
|
stableBinding,
|
|
354
574
|
transport,
|
|
355
|
-
|
|
575
|
+
validate,
|
|
576
|
+
verify: effectiveVerify,
|
|
356
577
|
} as Server<method, defaults, transportOverride, extensions, toServer.Alias<options>>
|
|
357
578
|
}
|
|
358
579
|
|
|
@@ -376,6 +597,21 @@ export declare namespace toServer {
|
|
|
376
597
|
respond?: RespondFn<method> | undefined
|
|
377
598
|
stableBinding?: StableBindingFn<method> | undefined
|
|
378
599
|
transport?: transportOverride | Transport.AnyTransport | undefined
|
|
379
|
-
|
|
380
|
-
|
|
600
|
+
} & (
|
|
601
|
+
| {
|
|
602
|
+
broadcast: BroadcastFn<method>
|
|
603
|
+
validate?: ValidateFn<method> | undefined
|
|
604
|
+
verify?: undefined
|
|
605
|
+
}
|
|
606
|
+
| {
|
|
607
|
+
broadcast?: undefined
|
|
608
|
+
validate?: undefined
|
|
609
|
+
/**
|
|
610
|
+
* @deprecated Use `validate` and `broadcast` for new methods. This
|
|
611
|
+
* combined hook may mutate payment state and cannot power a safe
|
|
612
|
+
* validation-only endpoint.
|
|
613
|
+
*/
|
|
614
|
+
verify: VerifyFn<method>
|
|
615
|
+
}
|
|
616
|
+
)
|
|
381
617
|
}
|