@aifinpay/agent 0.1.0-alpha.1 → 0.3.0-alpha.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 (42) hide show
  1. package/README.md +6 -2
  2. package/dist/agent.d.ts +112 -0
  3. package/dist/agent.d.ts.map +1 -0
  4. package/dist/agent.js +312 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/crypto.d.ts +3 -0
  7. package/dist/crypto.d.ts.map +1 -0
  8. package/dist/crypto.js +12 -0
  9. package/dist/crypto.js.map +1 -0
  10. package/dist/errors.d.ts +19 -0
  11. package/dist/errors.d.ts.map +1 -0
  12. package/dist/errors.js +22 -0
  13. package/dist/errors.js.map +1 -0
  14. package/dist/facilitators/aifinpay.d.ts +21 -0
  15. package/dist/facilitators/aifinpay.d.ts.map +1 -0
  16. package/dist/facilitators/aifinpay.js +76 -0
  17. package/dist/facilitators/aifinpay.js.map +1 -0
  18. package/dist/facilitators/base.d.ts +35 -0
  19. package/dist/facilitators/base.d.ts.map +1 -0
  20. package/dist/facilitators/base.js +2 -0
  21. package/dist/facilitators/base.js.map +1 -0
  22. package/dist/facilitators/coinbase.d.ts +20 -0
  23. package/dist/facilitators/coinbase.d.ts.map +1 -0
  24. package/dist/facilitators/coinbase.js +67 -0
  25. package/dist/facilitators/coinbase.js.map +1 -0
  26. package/dist/facilitators/detect.d.ts +9 -0
  27. package/dist/facilitators/detect.d.ts.map +1 -0
  28. package/dist/facilitators/detect.js +33 -0
  29. package/dist/facilitators/detect.js.map +1 -0
  30. package/dist/facilitators/index.d.ts +5 -0
  31. package/dist/facilitators/index.d.ts.map +1 -0
  32. package/dist/facilitators/index.js +4 -0
  33. package/dist/facilitators/index.js.map +1 -0
  34. package/dist/index.d.ts +28 -60
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +22 -197
  37. package/dist/index.js.map +1 -1
  38. package/dist/unifiedAgent.d.ts +222 -0
  39. package/dist/unifiedAgent.d.ts.map +1 -0
  40. package/dist/unifiedAgent.js +498 -0
  41. package/dist/unifiedAgent.js.map +1 -0
  42. package/package.json +16 -9
