@aifinpay/agent 2.0.0-rc.8 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/LICENSE +21 -0
  2. package/PAYMENT_RECEIPTS.md +114 -0
  3. package/README.md +85 -28
  4. package/dist/agent.d.ts +8 -1
  5. package/dist/agent.d.ts.map +1 -1
  6. package/dist/agent.js +50 -17
  7. package/dist/agent.js.map +1 -1
  8. package/dist/agentHistory.d.ts +55 -0
  9. package/dist/agentHistory.d.ts.map +1 -0
  10. package/dist/agentHistory.js +145 -0
  11. package/dist/agentHistory.js.map +1 -0
  12. package/dist/agentPassport.d.ts +71 -7
  13. package/dist/agentPassport.d.ts.map +1 -1
  14. package/dist/agentPassport.js +135 -27
  15. package/dist/agentPassport.js.map +1 -1
  16. package/dist/aifp1.d.ts +94 -5
  17. package/dist/aifp1.d.ts.map +1 -1
  18. package/dist/aifp1.js +370 -114
  19. package/dist/aifp1.js.map +1 -1
  20. package/dist/apiUrl.d.ts +3 -0
  21. package/dist/apiUrl.d.ts.map +1 -0
  22. package/dist/apiUrl.js +8 -0
  23. package/dist/apiUrl.js.map +1 -0
  24. package/dist/chains.d.ts +7 -0
  25. package/dist/chains.d.ts.map +1 -1
  26. package/dist/chains.js +19 -1
  27. package/dist/chains.js.map +1 -1
  28. package/dist/crossChain.d.ts +1 -0
  29. package/dist/crossChain.d.ts.map +1 -1
  30. package/dist/crossChain.js +87 -5
  31. package/dist/crossChain.js.map +1 -1
  32. package/dist/crypto.d.ts.map +1 -1
  33. package/dist/crypto.js.map +1 -1
  34. package/dist/deploymentResolver.d.ts +95 -0
  35. package/dist/deploymentResolver.d.ts.map +1 -0
  36. package/dist/deploymentResolver.js +169 -0
  37. package/dist/deploymentResolver.js.map +1 -0
  38. package/dist/errors.d.ts +17 -0
  39. package/dist/errors.d.ts.map +1 -1
  40. package/dist/errors.js +14 -0
  41. package/dist/errors.js.map +1 -1
  42. package/dist/facilitators/aifinpay.d.ts +4 -5
  43. package/dist/facilitators/aifinpay.d.ts.map +1 -1
  44. package/dist/facilitators/aifinpay.js +50 -21
  45. package/dist/facilitators/aifinpay.js.map +1 -1
  46. package/dist/facilitators/base.d.ts +12 -1
  47. package/dist/facilitators/base.d.ts.map +1 -1
  48. package/dist/facilitators/coinbase.d.ts.map +1 -1
  49. package/dist/facilitators/coinbase.js +3 -7
  50. package/dist/facilitators/coinbase.js.map +1 -1
  51. package/dist/facilitators/detect.d.ts.map +1 -1
  52. package/dist/facilitators/detect.js +2 -7
  53. package/dist/facilitators/detect.js.map +1 -1
  54. package/dist/facilitators/standard-x402.d.ts.map +1 -1
  55. package/dist/facilitators/standard-x402.js +40 -30
  56. package/dist/facilitators/standard-x402.js.map +1 -1
  57. package/dist/generated/solanaV14Deployments.generated.d.ts +25 -0
  58. package/dist/generated/solanaV14Deployments.generated.d.ts.map +1 -0
  59. package/dist/generated/solanaV14Deployments.generated.js +39 -0
  60. package/dist/generated/solanaV14Deployments.generated.js.map +1 -0
  61. package/dist/generated/splitterRoutes.generated.d.ts +24 -0
  62. package/dist/generated/splitterRoutes.generated.d.ts.map +1 -0
  63. package/dist/generated/splitterRoutes.generated.js +453 -0
  64. package/dist/generated/splitterRoutes.generated.js.map +1 -0
  65. package/dist/generated/v14Deployments.generated.d.ts +49 -0
  66. package/dist/generated/v14Deployments.generated.d.ts.map +1 -0
  67. package/dist/generated/v14Deployments.generated.js +415 -0
  68. package/dist/generated/v14Deployments.generated.js.map +1 -0
  69. package/dist/index.d.ts +27 -13
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +16 -7
  72. package/dist/index.js.map +1 -1
  73. package/dist/localIdentity.d.ts +17 -0
  74. package/dist/localIdentity.d.ts.map +1 -0
  75. package/dist/localIdentity.js +95 -0
  76. package/dist/localIdentity.js.map +1 -0
  77. package/dist/settlement.d.ts +35 -5
  78. package/dist/settlement.d.ts.map +1 -1
  79. package/dist/settlement.js +232 -76
  80. package/dist/settlement.js.map +1 -1
  81. package/dist/settlementHttp.d.ts +10 -0
  82. package/dist/settlementHttp.d.ts.map +1 -0
  83. package/dist/settlementHttp.js +78 -0
  84. package/dist/settlementHttp.js.map +1 -0
  85. package/dist/settlementV14.d.ts +10 -9
  86. package/dist/settlementV14.d.ts.map +1 -1
  87. package/dist/settlementV14.js +43 -55
  88. package/dist/settlementV14.js.map +1 -1
  89. package/dist/solanaDeploymentResolver.d.ts +98 -0
  90. package/dist/solanaDeploymentResolver.d.ts.map +1 -0
  91. package/dist/solanaDeploymentResolver.js +162 -0
  92. package/dist/solanaDeploymentResolver.js.map +1 -0
  93. package/dist/solanaV14Deployments.generated.d.ts +25 -0
  94. package/dist/solanaV14Deployments.generated.d.ts.map +1 -0
  95. package/dist/solanaV14Deployments.generated.js +39 -0
  96. package/dist/solanaV14Deployments.generated.js.map +1 -0
  97. package/dist/spendLedger.d.ts.map +1 -1
  98. package/dist/spendLedger.js +1 -3
  99. package/dist/spendLedger.js.map +1 -1
  100. package/dist/splitterRoutes.d.ts +11 -4
  101. package/dist/splitterRoutes.d.ts.map +1 -1
  102. package/dist/splitterRoutes.generated.d.ts +11 -9
  103. package/dist/splitterRoutes.generated.d.ts.map +1 -1
  104. package/dist/splitterRoutes.generated.js +72 -18
  105. package/dist/splitterRoutes.generated.js.map +1 -1
  106. package/dist/splitterRoutes.js +7 -5
  107. package/dist/splitterRoutes.js.map +1 -1
  108. package/dist/unifiedAgent.d.ts +97 -29
  109. package/dist/unifiedAgent.d.ts.map +1 -1
  110. package/dist/unifiedAgent.js +232 -349
  111. package/dist/unifiedAgent.js.map +1 -1
  112. package/dist/v14Deployments.generated.d.ts +49 -0
  113. package/dist/v14Deployments.generated.d.ts.map +1 -0
  114. package/dist/v14Deployments.generated.js +413 -0
  115. package/dist/v14Deployments.generated.js.map +1 -0
  116. package/dist/wallet.d.ts.map +1 -1
  117. package/dist/wallet.js +2 -2
  118. package/dist/wallet.js.map +1 -1
  119. package/package.json +27 -6
  120. package/dist/cli.d.ts +0 -3
  121. package/dist/cli.d.ts.map +0 -1
  122. package/dist/cli.js +0 -127
  123. package/dist/cli.js.map +0 -1
