@remitmd/sdk 0.1.0

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 (132) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +250 -0
  3. package/dist/a2a.d.ts +137 -0
  4. package/dist/a2a.d.ts.map +1 -0
  5. package/dist/a2a.js +121 -0
  6. package/dist/a2a.js.map +1 -0
  7. package/dist/client.d.ts +41 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +81 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/errors.d.ts +108 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +218 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/http.d.ts +23 -0
  16. package/dist/http.d.ts.map +1 -0
  17. package/dist/http.js +150 -0
  18. package/dist/http.js.map +1 -0
  19. package/dist/index.d.ts +18 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +21 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/integrations/vercel-ai.d.ts +44 -0
  24. package/dist/integrations/vercel-ai.d.ts.map +1 -0
  25. package/dist/integrations/vercel-ai.js +175 -0
  26. package/dist/integrations/vercel-ai.js.map +1 -0
  27. package/dist/models/bounty.d.ts +22 -0
  28. package/dist/models/bounty.d.ts.map +1 -0
  29. package/dist/models/bounty.js +2 -0
  30. package/dist/models/bounty.js.map +1 -0
  31. package/dist/models/common.d.ts +78 -0
  32. package/dist/models/common.d.ts.map +1 -0
  33. package/dist/models/common.js +3 -0
  34. package/dist/models/common.js.map +1 -0
  35. package/dist/models/deposit.d.ts +13 -0
  36. package/dist/models/deposit.d.ts.map +1 -0
  37. package/dist/models/deposit.js +2 -0
  38. package/dist/models/deposit.js.map +1 -0
  39. package/dist/models/escrow.d.ts +16 -0
  40. package/dist/models/escrow.d.ts.map +1 -0
  41. package/dist/models/escrow.js +2 -0
  42. package/dist/models/escrow.js.map +1 -0
  43. package/dist/models/index.d.ts +9 -0
  44. package/dist/models/index.d.ts.map +1 -0
  45. package/dist/models/index.js +9 -0
  46. package/dist/models/index.js.map +1 -0
  47. package/dist/models/invoice.d.ts +30 -0
  48. package/dist/models/invoice.d.ts.map +1 -0
  49. package/dist/models/invoice.js +2 -0
  50. package/dist/models/invoice.js.map +1 -0
  51. package/dist/models/reputation.d.ts +7 -0
  52. package/dist/models/reputation.d.ts.map +1 -0
  53. package/dist/models/reputation.js +2 -0
  54. package/dist/models/reputation.js.map +1 -0
  55. package/dist/models/stream.d.ts +15 -0
  56. package/dist/models/stream.d.ts.map +1 -0
  57. package/dist/models/stream.js +2 -0
  58. package/dist/models/stream.js.map +1 -0
  59. package/dist/models/tab.d.ts +21 -0
  60. package/dist/models/tab.d.ts.map +1 -0
  61. package/dist/models/tab.js +2 -0
  62. package/dist/models/tab.js.map +1 -0
  63. package/dist/provider.d.ts +135 -0
  64. package/dist/provider.d.ts.map +1 -0
  65. package/dist/provider.js +218 -0
  66. package/dist/provider.js.map +1 -0
  67. package/dist/signer.d.ts +31 -0
  68. package/dist/signer.d.ts.map +1 -0
  69. package/dist/signer.js +35 -0
  70. package/dist/signer.js.map +1 -0
  71. package/dist/testing/local.d.ts +31 -0
  72. package/dist/testing/local.d.ts.map +1 -0
  73. package/dist/testing/local.js +100 -0
  74. package/dist/testing/local.js.map +1 -0
  75. package/dist/testing/mock.d.ts +95 -0
  76. package/dist/testing/mock.d.ts.map +1 -0
  77. package/dist/testing/mock.js +407 -0
  78. package/dist/testing/mock.js.map +1 -0
  79. package/dist/wallet.d.ts +162 -0
  80. package/dist/wallet.d.ts.map +1 -0
  81. package/dist/wallet.js +365 -0
  82. package/dist/wallet.js.map +1 -0
  83. package/dist/x402.d.ts +78 -0
  84. package/dist/x402.d.ts.map +1 -0
  85. package/dist/x402.js +151 -0
  86. package/dist/x402.js.map +1 -0
  87. package/eslint.config.js +27 -0
  88. package/package.json +39 -0
  89. package/src/a2a.ts +241 -0
  90. package/src/client.ts +104 -0
  91. package/src/errors.ts +261 -0
  92. package/src/http.ts +190 -0
  93. package/src/index.ts +94 -0
  94. package/src/integrations/vercel-ai.ts +213 -0
  95. package/src/models/bounty.ts +23 -0
  96. package/src/models/common.ts +106 -0
  97. package/src/models/deposit.ts +13 -0
  98. package/src/models/escrow.ts +16 -0
  99. package/src/models/index.ts +8 -0
  100. package/src/models/invoice.ts +32 -0
  101. package/src/models/reputation.ts +7 -0
  102. package/src/models/stream.ts +15 -0
  103. package/src/models/tab.ts +22 -0
  104. package/src/provider.ts +281 -0
  105. package/src/signer.ts +70 -0
  106. package/src/testing/local.ts +118 -0
  107. package/src/testing/mock.ts +507 -0
  108. package/src/wallet.ts +546 -0
  109. package/src/x402.ts +202 -0
  110. package/tests/acceptance/bounty.test.ts +82 -0
  111. package/tests/acceptance/deposit.test.ts +70 -0
  112. package/tests/acceptance/direct.test.ts +53 -0
  113. package/tests/acceptance/escrow.test.ts +67 -0
  114. package/tests/acceptance/setup.ts +113 -0
  115. package/tests/acceptance/stream.test.ts +98 -0
  116. package/tests/acceptance/tab.test.ts +108 -0
  117. package/tests/acceptance/x402.test.ts +140 -0
  118. package/tests/compliance/auth.ts +69 -0
  119. package/tests/compliance/escrows.ts +96 -0
  120. package/tests/compliance/helpers.ts +90 -0
  121. package/tests/compliance/payments.ts +69 -0
  122. package/tests/compliance/tabs.ts +52 -0
  123. package/tests/test_a2a.ts +151 -0
  124. package/tests/test_errors.ts +80 -0
  125. package/tests/test_golden_vectors.ts +162 -0
  126. package/tests/test_integrations.ts +115 -0
  127. package/tests/test_mock.ts +217 -0
  128. package/tests/test_permit.ts +216 -0
  129. package/tests/test_provider.ts +304 -0
  130. package/tests/test_wallet.ts +108 -0
  131. package/tests/test_x402.ts +302 -0
  132. package/tsconfig.json +19 -0
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Wallet — read + write operations, requires a private key (or custom Signer).
3
+ */
4
+ import { RemitClient, type RemitClientOptions } from "./client.js";
5
+ import { type Signer } from "./signer.js";
6
+ import { type PaymentRequired } from "./x402.js";
7
+ import type { Transaction, WalletStatus, Webhook, LinkResponse } from "./models/index.js";
8
+ import type { Invoice } from "./models/invoice.js";
9
+ import type { Escrow } from "./models/escrow.js";
10
+ import type { Tab, TabCharge } from "./models/tab.js";
11
+ import type { Stream } from "./models/stream.js";
12
+ import type { Bounty } from "./models/bounty.js";
13
+ import type { Deposit } from "./models/deposit.js";
14
+ export interface WalletOptions extends RemitClientOptions {
15
+ privateKey?: string;
16
+ signer?: Signer;
17
+ /** Router contract address for EIP-712 domain — must match server's ROUTER_ADDRESS. */
18
+ routerAddress?: string;
19
+ /** JSON-RPC URL for on-chain reads (nonce fetching). Falls back to REMITMD_RPC_URL env var, then public defaults. */
20
+ rpcUrl?: string;
21
+ }
22
+ export interface OpenTabOptions {
23
+ to: string;
24
+ limit: number;
25
+ perUnit: number;
26
+ expires?: number;
27
+ /** Optional EIP-2612 permit for gasless USDC approval. */
28
+ permit?: PermitSignature;
29
+ }
30
+ export interface CloseTabOptions {
31
+ /** Final charged amount in USDC. Defaults to 0 (full refund). */
32
+ finalAmount?: number;
33
+ /** Provider's EIP-712 TabCharge signature covering the final state. */
34
+ providerSig?: string;
35
+ }
36
+ export interface ChargeTabOptions {
37
+ amount: number;
38
+ cumulative: number;
39
+ callCount: number;
40
+ /** Provider's EIP-712 TabCharge signature. */
41
+ providerSig: string;
42
+ }
43
+ export interface OpenStreamOptions {
44
+ to: string;
45
+ rate: number;
46
+ maxDuration?: number;
47
+ maxTotal?: number;
48
+ /** Optional EIP-2612 permit for gasless USDC approval. */
49
+ permit?: PermitSignature;
50
+ }
51
+ /** EIP-2612 permit signature for gasless USDC approval. */
52
+ export interface PermitSignature {
53
+ value: number;
54
+ deadline: number;
55
+ v: number;
56
+ r: string;
57
+ s: string;
58
+ }
59
+ /** Options for signing an EIP-2612 USDC permit. */
60
+ export interface SignPermitOptions {
61
+ /** Contract address that will be approved as spender. */
62
+ spender: string;
63
+ /** Amount in USDC base units (6 decimals). */
64
+ value: bigint;
65
+ /** Permit deadline (Unix timestamp). */
66
+ deadline: number;
67
+ /** Current permit nonce for this wallet (default: 0). */
68
+ nonce?: number;
69
+ /** USDC contract address (defaults to Base Sepolia MockUSDC). */
70
+ usdcAddress?: string;
71
+ }
72
+ export interface PostBountyOptions {
73
+ amount: number;
74
+ task: string;
75
+ deadline: number;
76
+ validation?: "poster" | "oracle" | "multisig";
77
+ maxAttempts?: number;
78
+ /** Optional EIP-2612 permit for gasless USDC approval. */
79
+ permit?: PermitSignature;
80
+ }
81
+ export interface PlaceDepositOptions {
82
+ to: string;
83
+ amount: number;
84
+ expires: number;
85
+ /** Optional EIP-2612 permit for gasless USDC approval. */
86
+ permit?: PermitSignature;
87
+ }
88
+ export declare class Wallet extends RemitClient {
89
+ #private;
90
+ constructor(options?: WalletOptions);
91
+ /** Generate a new random wallet (for testing / onboarding). */
92
+ static create(options?: RemitClientOptions): Wallet;
93
+ /** Load from REMITMD_KEY and REMITMD_CHAIN environment variables. */
94
+ static fromEnv(overrides?: RemitClientOptions): Wallet;
95
+ /** Checksummed public address. */
96
+ get address(): string;
97
+ /** Prevent private key leakage. */
98
+ toJSON(): Record<string, string>;
99
+ /** Default USDC addresses per chain. */
100
+ static readonly USDC_ADDRESSES: Record<string, string>;
101
+ /**
102
+ * Sign an EIP-2612 permit for USDC approval.
103
+ * Returns a PermitSignature object that can be passed to postBounty() or placeDeposit().
104
+ */
105
+ signUsdcPermit(options: SignPermitOptions): Promise<PermitSignature>;
106
+ /**
107
+ * Convenience: sign an EIP-2612 permit for USDC approval.
108
+ * Auto-fetches the on-chain nonce and sets a default deadline (1 hour).
109
+ * @param spender Contract address that will call transferFrom (e.g. Router, Escrow).
110
+ * @param amount Amount in USDC (e.g. 1.50 for $1.50).
111
+ * @param deadline Optional Unix timestamp. Defaults to 1 hour from now.
112
+ */
113
+ signPermit(spender: string, amount: number, deadline?: number): Promise<PermitSignature>;
114
+ payDirect(to: string, amount: number, memo?: string, options?: {
115
+ permit?: PermitSignature;
116
+ }): Promise<Transaction>;
117
+ pay(invoice: Invoice, options?: {
118
+ permit?: PermitSignature;
119
+ }): Promise<Escrow>;
120
+ claimStart(invoiceId: string): Promise<Transaction>;
121
+ submitEvidence(invoiceId: string, evidenceUri: string, milestoneIndex?: number): Promise<Transaction>;
122
+ releaseEscrow(invoiceId: string): Promise<Transaction>;
123
+ releaseMilestone(invoiceId: string, milestoneIndex: number): Promise<Transaction>;
124
+ cancelEscrow(invoiceId: string): Promise<Transaction>;
125
+ openTab(options: OpenTabOptions): Promise<Tab>;
126
+ /** Sign a TabCharge EIP-712 message (provider-side, for charging or closing a tab). */
127
+ signTabCharge(tabContract: string, tabId: string, totalCharged: bigint, callCount: number): Promise<string>;
128
+ /** Charge a tab (provider-side). Requires a TabCharge EIP-712 signature. */
129
+ chargeTab(tabId: string, options: ChargeTabOptions): Promise<TabCharge>;
130
+ closeTab(tabId: string, options?: CloseTabOptions): Promise<Transaction>;
131
+ openStream(options: OpenStreamOptions): Promise<Stream>;
132
+ closeStream(streamId: string): Promise<Transaction>;
133
+ postBounty(options: PostBountyOptions): Promise<Bounty>;
134
+ submitBounty(bountyId: string, evidenceHash: string, evidenceUri?: string): Promise<Transaction>;
135
+ awardBounty(bountyId: string, submissionId: number): Promise<Transaction>;
136
+ placeDeposit(options: PlaceDepositOptions): Promise<Deposit>;
137
+ returnDeposit(depositId: string): Promise<Transaction>;
138
+ /** GET /escrows/{id} — authenticated; server requires auth to access escrow details. */
139
+ getEscrow(invoiceId: string): Promise<Escrow>;
140
+ /** GET /tabs/{id} — authenticated; server requires auth to access tab details. */
141
+ getTab(tabId: string): Promise<Tab>;
142
+ status(): Promise<WalletStatus>;
143
+ balance(): Promise<number>;
144
+ registerWebhook(url: string, events: string[], chains?: string[]): Promise<Webhook>;
145
+ /** Generate a one-time URL for the operator to fund this wallet. */
146
+ createFundLink(): Promise<LinkResponse>;
147
+ /** Generate a one-time URL for the operator to withdraw funds. */
148
+ createWithdrawLink(): Promise<LinkResponse>;
149
+ /** @deprecated Use mint() instead. Faucet endpoint returns 410 Gone. */
150
+ requestTestnetFunds(): Promise<Transaction>;
151
+ /** Mint testnet USDC via POST /mint. Max $2,500 per call, once per hour per wallet. */
152
+ mint(amount: number): Promise<{
153
+ tx_hash: string;
154
+ balance: number;
155
+ }>;
156
+ /** Make a fetch request, auto-paying any x402 402 responses within maxAutoPayUsdc. */
157
+ x402Fetch(url: string, maxAutoPayUsdc?: number, init?: RequestInit): Promise<{
158
+ response: Response;
159
+ lastPayment: PaymentRequired | null;
160
+ }>;
161
+ }
162
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"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"}
package/dist/wallet.js ADDED
@@ -0,0 +1,365 @@
1
+ /**
2
+ * Wallet — read + write operations, requires a private key (or custom Signer).
3
+ */
4
+ import { randomBytes } from "node:crypto";
5
+ import { generatePrivateKey } from "viem/accounts";
6
+ import { RemitClient } from "./client.js";
7
+ import { AuthenticatedClient } from "./http.js";
8
+ import { PrivateKeySigner } from "./signer.js";
9
+ import { X402Client } from "./x402.js";
10
+ /** Default public RPC URLs per chain. */
11
+ const DEFAULT_RPC_URLS = {
12
+ "base-sepolia": "https://sepolia.base.org",
13
+ base: "https://mainnet.base.org",
14
+ localhost: "http://127.0.0.1:8545",
15
+ };
16
+ /**
17
+ * Convert a UUID string to bytes32 matching the server's id_to_bytes32().
18
+ * Encodes the UUID's UTF-8 bytes, left-aligned, zero-padded to 32.
19
+ */
20
+ function uuidToBytes32(uuid) {
21
+ const padded = new Uint8Array(32);
22
+ for (let i = 0; i < Math.min(uuid.length, 32); i++) {
23
+ padded[i] = uuid.charCodeAt(i);
24
+ }
25
+ return ("0x" + Array.from(padded, (b) => b.toString(16).padStart(2, "0")).join(""));
26
+ }
27
+ export class Wallet extends RemitClient {
28
+ #signer;
29
+ #auth;
30
+ #rpcUrl;
31
+ constructor(options = {}) {
32
+ const { privateKey: explicitKey, signer, routerAddress, rpcUrl, ...clientOptions } = options;
33
+ const privateKey = explicitKey ?? (!signer ? process.env["REMITMD_KEY"] : undefined);
34
+ if (!privateKey && !signer) {
35
+ throw new Error("Wallet requires privateKey, signer, or the REMITMD_KEY environment variable.");
36
+ }
37
+ super(clientOptions);
38
+ this.#rpcUrl = rpcUrl ?? process.env["REMITMD_RPC_URL"] ?? DEFAULT_RPC_URLS[this._chain] ?? DEFAULT_RPC_URLS["base-sepolia"];
39
+ // Router contract address for EIP-712 domain — falls back to env var.
40
+ const verifyingContract = routerAddress ?? process.env["REMITMD_ROUTER_ADDRESS"] ?? "";
41
+ this.#signer = signer ?? new PrivateKeySigner(privateKey);
42
+ this.#auth = new AuthenticatedClient({
43
+ signer: this.#signer,
44
+ baseUrl: this._apiUrl,
45
+ chainId: this._chainId,
46
+ verifyingContract,
47
+ });
48
+ }
49
+ /** Generate a new random wallet (for testing / onboarding). */
50
+ static create(options) {
51
+ const key = generatePrivateKey();
52
+ return new Wallet({ ...options, privateKey: key });
53
+ }
54
+ /** Load from REMITMD_KEY and REMITMD_CHAIN environment variables. */
55
+ static fromEnv(overrides) {
56
+ const key = process.env["REMITMD_KEY"];
57
+ const chain = process.env["REMITMD_CHAIN"] ?? "base";
58
+ if (!key)
59
+ throw new Error("REMITMD_KEY environment variable is not set.");
60
+ return new Wallet({ chain, ...overrides, privateKey: key });
61
+ }
62
+ /** Checksummed public address. */
63
+ get address() {
64
+ return this.#signer.getAddress();
65
+ }
66
+ /** Prevent private key leakage. */
67
+ toJSON() {
68
+ return { address: this.address, chain: this._chain };
69
+ }
70
+ [Symbol.for("nodejs.util.inspect.custom")]() {
71
+ return `Wallet { address: '${this.address}', chain: '${this._chain}' }`;
72
+ }
73
+ // ─── EIP-2612 Permit ─────────────────────────────────────────────────────────
74
+ /** Default USDC addresses per chain. */
75
+ static USDC_ADDRESSES = {
76
+ "base-sepolia": "0x142aD61B8d2edD6b3807D9266866D97C35Ee0317",
77
+ base: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
78
+ localhost: "0x5FbDB2315678afecb367f032d93F642f64180aa3",
79
+ };
80
+ /**
81
+ * Sign an EIP-2612 permit for USDC approval.
82
+ * Returns a PermitSignature object that can be passed to postBounty() or placeDeposit().
83
+ */
84
+ async signUsdcPermit(options) {
85
+ const usdcAddress = options.usdcAddress ?? Wallet.USDC_ADDRESSES[this._chain] ?? "";
86
+ const domain = {
87
+ name: "USD Coin",
88
+ version: "2",
89
+ chainId: this._chainId,
90
+ verifyingContract: usdcAddress,
91
+ };
92
+ const types = {
93
+ Permit: [
94
+ { name: "owner", type: "address" },
95
+ { name: "spender", type: "address" },
96
+ { name: "value", type: "uint256" },
97
+ { name: "nonce", type: "uint256" },
98
+ { name: "deadline", type: "uint256" },
99
+ ],
100
+ };
101
+ const value = {
102
+ owner: this.address,
103
+ spender: options.spender,
104
+ value: options.value.toString(),
105
+ nonce: options.nonce ?? 0,
106
+ deadline: options.deadline,
107
+ };
108
+ const sig = await this.#signer.signTypedData(domain, types, value);
109
+ // Split signature into v, r, s
110
+ const sigBytes = sig.startsWith("0x") ? sig.slice(2) : sig;
111
+ const r = `0x${sigBytes.slice(0, 64)}`;
112
+ const s = `0x${sigBytes.slice(64, 128)}`;
113
+ const v = parseInt(sigBytes.slice(128, 130), 16);
114
+ return {
115
+ value: Number(options.value),
116
+ deadline: options.deadline,
117
+ v,
118
+ r,
119
+ s,
120
+ };
121
+ }
122
+ /**
123
+ * Convenience: sign an EIP-2612 permit for USDC approval.
124
+ * Auto-fetches the on-chain nonce and sets a default deadline (1 hour).
125
+ * @param spender Contract address that will call transferFrom (e.g. Router, Escrow).
126
+ * @param amount Amount in USDC (e.g. 1.50 for $1.50).
127
+ * @param deadline Optional Unix timestamp. Defaults to 1 hour from now.
128
+ */
129
+ async signPermit(spender, amount, deadline) {
130
+ const usdcAddress = Wallet.USDC_ADDRESSES[this._chain] ?? "";
131
+ const nonce = await this.#fetchUsdcNonce(usdcAddress);
132
+ const dl = deadline ?? Math.floor(Date.now() / 1000) + 3600;
133
+ const rawAmount = BigInt(Math.round(amount * 1e6));
134
+ return this.signUsdcPermit({
135
+ spender,
136
+ value: rawAmount,
137
+ deadline: dl,
138
+ nonce,
139
+ usdcAddress,
140
+ });
141
+ }
142
+ /** Fetch the current EIP-2612 nonce for this wallet from the USDC contract via JSON-RPC. */
143
+ async #fetchUsdcNonce(usdcAddress) {
144
+ // nonces(address) selector = 0x7ecebe00 + address padded to 32 bytes
145
+ const paddedAddress = this.address.toLowerCase().replace("0x", "").padStart(64, "0");
146
+ const data = `0x7ecebe00${paddedAddress}`;
147
+ const response = await fetch(this.#rpcUrl, {
148
+ method: "POST",
149
+ headers: { "Content-Type": "application/json" },
150
+ body: JSON.stringify({
151
+ jsonrpc: "2.0",
152
+ id: 1,
153
+ method: "eth_call",
154
+ params: [{ to: usdcAddress, data }, "latest"],
155
+ }),
156
+ });
157
+ const json = await response.json();
158
+ if (json.error)
159
+ throw new Error(`RPC error fetching nonce: ${json.error.message}`);
160
+ return parseInt(json.result ?? "0x0", 16);
161
+ }
162
+ // ─── Direct Payment ─────────────────────────────────────────────────────────
163
+ payDirect(to, amount, memo = "", options) {
164
+ return this.#auth.post("/payments/direct", {
165
+ to,
166
+ amount,
167
+ task: memo,
168
+ chain: this._chain,
169
+ nonce: randomBytes(16).toString("hex"),
170
+ signature: "0x",
171
+ ...(options?.permit ? { permit: options.permit } : {}),
172
+ });
173
+ }
174
+ // ─── Escrow ─────────────────────────────────────────────────────────────────
175
+ async pay(invoice, options) {
176
+ // Step 1: create invoice on server.
177
+ const invoiceId = invoice.id || randomBytes(16).toString("hex");
178
+ await this.#auth.post("/invoices", {
179
+ id: invoiceId,
180
+ chain: invoice.chain || this._chain,
181
+ from_agent: this.address.toLowerCase(),
182
+ to_agent: invoice.to.toLowerCase(),
183
+ amount: invoice.amount,
184
+ type: invoice.paymentType ?? "escrow",
185
+ task: invoice.memo ?? "",
186
+ nonce: randomBytes(16).toString("hex"),
187
+ signature: "0x",
188
+ ...(invoice.timeout ? { escrow_timeout: invoice.timeout } : {}),
189
+ });
190
+ // Step 2: fund the escrow and return it.
191
+ return this.#auth.post("/escrows", {
192
+ invoice_id: invoiceId,
193
+ ...(options?.permit ? { permit: options.permit } : {}),
194
+ });
195
+ }
196
+ claimStart(invoiceId) {
197
+ return this.#auth.post(`/escrows/${invoiceId}/claim-start`, {});
198
+ }
199
+ submitEvidence(invoiceId, evidenceUri, milestoneIndex = 0) {
200
+ return this.#auth.post(`/escrows/${invoiceId}/evidence`, {
201
+ evidenceUri,
202
+ milestoneIndex,
203
+ });
204
+ }
205
+ releaseEscrow(invoiceId) {
206
+ return this.#auth.post(`/escrows/${invoiceId}/release`, {});
207
+ }
208
+ releaseMilestone(invoiceId, milestoneIndex) {
209
+ return this.#auth.post(`/escrows/${invoiceId}/milestones/${milestoneIndex}/release`, {});
210
+ }
211
+ cancelEscrow(invoiceId) {
212
+ return this.#auth.post(`/escrows/${invoiceId}/cancel`, {});
213
+ }
214
+ // ─── Metered Tabs ───────────────────────────────────────────────────────────
215
+ openTab(options) {
216
+ return this.#auth.post("/tabs", {
217
+ chain: this._chain,
218
+ provider: options.to,
219
+ limit_amount: options.limit,
220
+ per_unit: options.perUnit,
221
+ expiry: Math.floor(Date.now() / 1000) + (options.expires ?? 86400),
222
+ ...(options.permit ? { permit: options.permit } : {}),
223
+ });
224
+ }
225
+ /** Sign a TabCharge EIP-712 message (provider-side, for charging or closing a tab). */
226
+ async signTabCharge(tabContract, tabId, totalCharged, callCount) {
227
+ return this.#signer.signTypedData({
228
+ name: "RemitTab",
229
+ version: "1",
230
+ chainId: this._chainId,
231
+ verifyingContract: tabContract,
232
+ }, {
233
+ TabCharge: [
234
+ { name: "tabId", type: "bytes32" },
235
+ { name: "totalCharged", type: "uint96" },
236
+ { name: "callCount", type: "uint32" },
237
+ ],
238
+ }, {
239
+ tabId: uuidToBytes32(tabId),
240
+ totalCharged,
241
+ callCount,
242
+ });
243
+ }
244
+ /** Charge a tab (provider-side). Requires a TabCharge EIP-712 signature. */
245
+ chargeTab(tabId, options) {
246
+ return this.#auth.post(`/tabs/${tabId}/charge`, {
247
+ amount: options.amount,
248
+ cumulative: options.cumulative,
249
+ call_count: options.callCount,
250
+ provider_sig: options.providerSig,
251
+ });
252
+ }
253
+ closeTab(tabId, options) {
254
+ return this.#auth.post(`/tabs/${tabId}/close`, {
255
+ final_amount: options?.finalAmount ?? 0,
256
+ provider_sig: options?.providerSig ?? "0x",
257
+ });
258
+ }
259
+ // ─── Streaming ──────────────────────────────────────────────────────────────
260
+ openStream(options) {
261
+ return this.#auth.post("/streams", {
262
+ chain: this._chain,
263
+ payee: options.to,
264
+ rate_per_second: options.rate,
265
+ max_total: options.maxTotal,
266
+ ...(options.permit ? { permit: options.permit } : {}),
267
+ });
268
+ }
269
+ closeStream(streamId) {
270
+ return this.#auth.post(`/streams/${streamId}/close`);
271
+ }
272
+ // ─── Bounties ───────────────────────────────────────────────────────────────
273
+ postBounty(options) {
274
+ return this.#auth.post("/bounties", {
275
+ chain: this._chain,
276
+ amount: options.amount,
277
+ task_description: options.task,
278
+ deadline: options.deadline,
279
+ max_attempts: options.maxAttempts ?? 10,
280
+ ...(options.permit ? { permit: options.permit } : {}),
281
+ });
282
+ }
283
+ submitBounty(bountyId, evidenceHash, evidenceUri) {
284
+ return this.#auth.post(`/bounties/${bountyId}/submit`, {
285
+ evidence_hash: evidenceHash,
286
+ ...(evidenceUri ? { evidence_uri: evidenceUri } : {}),
287
+ });
288
+ }
289
+ awardBounty(bountyId, submissionId) {
290
+ return this.#auth.post(`/bounties/${bountyId}/award`, { submission_id: submissionId });
291
+ }
292
+ // ─── Deposits ───────────────────────────────────────────────────────────────
293
+ placeDeposit(options) {
294
+ return this.#auth.post("/deposits", {
295
+ chain: this._chain,
296
+ provider: options.to,
297
+ amount: options.amount,
298
+ expiry: Math.floor(Date.now() / 1000) + options.expires,
299
+ ...(options.permit ? { permit: options.permit } : {}),
300
+ });
301
+ }
302
+ returnDeposit(depositId) {
303
+ return this.#auth.post(`/deposits/${depositId}/return`, {});
304
+ }
305
+ // ─── Authenticated reads (override unauthenticated base class versions) ──────
306
+ /** GET /escrows/{id} — authenticated; server requires auth to access escrow details. */
307
+ getEscrow(invoiceId) {
308
+ return this.#auth.get(`/escrows/${invoiceId}`);
309
+ }
310
+ /** GET /tabs/{id} — authenticated; server requires auth to access tab details. */
311
+ getTab(tabId) {
312
+ return this.#auth.get(`/tabs/${tabId}`);
313
+ }
314
+ // ─── Status ─────────────────────────────────────────────────────────────────
315
+ status() {
316
+ return this.#auth.get(`/status/${this.address}`);
317
+ }
318
+ async balance() {
319
+ const s = await this.status();
320
+ return parseFloat(s.balance);
321
+ }
322
+ // ─── Webhooks ───────────────────────────────────────────────────────────────
323
+ registerWebhook(url, events, chains) {
324
+ return this.#auth.post("/webhooks", {
325
+ url,
326
+ events,
327
+ chains: chains ?? [this._chain],
328
+ });
329
+ }
330
+ // ─── One-time operator links ─────────────────────────────────────────────────
331
+ /** Generate a one-time URL for the operator to fund this wallet. */
332
+ createFundLink() {
333
+ return this.#auth.post("/links/fund", {});
334
+ }
335
+ /** Generate a one-time URL for the operator to withdraw funds. */
336
+ createWithdrawLink() {
337
+ return this.#auth.post("/links/withdraw", {});
338
+ }
339
+ // ─── Testnet ────────────────────────────────────────────────────────────────
340
+ /** @deprecated Use mint() instead. Faucet endpoint returns 410 Gone. */
341
+ requestTestnetFunds() {
342
+ return this.#auth.post("/faucet", { wallet: this.address });
343
+ }
344
+ /** Mint testnet USDC via POST /mint. Max $2,500 per call, once per hour per wallet. */
345
+ async mint(amount) {
346
+ const res = await fetch(`${this._apiUrl}/mint`, {
347
+ method: "POST",
348
+ headers: { "Content-Type": "application/json" },
349
+ body: JSON.stringify({ wallet: this.address, amount }),
350
+ });
351
+ if (!res.ok) {
352
+ const body = await res.json().catch(() => ({}));
353
+ throw new Error(`mint failed (${res.status}): ${body.message ?? res.statusText}`);
354
+ }
355
+ return res.json();
356
+ }
357
+ // ─── x402 ───────────────────────────────────────────────────────────────────
358
+ /** Make a fetch request, auto-paying any x402 402 responses within maxAutoPayUsdc. */
359
+ async x402Fetch(url, maxAutoPayUsdc = 0.1, init) {
360
+ const client = new X402Client({ signer: this.#signer, address: this.address, maxAutoPayUsdc });
361
+ const response = await client.fetch(url, init);
362
+ return { response, lastPayment: client.lastPayment };
363
+ }
364
+ }
365
+ //# sourceMappingURL=wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"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"}
package/dist/x402.d.ts ADDED
@@ -0,0 +1,78 @@
1
+ /**
2
+ * x402 client middleware for auto-paying HTTP 402 Payment Required responses.
3
+ *
4
+ * x402 is an open payment standard where resource servers return HTTP 402 with
5
+ * a `PAYMENT-REQUIRED` header describing the cost. This module provides a
6
+ * `fetch` wrapper that intercepts those responses, signs an EIP-3009
7
+ * authorization, and retries the request with a `PAYMENT-SIGNATURE` header.
8
+ *
9
+ * Usage:
10
+ * ```typescript
11
+ * import { PrivateKeySigner } from "@remitmd/sdk";
12
+ * import { X402Client } from "@remitmd/sdk/x402";
13
+ *
14
+ * const signer = new PrivateKeySigner("0x...");
15
+ * const client = new X402Client({
16
+ * signer,
17
+ * address: signer.getAddress(),
18
+ * maxAutoPayUsdc: 0.10,
19
+ * });
20
+ *
21
+ * const response = await client.fetch("https://api.provider.com/v1/data");
22
+ * ```
23
+ */
24
+ import type { Signer } from "./signer.js";
25
+ /** Raised when an x402 payment amount exceeds the configured auto-pay limit. */
26
+ export declare class AllowanceExceededError extends Error {
27
+ readonly amountUsdc: number;
28
+ readonly limitUsdc: number;
29
+ constructor(amountUsdc: number, limitUsdc: number);
30
+ }
31
+ /** Configuration for {@link X402Client}. */
32
+ export interface X402ClientOptions {
33
+ /** Signer used for EIP-3009 authorization signatures. */
34
+ signer: Signer;
35
+ /** Checksummed payer address — must match the signer's public key. */
36
+ address: string;
37
+ /** Maximum USDC amount to auto-pay per request (default: 0.10). */
38
+ maxAutoPayUsdc?: number;
39
+ }
40
+ /** Shape of the base64-decoded PAYMENT-REQUIRED header (V2). */
41
+ export interface PaymentRequired {
42
+ scheme: string;
43
+ network: string;
44
+ amount: string;
45
+ asset: string;
46
+ payTo: string;
47
+ maxTimeoutSeconds?: number;
48
+ /** URL or path of the resource being protected (e.g. "/api/v0/data"). */
49
+ resource?: string;
50
+ /** Human-readable description of what the payment is for. */
51
+ description?: string;
52
+ /** MIME type of the resource (e.g. "application/json"). */
53
+ mimeType?: string;
54
+ }
55
+ /**
56
+ * `fetch` wrapper that auto-handles HTTP 402 Payment Required responses.
57
+ *
58
+ * On receiving a 402, the client:
59
+ * 1. Decodes the `PAYMENT-REQUIRED` header (base64 JSON)
60
+ * 2. Checks the amount is within `maxAutoPayUsdc`
61
+ * 3. Builds and signs an EIP-3009 `transferWithAuthorization`
62
+ * 4. Base64-encodes the `PAYMENT-SIGNATURE` header
63
+ * 5. Retries the original request with payment attached
64
+ *
65
+ * V2: The decoded `PAYMENT-REQUIRED` may include `resource`, `description`,
66
+ * and `mimeType` fields. Access the last payment via `lastPayment`.
67
+ */
68
+ export declare class X402Client {
69
+ #private;
70
+ /** The last PAYMENT-REQUIRED decoded before payment. Useful for logging/display. */
71
+ lastPayment: PaymentRequired | null;
72
+ constructor({ signer, address, maxAutoPayUsdc }: X402ClientOptions);
73
+ /** Make a fetch request, auto-paying any 402 responses within the configured limit. */
74
+ fetch(url: string, init?: RequestInit): Promise<Response>;
75
+ /** Prevent address leakage via structured cloning / serialisation. */
76
+ toJSON(): Record<string, string>;
77
+ }
78
+ //# sourceMappingURL=x402.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402.d.ts","sourceRoot":"","sources":["../src/x402.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAc1C,gFAAgF;AAChF,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAQlD;AAED,4CAA4C;AAC5C,MAAM,WAAW,iBAAiB;IAChC,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,gEAAgE;AAChE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,UAAU;;IAIrB,oFAAoF;IACpF,WAAW,EAAE,eAAe,GAAG,IAAI,CAAQ;gBAE/B,EAAE,MAAM,EAAE,OAAO,EAAE,cAAoB,EAAE,EAAE,iBAAiB;IAMxE,uFAAuF;IACjF,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAyF/D,sEAAsE;IACtE,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGjC"}