@@ -0,0 +1,35 @@
1
+ import type { Agent } from "../agent.js";
2
+ export interface PayOptions {
3
+ /** Refuse to pay if the facilitator wants more than this. Undefined = no cap. */
4
+ maxAmountUsd?: number;
5
+ /** Hint for facilitators accepting multiple chains. */
6
+ preferredChain?: "solana" | "polygon" | "ethereum" | "stellar";
7
+ /** `auto` | `aifinpay` | `coinbase-x402`. Forces a specific adapter. */
8
+ facilitator?: string;
9
+ /** Extra headers to attach AFTER the facilitator's auth headers. */
10
+ extraHeaders?: Record<string, string>;
11
+ }
12
+ /** What a facilitator returns to drive the retry. */
13
+ export interface AuthPayload {
14
+ headers?: Record<string, string>;
15
+ /** Optional replacement body (string already serialized). */
16
+ body?: string;
17
+ /** Optional method override. */
18
+ method?: string;
19
+ }
20
+ /**
21
+ * A facilitator handles ONE x402 wire format. Implementations are
22
+ * stateless; state (keypair, base URL) lives on the Agent.
23
+ */
24
+ export interface Facilitator {
25
+ readonly name: string;
26
+ /** Build the auth payload to merge into the retry request. */
27
+ buildAuth(response: Response, agent: Agent, options: PayOptions): Promise<AuthPayload>;
28
+ }
29
+ /** Constructor + static `detect` predicate together. */
30
+ export interface FacilitatorClass {
31
+ new (...args: any[]): Facilitator;
32
+ readonly name: string;
33
+ detect(response: Response): Promise<boolean> | boolean;
34
+ }
35
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/facilitators/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,WAAW,UAAU;IACzB,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,cAAc,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC/D,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,qDAAqD;AACrD,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,8DAA8D;IAC9D,SAAS,CACP,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,WAAW,CAAC,CAAC;CACzB;AAED,wDAAwD;AACxD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACxD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/facilitators/base.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import type { Agent } from "../agent.js";
2
+ import type { AuthPayload, Facilitator, PayOptions } from "./base.js";
3
+ /**
4
+ * Coinbase x402 flavor — `PAYMENT-REQUIRED` / `PAYMENT-SIGNATURE` headers.
5
+ *
6
+ * Reference: github.com/coinbase/x402
7
+ *
8
+ * Detection works today. Payment execution requires an EVM key + the
9
+ * EIP-3009 `transferWithAuthorization` flow; scheduled for SDK 0.3.x.
10
+ */
11
+ export declare const PAYMENT_REQUIRED_HEADER = "PAYMENT-REQUIRED";
12
+ export declare const PAYMENT_SIGNATURE_HEADER = "PAYMENT-SIGNATURE";
13
+ export declare const PAYMENT_RESPONSE_HEADER = "PAYMENT-RESPONSE";
14
+ export declare class CoinbaseX402Facilitator implements Facilitator {
15
+ static readonly name = "coinbase-x402";
16
+ readonly name = "coinbase-x402";
17
+ static detect(resp: Response): boolean;
18
+ buildAuth(resp: Response, _agent: Agent, opts: PayOptions): Promise<AuthPayload>;
19
+ }
20
+ //# sourceMappingURL=coinbase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coinbase.d.ts","sourceRoot":"","sources":["../../src/facilitators/coinbase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAMzC,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEtE;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAC1D,eAAO,MAAM,wBAAwB,sBAAsB,CAAC;AAC5D,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAE1D,qBAAa,uBAAwB,YAAW,WAAW;IACzD,MAAM,CAAC,QAAQ,CAAC,IAAI,mBAAmB;IACvC,QAAQ,CAAC,IAAI,mBAAmB;IAEhC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO;IAKhC,SAAS,CACb,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,KAAK,EACb,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,WAAW,CAAC;CAsBxB"}
@@ -0,0 +1,67 @@
1
+ import { FacilitatorNotImplementedError, PaymentTooExpensiveError, UnsupportedFacilitatorError, } from "../errors.js";
2
+ /**
3
+ * Coinbase x402 flavor — `PAYMENT-REQUIRED` / `PAYMENT-SIGNATURE` headers.
4
+ *
5
+ * Reference: github.com/coinbase/x402
6
+ *
7
+ * Detection works today. Payment execution requires an EVM key + the
8
+ * EIP-3009 `transferWithAuthorization` flow; scheduled for SDK 0.3.x.
9
+ */
10
+ export const PAYMENT_REQUIRED_HEADER = "PAYMENT-REQUIRED";
11
+ export const PAYMENT_SIGNATURE_HEADER = "PAYMENT-SIGNATURE";
12
+ export const PAYMENT_RESPONSE_HEADER = "PAYMENT-RESPONSE";
13
+ export class CoinbaseX402Facilitator {
14
+ static name = "coinbase-x402";
15
+ name = "coinbase-x402";
16
+ static detect(resp) {
17
+ if (resp.status !== 402)
18
+ return false;
19
+ return resp.headers.has(PAYMENT_REQUIRED_HEADER);
20
+ }
21
+ async buildAuth(resp, _agent, opts) {
22
+ const spec = decodePaymentRequired(resp);
23
+ const accepts = (spec.accepts ?? spec.paymentRequirements ?? []);
24
+ if (accepts.length && opts.maxAmountUsd !== undefined) {
25
+ const cheapest = minUsd(accepts);
26
+ if (cheapest !== null && cheapest > opts.maxAmountUsd) {
27
+ throw new PaymentTooExpensiveError(`Coinbase x402 wants $${cheapest.toFixed(4)}, ` +
28
+ `caller cap is $${opts.maxAmountUsd.toFixed(4)}`);
29
+ }
30
+ }
31
+ throw new FacilitatorNotImplementedError("Coinbase x402 detected, but payment execution is not yet wired. " +
32
+ "This SDK build supports detection + parsing only. " +
33
+ "Track progress in `14 - Design - Generic x402 Client.md`.");
34
+ }
35
+ }
36
+ function decodePaymentRequired(resp) {
37
+ const raw = resp.headers.get(PAYMENT_REQUIRED_HEADER);
38
+ if (!raw) {
39
+ throw new UnsupportedFacilitatorError(`missing ${PAYMENT_REQUIRED_HEADER} header on Coinbase x402 response`);
40
+ }
41
+ let decoded;
42
+ try {
43
+ decoded =
44
+ typeof Buffer !== "undefined"
45
+ ? Buffer.from(raw, "base64").toString("utf-8")
46
+ : atob(raw);
47
+ }
48
+ catch (e) {
49
+ throw new UnsupportedFacilitatorError(`${PAYMENT_REQUIRED_HEADER} is not valid base64: ${e.message}`);
50
+ }
51
+ try {
52
+ return JSON.parse(decoded);
53
+ }
54
+ catch (e) {
55
+ throw new UnsupportedFacilitatorError(`${PAYMENT_REQUIRED_HEADER} body is not valid JSON: ${e.message}`);
56
+ }
57
+ }
58
+ function minUsd(accepts) {
59
+ const candidates = [];
60
+ for (const entry of accepts) {
61
+ const usd = entry.priceUsd ?? entry.usdPrice;
62
+ if (typeof usd === "number")
63
+ candidates.push(usd);
64
+ }
65
+ return candidates.length ? Math.min(...candidates) : null;
66
+ }
67
+ //# sourceMappingURL=coinbase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coinbase.js","sourceRoot":"","sources":["../../src/facilitators/coinbase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Facilitator, FacilitatorClass } from "./base.js";
2
+ /**
3
+ * Order matters: most-specific detector first. A response that matches
4
+ * AiFinPay's body schema is also technically a 402, so we try AiFinPay
5
+ * before falling back to header-based checks.
6
+ */
7
+ export declare const REGISTERED: FacilitatorClass[];
8
+ export declare function detectFacilitator(resp: Response, override?: string): Promise<Facilitator>;
9
+ //# sourceMappingURL=detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/facilitators/detect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAG/D;;;;GAIG;AACH,eAAO,MAAM,UAAU,EAAE,gBAAgB,EAGxC,CAAC;AAMF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,QAAQ,EACd,QAAQ,GAAE,MAAe,GACxB,OAAO,CAAC,WAAW,CAAC,CAuBtB"}
@@ -0,0 +1,33 @@
1
+ import { UnsupportedFacilitatorError } from "../errors.js";
2
+ import { AiFinPayFacilitator } from "./aifinpay.js";
3
+ import { CoinbaseX402Facilitator } from "./coinbase.js";
4
+ /**
5
+ * Order matters: most-specific detector first. A response that matches
6
+ * AiFinPay's body schema is also technically a 402, so we try AiFinPay
7
+ * before falling back to header-based checks.
8
+ */
9
+ export const REGISTERED = [
10
+ AiFinPayFacilitator,
11
+ CoinbaseX402Facilitator,
12
+ ];
13
+ const BY_NAME = new Map(REGISTERED.map((cls) => [cls.name, cls]));
14
+ export async function detectFacilitator(resp, override = "auto") {
15
+ if (override && override !== "auto") {
16
+ const cls = BY_NAME.get(override);
17
+ if (!cls) {
18
+ throw new UnsupportedFacilitatorError(`unknown facilitator override: '${override}'. ` +
19
+ `known: ${[...BY_NAME.keys()].join(", ")}`);
20
+ }
21
+ return new cls();
22
+ }
23
+ for (const cls of REGISTERED) {
24
+ if (await cls.detect(resp))
25
+ return new cls();
26
+ }
27
+ const headerKeys = [];
28
+ resp.headers.forEach((_, key) => headerKeys.push(key));
29
+ throw new UnsupportedFacilitatorError(`402 response did not match any known facilitator. ` +
30
+ `Status: ${resp.status}. ` +
31
+ `Headers: ${headerKeys.slice(0, 8).join(", ")}.`);
32
+ }
33
+ //# sourceMappingURL=detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/facilitators/detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAuB;IAC5C,mBAAmB;IACnB,uBAAuB;CACxB,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CACzC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAc,EACd,WAAmB,MAAM;IAEzB,IAAI,QAAQ,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,2BAA2B,CACnC,kCAAkC,QAAQ,KAAK;gBAC7C,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7C,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,MAAM,IAAI,2BAA2B,CACnC,oDAAoD;QAClD,WAAW,IAAI,CAAC,MAAM,IAAI;QAC1B,YAAY,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACnD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export type { AuthPayload, Facilitator, FacilitatorClass, PayOptions } from "./base.js";
2
+ export { AiFinPayFacilitator } from "./aifinpay.js";
3
+ export { CoinbaseX402Facilitator } from "./coinbase.js";
4
+ export { REGISTERED, detectFacilitator } from "./detect.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/facilitators/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { AiFinPayFacilitator } from "./aifinpay.js";
2
+ export { CoinbaseX402Facilitator } from "./coinbase.js";
3
+ export { REGISTERED, detectFacilitator } from "./detect.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/facilitators/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,61 +1,29 @@
1
- export declare class AiFinPayError extends Error {
2
- }
3
- export declare class X402Error extends AiFinPayError {
4
- }
5
- export declare class FundingTimeoutError extends AiFinPayError {
6
- }
7
- export declare class SeatNotFoundError extends AiFinPayError {
8
- }
9
- export interface Invoice {
10
- amountUsd: number;
11
- treasuryVault: string;
12
- programId: string;
13
- nonce: string;
14
- raw: Record<string, unknown>;
15
- }
16
- export interface AgentOptions {
17
- baseUrl?: string;
18
- timeoutMs?: number;
19
- fetchImpl?: typeof fetch;
20
- }
21
- export declare class Agent {
22
- readonly publicKey: Uint8Array;
23
- readonly secretKey: Uint8Array;
24
- readonly baseUrl: string;
25
- readonly timeoutMs: number;
26
- private readonly fetchImpl;
27
- private constructor();
28
- static new(opts?: AgentOptions): Agent;
29
- /** Load from base58 secret (Solana style: 64 bytes = secret + public). */
30
- static fromSecretB58(secretB58: string, opts?: AgentOptions): Agent;
31
- /** Load from a Solana CLI ``solana-keygen`` JSON file path (Node only). */
32
- static fromKeypairFile(path: string, opts?: AgentOptions): Promise<Agent>;
33
- /** Solana base58 public key. */
34
- get address(): string;
35
- /** 64-byte base58 secret. Save this safely — server never sees it. */
36
- get secretB58(): string;
37
- manifesto(): Promise<Record<string, unknown>>;
38
- wellKnown(): Promise<Record<string, unknown>>;
39
- fetchNonce(): Promise<{
40
- nonce: string;
41
- expires_at: string;
42
- }>;
43
- /** Build a fresh x402 header set (nonce is one-time, 60s TTL). */
44
- authHeaders(): Promise<Record<string, string>>;
45
- hasSeat(): Promise<boolean>;
46
- /** Poll the merged leaderboard until this address shows ≥ minUsdCents. */
47
- waitForFunding({ minUsdCents, pollMs, timeoutMs, }?: {
48
- minUsdCents?: number;
49
- pollMs?: number;
50
- timeoutMs?: number;
51
- }): Promise<void>;
52
- reserveSeatInvoice({ amountUsd, asset, }: {
53
- amountUsd: number;
54
- asset?: "SOL" | "USDC" | "USDT";
55
- }): Promise<Invoice>;
56
- request(method: string, url: string, init?: RequestInit): Promise<Response>;
57
- get(url: string, init?: RequestInit): Promise<Response>;
58
- post(url: string, init?: RequestInit): Promise<Response>;
59
- private json;
60
- }
1
+ /**
2
+ * AiFinPay agent SDK — Unified Agent Economy layer for AI agents.
3
+ *
4
+ * Recommended (Phase 1+): the chain-opaque AiFinPayAgent surface.
5
+ *
6
+ * import { AiFinPayAgent } from "@aifinpay/agent";
7
+ *
8
+ * const agent = await AiFinPayAgent.new();
9
+ * const res = await agent.call({ provider: "exa", body: { query: "..." } });
10
+ * const data = await res.json();
11
+ *
12
+ * Legacy (still supported, but @deprecated for new code): the chain-aware
13
+ * Agent class with explicit Solana primitives.
14
+ *
15
+ * import { Agent } from "@aifinpay/agent";
16
+ *
17
+ * const agent = Agent.new();
18
+ * await agent.reserveSeatInvoice({ amountUsd: 1.0, asset: "USDC" });
19
+ * const res = await agent.pay("https://aifinpay.company/api/stats");
20
+ */
21
+ export { AiFinPayAgent } from "./unifiedAgent.js";
22
+ export type { AiFinPayAgentOptions, CallOptions, ChainId, ProviderEntry, BalanceSnapshot, ReputationSnapshot, BudgetCaps, SessionHandle, SessionReceipt, } from "./unifiedAgent.js";
23
+ export { ProviderUnknownError, WrongChainBalanceError, InsufficientFundsError, BudgetCapExceededError, SettlementError, SessionExpiredError, } from "./unifiedAgent.js";
24
+ export { Agent } from "./agent.js";
25
+ export type { AgentOptions, Invoice, PayInit } from "./agent.js";
26
+ export { AiFinPayError, FacilitatorNotImplementedError, FundingTimeoutError, PaymentTooExpensiveError, SeatNotFoundError, UnsupportedFacilitatorError, X402Error, } from "./errors.js";
27
+ export { AiFinPayFacilitator, CoinbaseX402Facilitator, REGISTERED, detectFacilitator, } from "./facilitators/index.js";
28
+ export type { AuthPayload, Facilitator, FacilitatorClass, PayOptions, } from "./facilitators/index.js";
61
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,qBAAa,aAAc,SAAQ,KAAK;CAAG;AAC3C,qBAAa,SAAU,SAAQ,aAAa;CAAG;AAC/C,qBAAa,mBAAoB,SAAQ,aAAa;CAAG;AACzD,qBAAa,iBAAkB,SAAQ,aAAa;CAAG;AAEvD,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,qBAAa,KAAK;IAChB,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IAEzC,OAAO;IAmBP,MAAM,CAAC,GAAG,CAAC,IAAI,GAAE,YAAiB,GAAG,KAAK;IAK1C,0EAA0E;IAC1E,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB,GAAG,KAAK;IAevE,2EAA2E;WAC9D,eAAe,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,KAAK,CAAC;IAcjB,gCAAgC;IAChC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,sEAAsE;IACtE,IAAI,SAAS,IAAI,MAAM,CAEtB;IAIK,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAO7C,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAS7C,UAAU,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAOlE,kEAAkE;IAC5D,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAgB9C,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAQjC,0EAA0E;IACpE,cAAc,CAAC,EACnB,WAAiB,EACjB,MAAc,EACd,SAAmB,GACpB,GAAE;QACD,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBhB,kBAAkB,CAAC,EACvB,SAAS,EACT,KAAc,GACf,EAAE;QACD,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;KACjC,GAAG,OAAO,CAAC,OAAO,CAAC;IAsBd,OAAO,CACX,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,QAAQ,CAAC;IAepB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAI3D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;YAM9C,IAAI;CA6BnB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EACV,oBAAoB,EACpB,WAAW,EACX,OAAO,EACP,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EACL,aAAa,EACb,8BAA8B,EAC9B,mBAAmB,EACnB,wBAAwB,EACxB,iBAAiB,EACjB,2BAA2B,EAC3B,SAAS,GACV,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,UAAU,GACX,MAAM,yBAAyB,CAAC"}
package/dist/index.js CHANGED
@@ -1,203 +1,28 @@
1
1
  /**
2
- * AiFinPay agent SDK — non-custodial x402 payment client.
2
+ * AiFinPay agent SDK — Unified Agent Economy layer for AI agents.
3
+ *
4
+ * Recommended (Phase 1+): the chain-opaque AiFinPayAgent surface.
5
+ *
6
+ * import { AiFinPayAgent } from "@aifinpay/agent";
7
+ *
8
+ * const agent = await AiFinPayAgent.new();
9
+ * const res = await agent.call({ provider: "exa", body: { query: "..." } });
10
+ * const data = await res.json();
11
+ *
12
+ * Legacy (still supported, but @deprecated for new code): the chain-aware
13
+ * Agent class with explicit Solana primitives.
3
14
  *
4
- * Quick start:
5
15
  * import { Agent } from "@aifinpay/agent";
16
+ *
6
17
  * const agent = Agent.new();
7
- * console.log("Fund this address:", agent.address);
8
- * await agent.waitForFunding({ minUsdCents: 1 });
9
- * const invoice = await agent.reserveSeatInvoice({ amountUsd: 1.0, asset: "USDC" });
10
- * const r = await agent.get("https://aifinpay.company/api/stats");
18
+ * await agent.reserveSeatInvoice({ amountUsd: 1.0, asset: "USDC" });
19
+ * const res = await agent.pay("https://aifinpay.company/api/stats");
11
20
  */
