mppx 0.8.6 → 0.8.7
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 +13 -0
- package/dist/cli/internal.js +2 -2
- package/dist/cli/internal.js.map +1 -1
- package/dist/cli/plugins/evm.d.ts +2 -0
- package/dist/cli/plugins/evm.d.ts.map +1 -0
- package/dist/cli/plugins/evm.js +51 -0
- package/dist/cli/plugins/evm.js.map +1 -0
- package/dist/cli/plugins/index.d.ts +1 -0
- package/dist/cli/plugins/index.d.ts.map +1 -1
- package/dist/cli/plugins/index.js +1 -0
- package/dist/cli/plugins/index.js.map +1 -1
- package/dist/cli/validate/challenge.d.ts +2 -0
- package/dist/cli/validate/challenge.d.ts.map +1 -1
- package/dist/cli/validate/challenge.js +184 -78
- package/dist/cli/validate/challenge.js.map +1 -1
- package/dist/cli/validate/discovery.d.ts +1 -0
- package/dist/cli/validate/discovery.d.ts.map +1 -1
- package/dist/cli/validate/discovery.js +99 -35
- package/dist/cli/validate/discovery.js.map +1 -1
- package/dist/cli/validate/helpers.d.ts +14 -1
- package/dist/cli/validate/helpers.d.ts.map +1 -1
- package/dist/cli/validate/helpers.js +0 -13
- package/dist/cli/validate/helpers.js.map +1 -1
- package/dist/cli/validate/index.d.ts +1 -0
- package/dist/cli/validate/index.d.ts.map +1 -1
- package/dist/cli/validate/index.js +98 -151
- package/dist/cli/validate/index.js.map +1 -1
- package/dist/cli/validate/payment.d.ts +1 -0
- package/dist/cli/validate/payment.d.ts.map +1 -1
- package/dist/cli/validate/payment.js +215 -144
- package/dist/cli/validate/payment.js.map +1 -1
- package/dist/evm/Chains.d.ts +4 -0
- package/dist/evm/Chains.d.ts.map +1 -1
- package/dist/evm/Chains.js +4 -0
- package/dist/evm/Chains.js.map +1 -1
- package/dist/internal/AcceptPayment.d.ts.map +1 -1
- package/dist/internal/AcceptPayment.js +7 -1
- package/dist/internal/AcceptPayment.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/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/server/internal/request-body.d.ts.map +1 -1
- package/dist/tempo/server/internal/request-body.js +2 -0
- package/dist/tempo/server/internal/request-body.js.map +1 -1
- package/dist/tempo/session/server/ChannelStore.js +4 -4
- package/dist/tempo/session/server/ChannelStore.js.map +1 -1
- package/dist/tempo/session/server/CredentialVerification.d.ts +8 -0
- package/dist/tempo/session/server/CredentialVerification.d.ts.map +1 -1
- package/dist/tempo/session/server/CredentialVerification.js +21 -1
- package/dist/tempo/session/server/CredentialVerification.js.map +1 -1
- package/dist/tempo/session/server/Session.d.ts.map +1 -1
- package/dist/tempo/session/server/Session.js +1 -0
- package/dist/tempo/session/server/Session.js.map +1 -1
- package/dist/validation/core.d.ts +79 -0
- package/dist/validation/core.d.ts.map +1 -0
- package/dist/validation/core.js +256 -0
- package/dist/validation/core.js.map +1 -0
- package/dist/validation/index.d.ts +3 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +2 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/x402/Assets.d.ts +9 -0
- package/dist/x402/Assets.d.ts.map +1 -1
- package/dist/x402/Assets.js +38 -0
- package/dist/x402/Assets.js.map +1 -1
- package/package.json +9 -4
- package/src/cli/internal.ts +2 -2
- package/src/cli/plugins/evm.ts +55 -0
- package/src/cli/plugins/index.ts +1 -0
- package/src/cli/validate/challenge.ts +334 -121
- package/src/cli/validate/discovery.test.ts +307 -0
- package/src/cli/validate/discovery.ts +104 -38
- package/src/cli/validate/helpers.ts +15 -13
- package/src/cli/validate/index.ts +117 -240
- package/src/cli/validate/payment.ts +261 -178
- package/src/cli/validate.test.ts +143 -3
- package/src/client/internal/Fetch.test.ts +142 -2
- package/src/evm/Chains.ts +6 -0
- package/src/evm/PublicInterface.test-d.ts +7 -0
- package/src/internal/AcceptPayment.test.ts +45 -0
- package/src/internal/AcceptPayment.ts +11 -1
- package/src/stripe/server/internal/html/package.json +1 -1
- package/src/stripe/server/internal/html.gen.ts +1 -1
- package/src/tempo/server/internal/html/package.json +1 -1
- package/src/tempo/server/internal/html.gen.ts +1 -1
- package/src/tempo/server/internal/request-body.test.ts +9 -0
- package/src/tempo/server/internal/request-body.ts +2 -0
- package/src/tempo/session/server/ChannelStore.test.ts +17 -0
- package/src/tempo/session/server/ChannelStore.ts +4 -4
- package/src/tempo/session/server/CredentialVerification.test.ts +118 -1
- package/src/tempo/session/server/CredentialVerification.ts +30 -0
- package/src/tempo/session/server/Session.integration.test.ts +5 -0
- package/src/tempo/session/server/Session.test.ts +119 -53
- package/src/tempo/session/server/Session.ts +1 -0
- package/src/validation/core.ts +348 -0
- package/src/validation/index.ts +11 -0
- package/src/x402/Assets.test.ts +42 -0
- package/src/x402/Assets.ts +40 -0
- package/src/x402/Exact.localnet.test.ts +475 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# mppx
|
|
2
2
|
|
|
3
|
+
## 0.8.7
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 38c8229: Added Celo and Celo Sepolia to known EVM chains and assets: `chains.celo`, `chains.celoSepolia`, `assets.celo.USDC`, `assets.celo.USDT`, and `assets.celoSepolia.USDC`.
|
|
8
|
+
- 264f079: Fixed session voucher replay checks for settled vouchers and mismatched credential sources.
|
|
9
|
+
- 89bd31e: Fixed empty Tempo session voucher POSTs being treated as application requests by HTTP adapters that expose empty body streams.
|
|
10
|
+
- 33a7c52: Updated client negotiation to prefer Payment-auth challenges before x402 challenges.
|
|
11
|
+
- d3d9d81: `mppx validate`: Multi-challenge support (parses all payment methods from WWW-Authenticate), per-method field validation for Stripe/EVM/Tempo, streaming CLI output, fixed URL resolution for subpaths, and improved error reporting for malformed challenges.
|
|
12
|
+
- 1157a26: `mppx validate`: EVM payment testing support. Uses the same wallet as Tempo to sign EIP-3009 authorizations, with pre-flight ERC-20 balance checks and chain-aware explorer links.
|
|
13
|
+
- fd45726: Added programmatic validation API (`mppx/validation` export), OpenAPI path parameter substitution, x402 protocol detection, multi-path discovery fallback, and `--outputJson` CLI flag.
|
|
14
|
+
- 86eb98c: `mppx validate`: Stream results as each phase completes instead of batching until the end. Discovery and challenge checks now appear before the payment prompt.
|
|
15
|
+
|
|
3
16
|
## 0.8.6
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
package/dist/cli/internal.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as fs from 'node:fs';
|
|
2
2
|
import * as path from 'node:path';
|
|
3
3
|
import * as AcceptPayment from '../internal/AcceptPayment.js';
|
|
4
|
-
import { stripe as stripePlugin, tempo as tempoPlugin } from './plugins/index.js';
|
|
5
|
-
const builtinPlugins = [tempoPlugin(), stripePlugin()];
|
|
4
|
+
import { evm as evmPlugin, stripe as stripePlugin, tempo as tempoPlugin } from './plugins/index.js';
|
|
5
|
+
const builtinPlugins = [tempoPlugin(), stripePlugin(), evmPlugin()];
|
|
6
6
|
export function resolvePlugin(challenge, config) {
|
|
7
7
|
const configPlugin = config?.plugins?.find((p) => supportsPlugin(p, challenge));
|
|
8
8
|
if (configPlugin)
|
package/dist/cli/internal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../../src/cli/internal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAGjC,OAAO,KAAK,aAAa,MAAM,8BAA8B,CAAA;AAG7D,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../../src/cli/internal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../../src/cli/plugins/evm.ts"],"names":[],"mappings":"AAQA,wBAAgB,GAAG,iCAyClB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { createClient, erc20Abi, http } from 'viem';
|
|
2
|
+
import { readContract } from 'viem/actions';
|
|
3
|
+
import * as viemChains from 'viem/chains';
|
|
4
|
+
import { evm as evmMethods, assets as evmAssets } from '../../evm/client/index.js';
|
|
5
|
+
import { resolveAccount } from '../account.js';
|
|
6
|
+
import { createPlugin } from './plugin.js';
|
|
7
|
+
export function evm() {
|
|
8
|
+
return createPlugin({
|
|
9
|
+
method: 'evm',
|
|
10
|
+
async setup({ challenge }) {
|
|
11
|
+
const request = challenge.request;
|
|
12
|
+
const methodDetails = request.methodDetails;
|
|
13
|
+
const chainId = methodDetails?.chainId;
|
|
14
|
+
const chain = chainId ? resolveChain(chainId) : undefined;
|
|
15
|
+
const currency = request.currency;
|
|
16
|
+
const account = await resolveAccount();
|
|
17
|
+
// Known assets provide EIP-712 domain metadata (token name/version) needed for EIP-3009 signing
|
|
18
|
+
const knownCurrencies = [
|
|
19
|
+
...Object.values(evmAssets.base),
|
|
20
|
+
...Object.values(evmAssets.baseSepolia),
|
|
21
|
+
...Object.values(evmAssets.celo),
|
|
22
|
+
...Object.values(evmAssets.celoSepolia),
|
|
23
|
+
];
|
|
24
|
+
let tokenSymbol = currency ?? '';
|
|
25
|
+
if (chain && currency) {
|
|
26
|
+
try {
|
|
27
|
+
const client = createClient({ chain, transport: http() });
|
|
28
|
+
const symbol = await readContract(client, {
|
|
29
|
+
address: currency,
|
|
30
|
+
abi: erc20Abi,
|
|
31
|
+
functionName: 'symbol',
|
|
32
|
+
});
|
|
33
|
+
if (symbol)
|
|
34
|
+
tokenSymbol = symbol;
|
|
35
|
+
}
|
|
36
|
+
catch { }
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
tokenSymbol,
|
|
40
|
+
tokenDecimals: methodDetails?.decimals ?? 6,
|
|
41
|
+
explorerUrl: chain?.blockExplorers?.default?.url,
|
|
42
|
+
methods: [...evmMethods({ account, currencies: knownCurrencies })],
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function resolveChain(chainId) {
|
|
48
|
+
const all = Object.values(viemChains);
|
|
49
|
+
return all.find((c) => c.id === chainId);
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=evm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evm.js","sourceRoot":"","sources":["../../../src/cli/plugins/evm.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,KAAK,UAAU,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,GAAG,IAAI,UAAU,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,UAAU,GAAG;IACjB,OAAO,YAAY,CAAC;QAClB,MAAM,EAAE,KAAK;QAEb,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE;YACvB,MAAM,OAAO,GAAG,SAAS,CAAC,OAAkC,CAAA;YAC5D,MAAM,aAAa,GAAG,OAAO,CAAC,aAAoD,CAAA;YAClF,MAAM,OAAO,GAAG,aAAa,EAAE,OAA6B,CAAA;YAC5D,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAA8B,CAAA;YAEvD,MAAM,OAAO,GAAG,MAAM,cAAc,EAAE,CAAA;YACtC,gGAAgG;YAChG,MAAM,eAAe,GAAG;gBACtB,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;gBAChC,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC;gBACvC,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;gBAChC,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC;aACxC,CAAA;YAED,IAAI,WAAW,GAAG,QAAQ,IAAI,EAAE,CAAA;YAChC,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;gBACtB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;oBACzD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE;wBACxC,OAAO,EAAE,QAAmB;wBAC5B,GAAG,EAAE,QAAQ;wBACb,YAAY,EAAE,QAAQ;qBACvB,CAAC,CAAA;oBACF,IAAI,MAAM;wBAAE,WAAW,GAAG,MAAM,CAAA;gBAClC,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC;YAED,OAAO;gBACL,WAAW;gBACX,aAAa,EAAG,aAAa,EAAE,QAA+B,IAAI,CAAC;gBACnE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG;gBAChD,OAAO,EAAE,CAAC,GAAG,UAAU,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC;aACnE,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAY,CAAA;IAChD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;AAC1C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAe,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAe,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as Challenge from '../../Challenge.js';
|
|
1
2
|
import type { CheckResult, EndpointSpec } from './helpers.js';
|
|
2
3
|
export declare function validateChallenge(baseUrl: string, endpoint: EndpointSpec, verbose: boolean, options?: {
|
|
3
4
|
body?: string | undefined;
|
|
@@ -6,6 +7,7 @@ export declare function validateChallenge(baseUrl: string, endpoint: EndpointSpe
|
|
|
6
7
|
}): Promise<{
|
|
7
8
|
results: CheckResult[];
|
|
8
9
|
resolvedBody?: string | undefined;
|
|
10
|
+
challenges?: Challenge.Challenge[] | undefined;
|
|
9
11
|
}>;
|
|
10
12
|
export declare function validateErrorHandling(baseUrl: string, endpoint: EndpointSpec, options?: {
|
|
11
13
|
body?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"challenge.d.ts","sourceRoot":"","sources":["../../../src/cli/validate/challenge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"challenge.d.ts","sourceRoot":"","sources":["../../../src/cli/validate/challenge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAA;AAM/C,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAoB7D,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;IACR,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;CACnD,GACA,OAAO,CAAC;IACT,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,UAAU,CAAC,EAAE,SAAS,CAAC,SAAS,EAAE,GAAG,SAAS,CAAA;CAC/C,CAAC,CAoJD;AA+QD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,YAAY,EACtB,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;CAAE,GACpE,OAAO,CAAC,WAAW,EAAE,CAAC,CAuDxB"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import * as Challenge from '../../Challenge.js';
|
|
2
2
|
import * as Constants from '../../Constants.js';
|
|
3
3
|
import { chainId as tempoChainIds } from '../../tempo/internal/defaults.js';
|
|
4
|
+
import * as x402Header from '../../x402/Header.js';
|
|
4
5
|
import { pc } from '../utils.js';
|
|
5
|
-
import { extractRequestBodyFromDiscovery } from './discovery.js';
|
|
6
|
-
import {
|
|
6
|
+
import { buildUrl, extractRequestBodyFromDiscovery } from './discovery.js';
|
|
7
|
+
import { check, fail, fetchWithTimeout, isValidAddress, isValidIntegerAmount, skip, warn, } from './helpers.js';
|
|
7
8
|
function detectTestnet(challenge) {
|
|
8
9
|
const request = challenge.request;
|
|
9
10
|
const methodDetails = request.methodDetails;
|
|
@@ -69,7 +70,14 @@ export async function validateChallenge(baseUrl, endpoint, verbose, options) {
|
|
|
69
70
|
// Check WWW-Authenticate header
|
|
70
71
|
const wwwAuth = response.headers.get(Constants.Headers.wwwAuthenticate);
|
|
71
72
|
if (!wwwAuth) {
|
|
72
|
-
|
|
73
|
+
const x402Results = checkX402Headers(response);
|
|
74
|
+
if (x402Results.length > 0) {
|
|
75
|
+
results.push(skip('Not an MPP endpoint', 'No WWW-Authenticate header — x402 protocol detected'));
|
|
76
|
+
results.push(...x402Results);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
results.push(skip('Not an MPP endpoint', 'No WWW-Authenticate header (may be x402 or other protocol)'));
|
|
80
|
+
}
|
|
73
81
|
return { results };
|
|
74
82
|
}
|
|
75
83
|
if (!wwwAuth.startsWith(`${Constants.Schemes.payment} `)) {
|
|
@@ -77,97 +85,178 @@ export async function validateChallenge(baseUrl, endpoint, verbose, options) {
|
|
|
77
85
|
return { results };
|
|
78
86
|
}
|
|
79
87
|
results.push(check('WWW-Authenticate header present', 'Payment scheme'));
|
|
80
|
-
// Parse
|
|
81
|
-
let
|
|
88
|
+
// Parse all challenges
|
|
89
|
+
let challenges;
|
|
82
90
|
try {
|
|
83
|
-
|
|
91
|
+
challenges = Challenge.fromResponseList(response);
|
|
84
92
|
}
|
|
85
93
|
catch (error) {
|
|
86
|
-
|
|
94
|
+
const msg = error.message;
|
|
95
|
+
results.push(fail('Challenge parseable', msg, 'The Payment challenge must include a request="<base64url>" parameter containing JSON-encoded payment details.'));
|
|
96
|
+
const rawParams = wwwAuth.slice(wwwAuth.indexOf(' ') + 1);
|
|
97
|
+
results.push(warn('Received', rawParams.length > 200 ? rawParams.slice(0, 200) + '...' : rawParams));
|
|
87
98
|
return { results };
|
|
88
99
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
100
|
+
if (challenges.length === 0) {
|
|
101
|
+
results.push(fail('Challenge parseable', 'No Payment challenges found in header'));
|
|
102
|
+
return { results };
|
|
103
|
+
}
|
|
104
|
+
const methodList = challenges.map((c) => `${c.method}/${c.intent}`).join(', ');
|
|
105
|
+
results.push(check('Challenge parseable', challenges.length === 1 ? methodList : `${challenges.length} methods: ${methodList}`));
|
|
106
|
+
// Validate common fields across all challenges
|
|
107
|
+
const serverHost = new URL(baseUrl).hostname;
|
|
108
|
+
validateIds(challenges, results);
|
|
109
|
+
validateRealms(challenges, results);
|
|
110
|
+
validateExpiration(challenges, results);
|
|
111
|
+
validateRealmMatchesHost(challenges, serverHost, results);
|
|
112
|
+
// Method-specific validation
|
|
113
|
+
const hasMultipleMethods = challenges.length > 1;
|
|
114
|
+
for (const ch of challenges) {
|
|
115
|
+
const request = ch.request;
|
|
116
|
+
validateMethodFields(ch, request, results, hasMultipleMethods);
|
|
117
|
+
}
|
|
118
|
+
if (verbose) {
|
|
119
|
+
for (const ch of challenges) {
|
|
120
|
+
console.log(pc.dim(` Challenge (${ch.method}/${ch.intent}): ${JSON.stringify(ch, null, 2)}`));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return { results, resolvedBody: fetchBody, challenges };
|
|
124
|
+
}
|
|
125
|
+
function validateIds(challenges, results) {
|
|
126
|
+
const missing = challenges.filter((ch) => !ch.id);
|
|
127
|
+
if (missing.length === 0) {
|
|
94
128
|
results.push(check('Challenge has id'));
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
results.push(fail('Challenge has id', `${missing.length} missing`, 'Every challenge must include a unique id field.'));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function validateRealms(challenges, results) {
|
|
135
|
+
const missing = challenges.filter((ch) => !ch.realm);
|
|
136
|
+
if (missing.length === 0) {
|
|
98
137
|
results.push(check('Challenge has realm'));
|
|
99
|
-
if (!challenge.method)
|
|
100
|
-
results.push(fail('Challenge has method', undefined, 'Set method to the payment method (e.g. "tempo", "stripe").'));
|
|
101
|
-
if (!challenge.intent)
|
|
102
|
-
results.push(fail('Challenge has intent', undefined, 'Set intent to the payment type (e.g. "charge", "session").'));
|
|
103
|
-
// Semantic checks
|
|
104
|
-
if (challenge.expires) {
|
|
105
|
-
const expiresDate = new Date(challenge.expires);
|
|
106
|
-
const now = new Date();
|
|
107
|
-
if (expiresDate <= now) {
|
|
108
|
-
results.push(fail('Challenge expires in the future', `Expired at ${challenge.expires}`, 'The expires timestamp must be in the future when the challenge is issued. Use a 5-10 minute window from the current time.'));
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
const diffMs = expiresDate.getTime() - now.getTime();
|
|
112
|
-
const diffMin = Math.round(diffMs / 60000);
|
|
113
|
-
results.push(check('Challenge expires in the future', `${diffMin}m from now`));
|
|
114
|
-
}
|
|
115
138
|
}
|
|
116
139
|
else {
|
|
117
|
-
results.push(
|
|
140
|
+
results.push(fail('Challenge has realm', `${missing.length} missing`, "Set realm to your server's hostname."));
|
|
118
141
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
142
|
+
}
|
|
143
|
+
function validateExpiration(challenges, results) {
|
|
144
|
+
const now = new Date();
|
|
145
|
+
for (const ch of challenges) {
|
|
146
|
+
if (!ch.expires) {
|
|
147
|
+
results.push(warn('Challenge has expiration', 'missing expires field', 'Add an expires field (ISO 8601) to prevent replay attacks.'));
|
|
148
|
+
return;
|
|
126
149
|
}
|
|
127
|
-
|
|
128
|
-
results.push(
|
|
150
|
+
if (new Date(ch.expires) <= now) {
|
|
151
|
+
results.push(fail('Challenge expires in the future', `Expired at ${ch.expires}`, 'The expires timestamp must be in the future.'));
|
|
152
|
+
return;
|
|
129
153
|
}
|
|
130
154
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
results.push(fail('Valid recipient address', `Got: ${String(request.recipient)}`, 'Set request.recipient to a valid 0x-prefixed 40-hex-char address. This is where payment will be sent.'));
|
|
140
|
-
}
|
|
141
|
-
if (isValidAddress(request.currency)) {
|
|
142
|
-
const isTestnet = detectTestnet(challenge);
|
|
143
|
-
const network = isTestnet ? 'testnet' : 'mainnet';
|
|
144
|
-
results.push(check('Valid currency address', `${network}`));
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
results.push(fail('Valid currency address', `Got: ${String(request.currency)}`, 'Set request.currency to a valid token address. Common: "0x20c0000000000000000000000000000000000000" (PathUSD).'));
|
|
148
|
-
}
|
|
149
|
-
if (isValidIntegerAmount(request.amount)) {
|
|
150
|
-
results.push(check('Amount is valid integer string'));
|
|
151
|
-
}
|
|
152
|
-
else if (request.amount === undefined || request.amount === null) {
|
|
153
|
-
results.push(warn('Amount is valid integer string', 'No amount (dynamic pricing?)', 'Set request.amount to a string of digits in the token\'s smallest unit (e.g. "10000" = $0.01 for 6-decimal tokens).'));
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
results.push(fail('Amount is valid integer string', `Got: ${String(request.amount)}`, 'request.amount must be a string of digits (no decimals, no prefix). Example: "10000" for $0.01 with 6-decimal tokens.'));
|
|
157
|
-
}
|
|
155
|
+
const soonest = Math.min(...challenges.map((ch) => new Date(ch.expires).getTime() - now.getTime()));
|
|
156
|
+
results.push(check('Challenge expires in the future', `${Math.round(soonest / 60000)}m from now`));
|
|
157
|
+
}
|
|
158
|
+
function validateRealmMatchesHost(challenges, serverHost, results) {
|
|
159
|
+
const realms = [...new Set(challenges.map((ch) => ch.realm ?? ''))];
|
|
160
|
+
const badRealms = realms.filter((r) => r && r !== serverHost && !serverHost.endsWith(`.${r}`));
|
|
161
|
+
if (badRealms.length > 0) {
|
|
162
|
+
results.push(warn('Realm matches server hostname', `realm="${badRealms[0]}" vs host="${serverHost}"`, 'Set the realm to your production hostname (or base domain) in the challenge.'));
|
|
158
163
|
}
|
|
159
|
-
else
|
|
160
|
-
|
|
161
|
-
results.push(check('Stripe challenge has amount'));
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
results.push(warn('Stripe challenge has amount', 'No amount field'));
|
|
165
|
-
}
|
|
164
|
+
else {
|
|
165
|
+
results.push(check('Realm matches server hostname'));
|
|
166
166
|
}
|
|
167
|
-
|
|
168
|
-
|
|
167
|
+
}
|
|
168
|
+
function validateMethodFields(challenge, request, results, hasMultipleMethods) {
|
|
169
|
+
const tag = hasMultipleMethods ? `[${challenge.method}] ` : '';
|
|
170
|
+
if (challenge.method === Constants.Methods.tempo)
|
|
171
|
+
validateTempoFields(request, tag, results, challenge);
|
|
172
|
+
else if (challenge.method === Constants.Methods.stripe)
|
|
173
|
+
validateStripeFields(request, tag, results);
|
|
174
|
+
else if (challenge.method === Constants.Methods.evm)
|
|
175
|
+
validateEvmFields(request, tag, results);
|
|
176
|
+
}
|
|
177
|
+
function validateTempoFields(request, tag, results, challenge) {
|
|
178
|
+
const methodDetails = request.methodDetails;
|
|
179
|
+
const hasSplits = Array.isArray(methodDetails?.splits) && methodDetails.splits.length > 0;
|
|
180
|
+
if (isValidAddress(request.recipient)) {
|
|
181
|
+
results.push(check(`${tag}Valid recipient address`));
|
|
182
|
+
}
|
|
183
|
+
else if (request.recipient === undefined && hasSplits) {
|
|
184
|
+
results.push(check(`${tag}Uses splits (no single recipient)`));
|
|
185
|
+
}
|
|
186
|
+
else if (request.recipient === undefined) {
|
|
187
|
+
results.push(fail(`${tag}Valid recipient address`, 'Missing recipient (and no splits defined)', 'Set request.recipient to a valid 0x address, or use methodDetails.splits for multiple recipients.'));
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
results.push(fail(`${tag}Valid recipient address`, `Got: ${String(request.recipient)}`, 'Set request.recipient to a valid 0x-prefixed 40-hex-char address.'));
|
|
191
|
+
}
|
|
192
|
+
if (isValidAddress(request.currency)) {
|
|
193
|
+
const network = detectTestnet(challenge) ? 'testnet' : 'mainnet';
|
|
194
|
+
results.push(check(`${tag}Valid currency address`, network));
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
results.push(fail(`${tag}Valid currency address`, `Got: ${String(request.currency)}`, 'Set request.currency to a valid token address.'));
|
|
198
|
+
}
|
|
199
|
+
validateAmount(request, tag, results, 'token\'s smallest unit (e.g. "10000" = $0.01 for 6-decimal tokens)');
|
|
200
|
+
}
|
|
201
|
+
function validateStripeFields(request, tag, results) {
|
|
202
|
+
validateAmount(request, tag, results, 'currency\'s smallest unit (e.g. "100" = $1.00 for USD)');
|
|
203
|
+
const currency = request.currency;
|
|
204
|
+
const validCurrency = typeof currency === 'string' && /^[a-z]{3}$/i.test(currency);
|
|
205
|
+
if (validCurrency) {
|
|
206
|
+
results.push(check(`${tag}Valid currency code`, currency.toUpperCase()));
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
results.push(fail(`${tag}Valid currency code`, currency ? `Got: ${currency}` : 'missing', 'Must be a three-letter ISO currency code (e.g. "usd").'));
|
|
210
|
+
}
|
|
211
|
+
const methodDetails = request.methodDetails;
|
|
212
|
+
const networkId = methodDetails?.networkId;
|
|
213
|
+
if (networkId) {
|
|
214
|
+
results.push(check(`${tag}Has networkId`, networkId.slice(0, 20)));
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
results.push(fail(`${tag}Has networkId`, 'Missing methodDetails.networkId', 'Set methodDetails.networkId to your Stripe Business Network profile ID.'));
|
|
218
|
+
}
|
|
219
|
+
const pmTypes = methodDetails?.paymentMethodTypes;
|
|
220
|
+
if (Array.isArray(pmTypes) && pmTypes.length > 0) {
|
|
221
|
+
results.push(check(`${tag}Has paymentMethodTypes`, pmTypes.join(', ')));
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
results.push(fail(`${tag}Has paymentMethodTypes`, 'Missing or empty', 'Set methodDetails.paymentMethodTypes to an array (e.g. ["card"]).'));
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function validateEvmFields(request, tag, results) {
|
|
228
|
+
if (isValidAddress(request.recipient)) {
|
|
229
|
+
results.push(check(`${tag}Valid recipient address`));
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
results.push(fail(`${tag}Valid recipient address`, `Got: ${String(request.recipient)}`, 'Set request.recipient to a valid 0x-prefixed Ethereum address.'));
|
|
233
|
+
}
|
|
234
|
+
if (isValidAddress(request.currency)) {
|
|
235
|
+
results.push(check(`${tag}Valid currency address`));
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
results.push(fail(`${tag}Valid currency address`, `Got: ${String(request.currency)}`, 'Set request.currency to a valid ERC-20 token contract address.'));
|
|
239
|
+
}
|
|
240
|
+
validateAmount(request, tag, results, "token's smallest unit");
|
|
241
|
+
const methodDetails = request.methodDetails;
|
|
242
|
+
const chainId = methodDetails?.chainId;
|
|
243
|
+
if (typeof chainId === 'number' && chainId > 0) {
|
|
244
|
+
results.push(check(`${tag}Has chainId`, String(chainId)));
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
results.push(fail(`${tag}Has chainId`, 'Missing methodDetails.chainId', 'Set methodDetails.chainId to the EVM chain ID.'));
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
function validateAmount(request, tag, results, unitHint) {
|
|
251
|
+
if (isValidIntegerAmount(request.amount)) {
|
|
252
|
+
results.push(check(`${tag}Amount is valid integer string`));
|
|
253
|
+
}
|
|
254
|
+
else if (request.amount === undefined || request.amount === null) {
|
|
255
|
+
results.push(fail(`${tag}Amount is valid integer string`, 'Missing amount', `Set request.amount to a string of digits in the ${unitHint}.`));
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
results.push(fail(`${tag}Amount is valid integer string`, `Got: ${String(request.amount)}`, 'request.amount must be a string of digits (no decimals, no prefix).'));
|
|
169
259
|
}
|
|
170
|
-
return { results, resolvedBody: fetchBody };
|
|
171
260
|
}
|
|
172
261
|
export async function validateErrorHandling(baseUrl, endpoint, options) {
|
|
173
262
|
const results = [];
|
|
@@ -208,4 +297,21 @@ export async function validateErrorHandling(baseUrl, endpoint, options) {
|
|
|
208
297
|
}
|
|
209
298
|
return results;
|
|
210
299
|
}
|
|
300
|
+
function checkX402Headers(response) {
|
|
301
|
+
const results = [];
|
|
302
|
+
const paymentRequiredRaw = response.headers.get('payment-required') ?? response.headers.get('x-payment-required');
|
|
303
|
+
if (!paymentRequiredRaw)
|
|
304
|
+
return results;
|
|
305
|
+
const headerName = response.headers.get('payment-required')
|
|
306
|
+
? 'PAYMENT-REQUIRED'
|
|
307
|
+
: 'X-Payment-Required';
|
|
308
|
+
try {
|
|
309
|
+
const decoded = x402Header.decodePaymentRequired(paymentRequiredRaw);
|
|
310
|
+
results.push(check('x402 payment challenge', `${headerName} with valid x402 v${decoded.x402Version} payload`));
|
|
311
|
+
}
|
|
312
|
+
catch {
|
|
313
|
+
results.push(warn('x402 payment challenge', `${headerName} header present but failed schema validation`, 'Ensure the PAYMENT-REQUIRED header contains a valid base64-encoded JSON payload matching the x402 schema.'));
|
|
314
|
+
}
|
|
315
|
+
return results;
|
|
316
|
+
}
|
|
211
317
|
//# sourceMappingURL=challenge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"challenge.js","sourceRoot":"","sources":["../../../src/cli/validate/challenge.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"challenge.js","sourceRoot":"","sources":["../../../src/cli/validate/challenge.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,4 +7,5 @@ export declare function fetchDiscoveryDoc(baseUrl: string): Promise<{
|
|
|
7
7
|
}>;
|
|
8
8
|
export declare function extractEndpointsFromDiscovery(doc: Record<string, unknown>): EndpointSpec[];
|
|
9
9
|
export declare function extractRequestBodyFromDiscovery(doc: Record<string, unknown>, endpoint: EndpointSpec): string | undefined;
|
|
10
|
+
export declare function buildUrl(baseUrl: string, endpoint: EndpointSpec, query?: string[]): string;
|
|
10
11
|
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/cli/validate/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/cli/validate/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,cAAc,CAAA;AAG/D,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAe5D;AAKD,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,EAAE,CAkC1F;AAED,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,QAAQ,EAAE,YAAY,GACrB,MAAM,GAAG,SAAS,CAuBpB;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAiB1F"}
|