@@ -0,0 +1,169 @@
1
+ /**
2
+ * AIFINP-223 — SDK Environment & Protocol Version resolver (EVM).
3
+ *
4
+ * A single place that answers "which deployment does the SDK use?" so no other
5
+ * module has to reason about environment, protocol version or fallback. Given
6
+ * an environment, a network and a requested version, it returns the concrete
7
+ * deployment to settle against, or throws a typed error explaining why it
8
+ * cannot.
9
+ *
10
+ * Two axes:
11
+ * environment — "dev" | "prod". Development supports Amoy only and uses the
12
+ * v1.4 artifacts sourced from evm-contract's dev branch. Production uses the
13
+ * configured production networks.
14
+ * version — "v1.2" | "v1.4" | "auto". "auto" uses an enabled v1.4
15
+ * deployment for the exact environment+network and otherwise falls back
16
+ * to a valid legacy v1.2 deployment. An explicit version never changes.
17
+ *
18
+ * Addresses live in data files (v14Deployments.generated.ts and the legacy
19
+ * SPLITTER_DEPLOYMENTS table), never inline here — this module is selection
20
+ * logic only, so a payout address can never be changed by editing control flow.
21
+ */
22
+ import { SPLITTER_DEPLOYMENTS } from "./unifiedAgent.js";
23
+ import { V14_DEPLOYMENTS, V14_DEV_NETWORKS } from "./generated/v14Deployments.generated.js";
24
+ // ── Errors ──────────────────────────────────────────────────────────────────
25
+ export class DeploymentResolverError extends Error {
26
+ constructor(message) {
27
+ super(message);
28
+ this.name = "DeploymentResolverError";
29
+ }
30
+ }
31
+ /** The development environment was asked for a network other than the ones it
32
+ * supports (Amoy only). */
33
+ export class UnsupportedDevNetworkError extends DeploymentResolverError {
34
+ network;
35
+ constructor(network) {
36
+ super(`Development environment supports ${V14_DEV_NETWORKS.join(", ")} only; ` +
37
+ `"${network}" is not a supported development network. Use environment ` +
38
+ `"prod" for production networks.`);
39
+ this.name = "UnsupportedDevNetworkError";
40
+ this.network = network;
41
+ }
42
+ }
43
+ /** An explicit version was requested but no deployment of it exists for this
44
+ * environment+network. Thrown rather than downgrading, so an explicit choice
45
+ * is never silently changed. */
46
+ export class VersionUnavailableError extends DeploymentResolverError {
47
+ requested;
48
+ constructor(requested, environment, network) {
49
+ super(`${requested} is not deployed for ${environment}/${network}. It was ` +
50
+ `requested explicitly, so the SDK will not substitute another version.`);
51
+ this.name = "VersionUnavailableError";
52
+ this.requested = requested;
53
+ }
54
+ }
55
+ /** A deployment record exists, but is quarantined and must not receive money. */
56
+ export class DeploymentDisabledError extends DeploymentResolverError {
57
+ environment;
58
+ network;
59
+ reason;
60
+ constructor(environment, network, reason) {
61
+ super(`v1.4 settlement is disabled for ${environment}/${network}: ${reason}`);
62
+ this.name = "DeploymentDisabledError";
63
+ this.environment = environment;
64
+ this.network = network;
65
+ this.reason = reason;
66
+ }
67
+ }
68
+ /** No usable deployment of either supported version exists here. */
69
+ export class NoDeploymentError extends DeploymentResolverError {
70
+ constructor(environment, network) {
71
+ super(`No enabled v1.4 or valid v1.2 deployment is known for ` + `${environment}/${network}.`);
72
+ this.name = "NoDeploymentError";
73
+ }
74
+ }
75
+ // ── Lookups ──────────────────────────────────────────────────────────────────
76
+ function normalize(network) {
77
+ return network.trim().toLowerCase();
78
+ }
79
+ /** The v1.4 deployment for this environment+network, or undefined. A v1.4
80
+ * record is only valid for the environment it was deployed under: the Amoy
81
+ * deployment is dev-only and must never resolve under "prod". */
82
+ function findV14(environment, network) {
83
+ const entry = V14_DEPLOYMENTS[network];
84
+ if (!entry)
85
+ return undefined;
86
+ return entry.environment === environment ? entry : undefined;
87
+ }
88
+ /** The legacy (v1.1/v1.2) deployment for this network, or undefined. These are
89
+ * all production mainnet deployments, so they are only offered under "prod". */
90
+ function findV12(environment, network) {
91
+ if (environment !== "prod")
92
+ return undefined;
93
+ return SPLITTER_DEPLOYMENTS[network];
94
+ }
95
+ /** Is a v1.4 deployment available for this environment+network? */
96
+ export function isV14Available(environment, network) {
97
+ return findV14(environment, normalize(network))?.settlementEnabled === true;
98
+ }
99
+ // ── The resolver ─────────────────────────────────────────────────────────────
100
+ /**
101
+ * Resolve the deployment the SDK should use. The single source of truth for
102
+ * environment + protocol-version selection.
103
+ *
104
+ * @throws UnsupportedDevNetworkError dev asked for a non-Amoy network
105
+ * @throws VersionUnavailableError an explicit version is not deployed here
106
+ * @throws DeploymentDisabledError explicit v1.4 is quarantined, or auto
107
+ * has no valid v1.2 fallback
108
+ * @throws NoDeploymentError neither version is known here
109
+ */
110
+ export function resolveDeployment(options) {
111
+ const { environment } = options;
112
+ if (environment !== "dev" && environment !== "prod") {
113
+ throw new DeploymentResolverError(`Unknown environment "${String(environment)}"; use "dev" or "prod".`);
114
+ }
115
+ const network = normalize(options.network);
116
+ const requested = options.version ?? "auto";
117
+ // Development is restricted to Amoy, whatever version is asked for. Reject
118
+ // any other development network with a clear error rather than silently
119
+ // resolving a production deployment.
120
+ if (environment === "dev" && !V14_DEV_NETWORKS.includes(network)) {
121
+ throw new UnsupportedDevNetworkError(options.network);
122
+ }
123
+ const v14 = findV14(environment, network);
124
+ const v12 = findV12(environment, network);
125
+ const asV14 = (d) => ({
126
+ version: "v1.4",
127
+ environment,
128
+ network,
129
+ chainId: d.chainId,
130
+ deployment: d,
131
+ });
132
+ const asV12 = (d) => ({
133
+ version: "v1.2",
134
+ environment,
135
+ network,
136
+ chainId: d.chainId,
137
+ deployment: d,
138
+ });
139
+ const enabledV14 = () => {
140
+ if (!v14)
141
+ throw new NoDeploymentError(environment, options.network);
142
+ if (!v14.settlementEnabled) {
143
+ throw new DeploymentDisabledError(environment, network, v14.disabledReason ?? "deployment has not passed the settlement gate");
144
+ }
145
+ return v14;
146
+ };
147
+ switch (requested) {
148
+ case "v1.4":
149
+ if (!v14)
150
+ throw new VersionUnavailableError("v1.4", environment, options.network);
151
+ return asV14(enabledV14());
152
+ case "v1.2":
153
+ if (v12)
154
+ return asV12(v12);
155
+ throw new VersionUnavailableError("v1.2", environment, options.network);
156
+ case "auto":
157
+ if (v14?.settlementEnabled)
158
+ return asV14(v14);
159
+ if (v12)
160
+ return asV12(v12);
161
+ if (v14) {
162
+ throw new DeploymentDisabledError(environment, network, v14.disabledReason ?? "deployment has not passed the settlement gate");
163
+ }
164
+ throw new NoDeploymentError(environment, options.network);
165
+ default:
166
+ throw new DeploymentResolverError(`Unknown version "${String(requested)}"; use "v1.2", "v1.4" or "auto".`);
167
+ }
168
+ }
169
+ //# sourceMappingURL=deploymentResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploymentResolver.js","sourceRoot":"","sources":["../src/deploymentResolver.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -16,4 +16,21 @@ export declare class PaymentTooExpensiveError extends X402Error {
16
16
  /** Detected a known facilitator we can't pay yet (e.g. EVM not wired). */
