@rebelfi/agent-sdk 1.0.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 (243) hide show
  1. package/README.md +337 -0
  2. package/dist/amount-utils.d.ts +9 -0
  3. package/dist/amount-utils.js +80 -0
  4. package/dist/amount-utils.js.map +1 -0
  5. package/dist/cjs/amount-utils.js +87 -0
  6. package/dist/cjs/amount-utils.js.map +1 -0
  7. package/dist/cjs/cli.js +189 -0
  8. package/dist/cjs/cli.js.map +1 -0
  9. package/dist/cjs/client.js +49 -0
  10. package/dist/cjs/client.js.map +1 -0
  11. package/dist/cjs/commands/account.js +250 -0
  12. package/dist/cjs/commands/account.js.map +1 -0
  13. package/dist/cjs/commands/auth.js +78 -0
  14. package/dist/cjs/commands/auth.js.map +1 -0
  15. package/dist/cjs/commands/balance.js +15 -0
  16. package/dist/cjs/commands/balance.js.map +1 -0
  17. package/dist/cjs/commands/cancel.js +34 -0
  18. package/dist/cjs/commands/cancel.js.map +1 -0
  19. package/dist/cjs/commands/chat.js +15 -0
  20. package/dist/cjs/commands/chat.js.map +1 -0
  21. package/dist/cjs/commands/claim.js +34 -0
  22. package/dist/cjs/commands/claim.js.map +1 -0
  23. package/dist/cjs/commands/config.js +29 -0
  24. package/dist/cjs/commands/config.js.map +1 -0
  25. package/dist/cjs/commands/contacts.js +29 -0
  26. package/dist/cjs/commands/contacts.js.map +1 -0
  27. package/dist/cjs/commands/init.js +43 -0
  28. package/dist/cjs/commands/init.js.map +1 -0
  29. package/dist/cjs/commands/orders.js +167 -0
  30. package/dist/cjs/commands/orders.js.map +1 -0
  31. package/dist/cjs/commands/pay.js +41 -0
  32. package/dist/cjs/commands/pay.js.map +1 -0
  33. package/dist/cjs/commands/payments.js +27 -0
  34. package/dist/cjs/commands/payments.js.map +1 -0
  35. package/dist/cjs/commands/wallet.js +69 -0
  36. package/dist/cjs/commands/wallet.js.map +1 -0
  37. package/dist/cjs/config.js +91 -0
  38. package/dist/cjs/config.js.map +1 -0
  39. package/dist/cjs/contacts.js +87 -0
  40. package/dist/cjs/contacts.js.map +1 -0
  41. package/dist/cjs/errors.js +93 -0
  42. package/dist/cjs/errors.js.map +1 -0
  43. package/dist/cjs/index.js +64 -0
  44. package/dist/cjs/index.js.map +1 -0
  45. package/dist/cjs/intent/chains.js +29 -0
  46. package/dist/cjs/intent/chains.js.map +1 -0
  47. package/dist/cjs/intent/constraints.js +46 -0
  48. package/dist/cjs/intent/constraints.js.map +1 -0
  49. package/dist/cjs/intent/helpers.js +34 -0
  50. package/dist/cjs/intent/helpers.js.map +1 -0
  51. package/dist/cjs/intent/index.js +99 -0
  52. package/dist/cjs/intent/index.js.map +1 -0
  53. package/dist/cjs/intent/matcher.js +119 -0
  54. package/dist/cjs/intent/matcher.js.map +1 -0
  55. package/dist/cjs/intent/program-registry.js +68 -0
  56. package/dist/cjs/intent/program-registry.js.map +1 -0
  57. package/dist/cjs/intent/token-registry.js +99 -0
  58. package/dist/cjs/intent/token-registry.js.map +1 -0
  59. package/dist/cjs/intent/types.js +3 -0
  60. package/dist/cjs/intent/types.js.map +1 -0
  61. package/dist/cjs/orders/evaluate.js +168 -0
  62. package/dist/cjs/orders/evaluate.js.map +1 -0
  63. package/dist/cjs/orders/index.js +14 -0
  64. package/dist/cjs/orders/index.js.map +1 -0
  65. package/dist/cjs/orders/store.js +47 -0
  66. package/dist/cjs/orders/store.js.map +1 -0
  67. package/dist/cjs/orders/sugar.js +35 -0
  68. package/dist/cjs/orders/sugar.js.map +1 -0
  69. package/dist/cjs/orders/types.js +3 -0
  70. package/dist/cjs/orders/types.js.map +1 -0
  71. package/dist/cjs/output.js +47 -0
  72. package/dist/cjs/output.js.map +1 -0
  73. package/dist/cjs/package.json +1 -0
  74. package/dist/cjs/transfers.js +15 -0
  75. package/dist/cjs/transfers.js.map +1 -0
  76. package/dist/cjs/validate.js +77 -0
  77. package/dist/cjs/validate.js.map +1 -0
  78. package/dist/cjs/verify/decoders/ata.js +19 -0
  79. package/dist/cjs/verify/decoders/ata.js.map +1 -0
  80. package/dist/cjs/verify/decoders/compute-budget.js +32 -0
  81. package/dist/cjs/verify/decoders/compute-budget.js.map +1 -0
  82. package/dist/cjs/verify/decoders/handshake.js +180 -0
  83. package/dist/cjs/verify/decoders/handshake.js.map +1 -0
  84. package/dist/cjs/verify/decoders/jupiter.js +39 -0
  85. package/dist/cjs/verify/decoders/jupiter.js.map +1 -0
  86. package/dist/cjs/verify/decoders/memo.js +12 -0
  87. package/dist/cjs/verify/decoders/memo.js.map +1 -0
  88. package/dist/cjs/verify/decoders/silkysig.js +162 -0
  89. package/dist/cjs/verify/decoders/silkysig.js.map +1 -0
  90. package/dist/cjs/verify/decoders/spl-token.js +125 -0
  91. package/dist/cjs/verify/decoders/spl-token.js.map +1 -0
  92. package/dist/cjs/verify/decoders/system.js +87 -0
  93. package/dist/cjs/verify/decoders/system.js.map +1 -0
  94. package/dist/cjs/verify/flags.js +87 -0
  95. package/dist/cjs/verify/flags.js.map +1 -0
  96. package/dist/cjs/verify/index.js +384 -0
  97. package/dist/cjs/verify/index.js.map +1 -0
  98. package/dist/cjs/verify/registry.js +24 -0
  99. package/dist/cjs/verify/registry.js.map +1 -0
  100. package/dist/cjs/verify/rpc.js +52 -0
  101. package/dist/cjs/verify/rpc.js.map +1 -0
  102. package/dist/cli.d.ts +2 -0
  103. package/dist/cli.js +224 -0
  104. package/dist/cli.js.map +1 -0
  105. package/dist/client.d.ts +7 -0
  106. package/dist/client.js +43 -0
  107. package/dist/client.js.map +1 -0
  108. package/dist/commands/account.d.ts +21 -0
  109. package/dist/commands/account.js +239 -0
  110. package/dist/commands/account.js.map +1 -0
  111. package/dist/commands/auth.d.ts +5 -0
  112. package/dist/commands/auth.js +70 -0
  113. package/dist/commands/auth.js.map +1 -0
  114. package/dist/commands/balance.d.ts +3 -0
  115. package/dist/commands/balance.js +12 -0
  116. package/dist/commands/balance.js.map +1 -0
  117. package/dist/commands/cancel.d.ts +3 -0
  118. package/dist/commands/cancel.js +28 -0
  119. package/dist/commands/cancel.js.map +1 -0
  120. package/dist/commands/chat.d.ts +1 -0
  121. package/dist/commands/chat.js +12 -0
  122. package/dist/commands/chat.js.map +1 -0
  123. package/dist/commands/claim.d.ts +3 -0
  124. package/dist/commands/claim.js +28 -0
  125. package/dist/commands/claim.js.map +1 -0
  126. package/dist/commands/config.d.ts +3 -0
  127. package/dist/commands/config.js +24 -0
  128. package/dist/commands/config.js.map +1 -0
  129. package/dist/commands/contacts.d.ts +4 -0
  130. package/dist/commands/contacts.js +23 -0
  131. package/dist/commands/contacts.js.map +1 -0
  132. package/dist/commands/init.d.ts +1 -0
  133. package/dist/commands/init.js +37 -0
  134. package/dist/commands/init.js.map +1 -0
  135. package/dist/commands/orders.d.ts +19 -0
  136. package/dist/commands/orders.js +157 -0
  137. package/dist/commands/orders.js.map +1 -0
  138. package/dist/commands/pay.d.ts +4 -0
  139. package/dist/commands/pay.js +35 -0
  140. package/dist/commands/pay.js.map +1 -0
  141. package/dist/commands/payments.d.ts +4 -0
  142. package/dist/commands/payments.js +23 -0
  143. package/dist/commands/payments.js.map +1 -0
  144. package/dist/commands/wallet.d.ts +7 -0
  145. package/dist/commands/wallet.js +61 -0
  146. package/dist/commands/wallet.js.map +1 -0
  147. package/dist/config.d.ts +40 -0
  148. package/dist/config.js +74 -0
  149. package/dist/config.js.map +1 -0
  150. package/dist/contacts.d.ts +15 -0
  151. package/dist/contacts.js +74 -0
  152. package/dist/contacts.js.map +1 -0
  153. package/dist/errors.d.ts +14 -0
  154. package/dist/errors.js +87 -0
  155. package/dist/errors.js.map +1 -0
  156. package/dist/index.d.ts +18 -0
  157. package/dist/index.js +14 -0
  158. package/dist/index.js.map +1 -0
  159. package/dist/intent/chains.d.ts +7 -0
  160. package/dist/intent/chains.js +24 -0
  161. package/dist/intent/chains.js.map +1 -0
  162. package/dist/intent/constraints.d.ts +8 -0
  163. package/dist/intent/constraints.js +43 -0
  164. package/dist/intent/constraints.js.map +1 -0
  165. package/dist/intent/helpers.d.ts +6 -0
  166. package/dist/intent/helpers.js +27 -0
  167. package/dist/intent/helpers.js.map +1 -0
  168. package/dist/intent/index.d.ts +11 -0
  169. package/dist/intent/index.js +87 -0
  170. package/dist/intent/index.js.map +1 -0
  171. package/dist/intent/matcher.d.ts +8 -0
  172. package/dist/intent/matcher.js +116 -0
  173. package/dist/intent/matcher.js.map +1 -0
  174. package/dist/intent/program-registry.d.ts +13 -0
  175. package/dist/intent/program-registry.js +65 -0
  176. package/dist/intent/program-registry.js.map +1 -0
  177. package/dist/intent/token-registry.d.ts +17 -0
  178. package/dist/intent/token-registry.js +96 -0
  179. package/dist/intent/token-registry.js.map +1 -0
  180. package/dist/intent/types.d.ts +89 -0
  181. package/dist/intent/types.js +2 -0
  182. package/dist/intent/types.js.map +1 -0
  183. package/dist/orders/evaluate.d.ts +28 -0
  184. package/dist/orders/evaluate.js +165 -0
  185. package/dist/orders/evaluate.js.map +1 -0
  186. package/dist/orders/index.d.ts +7 -0
  187. package/dist/orders/index.js +4 -0
  188. package/dist/orders/index.js.map +1 -0
  189. package/dist/orders/store.d.ts +9 -0
  190. package/dist/orders/store.js +37 -0
  191. package/dist/orders/store.js.map +1 -0
  192. package/dist/orders/sugar.d.ts +13 -0
  193. package/dist/orders/sugar.js +32 -0
  194. package/dist/orders/sugar.js.map +1 -0
  195. package/dist/orders/types.d.ts +37 -0
  196. package/dist/orders/types.js +2 -0
  197. package/dist/orders/types.js.map +1 -0
  198. package/dist/output.d.ts +4 -0
  199. package/dist/output.js +42 -0
  200. package/dist/output.js.map +1 -0
  201. package/dist/transfers.d.ts +32 -0
  202. package/dist/transfers.js +12 -0
  203. package/dist/transfers.js.map +1 -0
  204. package/dist/validate.d.ts +8 -0
  205. package/dist/validate.js +69 -0
  206. package/dist/validate.js.map +1 -0
  207. package/dist/verify/decoders/ata.d.ts +5 -0
  208. package/dist/verify/decoders/ata.js +16 -0
  209. package/dist/verify/decoders/ata.js.map +1 -0
  210. package/dist/verify/decoders/compute-budget.d.ts +5 -0
  211. package/dist/verify/decoders/compute-budget.js +29 -0
  212. package/dist/verify/decoders/compute-budget.js.map +1 -0
  213. package/dist/verify/decoders/handshake.d.ts +5 -0
  214. package/dist/verify/decoders/handshake.js +177 -0
  215. package/dist/verify/decoders/handshake.js.map +1 -0
  216. package/dist/verify/decoders/jupiter.d.ts +5 -0
  217. package/dist/verify/decoders/jupiter.js +36 -0
  218. package/dist/verify/decoders/jupiter.js.map +1 -0
  219. package/dist/verify/decoders/memo.d.ts +5 -0
  220. package/dist/verify/decoders/memo.js +9 -0
  221. package/dist/verify/decoders/memo.js.map +1 -0
  222. package/dist/verify/decoders/silkysig.d.ts +5 -0
  223. package/dist/verify/decoders/silkysig.js +159 -0
  224. package/dist/verify/decoders/silkysig.js.map +1 -0
  225. package/dist/verify/decoders/spl-token.d.ts +5 -0
  226. package/dist/verify/decoders/spl-token.js +122 -0
  227. package/dist/verify/decoders/spl-token.js.map +1 -0
  228. package/dist/verify/decoders/system.d.ts +5 -0
  229. package/dist/verify/decoders/system.js +84 -0
  230. package/dist/verify/decoders/system.js.map +1 -0
  231. package/dist/verify/flags.d.ts +3 -0
  232. package/dist/verify/flags.js +83 -0
  233. package/dist/verify/flags.js.map +1 -0
  234. package/dist/verify/index.d.ts +75 -0
  235. package/dist/verify/index.js +380 -0
  236. package/dist/verify/index.js.map +1 -0
  237. package/dist/verify/registry.d.ts +13 -0
  238. package/dist/verify/registry.js +21 -0
  239. package/dist/verify/registry.js.map +1 -0
  240. package/dist/verify/rpc.d.ts +14 -0
  241. package/dist/verify/rpc.js +48 -0
  242. package/dist/verify/rpc.js.map +1 -0
  243. package/package.json +85 -0
