@agent-shield/sdk 0.3.1 → 0.5.1

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 (58) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +14 -22
  3. package/dist/idl-json.d.ts +3 -3
  4. package/dist/idl-json.d.ts.map +1 -1
  5. package/dist/idl-json.js +2020 -2942
  6. package/dist/idl-json.js.map +1 -1
  7. package/dist/idl.d.ts +1403 -2057
  8. package/dist/idl.d.ts.map +1 -1
  9. package/dist/index.d.ts +5 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +46 -2
  12. package/dist/index.js.map +1 -1
  13. package/dist/instructions.d.ts +893 -893
  14. package/dist/types.d.ts +2 -2
  15. package/dist/types.d.ts.map +1 -1
  16. package/dist/types.js +2 -2
  17. package/dist/types.js.map +1 -1
  18. package/dist/wrapper/engine.d.ts +17 -0
  19. package/dist/wrapper/engine.d.ts.map +1 -0
  20. package/dist/wrapper/engine.js +45 -0
  21. package/dist/wrapper/engine.js.map +1 -0
  22. package/dist/wrapper/errors.d.ts +10 -0
  23. package/dist/wrapper/errors.d.ts.map +1 -0
  24. package/dist/wrapper/errors.js +20 -0
  25. package/dist/wrapper/errors.js.map +1 -0
  26. package/dist/wrapper/harden.d.ts +119 -0
  27. package/dist/wrapper/harden.d.ts.map +1 -0
  28. package/dist/wrapper/harden.js +399 -0
  29. package/dist/wrapper/harden.js.map +1 -0
  30. package/dist/wrapper/index.d.ts +17 -0
  31. package/dist/wrapper/index.d.ts.map +1 -0
  32. package/dist/wrapper/index.js +60 -0
  33. package/dist/wrapper/index.js.map +1 -0
  34. package/dist/wrapper/inspector.d.ts +22 -0
  35. package/dist/wrapper/inspector.d.ts.map +1 -0
  36. package/dist/wrapper/inspector.js +175 -0
  37. package/dist/wrapper/inspector.js.map +1 -0
  38. package/dist/wrapper/policies.d.ts +78 -0
  39. package/dist/wrapper/policies.d.ts.map +1 -0
  40. package/dist/wrapper/policies.js +108 -0
  41. package/dist/wrapper/policies.js.map +1 -0
  42. package/dist/wrapper/registry.d.ts +24 -0
  43. package/dist/wrapper/registry.d.ts.map +1 -0
  44. package/dist/wrapper/registry.js +43 -0
  45. package/dist/wrapper/registry.js.map +1 -0
  46. package/dist/wrapper/shield.d.ts +86 -0
  47. package/dist/wrapper/shield.d.ts.map +1 -0
  48. package/dist/wrapper/shield.js +226 -0
  49. package/dist/wrapper/shield.js.map +1 -0
  50. package/dist/wrapper/state.d.ts +3 -0
  51. package/dist/wrapper/state.d.ts.map +1 -0
  52. package/dist/wrapper/state.js +6 -0
  53. package/dist/wrapper/state.js.map +1 -0
  54. package/dist/wrapper/x402.d.ts +151 -0
  55. package/dist/wrapper/x402.d.ts.map +1 -0
  56. package/dist/wrapper/x402.js +326 -0
  57. package/dist/wrapper/x402.js.map +1 -0
  58. package/package.json +15 -11
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.isTeeWallet = isTeeWallet;
37
+ exports.shield = shield;
38
+ const web3_js_1 = require("@solana/web3.js");
39
+ const policies_1 = require("./policies");
40
+ const inspector_1 = require("./inspector");
41
+ const engine_1 = require("./engine");
42
+ const errors_1 = require("./errors");
43
+ const state_1 = require("./state");
44
+ const registry_1 = require("./registry");
45
+ /**
46
+ * Type guard to detect TEE-backed wallets at runtime.
47
+ */
48
+ function isTeeWallet(wallet) {
49
+ return "provider" in wallet && typeof wallet.provider === "string";
50
+ }
51
+ /**
52
+ * Wrap any wallet with client-side spending controls.
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * import { shieldWallet } from '@agent-shield/sdk';
57
+ *
58
+ * const protectedWallet = shieldWallet(wallet, { maxSpend: '500 USDC/day' });
59
+ * const agent = new SolanaAgentKit(protectedWallet, RPC_URL, config);
60
+ * ```
61
+ *
62
+ * With no config, secure defaults are applied:
63
+ * - 1000 USDC/day, 1000 USDT/day, 10 SOL/day spending caps
64
+ * - Unknown programs blocked
65
+ * - 60 transactions/hour rate limit
66
+ * @internal Use shieldWallet() instead
67
+ */
68
+ function shield(wallet, policies, options) {
69
+ let resolved = (0, policies_1.resolvePolicies)(policies);
70
+ const connection = options?.connection;
71
+ const state = new state_1.ShieldState(options?.storage);
72
+ const onDenied = options?.onDenied;
73
+ const onApproved = options?.onApproved;
74
+ const onPolicyUpdate = options?.onPolicyUpdate;
75
+ const onPause = options?.onPause;
76
+ const onResume = options?.onResume;
77
+ let paused = false;
78
+ const shielded = {
79
+ publicKey: wallet.publicKey,
80
+ innerWallet: wallet,
81
+ shieldState: state,
82
+ isHardened: false,
83
+ get resolvedPolicies() {
84
+ return resolved;
85
+ },
86
+ get isPaused() {
87
+ return paused;
88
+ },
89
+ async signTransaction(tx) {
90
+ if (paused) {
91
+ return wallet.signTransaction(tx);
92
+ }
93
+ // Resolve ALTs for VersionedTransactions when connection is available
94
+ let lookupTableAccounts;
95
+ if (connection &&
96
+ tx instanceof web3_js_1.VersionedTransaction &&
97
+ tx.message.addressTableLookups.length > 0) {
98
+ lookupTableAccounts = await (0, inspector_1.resolveTransactionAddressLookupTables)(tx, connection);
99
+ }
100
+ const analysis = (0, inspector_1.analyzeTransaction)(tx, wallet.publicKey, lookupTableAccounts);
101
+ const violations = (0, engine_1.evaluatePolicy)(analysis, resolved, state);
102
+ if (violations.length > 0) {
103
+ const error = new errors_1.ShieldDeniedError(violations);
104
+ onDenied?.(error);
105
+ throw error;
106
+ }
107
+ // Policy passed — sign with underlying wallet
108
+ const signed = await wallet.signTransaction(tx);
109
+ // Record the spend and transaction
110
+ (0, engine_1.recordTransaction)(analysis, state);
111
+ onApproved?.(null);
112
+ return signed;
113
+ },
114
+ async signAllTransactions(txs) {
115
+ if (paused) {
116
+ if (wallet.signAllTransactions) {
117
+ return wallet.signAllTransactions(txs);
118
+ }
119
+ return Promise.all(txs.map((tx) => wallet.signTransaction(tx)));
120
+ }
121
+ // Resolve ALTs for any VersionedTransactions in the batch,
122
+ // caching resolved ALTs across the batch to avoid redundant RPCs.
123
+ const altCache = new Map();
124
+ const analyses = [];
125
+ for (const tx of txs) {
126
+ let lookupTableAccounts;
127
+ if (connection &&
128
+ tx instanceof web3_js_1.VersionedTransaction &&
129
+ tx.message.addressTableLookups.length > 0) {
130
+ const cached = [];
131
+ let hasMissing = false;
132
+ for (const lookup of tx.message.addressTableLookups) {
133
+ const key = lookup.accountKey.toBase58();
134
+ const existing = altCache.get(key);
135
+ if (existing) {
136
+ cached.push(existing);
137
+ }
138
+ else {
139
+ hasMissing = true;
140
+ }
141
+ }
142
+ if (hasMissing) {
143
+ const fetched = await (0, inspector_1.resolveTransactionAddressLookupTables)(tx, connection);
144
+ for (const alt of fetched) {
145
+ altCache.set(alt.key.toBase58(), alt);
146
+ }
147
+ // Rebuild from cache to get all ALTs in order
148
+ cached.length = 0;
149
+ for (const lookup of tx.message.addressTableLookups) {
150
+ const alt = altCache.get(lookup.accountKey.toBase58());
151
+ if (alt)
152
+ cached.push(alt);
153
+ }
154
+ }
155
+ lookupTableAccounts = cached;
156
+ }
157
+ analyses.push((0, inspector_1.analyzeTransaction)(tx, wallet.publicKey, lookupTableAccounts));
158
+ }
159
+ for (const analysis of analyses) {
160
+ const violations = (0, engine_1.evaluatePolicy)(analysis, resolved, state);
161
+ if (violations.length > 0) {
162
+ const error = new errors_1.ShieldDeniedError(violations);
163
+ onDenied?.(error);
164
+ throw error;
165
+ }
166
+ // Record into state so the next tx sees cumulative spend
167
+ (0, engine_1.recordTransaction)(analysis, state);
168
+ }
169
+ // All passed — sign with underlying wallet
170
+ let signed;
171
+ if (wallet.signAllTransactions) {
172
+ signed = await wallet.signAllTransactions(txs);
173
+ }
174
+ else {
175
+ signed = await Promise.all(txs.map((tx) => wallet.signTransaction(tx)));
176
+ }
177
+ onApproved?.(null);
178
+ return signed;
179
+ },
180
+ updatePolicies(newPolicies) {
181
+ resolved = (0, policies_1.resolvePolicies)(newPolicies);
182
+ onPolicyUpdate?.(newPolicies);
183
+ },
184
+ resetState() {
185
+ state.reset();
186
+ },
187
+ pause() {
188
+ paused = true;
189
+ onPause?.();
190
+ },
191
+ resume() {
192
+ paused = false;
193
+ onResume?.();
194
+ },
195
+ getSpendingSummary() {
196
+ const tokens = resolved.spendLimits.map((limit) => {
197
+ const spent = state.getSpendInWindow(limit.mint, limit.windowMs ?? 86400000);
198
+ const remaining = limit.amount > spent ? limit.amount - spent : BigInt(0);
199
+ const tokenInfo = (0, registry_1.getTokenInfo)(limit.mint);
200
+ return {
201
+ mint: limit.mint,
202
+ symbol: tokenInfo?.symbol,
203
+ spent,
204
+ limit: limit.amount,
205
+ remaining,
206
+ windowMs: limit.windowMs ?? 86400000,
207
+ };
208
+ });
209
+ const txCount = state.getTransactionCountInWindow(resolved.rateLimit.windowMs);
210
+ const rateLimit = {
211
+ count: txCount,
212
+ limit: resolved.rateLimit.maxTransactions,
213
+ remaining: Math.max(0, resolved.rateLimit.maxTransactions - txCount),
214
+ windowMs: resolved.rateLimit.windowMs,
215
+ };
216
+ return { tokens, rateLimit, isPaused: paused };
217
+ },
218
+ };
219
+ // Wire up x402 fetch support (lazy-loaded)
220
+ shielded.fetch = async (url, init) => {
221
+ const { shieldedFetch } = await Promise.resolve().then(() => __importStar(require("./x402")));
222
+ return shieldedFetch(shielded, url, { ...init, connection });
223
+ };
224
+ return shielded;
225
+ }
226
+ //# sourceMappingURL=shield.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shield.js","sourceRoot":"","sources":["../../src/wrapper/shield.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { ShieldState } from "@agent-shield/core";
2
+ export type { ShieldStorage, SpendEntry, TxEntry } from "@agent-shield/core";
3
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/wrapper/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ShieldState = void 0;
4
+ var core_1 = require("@agent-shield/core");
5
+ Object.defineProperty(exports, "ShieldState", { enumerable: true, get: function () { return core_1.ShieldState; } });
6
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/wrapper/state.ts"],"names":[],"mappings":";;;AAAA,2CAAiD;AAAxC,mGAAA,WAAW,OAAA"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * x402 — HTTP 402 Payment Required support for shielded wallets.
3
+ *
4
+ * Implements the x402 V2 protocol (coinbase/x402) for machine-to-machine
5
+ * crypto payments. The client signs a payment, retries with PAYMENT-SIGNATURE
6
+ * header, and the API server settles via a facilitator.
7
+ *
8
+ * @see https://x402.org
9
+ */
10
+ import { PublicKey, TransactionInstruction, Connection } from "@solana/web3.js";
11
+ import type { ShieldedWallet } from "./shield";
12
+ import type { ResolvedPolicies } from "./policies";
13
+ import type { ShieldState } from "./state";
14
+ /**
15
+ * x402 V2 PaymentRequired — decoded from PAYMENT-REQUIRED header.
16
+ * Mirrors @x402/core/types PaymentRequired.
17
+ */
18
+ export interface PaymentRequired {
19
+ x402Version: number;
20
+ error?: string;
21
+ resource: ResourceInfo;
22
+ accepts: PaymentRequirements[];
23
+ extensions?: Record<string, unknown>;
24
+ }
25
+ /** A single payment option offered by the server. */
26
+ export interface PaymentRequirements {
27
+ scheme: string;
28
+ network: string;
29
+ asset: string;
30
+ amount: string;
31
+ payTo: string;
32
+ maxTimeoutSeconds: number;
33
+ extra: Record<string, unknown>;
34
+ }
35
+ /** Resource metadata embedded in PaymentRequired. */
36
+ export interface ResourceInfo {
37
+ url: string;
38
+ description: string;
39
+ mimeType: string;
40
+ }
41
+ /** The signed payment payload sent back to the server. */
42
+ export interface PaymentPayload {
43
+ x402Version: number;
44
+ resource: ResourceInfo;
45
+ accepted: PaymentRequirements;
46
+ payload: Record<string, unknown>;
47
+ extensions?: Record<string, unknown>;
48
+ }
49
+ /** Settlement response decoded from PAYMENT-RESPONSE header. */
50
+ export interface SettleResponse {
51
+ success: boolean;
52
+ transaction?: string;
53
+ network?: string;
54
+ payer?: string;
55
+ errorReason?: string;
56
+ }
57
+ /** Options for shieldedFetch(). */
58
+ export interface ShieldedFetchOptions extends RequestInit {
59
+ /** Solana RPC connection for blockhash + ATA resolution. */
60
+ connection?: Connection;
61
+ /** If true, evaluate policies but don't pay. */
62
+ dryRun?: boolean;
63
+ }
64
+ /** Extended response with x402 payment metadata. */
65
+ export interface ShieldedFetchResponse extends Response {
66
+ x402?: X402PaymentResult;
67
+ }
68
+ /** Payment metadata attached to a ShieldedFetchResponse. */
69
+ export interface X402PaymentResult {
70
+ paid: boolean;
71
+ amountPaid: string;
72
+ asset: string;
73
+ payTo: string;
74
+ settlement?: SettleResponse;
75
+ }
76
+ export declare class X402ParseError extends Error {
77
+ constructor(message: string);
78
+ }
79
+ export declare class X402PaymentError extends Error {
80
+ constructor(message: string);
81
+ }
82
+ export declare class X402UnsupportedError extends Error {
83
+ constructor(message: string);
84
+ }
85
+ /**
86
+ * Decode a base64-encoded PAYMENT-REQUIRED header value.
87
+ */
88
+ export declare function decodePaymentRequiredHeader(header: string): PaymentRequired;
89
+ /**
90
+ * Encode a PaymentPayload as a base64 string for PAYMENT-SIGNATURE header.
91
+ */
92
+ export declare function encodePaymentSignatureHeader(payload: PaymentPayload): string;
93
+ /**
94
+ * Decode a base64-encoded PAYMENT-RESPONSE header value.
95
+ */
96
+ export declare function decodePaymentResponseHeader(header: string): SettleResponse;
97
+ /**
98
+ * Select a Solana-compatible payment option from the accepts array.
99
+ *
100
+ * @param paymentRequired The decoded PAYMENT-REQUIRED payload
101
+ * @param allowedTokens Optional set of token mint addresses to accept
102
+ * @returns The first matching PaymentRequirements, or throws
103
+ */
104
+ export declare function selectPaymentOption(paymentRequired: PaymentRequired, allowedTokens?: Set<string>): PaymentRequirements;
105
+ /**
106
+ * Evaluate an x402 payment against shield policies without recording spend.
107
+ *
108
+ * Creates a synthetic TransactionAnalysis from the payment requirements
109
+ * and runs it through the existing policy engine.
110
+ */
111
+ export declare function evaluateX402Payment(selected: PaymentRequirements, policies: ResolvedPolicies, state: ShieldState): import("./errors").PolicyViolation[];
112
+ /**
113
+ * Build an SPL TransferChecked instruction for an x402 payment.
114
+ */
115
+ export declare function buildX402TransferInstruction(params: {
116
+ from: PublicKey;
117
+ payTo: PublicKey;
118
+ asset: PublicKey;
119
+ amount: bigint;
120
+ decimals: number;
121
+ }): TransactionInstruction;
122
+ /**
123
+ * Encode a signed transaction into a full x402 V2 PaymentPayload.
124
+ */
125
+ export declare function encodeX402Payload(signedTx: Uint8Array, resource: ResourceInfo, accepted: PaymentRequirements): string;
126
+ /**
127
+ * Fetch a URL with automatic x402 payment support.
128
+ *
129
+ * Flow:
130
+ * 1. Make the initial HTTP request
131
+ * 2. If 402, parse PAYMENT-REQUIRED header
132
+ * 3. Select a Solana payment option
133
+ * 4. Evaluate against shield policies (fast deny)
134
+ * 5. Build, sign, and encode payment transaction
135
+ * 6. Retry with PAYMENT-SIGNATURE header
136
+ * 7. Return response with x402 metadata
137
+ *
138
+ * The client NEVER settles — the API server calls the facilitator.
139
+ */
140
+ export declare function shieldedFetch(wallet: ShieldedWallet, url: string | URL, options?: ShieldedFetchOptions): Promise<ShieldedFetchResponse>;
141
+ /**
142
+ * Create a wallet-bound fetch function with automatic x402 payment support.
143
+ *
144
+ * @example
145
+ * ```typescript
146
+ * const fetch = createShieldedFetchForWallet(shieldedWallet, { connection });
147
+ * const res = await fetch('https://api.example.com/paid-endpoint');
148
+ * ```
149
+ */
150
+ export declare function createShieldedFetchForWallet(wallet: ShieldedWallet, defaults?: Omit<ShieldedFetchOptions, "body" | "method">): (url: string | URL, init?: RequestInit) => Promise<ShieldedFetchResponse>;
151
+ //# sourceMappingURL=x402.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402.d.ts","sourceRoot":"","sources":["../../src/wrapper/x402.ts"],"names":[],"mappings":"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"}