17
17
  export declare class FacilitatorNotImplementedError extends X402Error {
18
18
  }
19
+ /**
20
+ * Shape safe to cross a process boundary (MCP tool result, logs, chat).
21
+ * Only the error name, message, and explicitly allowlisted public fields —
22
+ * never seeds, secret keys, keystore JSON, bearer JWTs, or signatures.
23
+ */
24
+ export interface SafeErrorShape {
25
+ name: string;
26
+ message: string;
27
+ code?: string;
28
+ kind?: string;
29
+ stage?: string;
30
+ txHash?: string;
31
+ txRef?: string;
32
+ quoteId?: string;
33
+ }
34
+ /** Serialize any thrown value to SafeErrorShape. Non-Errors become UnknownError. */
35
+ export declare function toSafeError(err: unknown): SafeErrorShape;
19
36
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,SAAU,SAAQ,aAAa;CAAG;AAE/C,qBAAa,mBAAoB,SAAQ,aAAa;CAAG;AAEzD,qBAAa,iBAAkB,SAAQ,aAAa;CAAG;AAEvD,mEAAmE;AACnE,qBAAa,2BAA4B,SAAQ,SAAS;CAAG;AAE7D,iEAAiE;AACjE,qBAAa,wBAAyB,SAAQ,SAAS;CAAG;AAE1D,0EAA0E;AAC1E,qBAAa,8BAA+B,SAAQ,SAAS;CAAG"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,SAAU,SAAQ,aAAa;CAAG;AAE/C,qBAAa,mBAAoB,SAAQ,aAAa;CAAG;AAEzD,qBAAa,iBAAkB,SAAQ,aAAa;CAAG;AAEvD,mEAAmE;AACnE,qBAAa,2BAA4B,SAAQ,SAAS;CAAG;AAE7D,iEAAiE;AACjE,qBAAa,wBAAyB,SAAQ,SAAS;CAAG;AAE1D,0EAA0E;AAC1E,qBAAa,8BAA+B,SAAQ,SAAS;CAAG;AAEhE;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,CASxD"}
package/dist/errors.js CHANGED
@@ -19,4 +19,18 @@ export class PaymentTooExpensiveError extends X402Error {
19
19
  /** Detected a known facilitator we can't pay yet (e.g. EVM not wired). */
20
20
  export class FacilitatorNotImplementedError extends X402Error {
21
21
  }
22
+ const SAFE_ERROR_STRING_FIELDS = ["code", "kind", "stage", "txHash", "txRef", "quoteId"];
23
+ /** Serialize any thrown value to SafeErrorShape. Non-Errors become UnknownError. */
24
+ export function toSafeError(err) {
25
+ if (!(err instanceof Error))
26
+ return { name: "UnknownError", message: String(err) };
27
+ const rec = err;
28
+ const shape = { name: err.name, message: err.message };
29
+ for (const field of SAFE_ERROR_STRING_FIELDS) {
30
+ const value = rec[field];
31
+ if (typeof value === "string" && value)
32
+ shape[field] = value;
33
+ }
34
+ return shape;
35
+ }
22
36
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,SAAU,SAAQ,aAAa;CAAG;AAE/C,MAAM,OAAO,mBAAoB,SAAQ,aAAa;CAAG;AAEzD,MAAM,OAAO,iBAAkB,SAAQ,aAAa;CAAG;AAEvD,mEAAmE;AACnE,MAAM,OAAO,2BAA4B,SAAQ,SAAS;CAAG;AAE7D,iEAAiE;AACjE,MAAM,OAAO,wBAAyB,SAAQ,SAAS;CAAG;AAE1D,0EAA0E;AAC1E,MAAM,OAAO,8BAA+B,SAAQ,SAAS;CAAG"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,SAAU,SAAQ,aAAa;CAAG;AAE/C,MAAM,OAAO,mBAAoB,SAAQ,aAAa;CAAG;AAEzD,MAAM,OAAO,iBAAkB,SAAQ,aAAa;CAAG;AAEvD,mEAAmE;AACnE,MAAM,OAAO,2BAA4B,SAAQ,SAAS;CAAG;AAE7D,iEAAiE;AACjE,MAAM,OAAO,wBAAyB,SAAQ,SAAS;CAAG;AAE1D,0EAA0E;AAC1E,MAAM,OAAO,8BAA+B,SAAQ,SAAS;CAAG;AAkBhE,MAAM,wBAAwB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAU,CAAC;AAElG,oFAAoF;AACpF,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACnF,MAAM,GAAG,GAAG,GAAyC,CAAC;IACtD,MAAM,KAAK,GAAmB,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IACvE,KAAK,MAAM,KAAK,IAAI,wBAAwB,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK;YAAE,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IAC/D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { Agent } from "../agent.js";
2
- import type { AuthPayload, Facilitator, PayOptions } from "./base.js";
2
+ import type { AuthPayload, AuthRequestContext, Facilitator, PayOptions } from "./base.js";
3
3
  /**
4
4
  * Native AiFinPay flavor.
5
5
  *
@@ -8,14 +8,13 @@ import type { AuthPayload, Facilitator, PayOptions } from "./base.js";
8
8
  * `agreement_hash`, `treasury_vault`, `x-nonce` …
9
9
  * - Client retries with three headers:
10
10
  * x-agent-pubkey, x-nonce, x-signature
11
- * - Signature: Ed25519 over SHA-256("AiFinPay-x402:{nonce}:{pubkey}")
11
+ * - Signature: Ed25519 over SHA-256(canonical v2 request binding)
12
12
  */
13
13
  export declare class AiFinPayFacilitator implements Facilitator {
14
14
  static readonly name = "aifinpay";
15
15
  readonly name = "aifinpay";
16
16
  static detect(resp: Response): Promise<boolean>;
17
- buildAuth(resp: Response, agent: Agent, _opts: PayOptions): Promise<AuthPayload>;
18
- private inbandNonce;
19
- private fetchNonce;
17
+ buildAuth(resp: Response, agent: Agent, _opts: PayOptions, context?: AuthRequestContext): Promise<AuthPayload>;
18
+ private inbandChallenge;
20
19
  }
21
20
  //# sourceMappingURL=aifinpay.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"aifinpay.d.ts","sourceRoot":"","sources":["../../src/facilitators/aifinpay.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEtE;;;;;;;;;GASG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,cAAc;IAClC,QAAQ,CAAC,IAAI,cAAc;WAEd,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB/C,SAAS,CACb,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,WAAW,CAAC;YAiBT,WAAW;YAaX,UAAU;CASzB"}
1
+ {"version":3,"file":"aifinpay.d.ts","sourceRoot":"","sources":["../../src/facilitators/aifinpay.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE1F;;;;;;;;;GASG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,cAAc;IAClC,QAAQ,CAAC,IAAI,cAAc;WAEd,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB/C,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC;YA6CtG,eAAe;CAkC9B"}
@@ -9,7 +9,7 @@ import { sha256 } from "../crypto.js";
9
9
  * `agreement_hash`, `treasury_vault`, `x-nonce` …
10
10
  * - Client retries with three headers:
11
11
  * x-agent-pubkey, x-nonce, x-signature
12
- * - Signature: Ed25519 over SHA-256("AiFinPay-x402:{nonce}:{pubkey}")
12
+ * - Signature: Ed25519 over SHA-256(canonical v2 request binding)
13
13
  */
14
14
  export class AiFinPayFacilitator {
15
15
  static name = "aifinpay";
@@ -31,23 +31,46 @@ export class AiFinPayFacilitator {
31
31
  return true;
32
32
  }
33
33
  // Fallback fingerprint when an upstream proxy strips `protocol`.
34
- return (("agreement_hash" in b || "manifesto" in b) &&
35
- ("treasury_vault" in b || "program_id" in b));
34
+ return ("agreement_hash" in b || "manifesto" in b) && ("treasury_vault" in b || "program_id" in b);
36
35
  }
37
- async buildAuth(resp, agent, _opts) {
38
- const nonce = (await this.inbandNonce(resp)) || (await this.fetchNonce(agent));
39
- const msg = new TextEncoder().encode(`AiFinPay-x402:${nonce}:${agent.address}`);
36
+ async buildAuth(resp, agent, _opts, context) {
37
+ if (!context) {
38
+ throw new Error("AiFinPay native auth v1 is no longer supported. Retry through Agent.pay() so the SDK can bind the challenge to the request.");
39
+ }
40
+ if (context.url.origin !== context.trustedOrigin) {
41
+ throw new Error(`refusing native authentication for untrusted origin ${context.url.origin}; configure Agent.baseUrl for that facilitator explicitly`);
42
+ }
43
+ if (resp.url && new URL(resp.url).origin !== context.trustedOrigin) {
44
+ throw new Error("refusing native authentication after a cross-origin response");
45
+ }
46
+ const challenge = await this.inbandChallenge(resp, context.bodyDigest);
47
+ if (!challenge) {
48
+ throw new Error("AiFinPay native auth v2 requires an in-band request-bound challenge. Retry the original request without credentials.");
49
+ }
50
+ const message = JSON.stringify([
51
+ "AiFinPay-x402",
52
+ "v2",
53
+ challenge.nonce,
54
+ agent.address,
55
+ context.trustedOrigin,
56
+ context.method.toUpperCase(),
57
+ `${context.url.pathname}${context.url.search}`,
58
+ context.bodyDigest,
59
+ challenge.expiresAt,
60
+ ]);
61
+ const msg = new TextEncoder().encode(message);
40
62
  const digest = await sha256(msg);
41
63
  const sig = nacl.sign.detached(digest, agent.secretKey);
42
64
  return {
43
65
  headers: {
44
66
  "x-agent-pubkey": agent.address,
45
- "x-nonce": nonce,
67
+ "x-nonce": challenge.nonce,
46
68
  "x-signature": bs58.encode(sig),
69
+ "x-aifinpay-auth-version": "2",
47
70
  },
48
71
  };
49
72
  }
50
- async inbandNonce(resp) {
73
+ async inbandChallenge(resp, expectedBodyDigest) {
51
74
  let body;
52
75
  try {
53
76
  body = await resp.clone().json();
@@ -58,19 +81,25 @@ export class AiFinPayFacilitator {
58
81
  if (typeof body !== "object" || body === null)
59
82
  return null;
60
83
  const b = body;
61
- const candidate = b["x-nonce"] ?? b["nonce"];
62
- return typeof candidate === "string" && candidate ? candidate : null;
63
- }
64
- async fetchNonce(agent) {
65
- const r = await agent.fetchImpl(`${agent.baseUrl}/nonce`, {
66
- headers: { accept: "application/json" },
67
- });
68
- if (!r.ok)
69
- throw new Error(`/nonce → ${r.status}`);
70
- const json = (await r.json());
71
- if (!json.nonce)
72
- throw new Error("/nonce: missing 'nonce' field");
73
- return json.nonce;
84
+ const nonce = b["x-nonce"];
85
+ const expiresAt = b["x-nonce-expires-at"];
86
+ const version = b["x-aifinpay-auth-version"];
87
+ const bodyDigest = b["x-aifinpay-body-sha256"];
88
+ if (typeof nonce !== "string" ||
89
+ !/^[A-Za-z0-9_-]{16,128}$/.test(nonce) ||
90
+ (version !== 2 && version !== "2") ||
91
+ (typeof expiresAt !== "string" && typeof expiresAt !== "number") ||
92
+ !/^[1-9][0-9]{0,15}$/.test(String(expiresAt)) ||
93
+ typeof bodyDigest !== "string" ||
94
+ !/^[0-9a-f]{64}$/.test(bodyDigest) ||
95
+ bodyDigest !== expectedBodyDigest) {
96
+ return null;
97
+ }
98
+ const parsedExpiry = Number(expiresAt);
99
+ const now = Date.now();
100
+ return Number.isSafeInteger(parsedExpiry) && parsedExpiry > now && parsedExpiry <= now + 5 * 60_000
101
+ ? { nonce, expiresAt: parsedExpiry, bodyDigest }
102
+ : null;
74
103
  }
75
104
  }
76
105
  //# sourceMappingURL=aifinpay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"aifinpay.js","sourceRoot":"","sources":["../../src/facilitators/aifinpay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aifinpay.js","sourceRoot":"","sources":["../../src/facilitators/aifinpay.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,17 @@ export interface AuthPayload {
17
17
  /** Optional method override. */
18
18
  method?: string;
19
19
  }
20
+ /** Immutable details of the request that received a 402 challenge. */
21
+ export interface AuthRequestContext {
22
+ /** Canonical URL the SDK sent without credentials. */
23
+ url: URL;
24
+ /** Uppercase HTTP method the SDK sent without credentials. */
25
+ method: string;
26
+ /** Origin explicitly configured on the Agent, never inferred from a 402 body. */
27
+ trustedOrigin: string;
28
+ /** SHA-256 of the exact request body bytes sent before the challenge. */
29
+ bodyDigest: string;
30
+ }
20
31
  /**
21
32
  * A facilitator handles ONE x402 wire format. Implementations are
22
33
  * stateless; state (keypair, base URL) lives on the Agent.
@@ -24,7 +35,7 @@ export interface AuthPayload {
24
35
  export interface Facilitator {
25
36
  readonly name: string;
26
37
  /** Build the auth payload to merge into the retry request. */
27
- buildAuth(response: Response, agent: Agent, options: PayOptions): Promise<AuthPayload>;
38
+ buildAuth(response: Response, agent: Agent, options: PayOptions, context?: AuthRequestContext): Promise<AuthPayload>;
28
39
  }
29
40
  /** Constructor + static `detect` predicate together. */
30
41
  export interface FacilitatorClass {
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/facilitators/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,WAAW,UAAU;IACzB,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,cAAc,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC/D,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,qDAAqD;AACrD,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,8DAA8D;IAC9D,SAAS,CACP,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,WAAW,CAAC,CAAC;CACzB;AAED,wDAAwD;AACxD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACxD"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/facilitators/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,WAAW,UAAU;IACzB,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,cAAc,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC/D,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,qDAAqD;AACrD,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,sEAAsE;AACtE,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,GAAG,EAAE,GAAG,CAAC;IACT,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,aAAa,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,8DAA8D;IAC9D,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACtH;AAED,wDAAwD;AACxD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACxD"}
@@ -1 +1 @@
1
- {"version":3,"file":"coinbase.d.ts","sourceRoot":"","sources":["../../src/facilitators/coinbase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAMzC,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEtE;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAC1D,eAAO,MAAM,wBAAwB,sBAAsB,CAAC;AAC5D,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAE1D,qBAAa,uBAAwB,YAAW,WAAW;IACzD,MAAM,CAAC,QAAQ,CAAC,IAAI,mBAAmB;IACvC,QAAQ,CAAC,IAAI,mBAAmB;IAEhC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO;IAKhC,SAAS,CACb,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,KAAK,EACb,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,WAAW,CAAC;CAsBxB"}
1
+ {"version":3,"file":"coinbase.d.ts","sourceRoot":"","sources":["../../src/facilitators/coinbase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEtE;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAC1D,eAAO,MAAM,wBAAwB,sBAAsB,CAAC;AAC5D,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAE1D,qBAAa,uBAAwB,YAAW,WAAW;IACzD,MAAM,CAAC,QAAQ,CAAC,IAAI,mBAAmB;IACvC,QAAQ,CAAC,IAAI,mBAAmB;IAEhC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO;IAKhC,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;CAmBvF"}
@@ -1,4 +1,4 @@
1
- import { FacilitatorNotImplementedError, PaymentTooExpensiveError, UnsupportedFacilitatorError, } from "../errors.js";
1
+ import { FacilitatorNotImplementedError, PaymentTooExpensiveError, UnsupportedFacilitatorError } from "../errors.js";
2
2
  /**
3
3
  * Coinbase x402 flavor — `PAYMENT-REQUIRED` / `PAYMENT-SIGNATURE` headers.
4
4
  *
@@ -24,8 +24,7 @@ export class CoinbaseX402Facilitator {
24
24
  if (accepts.length && opts.maxAmountUsd !== undefined) {
25
25
  const cheapest = minUsd(accepts);
26
26
  if (cheapest !== null && cheapest > opts.maxAmountUsd) {
27
- throw new PaymentTooExpensiveError(`Coinbase x402 wants $${cheapest.toFixed(4)}, ` +
28
- `caller cap is $${opts.maxAmountUsd.toFixed(4)}`);
27
+ throw new PaymentTooExpensiveError(`Coinbase x402 wants $${cheapest.toFixed(4)}, ` + `caller cap is $${opts.maxAmountUsd.toFixed(4)}`);
29
28
  }
30
29
  }
31
30
  throw new FacilitatorNotImplementedError("Coinbase x402 detected, but payment execution is not yet wired. " +
@@ -40,10 +39,7 @@ function decodePaymentRequired(resp) {
40
39
  }
41
40
  let decoded;
42
41
  try {
43
- decoded =
44
- typeof Buffer !== "undefined"
45
- ? Buffer.from(raw, "base64").toString("utf-8")
46
- : atob(raw);
42
+ decoded = typeof Buffer !== "undefined" ? Buffer.from(raw, "base64").toString("utf-8") : atob(raw);
47
43
  }
48
44
  catch (e) {
49
45
  throw new UnsupportedFacilitatorError(`${PAYMENT_REQUIRED_HEADER} is not valid base64: ${e.message}`);
@@ -1 +1 @@
1
- {"version":3,"file":"coinbase.js","sourceRoot":"","sources":["../../src/facilitators/coinbase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coinbase.js","sourceRoot":"","sources":["../../src/facilitators/coinbase.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/facilitators/detect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAI/D;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,gBAAgB,EAIxC,CAAC;AAMF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,QAAQ,EACd,QAAQ,GAAE,MAAe,GACxB,OAAO,CAAC,WAAW,CAAC,CAuBtB"}
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/facilitators/detect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAI/D;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,gBAAgB,EAA4E,CAAC;AAItH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAE,MAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAsBvG"}
@@ -7,18 +7,13 @@ import { StandardX402Facilitator } from "./standard-x402.js";
7
7
  * the historical Coinbase compatibility adapter because HTTP header names are
8
8
  * case-insensitive and both may observe PAYMENT-REQUIRED.
9
9
  */
10
- export const REGISTERED = [
11
- AiFinPayFacilitator,
12
- StandardX402Facilitator,
13
- CoinbaseX402Facilitator,
14
- ];
10
+ export const REGISTERED = [AiFinPayFacilitator, StandardX402Facilitator, CoinbaseX402Facilitator];
15
11
  const BY_NAME = new Map(REGISTERED.map((cls) => [cls.name, cls]));
16
12
  export async function detectFacilitator(resp, override = "auto") {
17
13
  if (override && override !== "auto") {
18
14
  const cls = BY_NAME.get(override);
19
15
  if (!cls) {
20
- throw new UnsupportedFacilitatorError(`unknown facilitator override: '${override}'. ` +
21
- `known: ${[...BY_NAME.keys()].join(", ")}`);
16
+ throw new UnsupportedFacilitatorError(`unknown facilitator override: '${override}'. ` + `known: ${[...BY_NAME.keys()].join(", ")}`);
22
17
  }
23
18
  return new cls();
24
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/facilitators/detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAuB;IAC5C,mBAAmB;IACnB,uBAAuB;IACvB,uBAAuB;CACxB,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CACzC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAc,EACd,WAAmB,MAAM;IAEzB,IAAI,QAAQ,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,2BAA2B,CACnC,kCAAkC,QAAQ,KAAK;gBAC7C,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7C,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,MAAM,IAAI,2BAA2B,CACnC,oDAAoD;QAClD,WAAW,IAAI,CAAC,MAAM,IAAI;QAC1B,YAAY,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACnD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/facilitators/detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAuB,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,uBAAuB,CAAC,CAAC;AAEtH,MAAM,OAAO,GAAG,IAAI,GAAG,CAA2B,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAE5F,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAc,EAAE,WAAmB,MAAM;IAC/E,IAAI,QAAQ,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,2BAA2B,CACnC,kCAAkC,QAAQ,KAAK,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7F,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,MAAM,IAAI,2BAA2B,CACnC,oDAAoD;QAClD,WAAW,IAAI,CAAC,MAAM,IAAI;QAC1B,YAAY,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACnD,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"standard-x402.d.ts","sourceRoot":"","sources":["../../src/facilitators/standard-x402.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAKzC,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AA2ItE,qBAAa,uBAAwB,YAAW,WAAW;IACzD,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU;IAC9B,QAAQ,CAAC,IAAI,UAAU;IAEvB,2DAA2D;IAC3D,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;WAInC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAW/C,SAAS,CACb,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,WAAW,CAAC;YAMT,WAAW;YAoFX,iBAAiB;CA0EhC"}
1
+ {"version":3,"file":"standard-x402.d.ts","sourceRoot":"","sources":["../../src/facilitators/standard-x402.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAsJtE,qBAAa,uBAAwB,YAAW,WAAW;IACzD,MAAM,CAAC,QAAQ,CAAC,IAAI,UAAU;IAC9B,QAAQ,CAAC,IAAI,UAAU;IAEvB,2DAA2D;IAC3D,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;WAInC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAW/C,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;YAMvE,WAAW;YAgFX,iBAAiB;CAuEhC"}