@ampersend_ai/ampersend-sdk 0.0.19 → 0.0.21
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/dist/ampersend/client.d.ts +4 -9
- package/dist/ampersend/client.d.ts.map +1 -1
- package/dist/ampersend/client.js +25 -21
- package/dist/ampersend/client.js.map +1 -1
- package/dist/ampersend/treasurer.d.ts +14 -79
- package/dist/ampersend/treasurer.d.ts.map +1 -1
- package/dist/ampersend/treasurer.js +34 -102
- package/dist/ampersend/treasurer.js.map +1 -1
- package/dist/ampersend/types.d.ts +342 -336
- package/dist/ampersend/types.d.ts.map +1 -1
- package/dist/ampersend/types.js +110 -149
- package/dist/ampersend/types.js.map +1 -1
- package/dist/ampersend/zod-bridge.d.ts +15 -0
- package/dist/ampersend/zod-bridge.d.ts.map +1 -0
- package/dist/ampersend/zod-bridge.js +29 -0
- package/dist/ampersend/zod-bridge.js.map +1 -0
- package/dist/cli/commands/fetch.d.ts.map +1 -1
- package/dist/cli/commands/fetch.js.map +1 -1
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +6 -1
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/client/client.d.ts +0 -3
- package/dist/mcp/client/client.d.ts.map +1 -1
- package/dist/mcp/client/client.js +10 -14
- package/dist/mcp/client/client.js.map +1 -1
- package/dist/mcp/client/factory.d.ts +0 -2
- package/dist/mcp/client/factory.d.ts.map +1 -1
- package/dist/mcp/client/factory.js +0 -3
- package/dist/mcp/client/factory.js.map +1 -1
- package/dist/mcp/client/middleware.d.ts +0 -3
- package/dist/mcp/client/middleware.d.ts.map +1 -1
- package/dist/mcp/client/middleware.js +9 -12
- package/dist/mcp/client/middleware.js.map +1 -1
- package/dist/mcp/client/protocol.d.ts +81 -85
- package/dist/mcp/client/protocol.d.ts.map +1 -1
- package/dist/mcp/client/protocol.js +17 -15
- package/dist/mcp/client/protocol.js.map +1 -1
- package/dist/mcp/client/types.d.ts +6 -19
- package/dist/mcp/client/types.d.ts.map +1 -1
- package/dist/mcp/proxy/cli.d.ts.map +1 -1
- package/dist/mcp/proxy/cli.js +0 -1
- package/dist/mcp/proxy/cli.js.map +1 -1
- package/dist/mcp/proxy/env.d.ts +0 -9
- package/dist/mcp/proxy/env.d.ts.map +1 -1
- package/dist/mcp/proxy/env.js +0 -2
- package/dist/mcp/proxy/env.js.map +1 -1
- package/dist/mcp/proxy/factory.d.ts +0 -2
- package/dist/mcp/proxy/factory.d.ts.map +1 -1
- package/dist/mcp/proxy/factory.js +0 -3
- package/dist/mcp/proxy/factory.js.map +1 -1
- package/dist/mcp/server/fastmcp/middleware.d.ts +9 -29
- package/dist/mcp/server/fastmcp/middleware.d.ts.map +1 -1
- package/dist/mcp/server/fastmcp/middleware.js +10 -42
- package/dist/mcp/server/fastmcp/middleware.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/x402/envelopes.d.ts +62 -0
- package/dist/x402/envelopes.d.ts.map +1 -0
- package/dist/x402/envelopes.js +73 -0
- package/dist/x402/envelopes.js.map +1 -0
- package/dist/x402/http/client.d.ts +37 -0
- package/dist/x402/http/client.d.ts.map +1 -0
- package/dist/x402/http/client.js +159 -0
- package/dist/x402/http/client.js.map +1 -0
- package/dist/x402/http/factory.d.ts +11 -25
- package/dist/x402/http/factory.d.ts.map +1 -1
- package/dist/x402/http/factory.js +11 -22
- package/dist/x402/http/factory.js.map +1 -1
- package/dist/x402/http/index.d.ts +4 -1
- package/dist/x402/http/index.d.ts.map +1 -1
- package/dist/x402/http/index.js +2 -1
- package/dist/x402/http/index.js.map +1 -1
- package/dist/x402/index.d.ts +4 -1
- package/dist/x402/index.d.ts.map +1 -1
- package/dist/x402/index.js +3 -2
- package/dist/x402/index.js.map +1 -1
- package/dist/x402/treasurer.d.ts +22 -47
- package/dist/x402/treasurer.d.ts.map +1 -1
- package/dist/x402/treasurers/naive.d.ts +4 -40
- package/dist/x402/treasurers/naive.d.ts.map +1 -1
- package/dist/x402/treasurers/naive.js +7 -44
- package/dist/x402/treasurers/naive.js.map +1 -1
- package/dist/x402/wallet.d.ts +7 -32
- package/dist/x402/wallet.d.ts.map +1 -1
- package/dist/x402/wallet.js +0 -3
- package/dist/x402/wallet.js.map +1 -1
- package/dist/x402/wallets/account/wallet.d.ts +9 -30
- package/dist/x402/wallets/account/wallet.d.ts.map +1 -1
- package/dist/x402/wallets/account/wallet.js +30 -37
- package/dist/x402/wallets/account/wallet.js.map +1 -1
- package/dist/x402/wallets/index.d.ts +0 -1
- package/dist/x402/wallets/index.d.ts.map +1 -1
- package/dist/x402/wallets/index.js +0 -1
- package/dist/x402/wallets/index.js.map +1 -1
- package/dist/x402/wallets/smart-account/chain.d.ts +4 -0
- package/dist/x402/wallets/smart-account/chain.d.ts.map +1 -0
- package/dist/x402/wallets/smart-account/chain.js +12 -0
- package/dist/x402/wallets/smart-account/chain.js.map +1 -0
- package/dist/x402/wallets/smart-account/cosigned.d.ts +7 -33
- package/dist/x402/wallets/smart-account/cosigned.d.ts.map +1 -1
- package/dist/x402/wallets/smart-account/cosigned.js +28 -51
- package/dist/x402/wallets/smart-account/cosigned.js.map +1 -1
- package/dist/x402/wallets/smart-account/exact.d.ts +6 -20
- package/dist/x402/wallets/smart-account/exact.d.ts.map +1 -1
- package/dist/x402/wallets/smart-account/exact.js +33 -43
- package/dist/x402/wallets/smart-account/exact.js.map +1 -1
- package/dist/x402/wallets/smart-account/wallet.d.ts +6 -39
- package/dist/x402/wallets/smart-account/wallet.d.ts.map +1 -1
- package/dist/x402/wallets/smart-account/wallet.js +9 -36
- package/dist/x402/wallets/smart-account/wallet.js.map +1 -1
- package/package.json +4 -4
- package/dist/x402/http/adapter.d.ts +0 -38
- package/dist/x402/http/adapter.d.ts.map +0 -1
- package/dist/x402/http/adapter.js +0 -193
- package/dist/x402/http/adapter.js.map +0 -1
- package/dist/x402/http/v2-adapter.d.ts +0 -56
- package/dist/x402/http/v2-adapter.d.ts.map +0 -1
- package/dist/x402/http/v2-adapter.js +0 -94
- package/dist/x402/http/v2-adapter.js.map +0 -1
|
@@ -1,67 +1,57 @@
|
|
|
1
1
|
import { toHex } from "viem";
|
|
2
2
|
import { signERC3009Authorization } from "../../../smart-account/index.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*/
|
|
3
|
+
import { acceptedOf, amountOf, buildAuthorization, } from "../../envelopes.js";
|
|
4
|
+
import { chainIdOf } from "./chain.js";
|
|
6
5
|
function createNonce() {
|
|
7
6
|
const cryptoObj = typeof globalThis.crypto !== "undefined" && typeof globalThis.crypto.getRandomValues === "function"
|
|
8
7
|
? globalThis.crypto
|
|
9
|
-
: // Dynamic require
|
|
8
|
+
: // Dynamic require for node.js compatibility.
|
|
10
9
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
11
10
|
require("crypto").webcrypto;
|
|
12
11
|
return toHex(cryptoObj.getRandomValues(new Uint8Array(32)));
|
|
13
12
|
}
|
|
14
13
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* (ERC-3009) to create signed payment authorizations. The signature is created using ERC-1271
|
|
19
|
-
* from a smart account via the OwnableValidator module.
|
|
20
|
-
*
|
|
21
|
-
* @param requirements - Payment requirements from the x402 server
|
|
22
|
-
* @param config - Configuration for the smart account wallet
|
|
23
|
-
* @returns Payment payload ready to send to x402 server
|
|
24
|
-
* @throws Error if payment requirements are invalid or signing fails
|
|
14
|
+
* Sign an `exact` instruction: ERC-3009 `transferWithAuthorization` via
|
|
15
|
+
* ERC-1271 with OwnableValidator. {@link buildAuthorization} packages the
|
|
16
|
+
* signed body for v1 or v2.
|
|
25
17
|
*/
|
|
26
|
-
export async function createExactPayment(
|
|
27
|
-
|
|
18
|
+
export async function createExactPayment(instruction, config) {
|
|
19
|
+
const accepted = acceptedOf(instruction);
|
|
20
|
+
const payTo = accepted.payTo;
|
|
21
|
+
const asset = accepted.asset;
|
|
28
22
|
const nonce = createNonce();
|
|
29
|
-
const
|
|
30
|
-
const
|
|
31
|
-
|
|
23
|
+
const now = Math.floor(Date.now() / 1000);
|
|
24
|
+
const validAfter = BigInt(now - 600); // 10 minutes of clock-skew tolerance
|
|
25
|
+
const validBefore = BigInt(now + accepted.maxTimeoutSeconds);
|
|
32
26
|
const authData = {
|
|
33
27
|
from: config.smartAccountAddress,
|
|
34
|
-
to:
|
|
35
|
-
value: BigInt(
|
|
28
|
+
to: payTo,
|
|
29
|
+
value: BigInt(amountOf(instruction)),
|
|
36
30
|
validAfter,
|
|
37
31
|
validBefore,
|
|
38
32
|
nonce,
|
|
39
33
|
};
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
const domainVersion = requirements.extra?.version;
|
|
34
|
+
const domainName = accepted.extra?.name;
|
|
35
|
+
const domainVersion = accepted.extra?.version;
|
|
43
36
|
if (!domainName || !domainVersion) {
|
|
44
|
-
throw new Error("
|
|
37
|
+
throw new Error("accepted.extra must contain 'name' and 'version' for EIP-712 domain");
|
|
38
|
+
}
|
|
39
|
+
const chainId = chainIdOf(instruction);
|
|
40
|
+
if (chainId === null) {
|
|
41
|
+
throw new Error(`Unsupported network "${accepted.network}" — use a known v1 name or CAIP-2 "eip155:N".`);
|
|
45
42
|
}
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
from: config.smartAccountAddress,
|
|
57
|
-
to: requirements.payTo,
|
|
58
|
-
value: requirements.maxAmountRequired,
|
|
59
|
-
validAfter: validAfter.toString(),
|
|
60
|
-
validBefore: validBefore.toString(),
|
|
61
|
-
nonce: nonce,
|
|
62
|
-
},
|
|
43
|
+
const signature = await signERC3009Authorization(config.sessionKeyPrivateKey, config.smartAccountAddress, authData, asset, chainId, config.validatorAddress, domainName, domainVersion);
|
|
44
|
+
const signedPayload = {
|
|
45
|
+
signature: signature,
|
|
46
|
+
authorization: {
|
|
47
|
+
from: config.smartAccountAddress,
|
|
48
|
+
to: payTo,
|
|
49
|
+
value: amountOf(instruction),
|
|
50
|
+
validAfter: validAfter.toString(),
|
|
51
|
+
validBefore: validBefore.toString(),
|
|
52
|
+
nonce: nonce,
|
|
63
53
|
},
|
|
64
54
|
};
|
|
65
|
-
return
|
|
55
|
+
return buildAuthorization(instruction, signedPayload);
|
|
66
56
|
}
|
|
67
57
|
//# sourceMappingURL=exact.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exact.js","sourceRoot":"","sources":["../../../../src/x402/wallets/smart-account/exact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAA0B,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"exact.js","sourceRoot":"","sources":["../../../../src/x402/wallets/smart-account/exact.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAA0B,MAAM,MAAM,CAAA;AAEpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAA;AAC1E,OAAO,EACL,UAAU,EACV,QAAQ,EACR,kBAAkB,GAGnB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtC,SAAS,WAAW;IAClB,MAAM,SAAS,GACb,OAAO,UAAU,CAAC,MAAM,KAAK,WAAW,IAAI,OAAO,UAAU,CAAC,MAAM,CAAC,eAAe,KAAK,UAAU;QACjG,CAAC,CAAC,UAAU,CAAC,MAAM;QACnB,CAAC,CAAC,6CAA6C;YAC7C,iEAAiE;YACjE,OAAO,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAA;IACjC,OAAO,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAC7D,CAAC;AASD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAA+B,EAC/B,MAA0B;IAE1B,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,CAAA;IACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAgB,CAAA;IACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAgB,CAAA;IAEvC,MAAM,KAAK,GAAG,WAAW,EAAE,CAAA;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IACzC,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA,CAAC,qCAAqC;IAC1E,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAA;IAE5D,MAAM,QAAQ,GAAG;QACf,IAAI,EAAE,MAAM,CAAC,mBAAmB;QAChC,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACpC,UAAU;QACV,WAAW;QACX,KAAK;KACN,CAAA;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAE,IAA0B,CAAA;IAC7D,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,EAAE,OAA6B,CAAA;IAEnE,IAAI,CAAC,UAAU,IAAI,CAAC,aAAa,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAA;IACxF,CAAC;IAED,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,CAAA;IACtC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,OAAO,+CAA+C,CAAC,CAAA;IAC1G,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,wBAAwB,CAC9C,MAAM,CAAC,oBAAoB,EAC3B,MAAM,CAAC,mBAAmB,EAC1B,QAAQ,EACR,KAAK,EACL,OAAO,EACP,MAAM,CAAC,gBAAgB,EACvB,UAAU,EACV,aAAa,CACd,CAAA;IAED,MAAM,aAAa,GAAG;QACpB,SAAS,EAAE,SAAmB;QAC9B,aAAa,EAAE;YACb,IAAI,EAAE,MAAM,CAAC,mBAA6B;YAC1C,EAAE,EAAE,KAAe;YACnB,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC;YAC5B,UAAU,EAAE,UAAU,CAAC,QAAQ,EAAE;YACjC,WAAW,EAAE,WAAW,CAAC,QAAQ,EAAE;YACnC,KAAK,EAAE,KAAe;SACvB;KACF,CAAA;IAED,OAAO,kBAAkB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;AACvD,CAAC"}
|
|
@@ -1,56 +1,23 @@
|
|
|
1
1
|
import { type Address, type Hex } from "viem";
|
|
2
|
-
import type
|
|
2
|
+
import { type PaymentAuthorization, type PaymentInstruction } from "../../envelopes.ts";
|
|
3
3
|
import type { ServerAuthorizationData } from "../../types.ts";
|
|
4
4
|
import { type X402Wallet } from "../../wallet.ts";
|
|
5
|
-
/**
|
|
6
|
-
* Configuration for SmartAccountWallet
|
|
7
|
-
*/
|
|
8
5
|
export interface SmartAccountConfig {
|
|
9
|
-
/** Smart account address */
|
|
10
6
|
smartAccountAddress: Address;
|
|
11
|
-
/** Session key private key for signing */
|
|
12
7
|
sessionKeyPrivateKey: Hex;
|
|
13
|
-
/**
|
|
14
|
-
chainId: number;
|
|
15
|
-
/** OwnableValidator address (defaults to standard OwnableValidator) */
|
|
8
|
+
/** OwnableValidator address. Defaults to the standard OwnableValidator. */
|
|
16
9
|
validatorAddress?: Address;
|
|
17
|
-
/** CoSignerValidator address
|
|
10
|
+
/** CoSignerValidator address. Defaults to the standard CoSignerValidator. */
|
|
18
11
|
coSignerValidatorAddress?: Address;
|
|
19
12
|
}
|
|
20
13
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* Creates payment payloads signed by a smart account using ERC-1271 standard.
|
|
24
|
-
* Supports Safe accounts with OwnableValidator module.
|
|
25
|
-
* Only supports the "exact" payment scheme with ERC-3009 (USDC) authorizations.
|
|
26
|
-
*
|
|
27
|
-
* @example
|
|
28
|
-
* ```typescript
|
|
29
|
-
* const wallet = new SmartAccountWallet({
|
|
30
|
-
* smartAccountAddress: "0x...", // Smart account address
|
|
31
|
-
* sessionKeyPrivateKey: "0x...", // Session key
|
|
32
|
-
* chainId: 84532, // Base Sepolia
|
|
33
|
-
* validatorAddress: "0x..." // OwnableValidator (optional, defaults to standard validator)
|
|
34
|
-
* })
|
|
35
|
-
*
|
|
36
|
-
* const payment = await wallet.createPayment(requirements)
|
|
37
|
-
* ```
|
|
14
|
+
* Smart account wallet using ERC-1271. Supports Safe accounts with the
|
|
15
|
+
* OwnableValidator module and only the `exact` scheme (ERC-3009 / USDC).
|
|
38
16
|
*/
|
|
39
17
|
export declare class SmartAccountWallet implements X402Wallet {
|
|
40
18
|
private readonly config;
|
|
41
19
|
constructor(config: SmartAccountConfig);
|
|
42
|
-
|
|
43
|
-
* Creates a payment payload from requirements.
|
|
44
|
-
* Only supports "exact" payment scheme with ERC-3009 authorizations.
|
|
45
|
-
*
|
|
46
|
-
* @param requirements Payment requirements from x402
|
|
47
|
-
* @param serverAuthorization Optional server co-signature data for co-signed keys
|
|
48
|
-
* @returns Payment payload ready to submit
|
|
49
|
-
*/
|
|
50
|
-
createPayment(requirements: PaymentRequirements, serverAuthorization?: ServerAuthorizationData): Promise<PaymentPayload>;
|
|
51
|
-
/**
|
|
52
|
-
* Returns the smart account address
|
|
53
|
-
*/
|
|
20
|
+
createPayment(instruction: PaymentInstruction, serverAuthorization?: ServerAuthorizationData): Promise<PaymentAuthorization>;
|
|
54
21
|
get address(): Address;
|
|
55
22
|
}
|
|
56
23
|
//# sourceMappingURL=wallet.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../../src/x402/wallets/smart-account/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../../src/x402/wallets/smart-account/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,CAAA;AAG7C,OAAO,EAAc,KAAK,oBAAoB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACnG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAI9D,MAAM,WAAW,kBAAkB;IACjC,mBAAmB,EAAE,OAAO,CAAA;IAC5B,oBAAoB,EAAE,GAAG,CAAA;IACzB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,6EAA6E;IAC7E,wBAAwB,CAAC,EAAE,OAAO,CAAA;CACnC;AAED;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,UAAU;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuF;gBAElG,MAAM,EAAE,kBAAkB;IAQhC,aAAa,CACjB,WAAW,EAAE,kBAAkB,EAC/B,mBAAmB,CAAC,EAAE,uBAAuB,GAC5C,OAAO,CAAC,oBAAoB,CAAC;IAmBhC,IAAI,OAAO,IAAI,OAAO,CAErB;CACF"}
|
|
@@ -1,64 +1,37 @@
|
|
|
1
1
|
import {} from "viem";
|
|
2
2
|
import { COSIGNER_VALIDATOR, OWNABLE_VALIDATOR } from "../../../smart-account/constants.js";
|
|
3
|
+
import { acceptedOf } from "../../envelopes.js";
|
|
3
4
|
import { WalletError } from "../../wallet.js";
|
|
4
5
|
import { createCoSignedPayment } from "./cosigned.js";
|
|
5
6
|
import { createExactPayment } from "./exact.js";
|
|
6
7
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* Creates payment payloads signed by a smart account using ERC-1271 standard.
|
|
10
|
-
* Supports Safe accounts with OwnableValidator module.
|
|
11
|
-
* Only supports the "exact" payment scheme with ERC-3009 (USDC) authorizations.
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```typescript
|
|
15
|
-
* const wallet = new SmartAccountWallet({
|
|
16
|
-
* smartAccountAddress: "0x...", // Smart account address
|
|
17
|
-
* sessionKeyPrivateKey: "0x...", // Session key
|
|
18
|
-
* chainId: 84532, // Base Sepolia
|
|
19
|
-
* validatorAddress: "0x..." // OwnableValidator (optional, defaults to standard validator)
|
|
20
|
-
* })
|
|
21
|
-
*
|
|
22
|
-
* const payment = await wallet.createPayment(requirements)
|
|
23
|
-
* ```
|
|
8
|
+
* Smart account wallet using ERC-1271. Supports Safe accounts with the
|
|
9
|
+
* OwnableValidator module and only the `exact` scheme (ERC-3009 / USDC).
|
|
24
10
|
*/
|
|
25
11
|
export class SmartAccountWallet {
|
|
26
12
|
config;
|
|
27
13
|
constructor(config) {
|
|
28
|
-
// Apply default validator addresses if not provided
|
|
29
14
|
this.config = {
|
|
30
15
|
...config,
|
|
31
16
|
validatorAddress: config.validatorAddress ?? OWNABLE_VALIDATOR,
|
|
32
17
|
coSignerValidatorAddress: config.coSignerValidatorAddress ?? COSIGNER_VALIDATOR,
|
|
33
18
|
};
|
|
34
19
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
* @param requirements Payment requirements from x402
|
|
40
|
-
* @param serverAuthorization Optional server co-signature data for co-signed keys
|
|
41
|
-
* @returns Payment payload ready to submit
|
|
42
|
-
*/
|
|
43
|
-
async createPayment(requirements, serverAuthorization) {
|
|
44
|
-
if (requirements.scheme !== "exact") {
|
|
45
|
-
throw new WalletError(`Unsupported payment scheme: ${requirements.scheme}. SmartAccountWallet only supports "exact".`);
|
|
20
|
+
async createPayment(instruction, serverAuthorization) {
|
|
21
|
+
const accepted = acceptedOf(instruction);
|
|
22
|
+
if (accepted.scheme !== "exact") {
|
|
23
|
+
throw new WalletError(`Unsupported payment scheme: ${accepted.scheme}. SmartAccountWallet only supports "exact".`);
|
|
46
24
|
}
|
|
47
25
|
try {
|
|
48
|
-
// If server authorization provided, use co-signed path
|
|
49
26
|
if (serverAuthorization) {
|
|
50
|
-
return await createCoSignedPayment(
|
|
27
|
+
return await createCoSignedPayment(instruction, this.config, serverAuthorization);
|
|
51
28
|
}
|
|
52
|
-
|
|
53
|
-
return await createExactPayment(requirements, this.config);
|
|
29
|
+
return await createExactPayment(instruction, this.config);
|
|
54
30
|
}
|
|
55
31
|
catch (error) {
|
|
56
32
|
throw new WalletError(`Failed to create smart account payment: ${error instanceof Error ? error.message : String(error)}`, error instanceof Error ? error : undefined);
|
|
57
33
|
}
|
|
58
34
|
}
|
|
59
|
-
/**
|
|
60
|
-
* Returns the smart account address
|
|
61
|
-
*/
|
|
62
35
|
get address() {
|
|
63
36
|
return this.config.smartAccountAddress;
|
|
64
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../../src/x402/wallets/smart-account/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../../src/x402/wallets/smart-account/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,MAAM,MAAM,CAAA;AAE7C,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAC3F,OAAO,EAAE,UAAU,EAAsD,MAAM,oBAAoB,CAAA;AAEnG,OAAO,EAAE,WAAW,EAAmB,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAW/C;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IACZ,MAAM,CAAuF;IAE9G,YAAY,MAA0B;QACpC,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,MAAM;YACT,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,iBAAiB;YAC9D,wBAAwB,EAAE,MAAM,CAAC,wBAAwB,IAAI,kBAAkB;SAChF,CAAA;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,WAA+B,EAC/B,mBAA6C;QAE7C,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,CAAA;QACxC,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAChC,MAAM,IAAI,WAAW,CAAC,+BAA+B,QAAQ,CAAC,MAAM,6CAA6C,CAAC,CAAA;QACpH,CAAC;QAED,IAAI,CAAC;YACH,IAAI,mBAAmB,EAAE,CAAC;gBACxB,OAAO,MAAM,qBAAqB,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;YACnF,CAAC;YACD,OAAO,MAAM,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,WAAW,CACnB,2CAA2C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACnG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAC3C,CAAA;QACH,CAAC;IACH,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAA;IACxC,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ampersend_ai/ampersend-sdk",
|
|
3
3
|
"description": "Tooling for building applications with x402 payment capabilities. Supports buyer and seller roles.",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.21",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -64,8 +64,9 @@
|
|
|
64
64
|
"@modelcontextprotocol/sdk": "npm:@ampersend_ai/modelcontextprotocol-sdk@^1.20.1",
|
|
65
65
|
"@rhinestone/module-sdk": "^0.4.0",
|
|
66
66
|
"@types/express": "^5.0.6",
|
|
67
|
-
"@x402/core": "
|
|
68
|
-
"@x402/
|
|
67
|
+
"@x402/core": "2.9.0",
|
|
68
|
+
"@x402/evm": "2.9.0",
|
|
69
|
+
"@x402/fetch": "2.9.0",
|
|
69
70
|
"async-mutex": "^0.5.0",
|
|
70
71
|
"commander": "^12.1.0",
|
|
71
72
|
"effect": "^3.21.0",
|
|
@@ -73,7 +74,6 @@
|
|
|
73
74
|
"fastmcp": "npm:@ampersend_ai/fastmcp@^1.0.0",
|
|
74
75
|
"siwe": "^3.0.0",
|
|
75
76
|
"viem": "^2.45.0",
|
|
76
|
-
"x402": "^0.6.6",
|
|
77
77
|
"zod": "^3.24.2"
|
|
78
78
|
},
|
|
79
79
|
"devDependencies": {
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import type { x402Client } from "@x402/core/client";
|
|
2
|
-
import type { X402Treasurer } from "../treasurer.ts";
|
|
3
|
-
/**
|
|
4
|
-
* Wraps an x402Client to use an ampersend-sdk treasurer for payment decisions.
|
|
5
|
-
*
|
|
6
|
-
* This adapter integrates ampersend-sdk treasurers with Coinbase's x402 SDK,
|
|
7
|
-
* allowing you to use sophisticated payment authorization logic (budgets, policies,
|
|
8
|
-
* approvals) with the standard x402 HTTP client ecosystem.
|
|
9
|
-
*
|
|
10
|
-
* Supports both v1 and v2 x402 protocols. The underlying wallets produce v1 payment
|
|
11
|
-
* payloads which are automatically converted to v2 format when needed.
|
|
12
|
-
*
|
|
13
|
-
* @param client - The x402Client instance to wrap
|
|
14
|
-
* @param treasurer - The X402Treasurer that handles payment authorization
|
|
15
|
-
* @param networks - Array of v1 network names to register (e.g., 'base', 'base-sepolia')
|
|
16
|
-
* @returns The configured x402Client instance (same instance, mutated)
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* ```typescript
|
|
20
|
-
* import { x402Client } from '@x402/core/client'
|
|
21
|
-
* import { wrapFetchWithPayment } from '@x402/fetch'
|
|
22
|
-
* import { wrapWithAmpersend, NaiveTreasurer, AccountWallet } from '@ampersend_ai/ampersend-sdk'
|
|
23
|
-
*
|
|
24
|
-
* const wallet = AccountWallet.fromPrivateKey('0x...')
|
|
25
|
-
* const treasurer = new NaiveTreasurer(wallet)
|
|
26
|
-
*
|
|
27
|
-
* const client = wrapWithAmpersend(
|
|
28
|
-
* new x402Client(),
|
|
29
|
-
* treasurer,
|
|
30
|
-
* ['base', 'base-sepolia']
|
|
31
|
-
* )
|
|
32
|
-
*
|
|
33
|
-
* const fetchWithPay = wrapFetchWithPayment(fetch, client)
|
|
34
|
-
* const response = await fetchWithPay('https://paid-api.com/endpoint')
|
|
35
|
-
* ```
|
|
36
|
-
*/
|
|
37
|
-
export declare function wrapWithAmpersend(client: x402Client, treasurer: X402Treasurer, networks: Array<string>): x402Client;
|
|
38
|
-
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/x402/http/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,UAAU,EACX,MAAM,mBAAmB,CAAA;AAQ1B,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,iBAAiB,CAAA;AA6EnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,UAAU,CAiInH"}
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
import { v1NetworkToCaip2, v1PayloadToV2, v2RequirementsToV1 } from "./v2-adapter.js";
|
|
2
|
-
/**
|
|
3
|
-
* Scheme client that retrieves payments from the treasurer via a shared WeakMap.
|
|
4
|
-
* Compatible with @x402/core's SchemeNetworkClient interface for v1 protocol.
|
|
5
|
-
*
|
|
6
|
-
* Note: We don't implement SchemeNetworkClient directly because @x402/core
|
|
7
|
-
* exports v2 types, but registerV1() passes v1 types at runtime.
|
|
8
|
-
*/
|
|
9
|
-
class TreasurerSchemeClientV1 {
|
|
10
|
-
paymentStore;
|
|
11
|
-
scheme = "exact";
|
|
12
|
-
constructor(paymentStore) {
|
|
13
|
-
this.paymentStore = paymentStore;
|
|
14
|
-
}
|
|
15
|
-
async createPaymentPayload(x402Version, requirements) {
|
|
16
|
-
const entry = this.paymentStore.get(requirements);
|
|
17
|
-
if (!entry) {
|
|
18
|
-
throw new Error("No payment authorization found for requirements");
|
|
19
|
-
}
|
|
20
|
-
// Clean up after retrieval
|
|
21
|
-
this.paymentStore.delete(requirements);
|
|
22
|
-
return {
|
|
23
|
-
x402Version,
|
|
24
|
-
scheme: entry.authorization.payment.scheme,
|
|
25
|
-
network: entry.authorization.payment.network,
|
|
26
|
-
payload: entry.authorization.payment.payload,
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Scheme client for v2 protocol.
|
|
32
|
-
* Converts v1 payment payloads to v2 format using stored context.
|
|
33
|
-
*/
|
|
34
|
-
class TreasurerSchemeClientV2 {
|
|
35
|
-
paymentStore;
|
|
36
|
-
scheme = "exact";
|
|
37
|
-
constructor(paymentStore) {
|
|
38
|
-
this.paymentStore = paymentStore;
|
|
39
|
-
}
|
|
40
|
-
async createPaymentPayload(x402Version, requirements) {
|
|
41
|
-
const entry = this.paymentStore.get(requirements);
|
|
42
|
-
if (!entry || entry.version !== 2) {
|
|
43
|
-
throw new Error("No v2 payment authorization found for requirements");
|
|
44
|
-
}
|
|
45
|
-
// Clean up after retrieval
|
|
46
|
-
this.paymentStore.delete(requirements);
|
|
47
|
-
// Convert v1 payment to v2 format
|
|
48
|
-
return v1PayloadToV2(entry.authorization.payment, entry.context);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Wraps an x402Client to use an ampersend-sdk treasurer for payment decisions.
|
|
53
|
-
*
|
|
54
|
-
* This adapter integrates ampersend-sdk treasurers with Coinbase's x402 SDK,
|
|
55
|
-
* allowing you to use sophisticated payment authorization logic (budgets, policies,
|
|
56
|
-
* approvals) with the standard x402 HTTP client ecosystem.
|
|
57
|
-
*
|
|
58
|
-
* Supports both v1 and v2 x402 protocols. The underlying wallets produce v1 payment
|
|
59
|
-
* payloads which are automatically converted to v2 format when needed.
|
|
60
|
-
*
|
|
61
|
-
* @param client - The x402Client instance to wrap
|
|
62
|
-
* @param treasurer - The X402Treasurer that handles payment authorization
|
|
63
|
-
* @param networks - Array of v1 network names to register (e.g., 'base', 'base-sepolia')
|
|
64
|
-
* @returns The configured x402Client instance (same instance, mutated)
|
|
65
|
-
*
|
|
66
|
-
* @example
|
|
67
|
-
* ```typescript
|
|
68
|
-
* import { x402Client } from '@x402/core/client'
|
|
69
|
-
* import { wrapFetchWithPayment } from '@x402/fetch'
|
|
70
|
-
* import { wrapWithAmpersend, NaiveTreasurer, AccountWallet } from '@ampersend_ai/ampersend-sdk'
|
|
71
|
-
*
|
|
72
|
-
* const wallet = AccountWallet.fromPrivateKey('0x...')
|
|
73
|
-
* const treasurer = new NaiveTreasurer(wallet)
|
|
74
|
-
*
|
|
75
|
-
* const client = wrapWithAmpersend(
|
|
76
|
-
* new x402Client(),
|
|
77
|
-
* treasurer,
|
|
78
|
-
* ['base', 'base-sepolia']
|
|
79
|
-
* )
|
|
80
|
-
*
|
|
81
|
-
* const fetchWithPay = wrapFetchWithPayment(fetch, client)
|
|
82
|
-
* const response = await fetchWithPay('https://paid-api.com/endpoint')
|
|
83
|
-
* ```
|
|
84
|
-
*/
|
|
85
|
-
export function wrapWithAmpersend(client, treasurer, networks) {
|
|
86
|
-
// Shared store for correlating payments between hooks and scheme clients
|
|
87
|
-
// Keyed by the original requirements object (v1 or v2)
|
|
88
|
-
const paymentStore = new WeakMap();
|
|
89
|
-
// Create scheme clients for both v1 and v2
|
|
90
|
-
const schemeClientV1 = new TreasurerSchemeClientV1(paymentStore);
|
|
91
|
-
const schemeClientV2 = new TreasurerSchemeClientV2(paymentStore);
|
|
92
|
-
// Register for both v1 and v2 protocols on each network
|
|
93
|
-
for (const network of networks) {
|
|
94
|
-
// v1: uses network names like "base-sepolia"
|
|
95
|
-
client.registerV1(network, schemeClientV1);
|
|
96
|
-
// v2: uses CAIP-2 format like "eip155:84532"
|
|
97
|
-
const caip2Network = v1NetworkToCaip2(network);
|
|
98
|
-
client.register(caip2Network, schemeClientV2);
|
|
99
|
-
}
|
|
100
|
-
// Track authorization for status updates (keyed by original requirements)
|
|
101
|
-
const authorizationByRequirements = new WeakMap();
|
|
102
|
-
// beforePaymentCreation: Consult treasurer for payment authorization
|
|
103
|
-
client.onBeforePaymentCreation(async (context) => {
|
|
104
|
-
const originalRequirements = context.selectedRequirements;
|
|
105
|
-
const paymentRequired = context.paymentRequired;
|
|
106
|
-
if (paymentRequired.x402Version !== 1 && paymentRequired.x402Version !== 2) {
|
|
107
|
-
throw new Error(`Unsupported x402 version: ${paymentRequired.x402Version}`);
|
|
108
|
-
}
|
|
109
|
-
// Convert v2 requirements to v1 for treasurer (which speaks v1 internally)
|
|
110
|
-
let v1Requirements;
|
|
111
|
-
let storeEntry;
|
|
112
|
-
if (paymentRequired.x402Version === 2) {
|
|
113
|
-
// v2 path: convert to v1 for treasurer
|
|
114
|
-
v1Requirements = v2RequirementsToV1(originalRequirements, paymentRequired.resource);
|
|
115
|
-
const authorization = await treasurer.onPaymentRequired([v1Requirements], {
|
|
116
|
-
method: "http",
|
|
117
|
-
params: {
|
|
118
|
-
resource: paymentRequired.resource.url,
|
|
119
|
-
},
|
|
120
|
-
});
|
|
121
|
-
if (!authorization) {
|
|
122
|
-
return { abort: true, reason: "Payment declined by treasurer" };
|
|
123
|
-
}
|
|
124
|
-
// Store v2 entry with context for payload conversion
|
|
125
|
-
storeEntry = {
|
|
126
|
-
version: 2,
|
|
127
|
-
authorization,
|
|
128
|
-
context: {
|
|
129
|
-
resource: paymentRequired.resource,
|
|
130
|
-
originalRequirements,
|
|
131
|
-
},
|
|
132
|
-
};
|
|
133
|
-
paymentStore.set(originalRequirements, storeEntry);
|
|
134
|
-
authorizationByRequirements.set(originalRequirements, authorization);
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
// v1 path: pass directly to treasurer
|
|
138
|
-
v1Requirements = originalRequirements;
|
|
139
|
-
const authorization = await treasurer.onPaymentRequired([v1Requirements], {
|
|
140
|
-
method: "http",
|
|
141
|
-
params: {
|
|
142
|
-
resource: paymentRequired.resource,
|
|
143
|
-
},
|
|
144
|
-
});
|
|
145
|
-
if (!authorization) {
|
|
146
|
-
return { abort: true, reason: "Payment declined by treasurer" };
|
|
147
|
-
}
|
|
148
|
-
// Store v1 entry
|
|
149
|
-
storeEntry = {
|
|
150
|
-
version: 1,
|
|
151
|
-
authorization,
|
|
152
|
-
};
|
|
153
|
-
paymentStore.set(originalRequirements, storeEntry);
|
|
154
|
-
authorizationByRequirements.set(originalRequirements, authorization);
|
|
155
|
-
}
|
|
156
|
-
return;
|
|
157
|
-
});
|
|
158
|
-
// afterPaymentCreation: Notify treasurer payment is being sent
|
|
159
|
-
client.onAfterPaymentCreation(async (context) => {
|
|
160
|
-
const paymentRequired = context.paymentRequired;
|
|
161
|
-
const authorization = authorizationByRequirements.get(context.selectedRequirements);
|
|
162
|
-
if (authorization) {
|
|
163
|
-
// Extract resource URL (v2 has resource.url, v1 has resource as string)
|
|
164
|
-
const resourceUrl = typeof paymentRequired.resource === "object" ? paymentRequired.resource.url : paymentRequired.resource;
|
|
165
|
-
await treasurer.onStatus("sending", authorization, {
|
|
166
|
-
method: "http",
|
|
167
|
-
params: {
|
|
168
|
-
resource: resourceUrl,
|
|
169
|
-
},
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
});
|
|
173
|
-
// onPaymentCreationFailure: Notify treasurer of error
|
|
174
|
-
client.onPaymentCreationFailure(async (context) => {
|
|
175
|
-
const paymentRequired = context.paymentRequired;
|
|
176
|
-
const authorization = authorizationByRequirements.get(context.selectedRequirements);
|
|
177
|
-
if (authorization) {
|
|
178
|
-
// Extract resource URL (v2 has resource.url, v1 has resource as string)
|
|
179
|
-
const resourceUrl = typeof paymentRequired.resource === "object" ? paymentRequired.resource.url : paymentRequired.resource;
|
|
180
|
-
await treasurer.onStatus("error", authorization, {
|
|
181
|
-
method: "http",
|
|
182
|
-
params: {
|
|
183
|
-
resource: resourceUrl,
|
|
184
|
-
error: context.error.message,
|
|
185
|
-
},
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
// Don't recover - let the error propagate
|
|
189
|
-
return;
|
|
190
|
-
});
|
|
191
|
-
return client;
|
|
192
|
-
}
|
|
193
|
-
//# sourceMappingURL=adapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/x402/http/adapter.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,kBAAkB,EAAyB,MAAM,iBAAiB,CAAA;AAiB5G;;;;;;GAMG;AACH,MAAM,uBAAuB;IAGE;IAFpB,MAAM,GAAG,OAAO,CAAA;IAEzB,YAA6B,YAAyC;QAAzC,iBAAY,GAAZ,YAAY,CAA6B;IAAG,CAAC;IAE1E,KAAK,CAAC,oBAAoB,CACxB,WAAmB,EACnB,YAAiC;QAEjC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;QACpE,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QAEtC,OAAO;YACL,WAAW;YACX,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM;YAC1C,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO;YAC5C,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO;SAC7C,CAAA;IACH,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,uBAAuB;IAGE;IAFpB,MAAM,GAAG,OAAO,CAAA;IAEzB,YAA6B,YAAyC;QAAzC,iBAAY,GAAZ,YAAY,CAA6B;IAAG,CAAC;IAE1E,KAAK,CAAC,oBAAoB,CACxB,WAAmB,EACnB,YAAmC;QAEnC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QACjD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAA;QACvE,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;QAEtC,kCAAkC;QAClC,OAAO,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAClE,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAkB,EAAE,SAAwB,EAAE,QAAuB;IACrG,yEAAyE;IACzE,uDAAuD;IACvD,MAAM,YAAY,GAAG,IAAI,OAAO,EAAsB,CAAA;IAEtD,2CAA2C;IAC3C,MAAM,cAAc,GAAG,IAAI,uBAAuB,CAAC,YAAY,CAAC,CAAA;IAChE,MAAM,cAAc,GAAG,IAAI,uBAAuB,CAAC,YAAY,CAAC,CAAA;IAEhE,wDAAwD;IACxD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,6CAA6C;QAC7C,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,cAAqB,CAAC,CAAA;QAEjD,6CAA6C;QAC7C,MAAM,YAAY,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;QAC9C,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,cAAqB,CAAC,CAAA;IACtD,CAAC;IAED,0EAA0E;IAC1E,MAAM,2BAA2B,GAAG,IAAI,OAAO,EAAyB,CAAA;IAExE,qEAAqE;IACrE,MAAM,CAAC,uBAAuB,CAAC,KAAK,EAAE,OAA+B,EAAE,EAAE;QACvE,MAAM,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAA;QACzD,MAAM,eAAe,GAAG,OAAO,CAAC,eAAoC,CAAA;QAEpE,IAAI,eAAe,CAAC,WAAW,KAAK,CAAC,IAAI,eAAe,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC;YAC3E,MAAM,IAAI,KAAK,CAAC,6BAA6B,eAAe,CAAC,WAAW,EAAE,CAAC,CAAA;QAC7E,CAAC;QAED,2EAA2E;QAC3E,IAAI,cAAmC,CAAA;QACvC,IAAI,UAAsB,CAAA;QAE1B,IAAI,eAAe,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC;YACtC,uCAAuC;YACvC,cAAc,GAAG,kBAAkB,CAAC,oBAAoB,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;YAEnF,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,CAAC,cAAc,CAAC,EAAE;gBACxE,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE;oBACN,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG;iBACvC;aACF,CAAC,CAAA;YAEF,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAA;YACjE,CAAC;YAED,qDAAqD;YACrD,UAAU,GAAG;gBACX,OAAO,EAAE,CAAC;gBACV,aAAa;gBACb,OAAO,EAAE;oBACP,QAAQ,EAAE,eAAe,CAAC,QAAQ;oBAClC,oBAAoB;iBACrB;aACF,CAAA;YAED,YAAY,CAAC,GAAG,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAA;YAClD,2BAA2B,CAAC,GAAG,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAA;QACtE,CAAC;aAAM,CAAC;YACN,sCAAsC;YACtC,cAAc,GAAG,oBAAsD,CAAA;YAEvE,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,CAAC,cAAc,CAAC,EAAE;gBACxE,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE;oBACN,QAAQ,EAAE,eAAe,CAAC,QAAQ;iBACnC;aACF,CAAC,CAAA;YAEF,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAA;YACjE,CAAC;YAED,iBAAiB;YACjB,UAAU,GAAG;gBACX,OAAO,EAAE,CAAC;gBACV,aAAa;aACd,CAAA;YAED,YAAY,CAAC,GAAG,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAA;YAClD,2BAA2B,CAAC,GAAG,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAA;QACtE,CAAC;QAED,OAAM;IACR,CAAC,CAAC,CAAA;IAEF,+DAA+D;IAC/D,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAA8B,EAAE,EAAE;QACrE,MAAM,eAAe,GAAG,OAAO,CAAC,eAAoC,CAAA;QACpE,MAAM,aAAa,GAAG,2BAA2B,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;QACnF,IAAI,aAAa,EAAE,CAAC;YAClB,wEAAwE;YACxE,MAAM,WAAW,GACf,OAAO,eAAe,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAA;YACxG,MAAM,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,EAAE;gBACjD,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE;oBACN,QAAQ,EAAE,WAAW;iBACtB;aACF,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,sDAAsD;IACtD,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,OAAsC,EAAE,EAAE;QAC/E,MAAM,eAAe,GAAG,OAAO,CAAC,eAAoC,CAAA;QACpE,MAAM,aAAa,GAAG,2BAA2B,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;QACnF,IAAI,aAAa,EAAE,CAAC;YAClB,wEAAwE;YACxE,MAAM,WAAW,GACf,OAAO,eAAe,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAA;YACxG,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE;gBAC/C,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE;oBACN,QAAQ,EAAE,WAAW;oBACrB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;iBAC7B;aACF,CAAC,CAAA;QACJ,CAAC;QAED,0CAA0C;QAC1C,OAAM;IACR,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Transport-agnostic v2 ↔ v1 protocol adapter.
|
|
3
|
-
*
|
|
4
|
-
* The x402 v2 protocol uses CAIP-2 network identifiers, a different field
|
|
5
|
-
* layout (amount vs maxAmountRequired, resource/accepted envelope), and the
|
|
6
|
-
* same underlying ERC-3009 signatures. Internally the SDK speaks v1 everywhere
|
|
7
|
-
* (treasurer, wallet, types), so this module converts at the protocol boundary.
|
|
8
|
-
*/
|
|
9
|
-
import type { PaymentPayload as V2PaymentPayload, PaymentRequired as V2PaymentRequired, PaymentRequirements as V2PaymentRequirements } from "@x402/core/types";
|
|
10
|
-
import { type PaymentPayload, type PaymentRequirements } from "x402/types";
|
|
11
|
-
/**
|
|
12
|
-
* Convert a v1 network name to CAIP-2 format.
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* v1NetworkToCaip2("base-sepolia") // => "eip155:84532"
|
|
16
|
-
* v1NetworkToCaip2("base") // => "eip155:8453"
|
|
17
|
-
*/
|
|
18
|
-
export declare function v1NetworkToCaip2(network: string): `eip155:${number}`;
|
|
19
|
-
/**
|
|
20
|
-
* Extract chain ID from a CAIP-2 identifier or passthrough.
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* parseCaip2ChainId("eip155:8453") // => 8453
|
|
24
|
-
* parseCaip2ChainId("8453") // => 8453
|
|
25
|
-
*/
|
|
26
|
-
export declare function parseCaip2ChainId(network: string): number;
|
|
27
|
-
/**
|
|
28
|
-
* Convert a CAIP-2 network identifier to v1 network name.
|
|
29
|
-
*
|
|
30
|
-
* @example
|
|
31
|
-
* caip2ToV1Network("eip155:84532") // => "base-sepolia"
|
|
32
|
-
* caip2ToV1Network("eip155:8453") // => "base"
|
|
33
|
-
*/
|
|
34
|
-
export declare function caip2ToV1Network(network: string): string;
|
|
35
|
-
/**
|
|
36
|
-
* Original v2 data preserved for building the outbound payment.
|
|
37
|
-
*/
|
|
38
|
-
export interface V2PaymentContext {
|
|
39
|
-
/** The resource info from the v2 payment required response */
|
|
40
|
-
resource: V2PaymentRequired["resource"];
|
|
41
|
-
/** The original v2 requirements for reconstructing the accepted field */
|
|
42
|
-
originalRequirements: V2PaymentRequirements;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Convert v2 PaymentRequirements to v1 format.
|
|
46
|
-
*
|
|
47
|
-
* This allows the treasurer and wallet (which speak v1) to process v2 requirements.
|
|
48
|
-
*/
|
|
49
|
-
export declare function v2RequirementsToV1(v2Req: V2PaymentRequirements, resource: V2PaymentRequired["resource"]): PaymentRequirements;
|
|
50
|
-
/**
|
|
51
|
-
* Build a v2 PaymentPayload from a v1 payment payload.
|
|
52
|
-
*
|
|
53
|
-
* The accepted field is reconstructed from the original v2 requirements.
|
|
54
|
-
*/
|
|
55
|
-
export declare function v1PayloadToV2(v1Payload: PaymentPayload, context: V2PaymentContext): Pick<V2PaymentPayload, "x402Version" | "payload"> & Partial<V2PaymentPayload>;
|
|
56
|
-
//# sourceMappingURL=v2-adapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"v2-adapter.d.ts","sourceRoot":"","sources":["../../../src/x402/http/v2-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,cAAc,IAAI,gBAAgB,EAClC,eAAe,IAAI,iBAAiB,EACpC,mBAAmB,IAAI,qBAAqB,EAC7C,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAyC,KAAK,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAQjH;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,MAAM,EAAE,CAMpE;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOxD;AAMD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAA;IACvC,yEAAyE;IACzE,oBAAoB,EAAE,qBAAqB,CAAA;CAC5C;AAMD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,qBAAqB,EAC5B,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,GACtC,mBAAmB,CAerB;AAMD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,gBAAgB,GACxB,IAAI,CAAC,gBAAgB,EAAE,aAAa,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAO/E"}
|