@@ -0,0 +1,380 @@
1
+ import { Transaction, VersionedTransaction, PublicKey } from '@solana/web3.js';
2
+ import { REGISTRY } from './registry.js';
3
+ import { decodeSystem } from './decoders/system.js';
4
+ import { decodeSplToken } from './decoders/spl-token.js';
5
+ import { decodeAta } from './decoders/ata.js';
6
+ import { decodeComputeBudget } from './decoders/compute-budget.js';
7
+ import { decodeMemo } from './decoders/memo.js';
8
+ import { decodeHandshake } from './decoders/handshake.js';
9
+ import { decodeSilkysig } from './decoders/silkysig.js';
10
+ import { decodeJupiter } from './decoders/jupiter.js';
11
+ import { applyGlobalFlags } from './flags.js';
12
+ import { createTokenCache } from './rpc.js';
13
+ import { extractAmountFromHuman, parseDecimal, withinRelativeTolerance } from '../amount-utils.js';
14
+ // ─── Registry loading ────────────────────────────────────────────────────────
15
+ function loadRegistry(override) {
16
+ return {
17
+ programs: { ...REGISTRY.programs, ...(override?.programs ?? {}) },
18
+ tokens: { ...REGISTRY.tokens, ...(override?.tokens ?? {}) },
19
+ };
20
+ }
21
+ // ─── Instruction decoding ─────────────────────────────────────────────────────
22
+ function decodeInstruction(programId, decoder, data, accounts, tokenCache) {
23
+ try {
24
+ switch (decoder) {
25
+ case 'system': {
26
+ const r = decodeSystem(data, accounts);
27
+ return r ? { type: r.type, params: r.params } : { type: null, params: {} };
28
+ }
29
+ case 'spl-token': {
30
+ const r = decodeSplToken(data, accounts, (m) => tokenCache.getSymbol(m));
31
+ return r ? { type: r.type, params: r.params } : { type: null, params: {} };
32
+ }
33
+ case 'ata': {
34
+ const r = decodeAta(data, accounts);
35
+ return { type: r.type, params: r.params };
36
+ }
37
+ case 'compute-budget': {
38
+ const r = decodeComputeBudget(data);
39
+ return { type: r.type, params: r.params };
40
+ }
41
+ case 'memo': {
42
+ const r = decodeMemo(data);
43
+ return { type: r.type, params: r.params };
44
+ }
45
+ case 'handshake': {
46
+ const r = decodeHandshake(data, accounts, (m) => tokenCache.getSymbol(m), (m) => tokenCache.getDecimals(m));
47
+ return r ? { type: r.type, params: r.params } : { type: null, params: {} };
48
+ }
49
+ case 'silkysig': {
50
+ const r = decodeSilkysig(data, accounts, (m) => tokenCache.getSymbol(m), (m) => tokenCache.getDecimals(m));
51
+ return r ? { type: r.type, params: r.params } : { type: null, params: {} };
52
+ }
53
+ case 'jupiter': {
54
+ const r = decodeJupiter(data, accounts);
55
+ return { type: r.type, params: r.params };
56
+ }
57
+ default:
58
+ return { type: null, params: {} };
59
+ }
60
+ }
61
+ catch {
62
+ return { type: null, params: { decodeError: 'failed to decode instruction data' } };
63
+ }
64
+ }
65
+ function deserializeTx(txBase64) {
66
+ const buf = Buffer.from(txBase64, 'base64');
67
+ // Try versioned first, fall back to legacy
68
+ let feePayer;
69
+ let rawInstructions;
70
+ try {
71
+ const vtx = VersionedTransaction.deserialize(buf);
72
+ const msg = vtx.message;
73
+ const accountKeys = msg.staticAccountKeys.map((k) => k.toBase58());
74
+ // For versioned transactions, append lookup table keys if resolved
75
+ feePayer = accountKeys[0] ?? '';
76
+ rawInstructions = msg.compiledInstructions.map((ix) => ({
77
+ programId: accountKeys[ix.programIdIndex] ?? '',
78
+ accounts: ix.accountKeyIndexes.map((i) => accountKeys[i] ?? ''),
79
+ data: Buffer.from(ix.data),
80
+ }));
81
+ }
82
+ catch {
83
+ const tx = Transaction.from(buf);
84
+ feePayer = tx.feePayer?.toBase58() ?? tx.signatures[0]?.publicKey?.toBase58() ?? '';
85
+ const msg = tx.compileMessage();
86
+ const accountKeys = msg.accountKeys.map((k) => k.toBase58());
87
+ rawInstructions = msg.instructions.map((ix) => ({
88
+ programId: accountKeys[ix.programIdIndex] ?? '',
89
+ accounts: ix.accounts.map((i) => accountKeys[i] ?? ''),
90
+ data: Buffer.from(ix.data, 'base64'),
91
+ }));
92
+ }
93
+ return { feePayer, instructions: rawInstructions };
94
+ }
95
+ // ─── Summary generation ───────────────────────────────────────────────────────
96
+ function buildSummary(feePayer, instructions, flags) {
97
+ const parts = [];
98
+ for (const ix of instructions) {
99
+ if (!ix.known) {
100
+ parts.push(`calls unknown program ${ix.programId}`);
101
+ continue;
102
+ }
103
+ const p = ix.params;
104
+ switch (ix.type) {
105
+ case 'create_transfer':
106
+ parts.push(`creates Handshake transfer of ${p['amountHuman']} from ${shorten(p['sender'])} to ${shorten(p['recipient'])}`);
107
+ break;
108
+ case 'claim_transfer':
109
+ parts.push(`claims Handshake transfer (PDA: ${shorten(p['transferPda'])})`);
110
+ break;
111
+ case 'cancel_transfer':
112
+ parts.push(`cancels Handshake transfer (PDA: ${shorten(p['transferPda'])})`);
113
+ break;
114
+ case 'transfer_from_account':
115
+ parts.push(`transfers ${p['amountHuman']} from Silkysig account to ${shorten(p['recipient'])}`);
116
+ break;
117
+ case 'deposit':
118
+ parts.push(`deposits ${p['amountHuman']} into Silkysig account`);
119
+ break;
120
+ case 'transfer':
121
+ if (ix.programId === '11111111111111111111111111111111') {
122
+ parts.push(`transfers ${p['sol']} SOL from ${shorten(p['from'])} to ${shorten(p['to'])}`);
123
+ }
124
+ else {
125
+ parts.push(`SPL token transfer of ${p['amount']} to ${shorten(p['destination'])}`);
126
+ }
127
+ break;
128
+ case 'transfer_checked':
129
+ parts.push(`SPL token transfer of ${p['amountHuman']} to ${shorten(p['destination'])}`);
130
+ break;
131
+ case 'create':
132
+ case 'create_idempotent':
133
+ parts.push(`creates associated token account for ${shorten(p['wallet'])}`);
134
+ break;
135
+ case 'create_account':
136
+ if (ix.programId === '11111111111111111111111111111111') {
137
+ parts.push(`creates account ${shorten(p['newAccount'])}`);
138
+ }
139
+ else {
140
+ parts.push(`creates Silkysig account for ${shorten(p['owner'])}`);
141
+ }
142
+ break;
143
+ case 'set_compute_unit_price':
144
+ parts.push(`sets priority fee (${p['microLamports']} microLamports/CU)`);
145
+ break;
146
+ case 'set_compute_unit_limit':
147
+ parts.push(`sets compute unit limit (${p['units']})`);
148
+ break;
149
+ case 'memo':
150
+ parts.push(`memo: "${p['text']}"`);
151
+ break;
152
+ default:
153
+ if (ix.programName) {
154
+ parts.push(`${ix.programName}: ${ix.type}`);
155
+ }
156
+ }
157
+ }
158
+ let summary = parts.length > 0
159
+ ? `Transaction ${parts.join('; ')}.`
160
+ : 'Transaction has no recognized instructions.';
161
+ const errors = flags.filter((f) => f.severity === 'error');
162
+ const warnings = flags.filter((f) => f.severity === 'warning');
163
+ if (errors.length > 0) {
164
+ summary += ` ERROR: ${errors.map((f) => f.message).join(' ')}`;
165
+ }
166
+ else if (warnings.length > 0) {
167
+ summary += ` WARNING: ${warnings.map((f) => f.message).join(' ')}`;
168
+ }
169
+ return summary;
170
+ }
171
+ function shorten(addr) {
172
+ if (!addr)
173
+ return '(unknown)';
174
+ return `${addr.slice(0, 4)}..${addr.slice(-4)}`;
175
+ }
176
+ // ─── analyzeTransaction ───────────────────────────────────────────────────────
177
+ export async function analyzeTransaction(txBase64, opts = {}) {
178
+ const registry = loadRegistry(opts.config);
179
+ const tokenCache = createTokenCache(registry.tokens, opts.connection);
180
+ const { feePayer, instructions: rawInstructions } = deserializeTx(txBase64);
181
+ // Collect all mints for RPC prefetch
182
+ const mints = rawInstructions.flatMap((ix) => {
183
+ const entry = registry.programs[ix.programId];
184
+ if (!entry)
185
+ return [];
186
+ // heuristic: mint is often 3rd account in token-program instructions
187
+ return ix.accounts.slice(0, 5);
188
+ });
189
+ await tokenCache.prefetch([...new Set(mints)].filter((a) => a.length === 44));
190
+ // Decode each instruction
191
+ const knownAddresses = new Set();
192
+ const instructions = rawInstructions.map((raw, i) => {
193
+ const entry = registry.programs[raw.programId];
194
+ const known = !!entry;
195
+ raw.accounts.forEach((a) => knownAddresses.add(a));
196
+ const { type, params } = known
197
+ ? decodeInstruction(raw.programId, entry.decoder, raw.data, raw.accounts, tokenCache)
198
+ : { type: null, params: {} };
199
+ return {
200
+ index: i,
201
+ programId: raw.programId,
202
+ programName: entry?.name ?? null,
203
+ type,
204
+ known,
205
+ params,
206
+ flags: [],
207
+ };
208
+ });
209
+ // Apply global flags
210
+ const globalFlags = applyGlobalFlags(instructions, feePayer, knownAddresses);
211
+ // Attach per-instruction flags
212
+ for (const flag of globalFlags) {
213
+ if (flag.instructionIndex !== undefined) {
214
+ instructions[flag.instructionIndex]?.flags.push(flag);
215
+ }
216
+ }
217
+ const summary = buildSummary(feePayer, instructions, globalFlags);
218
+ return { feePayer, instructions, flags: globalFlags, summary };
219
+ }
220
+ // ─── verifyIntent ─────────────────────────────────────────────────────────────
221
+ const AMOUNT_TOLERANCE = parseDecimal('0.0001'); // 0.01%
222
+ export async function verifyIntent(txBase64, intent, opts = {}) {
223
+ const analysis = await analyzeTransaction(txBase64, opts);
224
+ const discrepancies = [];
225
+ validateIntentShape(intent, discrepancies);
226
+ // Any error-severity flag is an automatic failure
227
+ const errorFlags = analysis.flags.filter((f) => f.severity === 'error');
228
+ if (errorFlags.length > 0) {
229
+ for (const f of errorFlags) {
230
+ discrepancies.push(f.message);
231
+ }
232
+ }
233
+ // Find the instruction matching the intent type
234
+ const targetType = intent.type;
235
+ const match = analysis.instructions.find((ix) => ix.type === targetType);
236
+ if (!match) {
237
+ discrepancies.push(`Expected a ${targetType} instruction but none was found in the transaction.`);
238
+ return { verified: false, discrepancies, analysis };
239
+ }
240
+ const p = match.params;
241
+ switch (intent.type) {
242
+ case 'create_transfer': {
243
+ if (p['sender'] && normalize(p['sender']) !== normalize(intent.sender)) {
244
+ discrepancies.push(`Sender mismatch: expected ${intent.sender}, got ${p['sender']}`);
245
+ }
246
+ if (p['recipient'] && normalize(p['recipient']) !== normalize(intent.recipient)) {
247
+ discrepancies.push(`Recipient mismatch: expected ${intent.recipient}, got ${p['recipient']}`);
248
+ }
249
+ const txAmount = rawAmount(p['amount'], p);
250
+ if (txAmount !== null && !amountsMatch(txAmount, intent.amount, p)) {
251
+ discrepancies.push(`Amount mismatch: expected ${intent.amount}, got ${humanAmount(p)}`);
252
+ }
253
+ compareTokenSelector(intent, p, discrepancies);
254
+ if (intent.memo && p['memo'] && p['memo'] !== intent.memo) {
255
+ discrepancies.push(`Memo mismatch: expected "${intent.memo}", got "${p['memo']}"`);
256
+ }
257
+ break;
258
+ }
259
+ case 'claim_transfer': {
260
+ if (p['claimer'] && normalize(p['claimer']) !== normalize(intent.claimer)) {
261
+ discrepancies.push(`Claimer mismatch: expected ${intent.claimer}, got ${p['claimer']}`);
262
+ }
263
+ if (p['transferPda'] && normalize(p['transferPda']) !== normalize(intent.transferPda)) {
264
+ discrepancies.push(`Transfer PDA mismatch: expected ${intent.transferPda}, got ${p['transferPda']}`);
265
+ }
266
+ break;
267
+ }
268
+ case 'cancel_transfer': {
269
+ if (p['sender'] && normalize(p['sender']) !== normalize(intent.canceller)) {
270
+ discrepancies.push(`Canceller mismatch: expected ${intent.canceller}, got ${p['sender']}`);
271
+ }
272
+ if (p['transferPda'] && normalize(p['transferPda']) !== normalize(intent.transferPda)) {
273
+ discrepancies.push(`Transfer PDA mismatch: expected ${intent.transferPda}, got ${p['transferPda']}`);
274
+ }
275
+ break;
276
+ }
277
+ case 'transfer_from_account': {
278
+ if (p['signer'] && normalize(p['signer']) !== normalize(intent.owner)) {
279
+ discrepancies.push(`Owner mismatch: expected ${intent.owner}, got ${p['signer']}`);
280
+ }
281
+ if (p['recipient'] && normalize(p['recipient']) !== normalize(intent.recipient)) {
282
+ discrepancies.push(`Recipient mismatch: expected ${intent.recipient}, got ${p['recipient']}`);
283
+ }
284
+ const txAmount = rawAmount(p['amount'], p);
285
+ if (txAmount !== null && !amountsMatch(txAmount, intent.amount, p)) {
286
+ discrepancies.push(`Amount mismatch: expected ${intent.amount}, got ${humanAmount(p)}`);
287
+ }
288
+ compareTokenSelector(intent, p, discrepancies);
289
+ break;
290
+ }
291
+ case 'deposit': {
292
+ if (p['depositor'] && normalize(p['depositor']) !== normalize(intent.owner)) {
293
+ discrepancies.push(`Owner mismatch: expected ${intent.owner}, got ${p['depositor']}`);
294
+ }
295
+ const txAmount = rawAmount(p['amount'], p);
296
+ if (txAmount !== null && !amountsMatch(txAmount, intent.amount, p)) {
297
+ discrepancies.push(`Amount mismatch: expected ${intent.amount}, got ${humanAmount(p)}`);
298
+ }
299
+ compareTokenSelector(intent, p, discrepancies);
300
+ break;
301
+ }
302
+ }
303
+ return {
304
+ verified: discrepancies.length === 0,
305
+ discrepancies,
306
+ analysis,
307
+ };
308
+ }
309
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
310
+ function normalize(addr) {
311
+ try {
312
+ return new PublicKey(addr).toBase58();
313
+ }
314
+ catch {
315
+ return addr;
316
+ }
317
+ }
318
+ function rawAmount(rawStr, params) {
319
+ if (!rawStr)
320
+ return null;
321
+ const human = params['amountHuman'];
322
+ return extractAmountFromHuman(human);
323
+ }
324
+ function humanAmount(params) {
325
+ return params['amountHuman'] ?? params['amount'] ?? 'unknown';
326
+ }
327
+ function amountsMatch(txAmount, intentAmount, _params) {
328
+ const parsedTxAmount = parseDecimal(txAmount);
329
+ const parsedIntentAmount = parseDecimal(intentAmount);
330
+ if (parsedTxAmount === null || parsedIntentAmount === null) {
331
+ return false;
332
+ }
333
+ return withinRelativeTolerance(parsedIntentAmount, parsedTxAmount, AMOUNT_TOLERANCE);
334
+ }
335
+ function parseAmountString(value) {
336
+ const parsed = parseDecimal(value);
337
+ return parsed ? value : null;
338
+ }
339
+ function validateIntentShape(intent, discrepancies) {
340
+ switch (intent.type) {
341
+ case 'create_transfer':
342
+ case 'transfer_from_account':
343
+ case 'deposit': {
344
+ const hasToken = typeof intent.token === 'string' && intent.token.length > 0;
345
+ const hasTokenAddress = typeof intent.tokenAddress === 'string' && intent.tokenAddress.length > 0;
346
+ if ((hasToken && hasTokenAddress) || (!hasToken && !hasTokenAddress)) {
347
+ discrepancies.push(`Intent ${intent.type} must provide exactly one of 'token' or 'tokenAddress'.`);
348
+ }
349
+ if (parseAmountString(intent.amount) === null) {
350
+ discrepancies.push(`Invalid amount for ${intent.type}: expected numeric string, got "${intent.amount}".`);
351
+ }
352
+ break;
353
+ }
354
+ default:
355
+ break;
356
+ }
357
+ }
358
+ function compareTokenSelector(intent, params, discrepancies) {
359
+ const mint = params['mint'];
360
+ if (!mint)
361
+ return;
362
+ if (intent.tokenAddress && normalize(mint) !== normalize(intent.tokenAddress)) {
363
+ discrepancies.push(`Token address mismatch: expected ${intent.tokenAddress}, got ${mint}`);
364
+ }
365
+ if (intent.token) {
366
+ const txSymbol = extractSymbolFromAmountHuman(params['amountHuman']);
367
+ if (txSymbol && txSymbol.toUpperCase() !== intent.token.toUpperCase()) {
368
+ discrepancies.push(`Token symbol mismatch: expected ${intent.token}, got ${txSymbol}`);
369
+ }
370
+ }
371
+ }
372
+ function extractSymbolFromAmountHuman(amountHuman) {
373
+ if (!amountHuman)
374
+ return null;
375
+ const parts = amountHuman.trim().split(/\s+/);
376
+ if (parts.length < 2)
377
+ return null;
378
+ return parts[1] ?? null;
379
+ }
380
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/verify/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export interface ProgramEntry {
2
+ name: string;
3
+ decoder: string;
4
+ }
5
+ export interface TokenEntry {
6
+ symbol: string;
7
+ decimals: number;
8
+ }
9
+ export interface Registry {
10
+ programs: Record<string, ProgramEntry>;
11
+ tokens: Record<string, TokenEntry>;
12
+ }
13
+ export declare const REGISTRY: Registry;
@@ -0,0 +1,21 @@
1
+ export const REGISTRY = {
2
+ programs: {
3
+ '11111111111111111111111111111111': { name: 'System Program', decoder: 'system' },
4
+ 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA': { name: 'SPL Token', decoder: 'spl-token' },
5
+ 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJe1bC5': { name: 'Associated Token Account', decoder: 'ata' },
6
+ 'ComputeBudget111111111111111111111111111111': { name: 'Compute Budget', decoder: 'compute-budget' },
7
+ 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr': { name: 'Memo', decoder: 'memo' },
8
+ 'HANDu9uNdnraNbcueGfXhd3UPu6BXfQroKAsSxFhPXEQ': { name: 'Handshake', decoder: 'handshake' },
9
+ 'SiLKos3MCFggwLsjSeuRiCdcs2MLoJNwq59XwTvEwcS': { name: 'Silkysig', decoder: 'silkysig' },
10
+ 'JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4': { name: 'Jupiter v6', decoder: 'jupiter' },
11
+ },
12
+ tokens: {
13
+ 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v': { symbol: 'USDC', decimals: 6 },
14
+ 'So11111111111111111111111111111111111111112': { symbol: 'SOL', decimals: 9 },
15
+ 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB': { symbol: 'USDT', decimals: 6 },
16
+ '7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs': { symbol: 'ETH (Wormhole)', decimals: 8 },
17
+ 'mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So': { symbol: 'mSOL', decimals: 9 },
18
+ 'J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn': { symbol: 'JitoSOL', decimals: 9 },
19
+ },
20
+ };
21
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/verify/registry.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,QAAQ,GAAa;IAChC,QAAQ,EAAE;QACR,kCAAkC,EAAiB,EAAE,IAAI,EAAE,gBAAgB,EAAY,OAAO,EAAE,QAAQ,EAAE;QAC1G,6CAA6C,EAAI,EAAE,IAAI,EAAE,WAAW,EAAiB,OAAO,EAAE,WAAW,EAAE;QAC3G,8CAA8C,EAAG,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,KAAK,EAAE;QACrG,6CAA6C,EAAM,EAAE,IAAI,EAAE,gBAAgB,EAAa,OAAO,EAAE,gBAAgB,EAAE;QACnH,6CAA6C,EAAG,EAAE,IAAI,EAAE,MAAM,EAAsB,OAAO,EAAE,MAAM,EAAE;QACrG,8CAA8C,EAAE,EAAE,IAAI,EAAE,WAAW,EAAiB,OAAO,EAAE,WAAW,EAAE;QAC1G,6CAA6C,EAAI,EAAE,IAAI,EAAE,UAAU,EAAkB,OAAO,EAAE,UAAU,EAAE;QAC1G,6CAA6C,EAAG,EAAE,IAAI,EAAE,YAAY,EAAgB,OAAO,EAAE,SAAS,EAAE;KACzG;IACD,MAAM,EAAE;QACN,8CAA8C,EAAE,EAAE,MAAM,EAAE,MAAM,EAAc,QAAQ,EAAE,CAAC,EAAE;QAC3F,6CAA6C,EAAK,EAAE,MAAM,EAAE,KAAK,EAAe,QAAQ,EAAE,CAAC,EAAE;QAC7F,8CAA8C,EAAE,EAAE,MAAM,EAAE,MAAM,EAAc,QAAQ,EAAE,CAAC,EAAE;QAC3F,8CAA8C,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAI,QAAQ,EAAE,CAAC,EAAE;QAC3F,6CAA6C,EAAG,EAAE,MAAM,EAAE,MAAM,EAAc,QAAQ,EAAE,CAAC,EAAE;QAC3F,8CAA8C,EAAE,EAAE,MAAM,EAAE,SAAS,EAAW,QAAQ,EAAE,CAAC,EAAE;KAC5F;CACF,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { Connection } from '@solana/web3.js';
2
+ export interface TokenMeta {
3
+ symbol: string;
4
+ decimals: number;
5
+ }
6
+ export declare function fetchTokenMeta(connection: Connection, mint: string): Promise<TokenMeta | null>;
7
+ export declare function createTokenCache(registry: Record<string, {
8
+ symbol: string;
9
+ decimals: number;
10
+ }>, connection?: Connection): {
11
+ getSymbol(mint: string): string;
12
+ getDecimals(mint: string): number;
13
+ prefetch(mints: string[]): Promise<void>;
14
+ };
@@ -0,0 +1,48 @@
1
+ import { PublicKey } from '@solana/web3.js';
2
+ // Fetches basic token metadata from a mint account.
3
+ // Returns symbol as the mint address (truncated) when metadata program is unavailable.
4
+ export async function fetchTokenMeta(connection, mint) {
5
+ try {
6
+ const mintPubkey = new PublicKey(mint);
7
+ const accountInfo = await connection.getAccountInfo(mintPubkey);
8
+ if (!accountInfo)
9
+ return null;
10
+ // SPL Mint layout: [44 bytes header] where decimals is at byte 44
11
+ // Layout: mintAuthorityOption(4) + mintAuthority(32) + supply(8) + decimals(1) + ...
12
+ if (accountInfo.data.length < 45)
13
+ return null;
14
+ const decimals = accountInfo.data[44];
15
+ // Use shortened mint as symbol fallback — agents can understand this
16
+ const shortMint = `${mint.slice(0, 4)}..${mint.slice(-4)}`;
17
+ return { symbol: shortMint, decimals };
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
23
+ // Cache to avoid redundant RPC calls within a single analyzeTransaction call
24
+ export function createTokenCache(registry, connection) {
25
+ const cache = new Map();
26
+ // Pre-populate from registry
27
+ for (const [mint, meta] of Object.entries(registry)) {
28
+ cache.set(mint, meta);
29
+ }
30
+ return {
31
+ getSymbol(mint) {
32
+ return cache.get(mint)?.symbol ?? `${mint.slice(0, 4)}..${mint.slice(-4)}`;
33
+ },
34
+ getDecimals(mint) {
35
+ return cache.get(mint)?.decimals ?? 6;
36
+ },
37
+ async prefetch(mints) {
38
+ if (!connection)
39
+ return;
40
+ const unknown = mints.filter((m) => !cache.has(m));
41
+ await Promise.all(unknown.map(async (mint) => {
42
+ const meta = await fetchTokenMeta(connection, mint);
43
+ cache.set(mint, meta);
44
+ }));
45
+ },
46
+ };
47
+ }
48
+ //# sourceMappingURL=rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../src/verify/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAOxD,oDAAoD;AACpD,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAsB,EACtB,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAChE,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAE9B,kEAAkE;QAClE,qFAAqF;QACrF,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;QAC9C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEtC,qEAAqE;QACrE,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3D,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,gBAAgB,CAC9B,QAA8D,EAC9D,UAAuB;IAEvB,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAElD,6BAA6B;IAC7B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;IAED,OAAO;QACL,SAAS,CAAC,IAAY;YACpB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,CAAC;QACD,WAAW,CAAC,IAAY;YACtB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,IAAI,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,KAAe;YAC5B,IAAI,CAAC,UAAU;gBAAE,OAAO;YACxB,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACzB,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBACpD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACxB,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,85 @@
1
+ {
2
+ "name": "@rebelfi/agent-sdk",
3
+ "version": "1.0.1",
4
+ "description": "AI agent banking on Solana. Policy-controlled accounts, escrow payments, transaction verification, and conditional flows for Claude, GPT, and autonomous agents.",
5
+ "keywords": [
6
+ "solana",
7
+ "ai",
8
+ "agent",
9
+ "payments",
10
+ "llm",
11
+ "claude",
12
+ "gpt",
13
+ "mcp",
14
+ "banking",
15
+ "escrow",
16
+ "spending-limits",
17
+ "web3",
18
+ "usdc",
19
+ "defi",
20
+ "autonomous-agent",
21
+ "langchain",
22
+ "crewai",
23
+ "transaction-verification",
24
+ "guardrails",
25
+ "ai-agent",
26
+ "cryptocurrency",
27
+ "stablecoin"
28
+ ],
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "https://github.com/silkysquad/silk.git"
32
+ },
33
+ "bugs": {
34
+ "url": "https://github.com/silkysquad/silk/issues"
35
+ },
36
+ "homepage": "https://docs.silkyway.ai",
37
+ "type": "module",
38
+ "main": "dist/cjs/index.js",
39
+ "types": "dist/index.d.ts",
40
+ "exports": {
41
+ ".": {
42
+ "import": "./dist/index.js",
43
+ "require": "./dist/cjs/index.js",
44
+ "types": "./dist/index.d.ts"
45
+ },
46
+ "./client": {
47
+ "import": "./dist/client.js",
48
+ "types": "./dist/client.d.ts"
49
+ },
50
+ "./transfers": {
51
+ "import": "./dist/transfers.js",
52
+ "types": "./dist/transfers.d.ts"
53
+ }
54
+ },
55
+ "bin": {
56
+ "rebel": "dist/cli.js"
57
+ },
58
+ "files": [
59
+ "dist"
60
+ ],
61
+ "scripts": {
62
+ "build": "tsc && tsc -p tsconfig.cjs.json && node -e \"require('fs').writeFileSync('dist/cjs/package.json', '{\\\"type\\\":\\\"commonjs\\\"}')\"",
63
+ "dev": "tsc --watch",
64
+ "clean": "rm -rf dist",
65
+ "test": "vitest run",
66
+ "test:watch": "vitest"
67
+ },
68
+ "dependencies": {
69
+ "@noble/curves": "^2.0.1",
70
+ "@solana/web3.js": "^1.98.4",
71
+ "axios": "^1.11.0",
72
+ "bs58": "^6.0.0",
73
+ "commander": "^12.1.0"
74
+ },
75
+ "devDependencies": {
76
+ "@types/node": "^22.10.7",
77
+ "typescript": "^5.7.3",
78
+ "vitest": "^4.0.18"
79
+ },
80
+ "publishConfig": {
81
+ "access": "public"
82
+ },
83
+ "private": false,
84
+ "license": "MIT"
85
+ }