12
- import nacl from "tweetnacl";
13
- import bs58 from "bs58";
14
- const DEFAULT_BASE_URL = "https://aifinpay.company";
15
- const DEFAULT_TIMEOUT_MS = 30_000;
16
- const SDK_UA = "aifinpay-agent-node/0.1.0";
17
- export class AiFinPayError extends Error {
18
- }
19
- export class X402Error extends AiFinPayError {
20
- }
21
- export class FundingTimeoutError extends AiFinPayError {
22
- }
23
- export class SeatNotFoundError extends AiFinPayError {
24
- }
25
- export class Agent {
26
- publicKey;
27
- secretKey; // 64 bytes (secret + public)
28
- baseUrl;
29
- timeoutMs;
30
- fetchImpl;
31
- constructor(secretKey, publicKey, opts = {}) {
32
- this.secretKey = secretKey;
33
- this.publicKey = publicKey;
34
- this.baseUrl = (opts.baseUrl || DEFAULT_BASE_URL).replace(/\/$/, "");
35
- this.timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
36
- this.fetchImpl = opts.fetchImpl ?? globalThis.fetch;
37
- if (!this.fetchImpl) {
38
- throw new AiFinPayError("global fetch not available. Pass opts.fetchImpl or upgrade to Node 18+.");
39
- }
40
- }
41
- // ── Constructors ───────────────────────────────────────────────────────
42
- static new(opts = {}) {
43
- const kp = nacl.sign.keyPair();
44
- return new Agent(kp.secretKey, kp.publicKey, opts);
45
- }
46
- /** Load from base58 secret (Solana style: 64 bytes = secret + public). */
47
- static fromSecretB58(secretB58, opts = {}) {
48
- const raw = bs58.decode(secretB58);
49
- let kp;
50
- if (raw.length === 64) {
51
- kp = nacl.sign.keyPair.fromSecretKey(raw);
52
- }
53
- else if (raw.length === 32) {
54
- kp = nacl.sign.keyPair.fromSeed(raw);
55
- }
56
- else {
57
- throw new AiFinPayError(`secret must decode to 32 or 64 bytes, got ${raw.length}`);
58
- }
59
- return new Agent(kp.secretKey, kp.publicKey, opts);
60
- }
61
- /** Load from a Solana CLI ``solana-keygen`` JSON file path (Node only). */
62
- static async fromKeypairFile(path, opts = {}) {
63
- const fs = await import("node:fs/promises");
64
- const raw = await fs.readFile(path, "utf8");
65
- const arr = JSON.parse(raw);
66
- if (!Array.isArray(arr) || arr.length !== 64) {
67
- throw new AiFinPayError(`${path}: expected 64-byte JSON array`);
68
- }
69
- const sk = Uint8Array.from(arr);
70
- const kp = nacl.sign.keyPair.fromSecretKey(sk);
71
- return new Agent(kp.secretKey, kp.publicKey, opts);
72
- }
73
- // ── Public properties ──────────────────────────────────────────────────
74
- /** Solana base58 public key. */
75
- get address() {
76
- return bs58.encode(this.publicKey);
77
- }
78
- /** 64-byte base58 secret. Save this safely — server never sees it. */
79
- get secretB58() {
80
- return bs58.encode(this.secretKey);
81
- }
82
- // ── Discovery ──────────────────────────────────────────────────────────
83
- async manifesto() {
84
- return (await this.json("GET", "/manifesto.json"));
85
- }
86
- async wellKnown() {
87
- return (await this.json("GET", "/.well-known/x402.json"));
88
- }
89
- // ── x402 auth ──────────────────────────────────────────────────────────
90
- async fetchNonce() {
91
- return this.json("GET", "/nonce");
92
- }
93
- /** Build a fresh x402 header set (nonce is one-time, 60s TTL). */
94
- async authHeaders() {
95
- const { nonce } = await this.fetchNonce();
96
- const msg = new TextEncoder().encode(`AiFinPay-x402:${nonce}:${this.address}`);
97
- const digest = await sha256(msg);
98
- const sig = nacl.sign.detached(digest, this.secretKey);
99
- return {
100
- "x-agent-pubkey": this.address,
101
- "x-nonce": nonce,
102
- "x-signature": bs58.encode(sig),
103
- };
104
- }
105
- // ── Seat / funding ────────────────────────────────────────────────────
106
- async hasSeat() {
107
- const r = (await this.json("GET", `/api/seat/${this.address}`));
108
- return Boolean(r.has_seat);
109
- }
110
- /** Poll the merged leaderboard until this address shows ≥ minUsdCents. */
111
- async waitForFunding({ minUsdCents = 100, pollMs = 5_000, timeoutMs = 600_000, } = {}) {
112
- const deadline = Date.now() + timeoutMs;
113
- while (Date.now() < deadline) {
114
- const data = (await this.json("GET", "/api/leaderboard?merge=true"));
115
- for (const entry of data.leaderboard || []) {
116
- if (entry.pubkey === this.address) {
117
- const cents = Math.round(parseFloat(entry.usd) * 100);
118
- if (cents >= minUsdCents)
119
- return;
120
- }
121
- }
122
- await new Promise((res) => setTimeout(res, pollMs));
123
- }
124
- throw new FundingTimeoutError(`address ${this.address} never reached ${minUsdCents} cents on-chain`);
125
- }
126
- // ── Invoices ──────────────────────────────────────────────────────────
127
- async reserveSeatInvoice({ amountUsd, asset = "USDC", }) {
128
- const endpoint = asset === "SOL" ? "/api/invoice" : "/api/invoice-spl";
129
- const payload = {
130
- amount_usd: amountUsd,
131
- agent_pubkey: this.address,
132
- };
133
- if (asset !== "SOL")
134
- payload.asset = asset;
135
- const data = (await this.json("POST", endpoint, payload));
136
- return {
137
- amountUsd,
138
- treasuryVault: data.treasury_vault || "",
139
- programId: data.program_id || "",
140
- nonce: data.nonce || "",
141
- raw: data,
142
- };
143
- }
144
- // ── x402-aware HTTP request wrapper ───────────────────────────────────
145
- async request(method, url, init = {}) {
146
- const auth = await this.authHeaders();
147
- const headers = new Headers(init.headers);
148
- Object.entries(auth).forEach(([k, v]) => headers.set(k, v));
149
- headers.set("user-agent", SDK_UA);
150
- const res = await this.fetchImpl(url, { ...init, method, headers });
151
- if (res.status === 402) {
152
- const body = await res.clone().text();
153
- throw new X402Error(`402 Payment Required. Reserve a Seat first via reserveSeatInvoice(). Body: ${body}`);
154
- }
155
- return res;
156
- }
157
- get(url, init = {}) {
158
- return this.request("GET", url, init);
159
- }
160
- post(url, init = {}) {
161
- return this.request("POST", url, init);
162
- }
163
- // ── Internal helpers ──────────────────────────────────────────────────
164
- async json(method, path, body) {
165
- const init = {
166
- method,
167
- headers: {
168
- accept: "application/json",
169
- "user-agent": SDK_UA,
170
- ...(body ? { "content-type": "application/json" } : {}),
171
- },
172
- };
173
- if (body)
174
- init.body = JSON.stringify(body);
175
- const ctrl = new AbortController();
176
- const t = setTimeout(() => ctrl.abort(), this.timeoutMs);
177
- try {
178
- const r = await this.fetchImpl(this.baseUrl + path, {
179
- ...init,
180
- signal: ctrl.signal,
181
- });
182
- if (!r.ok) {
183
- throw new AiFinPayError(`${method} ${path} → ${r.status}`);
184
- }
185
- return await r.json();
186
- }
187
- finally {
188
- clearTimeout(t);
189
- }
190
- }
191
- }
192
- async function sha256(bytes) {
193
- if (typeof crypto !== "undefined" && crypto.subtle) {
194
- // Force ArrayBuffer (not SharedArrayBuffer) for strict TS lib check
195
- const data = new Uint8Array(bytes);
196
- const buf = await crypto.subtle.digest("SHA-256", data.buffer);
197
- return new Uint8Array(buf);
198
- }
199
- // Node fallback (unlikely on Node ≥18 since global crypto is available)
200
- const { createHash } = await import("node:crypto");
201
- return new Uint8Array(createHash("sha256").update(bytes).digest());
202
- }
21
+ // ── Unified surface (Phase 1+) ───────────────────────────────────────────
22
+ export { AiFinPayAgent } from "./unifiedAgent.js";
23
+ export { ProviderUnknownError, WrongChainBalanceError, InsufficientFundsError, BudgetCapExceededError, SettlementError, SessionExpiredError, } from "./unifiedAgent.js";
24
+ // ── Legacy chain-aware surface (kept for back-compat) ───────────────────
25
+ export { Agent } from "./agent.js";
26
+ export { AiFinPayError, FacilitatorNotImplementedError, FundingTimeoutError, PaymentTooExpensiveError, SeatNotFoundError, UnsupportedFacilitatorError, X402Error, } from "./errors.js";
27
+ export { AiFinPayFacilitator, CoinbaseX402Facilitator, REGISTERED, detectFacilitator, } from "./facilitators/index.js";
203
28
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,4EAA4E;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAYlD,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EACf,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAE3B,2EAA2E;AAC3E,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EACL,aAAa,EACb,8BAA8B,EAC9B,mBAAmB,EACnB,wBAAwB,EACxB,iBAAiB,EACjB,2BAA2B,EAC3B,SAAS,GACV,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,UAAU,EACV,iBAAiB,GAClB,MAAM,yBAAyB,CAAC"}