@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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 remit-md
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,250 @@
1
+ # remit.md TypeScript SDK
2
+
3
+ Universal payment protocol for AI agents — TypeScript/Node.js client library.
4
+
5
+ [![CI](https://github.com/remit-md/sdk/actions/workflows/ci.yml/badge.svg)](https://github.com/remit-md/sdk/actions/workflows/ci.yml)
6
+ [![npm](https://img.shields.io/npm/v/@remitmd/sdk)](https://www.npmjs.com/package/@remitmd/sdk)
7
+
8
+ ## Installation
9
+
10
+ ```bash
11
+ npm install @remitmd/sdk
12
+ # or
13
+ pnpm add @remitmd/sdk
14
+ ```
15
+
16
+ ## Quickstart
17
+
18
+ ```typescript
19
+ import { Wallet } from "@remitmd/sdk";
20
+
21
+ // From environment variables (REMITMD_KEY, REMITMD_CHAIN)
22
+ const wallet = Wallet.fromEnv();
23
+
24
+ // Or with explicit key
25
+ const wallet = new Wallet({ privateKey: "0x...", chain: "base-sepolia" });
26
+
27
+ // Get contract addresses (cached per session)
28
+ const contracts = await wallet.getContracts();
29
+
30
+ // Sign a permit (gasless USDC approval) and pay
31
+ const permit = await wallet.signPermit(contracts.router, 1.50);
32
+ const tx = await wallet.payDirect("0xRecipient...", 1.50, "inference fee", { permit });
33
+ console.log(tx.txHash);
34
+ ```
35
+
36
+ ## Payment Models
37
+
38
+ ### Permits (Gasless USDC Approval)
39
+
40
+ Every payment that moves USDC requires on-chain approval. Use `signPermit()` to sign an EIP-2612 permit off-chain — no gas, no approve transaction.
41
+
42
+ ```typescript
43
+ const contracts = await wallet.getContracts();
44
+
45
+ // signPermit(spender, amount, deadline?) — auto-fetches nonce from chain
46
+ const permit = await wallet.signPermit(contracts.router, 5.0);
47
+ ```
48
+
49
+ The `spender` must match the contract handling the payment:
50
+ - Direct payment: `contracts.router`
51
+ - Escrow: `contracts.escrow`
52
+ - Tab: `contracts.tab`
53
+ - Stream: `contracts.stream`
54
+ - Bounty: `contracts.bounty`
55
+ - Deposit: `contracts.deposit`
56
+
57
+ ### Direct Payment
58
+
59
+ ```typescript
60
+ const permit = await wallet.signPermit(contracts.router, 5.0);
61
+ const tx = await wallet.payDirect("0xRecipient...", 5.0, "AI task", { permit });
62
+ ```
63
+
64
+ ### Escrow
65
+
66
+ ```typescript
67
+ const permit = await wallet.signPermit(contracts.escrow, 100.0);
68
+ const escrow = await wallet.pay({
69
+ to: "0xContractor...",
70
+ amount: 100.0,
71
+ memo: "Code review",
72
+ }, { permit });
73
+
74
+ // Work happens...
75
+ await wallet.releaseEscrow(escrow.id); // pay the contractor
76
+ // or
77
+ await wallet.cancelEscrow(escrow.id); // refund yourself
78
+ ```
79
+
80
+ ### Metered Tab (off-chain billing)
81
+
82
+ ```typescript
83
+ const permit = await wallet.signPermit(contracts.tab, 50);
84
+ const tab = await wallet.openTab({
85
+ to: "0xProvider...",
86
+ limit: 50,
87
+ perUnit: 0.003,
88
+ permit,
89
+ });
90
+
91
+ // Provider debits the tab for each API call — zero gas, instant
92
+
93
+ // One on-chain settlement when done
94
+ await wallet.closeTab(tab.id);
95
+ ```
96
+
97
+ ### Payment Stream
98
+
99
+ ```typescript
100
+ const permit = await wallet.signPermit(contracts.stream, 10);
101
+ const stream = await wallet.openStream({
102
+ to: "0xWorker...",
103
+ rate: 0.001, // USDC per second
104
+ permit,
105
+ });
106
+
107
+ await wallet.closeStream(stream.id);
108
+ ```
109
+
110
+ ### Bounty
111
+
112
+ ```typescript
113
+ const permit = await wallet.signPermit(contracts.bounty, 25);
114
+ const bounty = await wallet.postBounty({
115
+ amount: 25,
116
+ task: "Summarise top 10 EIPs of 2025",
117
+ deadline: 1700000000,
118
+ permit,
119
+ });
120
+
121
+ // Any agent can submit work; you decide the winner
122
+ await wallet.awardBounty(bounty.id, "0xWinner...");
123
+ ```
124
+
125
+ ### Security Deposit
126
+
127
+ ```typescript
128
+ const permit = await wallet.signPermit(contracts.deposit, 100);
129
+ const deposit = await wallet.placeDeposit({
130
+ to: "0xCounterpart...",
131
+ amount: 100,
132
+ expires: 86400, // 24 hours
133
+ permit,
134
+ });
135
+ ```
136
+
137
+ ## Testing with MockRemit
138
+
139
+ MockRemit gives you a zero-network, zero-latency test double. No API key needed.
140
+
141
+ ```typescript
142
+ import { MockRemit } from "@remitmd/sdk/testing";
143
+
144
+ const mock = new MockRemit();
145
+ const wallet = mock.wallet("0xAgent...");
146
+
147
+ const tx = await wallet.payDirect("0xProvider...", 0.003);
148
+ console.log(mock.wasPaid("0xProvider...", 0.003)); // true
149
+ ```
150
+
151
+ ## All Methods
152
+
153
+ ```typescript
154
+ // Contract discovery (cached per session)
155
+ wallet.getContracts() // Promise<ContractAddresses>
156
+
157
+ // Permits (gasless USDC approval)
158
+ wallet.signPermit(spender, amount, deadline?) // Promise<PermitSignature>
159
+ wallet.signUsdcPermit({ spender, value, deadline, ... }) // Promise<PermitSignature>
160
+
161
+ // Direct payment
162
+ wallet.payDirect(to, amount, memo?, { permit? }) // Promise<Transaction>
163
+
164
+ // Escrow
165
+ wallet.pay(invoice, { permit? }) // Promise<Escrow>
166
+ wallet.claimStart(invoiceId) // Promise<Transaction>
167
+ wallet.submitEvidence(invoiceId, uri, milestoneIndex?) // Promise<Transaction>
168
+ wallet.releaseEscrow(invoiceId) // Promise<Transaction>
169
+ wallet.releaseMilestone(invoiceId, index) // Promise<Transaction>
170
+ wallet.cancelEscrow(invoiceId) // Promise<Transaction>
171
+ wallet.getEscrow(invoiceId) // Promise<Escrow>
172
+
173
+ // Tabs
174
+ wallet.openTab({ to, limit, perUnit, expires?, permit? }) // Promise<Tab>
175
+ wallet.closeTab(tabId) // Promise<Transaction>
176
+ wallet.getTab(tabId) // Promise<Tab>
177
+
178
+ // Streams
179
+ wallet.openStream({ to, rate, maxDuration?, maxTotal?, permit? }) // Promise<Stream>
180
+ wallet.closeStream(streamId) // Promise<Transaction>
181
+
182
+ // Bounties
183
+ wallet.postBounty({ amount, task, deadline, permit?, ... }) // Promise<Bounty>
184
+ wallet.submitBounty(bountyId, evidenceUri) // Promise<Transaction>
185
+ wallet.awardBounty(bountyId, winner) // Promise<Transaction>
186
+
187
+ // Deposits
188
+ wallet.placeDeposit({ to, amount, expires, permit? }) // Promise<Deposit>
189
+
190
+ // Status & analytics
191
+ wallet.status() // Promise<WalletStatus>
192
+ wallet.balance() // Promise<number>
193
+
194
+ // Webhooks
195
+ wallet.registerWebhook(url, events, chains?) // Promise<Webhook>
196
+ wallet.listWebhooks() // Promise<Webhook[]>
197
+ wallet.deleteWebhook(id) // Promise<void>
198
+
199
+ // Operator links
200
+ wallet.createFundLink() // Promise<LinkResponse>
201
+ wallet.createWithdrawLink() // Promise<LinkResponse>
202
+
203
+ // Testnet
204
+ wallet.mint(amount) // Promise<{ tx_hash, balance }>
205
+ wallet.requestTestnetFunds() // Promise<Transaction> (deprecated)
206
+
207
+ // x402 (HTTP 402 auto-pay)
208
+ wallet.x402Fetch(url, maxAutoPayUsdc?, init?) // Promise<Response>
209
+ ```
210
+
211
+ ## x402 Support
212
+
213
+ The SDK has built-in support for the x402 HTTP payment protocol:
214
+
215
+ ```typescript
216
+ // Auto-pay any 402 response up to 0.10 USDC
217
+ const response = await wallet.x402Fetch("https://api.example.com/data", 0.10);
218
+ const data = await response.json();
219
+ ```
220
+
221
+ ## Error Handling
222
+
223
+ All errors are structured with machine-readable codes and enriched details:
224
+
225
+ ```typescript
226
+ try {
227
+ await wallet.payDirect("0xRecipient...", 100.0);
228
+ } catch (err) {
229
+ if (err instanceof RemitError) {
230
+ console.log(err.code); // "INSUFFICIENT_BALANCE"
231
+ console.log(err.message); // "Insufficient USDC balance: have $5.00, need $100.00"
232
+ // Enriched errors include actual numbers in details:
233
+ // err.details = {required: "100.00", available: "5.00",
234
+ // required_units: 100000000, available_units: 5000000}
235
+ }
236
+ }
237
+ ```
238
+
239
+ ## Chains
240
+
241
+ ```typescript
242
+ new Wallet({ privateKey: key, chain: "base" }) // Base mainnet (default)
243
+ new Wallet({ privateKey: key, chain: "base-sepolia" }) // Base Sepolia testnet
244
+ ```
245
+
246
+ ## License
247
+
248
+ MIT — see [LICENSE](LICENSE)
249
+
250
+ [Documentation](https://remit.md/docs) · [Protocol Spec](https://remit.md) · [GitHub](https://github.com/remit-md/sdk)
package/dist/a2a.d.ts ADDED
@@ -0,0 +1,137 @@
1
+ /**
2
+ * A2A / AP2 — agent card discovery and A2A JSON-RPC task client.
3
+ *
4
+ * Spec: https://google.github.io/A2A/specification/
5
+ * AP2: https://ap2-protocol.org/
6
+ */
7
+ import type { Signer } from "./signer.js";
8
+ export interface A2AExtension {
9
+ uri: string;
10
+ description: string;
11
+ required: boolean;
12
+ }
13
+ export interface A2ACapabilities {
14
+ streaming: boolean;
15
+ pushNotifications: boolean;
16
+ stateTransitionHistory: boolean;
17
+ extensions: A2AExtension[];
18
+ }
19
+ export interface A2ASkill {
20
+ id: string;
21
+ name: string;
22
+ description: string;
23
+ tags: string[];
24
+ }
25
+ export interface A2AFees {
26
+ standardBps: number;
27
+ preferredBps: number;
28
+ cliffUsd: number;
29
+ }
30
+ export interface A2AX402 {
31
+ settleEndpoint: string;
32
+ assets: Record<string, string>;
33
+ fees: A2AFees;
34
+ }
35
+ export interface AgentCard {
36
+ protocolVersion: string;
37
+ name: string;
38
+ description: string;
39
+ /** A2A JSON-RPC endpoint URL (POST). */
40
+ url: string;
41
+ version: string;
42
+ documentationUrl: string;
43
+ capabilities: A2ACapabilities;
44
+ authentication: unknown[];
45
+ skills: A2ASkill[];
46
+ x402: A2AX402;
47
+ }
48
+ /**
49
+ * Fetch and parse the A2A agent card from `baseUrl`/.well-known/agent-card.json.
50
+ *
51
+ * @example
52
+ * ```ts
53
+ * const card = await discoverAgent("https://remit.md");
54
+ * console.log(card.name, card.url);
55
+ * ```
56
+ */
57
+ export declare function discoverAgent(baseUrl: string): Promise<AgentCard>;
58
+ export interface A2ATaskStatus {
59
+ state: "completed" | "failed" | "canceled" | "working" | string;
60
+ message?: {
61
+ text?: string;
62
+ };
63
+ }
64
+ export interface A2AArtifactPart {
65
+ kind: string;
66
+ data?: Record<string, unknown>;
67
+ }
68
+ export interface A2AArtifact {
69
+ name?: string;
70
+ parts: A2AArtifactPart[];
71
+ }
72
+ export interface A2ATask {
73
+ id: string;
74
+ status: A2ATaskStatus;
75
+ artifacts: A2AArtifact[];
76
+ }
77
+ /** Extract `txHash` from task artifacts, if present. */
78
+ export declare function getTaskTxHash(task: A2ATask): string | undefined;
79
+ export interface IntentMandate {
80
+ mandateId: string;
81
+ expiresAt: string;
82
+ issuer: string;
83
+ allowance: {
84
+ maxAmount: string;
85
+ currency: string;
86
+ };
87
+ }
88
+ export interface A2AClientOptions {
89
+ /** Full A2A endpoint URL from the agent card (e.g. ``"https://remit.md/a2a"``). */
90
+ endpoint: string;
91
+ signer: Signer;
92
+ chainId: number;
93
+ verifyingContract?: string;
94
+ }
95
+ export interface SendOptions {
96
+ to: string;
97
+ amount: number;
98
+ memo?: string;
99
+ mandate?: IntentMandate;
100
+ }
101
+ /**
102
+ * A2A JSON-RPC client — send payments and manage tasks via the A2A protocol.
103
+ *
104
+ * @example
105
+ * ```ts
106
+ * import { discoverAgent, A2AClient } from "@remitmd/sdk";
107
+ * import { PrivateKeySigner } from "@remitmd/sdk";
108
+ *
109
+ * const card = await discoverAgent("https://remit.md");
110
+ * const signer = new PrivateKeySigner(process.env.REMITMD_KEY!);
111
+ * const client = A2AClient.fromCard(card, signer);
112
+ * const task = await client.send({ to: "0xRecipient...", amount: 10 });
113
+ * console.log(task.status.state, getTaskTxHash(task));
114
+ * ```
115
+ */
116
+ export declare class A2AClient {
117
+ private readonly _http;
118
+ private readonly _path;
119
+ constructor(opts: A2AClientOptions);
120
+ /** Convenience constructor from an :class:`AgentCard` and a signer. */
121
+ static fromCard(card: AgentCard, signer: Signer, opts?: {
122
+ chain?: string;
123
+ verifyingContract?: string;
124
+ }): A2AClient;
125
+ /**
126
+ * Send a direct USDC payment via ``message/send``.
127
+ *
128
+ * @returns :interface:`A2ATask` with ``status.state === "completed"`` on success.
129
+ */
130
+ send(opts: SendOptions): Promise<A2ATask>;
131
+ /** Fetch the current state of an A2A task by ID. */
132
+ getTask(taskId: string): Promise<A2ATask>;
133
+ /** Cancel an in-progress A2A task. */
134
+ cancelTask(taskId: string): Promise<A2ATask>;
135
+ private _rpc;
136
+ }
137
+ //# sourceMappingURL=a2a.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a.d.ts","sourceRoot":"","sources":["../src/a2a.ts"],"names":[],"mappings":"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"}
package/dist/a2a.js ADDED
@@ -0,0 +1,121 @@
1
+ /**
2
+ * A2A / AP2 — agent card discovery and A2A JSON-RPC task client.
3
+ *
4
+ * Spec: https://google.github.io/A2A/specification/
5
+ * AP2: https://ap2-protocol.org/
6
+ */
7
+ import { AuthenticatedClient } from "./http.js";
8
+ import { CHAIN_IDS } from "./client.js";
9
+ /**
10
+ * Fetch and parse the A2A agent card from `baseUrl`/.well-known/agent-card.json.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * const card = await discoverAgent("https://remit.md");
15
+ * console.log(card.name, card.url);
16
+ * ```
17
+ */
18
+ export async function discoverAgent(baseUrl) {
19
+ const url = baseUrl.replace(/\/$/, "") + "/.well-known/agent-card.json";
20
+ const res = await fetch(url, { headers: { Accept: "application/json" } });
21
+ if (!res.ok) {
22
+ throw new Error(`Agent card discovery failed: HTTP ${res.status} ${res.statusText}`);
23
+ }
24
+ return (await res.json());
25
+ }
26
+ /** Extract `txHash` from task artifacts, if present. */
27
+ export function getTaskTxHash(task) {
28
+ for (const artifact of task.artifacts) {
29
+ for (const part of artifact.parts) {
30
+ const tx = part.data?.["txHash"];
31
+ if (typeof tx === "string")
32
+ return tx;
33
+ }
34
+ }
35
+ return undefined;
36
+ }
37
+ // ─── A2A client ───────────────────────────────────────────────────────────────
38
+ /**
39
+ * A2A JSON-RPC client — send payments and manage tasks via the A2A protocol.
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * import { discoverAgent, A2AClient } from "@remitmd/sdk";
44
+ * import { PrivateKeySigner } from "@remitmd/sdk";
45
+ *
46
+ * const card = await discoverAgent("https://remit.md");
47
+ * const signer = new PrivateKeySigner(process.env.REMITMD_KEY!);
48
+ * const client = A2AClient.fromCard(card, signer);
49
+ * const task = await client.send({ to: "0xRecipient...", amount: 10 });
50
+ * console.log(task.status.state, getTaskTxHash(task));
51
+ * ```
52
+ */
53
+ export class A2AClient {
54
+ _http;
55
+ _path;
56
+ constructor(opts) {
57
+ const { endpoint, signer, chainId, verifyingContract = "" } = opts;
58
+ const parsed = new URL(endpoint);
59
+ const baseUrl = `${parsed.protocol}//${parsed.host}`;
60
+ this._path = parsed.pathname || "/a2a";
61
+ this._http = new AuthenticatedClient({ signer, baseUrl, chainId, verifyingContract });
62
+ }
63
+ /** Convenience constructor from an :class:`AgentCard` and a signer. */
64
+ static fromCard(card, signer, opts) {
65
+ const chain = opts?.chain ?? "base";
66
+ const chainId = CHAIN_IDS[chain] ?? CHAIN_IDS["base"];
67
+ return new A2AClient({
68
+ endpoint: card.url,
69
+ signer,
70
+ chainId,
71
+ verifyingContract: opts?.verifyingContract ?? "",
72
+ });
73
+ }
74
+ /**
75
+ * Send a direct USDC payment via ``message/send``.
76
+ *
77
+ * @returns :interface:`A2ATask` with ``status.state === "completed"`` on success.
78
+ */
79
+ async send(opts) {
80
+ const { to, amount, memo = "", mandate } = opts;
81
+ const nonce = crypto.randomUUID().replace(/-/g, "");
82
+ const messageId = crypto.randomUUID().replace(/-/g, "");
83
+ const message = {
84
+ messageId,
85
+ role: "user",
86
+ parts: [
87
+ {
88
+ kind: "data",
89
+ data: {
90
+ model: "direct",
91
+ to,
92
+ amount: amount.toFixed(2),
93
+ memo,
94
+ nonce,
95
+ },
96
+ },
97
+ ],
98
+ };
99
+ if (mandate) {
100
+ message["metadata"] = { mandate };
101
+ }
102
+ return this._rpc("message/send", { message }, messageId);
103
+ }
104
+ /** Fetch the current state of an A2A task by ID. */
105
+ async getTask(taskId) {
106
+ return this._rpc("tasks/get", { id: taskId }, taskId.slice(0, 16));
107
+ }
108
+ /** Cancel an in-progress A2A task. */
109
+ async cancelTask(taskId) {
110
+ return this._rpc("tasks/cancel", { id: taskId }, taskId.slice(0, 16));
111
+ }
112
+ async _rpc(method, params, callId) {
113
+ const body = { jsonrpc: "2.0", id: callId, method, params };
114
+ const data = await this._http.post(this._path, body);
115
+ if (data.error) {
116
+ throw new Error(`A2A error: ${data.error.message ?? JSON.stringify(data.error)}`);
117
+ }
118
+ return (data.result ?? data);
119
+ }
120
+ }
121
+ //# sourceMappingURL=a2a.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a.js","sourceRoot":"","sources":["../src/a2a.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * RemitClient — read-only operations, no private key required.
3
+ */
4
+ import type { WalletStatus, Reputation, ContractAddresses } from "./models/index.js";
5
+ import type { Invoice } from "./models/invoice.js";
6
+ import type { Escrow } from "./models/escrow.js";
7
+ import type { Tab } from "./models/tab.js";
8
+ import type { Stream } from "./models/stream.js";
9
+ import type { Bounty } from "./models/bounty.js";
10
+ import type { Deposit } from "./models/deposit.js";
11
+ export declare const CHAIN_IDS: Record<string, number>;
12
+ export interface RemitClientOptions {
13
+ chain?: string;
14
+ testnet?: boolean;
15
+ apiUrl?: string;
16
+ }
17
+ export declare class RemitClient {
18
+ #private;
19
+ protected readonly _chain: string;
20
+ protected readonly _apiUrl: string;
21
+ protected readonly _chainId: number;
22
+ constructor(options?: RemitClientOptions);
23
+ protected _fetch<T>(path: string): Promise<T>;
24
+ getInvoice(invoiceId: string): Promise<Invoice>;
25
+ getEscrow(invoiceId: string): Promise<Escrow>;
26
+ getTab(tabId: string): Promise<Tab>;
27
+ getStream(streamId: string): Promise<Stream>;
28
+ getBounty(bountyId: string): Promise<Bounty>;
29
+ getDeposit(depositId: string): Promise<Deposit>;
30
+ getStatus(wallet: string): Promise<WalletStatus>;
31
+ getReputation(wallet: string): Promise<Reputation>;
32
+ /** Get deployed contract addresses. Cached for the lifetime of this client instance. */
33
+ getContracts(): Promise<ContractAddresses>;
34
+ listBounties(options?: {
35
+ status?: string;
36
+ limit?: number;
37
+ poster?: string;
38
+ submitter?: string;
39
+ }): Promise<Bounty[]>;
40
+ }
41
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAOnD,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAI5C,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,WAAW;;IACtB,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACnC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAGxB,OAAO,GAAE,kBAAuB;cAQ5B,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAUnD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/C,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI7C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAInC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5C,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5C,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/C,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIhD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAIlD,wFAAwF;IAClF,YAAY,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAOhD,YAAY,CAAC,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAUxH"}
package/dist/client.js ADDED
@@ -0,0 +1,81 @@
1
+ /**
2
+ * RemitClient — read-only operations, no private key required.
3
+ */
4
+ const DEFAULT_API_URLS = {
5
+ base: "https://api.remit.md/api/v0",
6
+ "base-sepolia": "https://testnet.remit.md/api/v0",
7
+ localhost: "http://localhost:3000/api/v0",
8
+ };
9
+ export const CHAIN_IDS = {
10
+ base: 8453,
11
+ "base-sepolia": 84532,
12
+ localhost: 31337,
13
+ };
14
+ export class RemitClient {
15
+ _chain;
16
+ _apiUrl;
17
+ _chainId;
18
+ #contractsCache = null;
19
+ constructor(options = {}) {
20
+ const { chain = "base", testnet = false, apiUrl } = options;
21
+ this._chain = testnet && !chain.includes("sepolia") ? `${chain}-sepolia` : chain;
22
+ this._apiUrl =
23
+ apiUrl ?? DEFAULT_API_URLS[this._chain] ?? DEFAULT_API_URLS["base"];
24
+ this._chainId = CHAIN_IDS[this._chain] ?? CHAIN_IDS["base"];
25
+ }
26
+ async _fetch(path) {
27
+ const response = await fetch(`${this._apiUrl}${path}`, {
28
+ headers: { "Content-Type": "application/json" },
29
+ });
30
+ if (!response.ok) {
31
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
32
+ }
33
+ return (await response.json());
34
+ }
35
+ getInvoice(invoiceId) {
36
+ return this._fetch(`/invoices/${invoiceId}`);
37
+ }
38
+ getEscrow(invoiceId) {
39
+ return this._fetch(`/escrows/${invoiceId}`);
40
+ }
41
+ getTab(tabId) {
42
+ return this._fetch(`/tabs/${tabId}`);
43
+ }
44
+ getStream(streamId) {
45
+ return this._fetch(`/streams/${streamId}`);
46
+ }
47
+ getBounty(bountyId) {
48
+ return this._fetch(`/bounties/${bountyId}`);
49
+ }
50
+ getDeposit(depositId) {
51
+ return this._fetch(`/deposits/${depositId}`);
52
+ }
53
+ getStatus(wallet) {
54
+ return this._fetch(`/status/${wallet}`);
55
+ }
56
+ getReputation(wallet) {
57
+ return this._fetch(`/reputation/${wallet}`);
58
+ }
59
+ /** Get deployed contract addresses. Cached for the lifetime of this client instance. */
60
+ async getContracts() {
61
+ if (this.#contractsCache)
62
+ return this.#contractsCache;
63
+ const contracts = await this._fetch("/contracts");
64
+ this.#contractsCache = contracts;
65
+ return contracts;
66
+ }
67
+ listBounties(options = {}) {
68
+ const params = new URLSearchParams();
69
+ if (options.status)
70
+ params.set("status", options.status);
71
+ if (options.limit)
72
+ params.set("limit", String(options.limit));
73
+ if (options.poster)
74
+ params.set("poster", options.poster);
75
+ if (options.submitter)
76
+ params.set("submitter", options.submitter);
77
+ const qs = params.toString();
78
+ return this._fetch(`/bounties${qs ? `?${qs}` : ""}`);
79
+ }
80
+ }
81
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,MAAM,gBAAgB,GAA2B;IAC/C,IAAI,EAAE,6BAA6B;IACnC,cAAc,EAAE,iCAAiC;IACjD,SAAS,EAAE,8BAA8B;CAC1C,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAA2B;IAC/C,IAAI,EAAE,IAAI;IACV,cAAc,EAAE,KAAK;IACrB,SAAS,EAAE,KAAK;CACjB,CAAC;AAQF,MAAM,OAAO,WAAW;IACH,MAAM,CAAS;IACf,OAAO,CAAS;IAChB,QAAQ,CAAS;IACpC,eAAe,GAA6B,IAAI,CAAC;IAEjD,YAAY,UAA8B,EAAE;QAC1C,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;QACjF,IAAI,CAAC,OAAO;YACV,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAE,CAAC;QACvE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAE,CAAC;IAC/D,CAAC;IAES,KAAK,CAAC,MAAM,CAAI,IAAY;QACpC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;YACrD,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;IACtC,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAU,aAAa,SAAS,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,SAAS,CAAC,SAAiB;QACzB,OAAO,IAAI,CAAC,MAAM,CAAS,YAAY,SAAS,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,OAAO,IAAI,CAAC,MAAM,CAAM,SAAS,KAAK,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,SAAS,CAAC,QAAgB;QACxB,OAAO,IAAI,CAAC,MAAM,CAAS,YAAY,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,SAAS,CAAC,QAAgB;QACxB,OAAO,IAAI,CAAC,MAAM,CAAS,aAAa,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAU,aAAa,SAAS,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,SAAS,CAAC,MAAc;QACtB,OAAO,IAAI,CAAC,MAAM,CAAe,WAAW,MAAM,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,aAAa,CAAC,MAAc;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAa,eAAe,MAAM,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,wFAAwF;IACxF,KAAK,CAAC,YAAY;QAChB,IAAI,IAAI,CAAC,eAAe;YAAE,OAAO,IAAI,CAAC,eAAe,CAAC;QACtD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAoB,YAAY,CAAC,CAAC;QACrE,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,YAAY,CAAC,UAAoF,EAAE;QACjG,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9D,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,SAAS;YAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAClE,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAW,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACjE,CAAC;CAEF"}