@oobe-protocol-labs/synapse-sap-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 (315) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +882 -0
  3. package/dist/cjs/constants/index.js +43 -0
  4. package/dist/cjs/constants/index.js.map +1 -0
  5. package/dist/cjs/constants/limits.js +161 -0
  6. package/dist/cjs/constants/limits.js.map +1 -0
  7. package/dist/cjs/constants/programs.js +78 -0
  8. package/dist/cjs/constants/programs.js.map +1 -0
  9. package/dist/cjs/constants/seeds.js +57 -0
  10. package/dist/cjs/constants/seeds.js.map +1 -0
  11. package/dist/cjs/core/client.js +391 -0
  12. package/dist/cjs/core/client.js.map +1 -0
  13. package/dist/cjs/core/connection.js +319 -0
  14. package/dist/cjs/core/connection.js.map +1 -0
  15. package/dist/cjs/core/index.js +24 -0
  16. package/dist/cjs/core/index.js.map +1 -0
  17. package/dist/cjs/errors/index.js +334 -0
  18. package/dist/cjs/errors/index.js.map +1 -0
  19. package/dist/cjs/events/index.js +136 -0
  20. package/dist/cjs/events/index.js.map +1 -0
  21. package/dist/cjs/idl/index.js +63 -0
  22. package/dist/cjs/idl/index.js.map +1 -0
  23. package/dist/cjs/idl/synapse_agent_sap.json +9710 -0
  24. package/dist/cjs/index.js +147 -0
  25. package/dist/cjs/index.js.map +1 -0
  26. package/dist/cjs/modules/agent.js +272 -0
  27. package/dist/cjs/modules/agent.js.map +1 -0
  28. package/dist/cjs/modules/attestation.js +147 -0
  29. package/dist/cjs/modules/attestation.js.map +1 -0
  30. package/dist/cjs/modules/base.js +128 -0
  31. package/dist/cjs/modules/base.js.map +1 -0
  32. package/dist/cjs/modules/escrow.js +246 -0
  33. package/dist/cjs/modules/escrow.js.map +1 -0
  34. package/dist/cjs/modules/feedback.js +166 -0
  35. package/dist/cjs/modules/feedback.js.map +1 -0
  36. package/dist/cjs/modules/index.js +35 -0
  37. package/dist/cjs/modules/index.js.map +1 -0
  38. package/dist/cjs/modules/indexing.js +375 -0
  39. package/dist/cjs/modules/indexing.js.map +1 -0
  40. package/dist/cjs/modules/ledger.js +234 -0
  41. package/dist/cjs/modules/ledger.js.map +1 -0
  42. package/dist/cjs/modules/tools.js +319 -0
  43. package/dist/cjs/modules/tools.js.map +1 -0
  44. package/dist/cjs/modules/vault.js +410 -0
  45. package/dist/cjs/modules/vault.js.map +1 -0
  46. package/dist/cjs/pda/index.js +377 -0
  47. package/dist/cjs/pda/index.js.map +1 -0
  48. package/dist/cjs/plugin/index.js +934 -0
  49. package/dist/cjs/plugin/index.js.map +1 -0
  50. package/dist/cjs/plugin/protocols.js +282 -0
  51. package/dist/cjs/plugin/protocols.js.map +1 -0
  52. package/dist/cjs/plugin/schemas.js +831 -0
  53. package/dist/cjs/plugin/schemas.js.map +1 -0
  54. package/dist/cjs/postgres/adapter.js +715 -0
  55. package/dist/cjs/postgres/adapter.js.map +1 -0
  56. package/dist/cjs/postgres/index.js +50 -0
  57. package/dist/cjs/postgres/index.js.map +1 -0
  58. package/dist/cjs/postgres/serializers.js +381 -0
  59. package/dist/cjs/postgres/serializers.js.map +1 -0
  60. package/dist/cjs/postgres/sync.js +221 -0
  61. package/dist/cjs/postgres/sync.js.map +1 -0
  62. package/dist/cjs/postgres/types.js +44 -0
  63. package/dist/cjs/postgres/types.js.map +1 -0
  64. package/dist/cjs/registries/builder.js +414 -0
  65. package/dist/cjs/registries/builder.js.map +1 -0
  66. package/dist/cjs/registries/discovery.js +362 -0
  67. package/dist/cjs/registries/discovery.js.map +1 -0
  68. package/dist/cjs/registries/index.js +51 -0
  69. package/dist/cjs/registries/index.js.map +1 -0
  70. package/dist/cjs/registries/session.js +433 -0
  71. package/dist/cjs/registries/session.js.map +1 -0
  72. package/dist/cjs/registries/x402.js +577 -0
  73. package/dist/cjs/registries/x402.js.map +1 -0
  74. package/dist/cjs/types/accounts.js +13 -0
  75. package/dist/cjs/types/accounts.js.map +1 -0
  76. package/dist/cjs/types/common.js +13 -0
  77. package/dist/cjs/types/common.js.map +1 -0
  78. package/dist/cjs/types/enums.js +174 -0
  79. package/dist/cjs/types/enums.js.map +1 -0
  80. package/dist/cjs/types/index.js +36 -0
  81. package/dist/cjs/types/index.js.map +1 -0
  82. package/dist/cjs/types/instructions.js +92 -0
  83. package/dist/cjs/types/instructions.js.map +1 -0
  84. package/dist/cjs/utils/hash.js +58 -0
  85. package/dist/cjs/utils/hash.js.map +1 -0
  86. package/dist/cjs/utils/index.js +27 -0
  87. package/dist/cjs/utils/index.js.map +1 -0
  88. package/dist/cjs/utils/serialization.js +105 -0
  89. package/dist/cjs/utils/serialization.js.map +1 -0
  90. package/dist/cjs/utils/validation.js +36 -0
  91. package/dist/cjs/utils/validation.js.map +1 -0
  92. package/dist/esm/constants/index.js +29 -0
  93. package/dist/esm/constants/index.js.map +1 -0
  94. package/dist/esm/constants/limits.js +158 -0
  95. package/dist/esm/constants/limits.js.map +1 -0
  96. package/dist/esm/constants/programs.js +75 -0
  97. package/dist/esm/constants/programs.js.map +1 -0
  98. package/dist/esm/constants/seeds.js +54 -0
  99. package/dist/esm/constants/seeds.js.map +1 -0
  100. package/dist/esm/core/client.js +384 -0
  101. package/dist/esm/core/client.js.map +1 -0
  102. package/dist/esm/core/connection.js +315 -0
  103. package/dist/esm/core/connection.js.map +1 -0
  104. package/dist/esm/core/index.js +19 -0
  105. package/dist/esm/core/index.js.map +1 -0
  106. package/dist/esm/errors/index.js +325 -0
  107. package/dist/esm/errors/index.js.map +1 -0
  108. package/dist/esm/events/index.js +132 -0
  109. package/dist/esm/events/index.js.map +1 -0
  110. package/dist/esm/idl/index.js +57 -0
  111. package/dist/esm/idl/index.js.map +1 -0
  112. package/dist/esm/idl/synapse_agent_sap.json +9710 -0
  113. package/dist/esm/index.js +70 -0
  114. package/dist/esm/index.js.map +1 -0
  115. package/dist/esm/modules/agent.js +268 -0
  116. package/dist/esm/modules/agent.js.map +1 -0
  117. package/dist/esm/modules/attestation.js +143 -0
  118. package/dist/esm/modules/attestation.js.map +1 -0
  119. package/dist/esm/modules/base.js +124 -0
  120. package/dist/esm/modules/base.js.map +1 -0
  121. package/dist/esm/modules/escrow.js +242 -0
  122. package/dist/esm/modules/escrow.js.map +1 -0
  123. package/dist/esm/modules/feedback.js +162 -0
  124. package/dist/esm/modules/feedback.js.map +1 -0
  125. package/dist/esm/modules/index.js +23 -0
  126. package/dist/esm/modules/index.js.map +1 -0
  127. package/dist/esm/modules/indexing.js +371 -0
  128. package/dist/esm/modules/indexing.js.map +1 -0
  129. package/dist/esm/modules/ledger.js +230 -0
  130. package/dist/esm/modules/ledger.js.map +1 -0
  131. package/dist/esm/modules/tools.js +315 -0
  132. package/dist/esm/modules/tools.js.map +1 -0
  133. package/dist/esm/modules/vault.js +406 -0
  134. package/dist/esm/modules/vault.js.map +1 -0
  135. package/dist/esm/pda/index.js +357 -0
  136. package/dist/esm/pda/index.js.map +1 -0
  137. package/dist/esm/plugin/index.js +927 -0
  138. package/dist/esm/plugin/index.js.map +1 -0
  139. package/dist/esm/plugin/protocols.js +279 -0
  140. package/dist/esm/plugin/protocols.js.map +1 -0
  141. package/dist/esm/plugin/schemas.js +828 -0
  142. package/dist/esm/plugin/schemas.js.map +1 -0
  143. package/dist/esm/postgres/adapter.js +678 -0
  144. package/dist/esm/postgres/adapter.js.map +1 -0
  145. package/dist/esm/postgres/index.js +27 -0
  146. package/dist/esm/postgres/index.js.map +1 -0
  147. package/dist/esm/postgres/serializers.js +362 -0
  148. package/dist/esm/postgres/serializers.js.map +1 -0
  149. package/dist/esm/postgres/sync.js +217 -0
  150. package/dist/esm/postgres/sync.js.map +1 -0
  151. package/dist/esm/postgres/types.js +41 -0
  152. package/dist/esm/postgres/types.js.map +1 -0
  153. package/dist/esm/registries/builder.js +410 -0
  154. package/dist/esm/registries/builder.js.map +1 -0
  155. package/dist/esm/registries/discovery.js +358 -0
  156. package/dist/esm/registries/discovery.js.map +1 -0
  157. package/dist/esm/registries/index.js +44 -0
  158. package/dist/esm/registries/index.js.map +1 -0
  159. package/dist/esm/registries/session.js +429 -0
  160. package/dist/esm/registries/session.js.map +1 -0
  161. package/dist/esm/registries/x402.js +573 -0
  162. package/dist/esm/registries/x402.js.map +1 -0
  163. package/dist/esm/types/accounts.js +12 -0
  164. package/dist/esm/types/accounts.js.map +1 -0
  165. package/dist/esm/types/common.js +12 -0
  166. package/dist/esm/types/common.js.map +1 -0
  167. package/dist/esm/types/enums.js +171 -0
  168. package/dist/esm/types/enums.js.map +1 -0
  169. package/dist/esm/types/index.js +25 -0
  170. package/dist/esm/types/index.js.map +1 -0
  171. package/dist/esm/types/instructions.js +89 -0
  172. package/dist/esm/types/instructions.js.map +1 -0
  173. package/dist/esm/utils/hash.js +53 -0
  174. package/dist/esm/utils/hash.js.map +1 -0
  175. package/dist/esm/utils/index.js +19 -0
  176. package/dist/esm/utils/index.js.map +1 -0
  177. package/dist/esm/utils/serialization.js +98 -0
  178. package/dist/esm/utils/serialization.js.map +1 -0
  179. package/dist/esm/utils/validation.js +33 -0
  180. package/dist/esm/utils/validation.js.map +1 -0
  181. package/dist/types/constants/index.d.ts +27 -0
  182. package/dist/types/constants/index.d.ts.map +1 -0
  183. package/dist/types/constants/limits.d.ts +149 -0
  184. package/dist/types/constants/limits.d.ts.map +1 -0
  185. package/dist/types/constants/programs.d.ts +69 -0
  186. package/dist/types/constants/programs.d.ts.map +1 -0
  187. package/dist/types/constants/seeds.d.ts +61 -0
  188. package/dist/types/constants/seeds.d.ts.map +1 -0
  189. package/dist/types/core/client.d.ts +323 -0
  190. package/dist/types/core/client.d.ts.map +1 -0
  191. package/dist/types/core/connection.d.ts +279 -0
  192. package/dist/types/core/connection.d.ts.map +1 -0
  193. package/dist/types/core/index.d.ts +20 -0
  194. package/dist/types/core/index.d.ts.map +1 -0
  195. package/dist/types/errors/index.d.ts +276 -0
  196. package/dist/types/errors/index.d.ts.map +1 -0
  197. package/dist/types/events/index.d.ts +248 -0
  198. package/dist/types/events/index.d.ts.map +1 -0
  199. package/dist/types/idl/index.d.ts +70 -0
  200. package/dist/types/idl/index.d.ts.map +1 -0
  201. package/dist/types/index.d.ts +68 -0
  202. package/dist/types/index.d.ts.map +1 -0
  203. package/dist/types/modules/agent.d.ts +166 -0
  204. package/dist/types/modules/agent.d.ts.map +1 -0
  205. package/dist/types/modules/attestation.d.ts +96 -0
  206. package/dist/types/modules/attestation.d.ts.map +1 -0
  207. package/dist/types/modules/base.d.ts +126 -0
  208. package/dist/types/modules/base.d.ts.map +1 -0
  209. package/dist/types/modules/escrow.d.ts +151 -0
  210. package/dist/types/modules/escrow.d.ts.map +1 -0
  211. package/dist/types/modules/feedback.d.ts +105 -0
  212. package/dist/types/modules/feedback.d.ts.map +1 -0
  213. package/dist/types/modules/index.d.ts +24 -0
  214. package/dist/types/modules/index.d.ts.map +1 -0
  215. package/dist/types/modules/indexing.d.ts +200 -0
  216. package/dist/types/modules/indexing.d.ts.map +1 -0
  217. package/dist/types/modules/ledger.d.ts +150 -0
  218. package/dist/types/modules/ledger.d.ts.map +1 -0
  219. package/dist/types/modules/tools.d.ts +182 -0
  220. package/dist/types/modules/tools.d.ts.map +1 -0
  221. package/dist/types/modules/vault.d.ts +240 -0
  222. package/dist/types/modules/vault.d.ts.map +1 -0
  223. package/dist/types/pda/index.d.ts +296 -0
  224. package/dist/types/pda/index.d.ts.map +1 -0
  225. package/dist/types/plugin/index.d.ts +171 -0
  226. package/dist/types/plugin/index.d.ts.map +1 -0
  227. package/dist/types/plugin/protocols.d.ts +152 -0
  228. package/dist/types/plugin/protocols.d.ts.map +1 -0
  229. package/dist/types/plugin/schemas.d.ts +823 -0
  230. package/dist/types/plugin/schemas.d.ts.map +1 -0
  231. package/dist/types/postgres/adapter.d.ts +355 -0
  232. package/dist/types/postgres/adapter.d.ts.map +1 -0
  233. package/dist/types/postgres/index.d.ts +24 -0
  234. package/dist/types/postgres/index.d.ts.map +1 -0
  235. package/dist/types/postgres/serializers.d.ts +30 -0
  236. package/dist/types/postgres/serializers.d.ts.map +1 -0
  237. package/dist/types/postgres/sync.d.ts +132 -0
  238. package/dist/types/postgres/sync.d.ts.map +1 -0
  239. package/dist/types/postgres/types.d.ts +167 -0
  240. package/dist/types/postgres/types.d.ts.map +1 -0
  241. package/dist/types/registries/builder.d.ts +340 -0
  242. package/dist/types/registries/builder.d.ts.map +1 -0
  243. package/dist/types/registries/discovery.d.ts +333 -0
  244. package/dist/types/registries/discovery.d.ts.map +1 -0
  245. package/dist/types/registries/index.d.ts +48 -0
  246. package/dist/types/registries/index.d.ts.map +1 -0
  247. package/dist/types/registries/session.d.ts +323 -0
  248. package/dist/types/registries/session.d.ts.map +1 -0
  249. package/dist/types/registries/x402.d.ts +463 -0
  250. package/dist/types/registries/x402.d.ts.map +1 -0
  251. package/dist/types/types/accounts.d.ts +565 -0
  252. package/dist/types/types/accounts.d.ts.map +1 -0
  253. package/dist/types/types/common.d.ts +166 -0
  254. package/dist/types/types/common.d.ts.map +1 -0
  255. package/dist/types/types/enums.d.ts +238 -0
  256. package/dist/types/types/enums.d.ts.map +1 -0
  257. package/dist/types/types/index.d.ts +28 -0
  258. package/dist/types/types/index.d.ts.map +1 -0
  259. package/dist/types/types/instructions.d.ts +366 -0
  260. package/dist/types/types/instructions.d.ts.map +1 -0
  261. package/dist/types/utils/hash.d.ts +48 -0
  262. package/dist/types/utils/hash.d.ts.map +1 -0
  263. package/dist/types/utils/index.d.ts +19 -0
  264. package/dist/types/utils/index.d.ts.map +1 -0
  265. package/dist/types/utils/serialization.d.ts +69 -0
  266. package/dist/types/utils/serialization.d.ts.map +1 -0
  267. package/dist/types/utils/validation.d.ts +29 -0
  268. package/dist/types/utils/validation.d.ts.map +1 -0
  269. package/package.json +178 -0
  270. package/src/constants/index.ts +44 -0
  271. package/src/constants/limits.ts +165 -0
  272. package/src/constants/programs.ts +83 -0
  273. package/src/constants/seeds.ts +66 -0
  274. package/src/core/client.ts +416 -0
  275. package/src/core/connection.ts +409 -0
  276. package/src/core/index.ts +20 -0
  277. package/src/errors/index.ts +346 -0
  278. package/src/events/index.ts +335 -0
  279. package/src/idl/index.ts +76 -0
  280. package/src/idl/synapse_agent_sap.json +9710 -0
  281. package/src/index.ts +253 -0
  282. package/src/modules/agent.ts +319 -0
  283. package/src/modules/attestation.ts +168 -0
  284. package/src/modules/base.ts +158 -0
  285. package/src/modules/escrow.ts +308 -0
  286. package/src/modules/feedback.ts +186 -0
  287. package/src/modules/index.ts +24 -0
  288. package/src/modules/indexing.ts +444 -0
  289. package/src/modules/ledger.ts +262 -0
  290. package/src/modules/tools.ts +411 -0
  291. package/src/modules/vault.ts +533 -0
  292. package/src/pda/index.ts +512 -0
  293. package/src/plugin/index.ts +1202 -0
  294. package/src/plugin/protocols.ts +404 -0
  295. package/src/plugin/schemas.ts +909 -0
  296. package/src/postgres/adapter.ts +904 -0
  297. package/src/postgres/index.ts +59 -0
  298. package/src/postgres/schema.sql +683 -0
  299. package/src/postgres/serializers.ts +485 -0
  300. package/src/postgres/sync.ts +254 -0
  301. package/src/postgres/types.ts +245 -0
  302. package/src/registries/builder.ts +607 -0
  303. package/src/registries/discovery.ts +572 -0
  304. package/src/registries/index.ts +77 -0
  305. package/src/registries/session.ts +613 -0
  306. package/src/registries/x402.ts +906 -0
  307. package/src/types/accounts.ts +618 -0
  308. package/src/types/common.ts +187 -0
  309. package/src/types/enums.ts +214 -0
  310. package/src/types/index.ts +92 -0
  311. package/src/types/instructions.ts +413 -0
  312. package/src/utils/hash.ts +57 -0
  313. package/src/utils/index.ts +19 -0
  314. package/src/utils/serialization.ts +98 -0
  315. package/src/utils/validation.ts +36 -0
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @synapse-sap/sdk — TypeScript SDK for SAP v2 (Solana Agent Protocol)
3
+ *
4
+ * Modular architecture:
5
+ *
6
+ * | Path | Description |
7
+ * |-------------------|-----------------------------------------------|
8
+ * | `core/` | SapClient, SapConnection (RPC factory) |
9
+ * | `types/` | On-chain enums, account data, instruction DTOs|
10
+ * | `constants/` | Program IDs, PDA seeds, size limits |
11
+ * | `pda/` | Deterministic PDA derivation helpers |
12
+ * | `events/` | Transaction-log event parser |
13
+ * | `errors/` | Typed SDK error classes |
14
+ * | `utils/` | Hashing, validation, serialization |
15
+ * | `modules/` | Low-level per-domain instruction wrappers |
16
+ * | `registries/` | High-level abstractions (discovery, x402, …) |
17
+ * | `plugin/` | SynapseAgentKit adapter (52 tools) |
18
+ * | `idl/` | Embedded Anchor IDL |
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * import { SapClient, SapConnection } from "@synapse-sap/sdk";
23
+ *
24
+ * // Quick start — from Anchor provider
25
+ * const client = SapClient.from(provider);
26
+ *
27
+ * // Or from RPC URL (synapse-client-sdk compatible)
28
+ * const conn = SapConnection.devnet();
29
+ * const client2 = conn.fromKeypair(keypair);
30
+ *
31
+ * // Use domain modules:
32
+ * await client.agent.register({ ... });
33
+ * await client.escrow.create(agentWallet, { ... });
34
+ * await client.ledger.write(sessionPda, data, contentHash);
35
+ *
36
+ * // Use registries (high-level):
37
+ * const agents = await client.discovery.findAgentsByProtocol("jupiter");
38
+ * const ctx = await client.session.start("conv-123");
39
+ * ```
40
+ *
41
+ * @packageDocumentation
42
+ * @category SDK
43
+ * @since v0.1.0
44
+ */
45
+ // ── Core ─────────────────────────────────────────────
46
+ export { SapClient, SapConnection } from "./core";
47
+ export { TokenType, PluginType, SettlementMode, ToolHttpMethod, ToolCategory, DelegatePermission, SchemaType, CompressionType, } from "./types";
48
+ // ── Constants ────────────────────────────────────────
49
+ export { SAP_PROGRAM_ADDRESS, SAP_PROGRAM_ID, MAINNET_SAP_PROGRAM_ID, DEVNET_SAP_PROGRAM_ID, LOCALNET_SAP_PROGRAM_ID, SEEDS, LIMITS, AGENT_VERSION, VAULT_PROTOCOL_VERSION, TOOL_CATEGORY_VALUES, HTTP_METHOD_VALUES, } from "./constants";
50
+ // ── IDL ──────────────────────────────────────────────
51
+ export { SAP_IDL, IDL_PROGRAM_ADDRESS, IDL_METADATA } from "./idl/index";
52
+ // ── PDA Derivation ───────────────────────────────────
53
+ export { deriveGlobalRegistry, deriveAgent, deriveAgentStats, deriveFeedback, deriveCapabilityIndex, deriveProtocolIndex, deriveToolCategoryIndex, deriveVault, deriveSession, deriveEpochPage, deriveVaultDelegate, deriveCheckpoint, deriveTool, deriveEscrow, deriveAttestation, deriveLedger, deriveLedgerPage, } from "./pda";
54
+ // ── Utilities ────────────────────────────────────────
55
+ export { sha256, hashToArray, assert } from "./utils";
56
+ export { serializeAccount, serializeValue } from "./utils";
57
+ // ── Errors ───────────────────────────────────────────
58
+ export { SapError, SapValidationError, SapRpcError, SapAccountNotFoundError, SapTimeoutError, SapPermissionError, } from "./errors";
59
+ // ── Events ───────────────────────────────────────────
60
+ export { EventParser, SAP_EVENT_NAMES } from "./events";
61
+ // ── Modules (for advanced usage / tree-shaking) ──────
62
+ export { AgentModule, FeedbackModule, IndexingModule, ToolsModule, VaultModule, EscrowModule, AttestationModule, LedgerModule, BaseModule, } from "./modules/index";
63
+ // ── Plugin (SynapseAgentKit integration) ─────────────
64
+ export { createSAPPlugin, SAPPlugin } from "./plugin/index";
65
+ export { SAP_PROTOCOLS } from "./plugin/protocols";
66
+ // ── PostgreSQL Adapter (off-chain mirror) ────────────────
67
+ export { SapPostgres, SapSyncEngine, SAP_TABLE_MAP } from "./postgres";
68
+ // ── Registries (high-level developer abstractions) ────
69
+ export { DiscoveryRegistry, X402Registry, SessionManager, AgentBuilder, } from "./registries/index";
70
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,wDAAwD;AACxD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAoDlD,OAAO,EACL,SAAS,EACT,UAAU,EACV,cAAc,EACd,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,eAAe,GAChB,MAAM,SAAS,CAAC;AAEjB,wDAAwD;AACxD,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,EACL,MAAM,EACN,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,wDAAwD;AACxD,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGzE,wDAAwD;AACxD,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,WAAW,EACX,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GACjB,MAAM,OAAO,CAAC;AAEf,wDAAwD;AACxD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE3D,wDAAwD;AACxD,OAAO,EACL,QAAQ,EACR,kBAAkB,EAClB,WAAW,EACX,uBAAuB,EACvB,eAAe,EACf,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAElB,wDAAwD;AACxD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAaxD,wDAAwD;AACxD,OAAO,EACL,WAAW,EACX,cAAc,EACd,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,UAAU,GACX,MAAM,iBAAiB,CAAC;AAGzB,wDAAwD;AACxD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAY5D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,4DAA4D;AAC5D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAevE,yDAAyD;AACzD,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,YAAY,GACb,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,268 @@
1
+ /**
2
+ * @module agent
3
+ * @description Agent lifecycle operations for the Solana Agent Protocol.
4
+ *
5
+ * Covers: register, update, deactivate, reactivate, close,
6
+ * report calls, update reputation metrics, and account fetching.
7
+ *
8
+ * @category Modules
9
+ * @since v0.1.0
10
+ * @packageDocumentation
11
+ */
12
+ import { SystemProgram } from "@solana/web3.js";
13
+ import { BaseModule } from "./base";
14
+ import { deriveAgent, deriveAgentStats, deriveGlobalRegistry } from "../pda";
15
+ /**
16
+ * @name AgentModule
17
+ * @description Manages the full agent lifecycle on the Solana Agent Protocol.
18
+ * Provides methods to register, update, deactivate, reactivate, and close
19
+ * agent identities, as well as self-report call metrics and reputation data.
20
+ *
21
+ * @category Modules
22
+ * @since v0.1.0
23
+ * @extends BaseModule
24
+ *
25
+ * @example
26
+ * ```ts
27
+ * const sap = new SapClient(provider);
28
+ * // Register a new agent
29
+ * const sig = await sap.agent.register({
30
+ * name: "my-agent",
31
+ * description: "An example agent",
32
+ * capabilities: [0, 1],
33
+ * pricing: { free: {} },
34
+ * protocols: [0],
35
+ * });
36
+ * // Fetch agent data
37
+ * const data = await sap.agent.fetch();
38
+ * ```
39
+ */
40
+ export class AgentModule extends BaseModule {
41
+ // ── PDA helpers ──────────────────────────────────────
42
+ /**
43
+ * @name deriveAgent
44
+ * @description Derive the `AgentAccount` PDA for a wallet.
45
+ * @param wallet - The wallet public key. Defaults to the connected wallet.
46
+ * @returns A tuple of `[PublicKey, bump]` for the agent PDA.
47
+ * @see {@link deriveAgent} from `pda/` module for the underlying derivation.
48
+ * @since v0.1.0
49
+ */
50
+ deriveAgent(wallet) {
51
+ return deriveAgent(wallet ?? this.walletPubkey);
52
+ }
53
+ /**
54
+ * @name deriveStats
55
+ * @description Derive the `AgentStats` PDA for a given agent.
56
+ * @param agentPda - The agent account PDA.
57
+ * @returns A tuple of `[PublicKey, bump]` for the stats PDA.
58
+ * @see {@link deriveAgentStats} from `pda/` module for the underlying derivation.
59
+ * @since v0.1.0
60
+ */
61
+ deriveStats(agentPda) {
62
+ return deriveAgentStats(agentPda);
63
+ }
64
+ // ── Instructions ─────────────────────────────────────
65
+ /**
66
+ * @name register
67
+ * @description Register a new agent identity on-chain. Creates the
68
+ * `AgentAccount`, `AgentStats`, and updates the `GlobalRegistry`.
69
+ * @param args - Registration parameters (name, description, capabilities, pricing, protocols, etc.).
70
+ * @returns {Promise<TransactionSignature>} The transaction signature.
71
+ * @since v0.1.0
72
+ */
73
+ async register(args) {
74
+ const [agentPda] = this.deriveAgent();
75
+ const [statsPda] = this.deriveStats(agentPda);
76
+ const [globalPda] = deriveGlobalRegistry();
77
+ return this.methods
78
+ .registerAgent(args.name, args.description, args.capabilities, args.pricing, args.protocols, args.agentId ?? null, args.agentUri ?? null, args.x402Endpoint ?? null)
79
+ .accounts({
80
+ wallet: this.walletPubkey,
81
+ agent: agentPda,
82
+ agentStats: statsPda,
83
+ globalRegistry: globalPda,
84
+ systemProgram: SystemProgram.programId,
85
+ })
86
+ .rpc();
87
+ }
88
+ /**
89
+ * @name update
90
+ * @description Update an existing agent's metadata fields. All fields
91
+ * are optional — only non-null values are written.
92
+ * @param args - Partial update parameters.
93
+ * @returns {Promise<TransactionSignature>} The transaction signature.
94
+ * @since v0.1.0
95
+ */
96
+ async update(args) {
97
+ const [agentPda] = this.deriveAgent();
98
+ return this.methods
99
+ .updateAgent(args.name ?? null, args.description ?? null, args.capabilities ?? null, args.pricing ?? null, args.protocols ?? null, args.agentId ?? null, args.agentUri ?? null, args.x402Endpoint ?? null)
100
+ .accounts({
101
+ wallet: this.walletPubkey,
102
+ agent: agentPda,
103
+ systemProgram: SystemProgram.programId,
104
+ })
105
+ .rpc();
106
+ }
107
+ /**
108
+ * @name deactivate
109
+ * @description Deactivate an agent, setting `is_active = false`.
110
+ * The agent remains on-chain but is excluded from active discovery.
111
+ * @returns {Promise<TransactionSignature>} The transaction signature.
112
+ * @since v0.1.0
113
+ */
114
+ async deactivate() {
115
+ const [agentPda] = this.deriveAgent();
116
+ const [statsPda] = this.deriveStats(agentPda);
117
+ return this.methods
118
+ .deactivateAgent()
119
+ .accounts({
120
+ wallet: this.walletPubkey,
121
+ agent: agentPda,
122
+ agentStats: statsPda,
123
+ })
124
+ .rpc();
125
+ }
126
+ /**
127
+ * @name reactivate
128
+ * @description Reactivate a previously deactivated agent, restoring
129
+ * it to active status.
130
+ * @returns {Promise<TransactionSignature>} The transaction signature.
131
+ * @since v0.1.0
132
+ */
133
+ async reactivate() {
134
+ const [agentPda] = this.deriveAgent();
135
+ const [statsPda] = this.deriveStats(agentPda);
136
+ return this.methods
137
+ .reactivateAgent()
138
+ .accounts({
139
+ wallet: this.walletPubkey,
140
+ agent: agentPda,
141
+ agentStats: statsPda,
142
+ })
143
+ .rpc();
144
+ }
145
+ /**
146
+ * @name close
147
+ * @description Close an agent PDA and its associated stats PDA.
148
+ * Rent is returned to the owner wallet.
149
+ * @returns {Promise<TransactionSignature>} The transaction signature.
150
+ * @since v0.1.0
151
+ */
152
+ async close() {
153
+ const [agentPda] = this.deriveAgent();
154
+ const [statsPda] = this.deriveStats(agentPda);
155
+ const [globalPda] = deriveGlobalRegistry();
156
+ return this.methods
157
+ .closeAgent()
158
+ .accounts({
159
+ wallet: this.walletPubkey,
160
+ agent: agentPda,
161
+ agentStats: statsPda,
162
+ globalRegistry: globalPda,
163
+ systemProgram: SystemProgram.programId,
164
+ })
165
+ .rpc();
166
+ }
167
+ /**
168
+ * @name reportCalls
169
+ * @description Self-report call metrics for the agent. This updates the
170
+ * `AgentStats` counter but does not affect on-chain reputation.
171
+ * @param callsServed - The number of calls to report.
172
+ * @returns {Promise<TransactionSignature>} The transaction signature.
173
+ * @since v0.1.0
174
+ */
175
+ async reportCalls(callsServed) {
176
+ const [agentPda] = this.deriveAgent();
177
+ const [statsPda] = this.deriveStats(agentPda);
178
+ return this.methods
179
+ .reportCalls(this.bn(callsServed))
180
+ .accounts({
181
+ wallet: this.walletPubkey,
182
+ agent: agentPda,
183
+ agentStats: statsPda,
184
+ })
185
+ .rpc();
186
+ }
187
+ /**
188
+ * @name updateReputation
189
+ * @description Update self-reported latency and uptime metrics.
190
+ * These are informational and do not affect on-chain reputation scoring.
191
+ * @param avgLatencyMs - Average response latency in milliseconds.
192
+ * @param uptimePercent - Uptime percentage (0–100).
193
+ * @returns {Promise<TransactionSignature>} The transaction signature.
194
+ * @since v0.1.0
195
+ */
196
+ async updateReputation(avgLatencyMs, uptimePercent) {
197
+ const [agentPda] = this.deriveAgent();
198
+ return this.methods
199
+ .updateReputation(avgLatencyMs, uptimePercent)
200
+ .accounts({
201
+ wallet: this.walletPubkey,
202
+ agent: agentPda,
203
+ })
204
+ .rpc();
205
+ }
206
+ // ── Fetchers ─────────────────────────────────────────
207
+ /**
208
+ * @name fetch
209
+ * @description Fetch the deserialized `AgentAccount` data for a wallet.
210
+ * @param wallet - The wallet public key. Defaults to the connected wallet.
211
+ * @returns {Promise<AgentAccountData>} The agent account data.
212
+ * @throws Will throw if the agent account does not exist.
213
+ * @since v0.1.0
214
+ */
215
+ async fetch(wallet) {
216
+ const [pda] = this.deriveAgent(wallet ?? this.walletPubkey);
217
+ return this.fetchAccount("agentAccount", pda);
218
+ }
219
+ /**
220
+ * @name fetchNullable
221
+ * @description Fetch the deserialized `AgentAccount` data, or `null`
222
+ * if the account doesn't exist on-chain.
223
+ * @param wallet - The wallet public key. Defaults to the connected wallet.
224
+ * @returns {Promise<AgentAccountData | null>} The agent data or `null`.
225
+ * @since v0.1.0
226
+ */
227
+ async fetchNullable(wallet) {
228
+ const [pda] = this.deriveAgent(wallet ?? this.walletPubkey);
229
+ return this.fetchAccountNullable("agentAccount", pda);
230
+ }
231
+ /**
232
+ * @name fetchStats
233
+ * @description Fetch the deserialized `AgentStats` data for an agent.
234
+ * @param agentPda - The agent account PDA.
235
+ * @returns {Promise<AgentStatsData>} The agent stats data.
236
+ * @throws Will throw if the stats account does not exist.
237
+ * @since v0.1.0
238
+ */
239
+ async fetchStats(agentPda) {
240
+ const [pda] = this.deriveStats(agentPda);
241
+ return this.fetchAccount("agentStats", pda);
242
+ }
243
+ /**
244
+ * @name fetchStatsNullable
245
+ * @description Fetch the deserialized `AgentStats` data, or `null`
246
+ * if the account doesn't exist on-chain.
247
+ * @param agentPda - The agent account PDA.
248
+ * @returns {Promise<AgentStatsData | null>} The stats data or `null`.
249
+ * @since v0.1.0
250
+ */
251
+ async fetchStatsNullable(agentPda) {
252
+ const [pda] = this.deriveStats(agentPda);
253
+ return this.fetchAccountNullable("agentStats", pda);
254
+ }
255
+ /**
256
+ * @name fetchGlobalRegistry
257
+ * @description Fetch the `GlobalRegistry` singleton account that tracks
258
+ * aggregate protocol statistics.
259
+ * @returns {Promise<GlobalRegistryData>} The global registry data.
260
+ * @throws Will throw if the registry has not been initialized.
261
+ * @since v0.1.0
262
+ */
263
+ async fetchGlobalRegistry() {
264
+ const [pda] = deriveGlobalRegistry();
265
+ return this.fetchAccount("globalRegistry", pda);
266
+ }
267
+ }
268
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/modules/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * @module attestation
3
+ * @description Web-of-trust attestations — create, revoke, and close
4
+ * on-chain attestations that vouch for agent trustworthiness.
5
+ *
6
+ * Attestations are signed endorsements from one wallet to an agent,
7
+ * forming a composable trust graph on Solana.
8
+ *
9
+ * @category Modules
10
+ * @since v0.1.0
11
+ * @packageDocumentation
12
+ */
13
+ import { SystemProgram } from "@solana/web3.js";
14
+ import { BaseModule } from "./base";
15
+ import { deriveAgent, deriveAttestation, deriveGlobalRegistry } from "../pda";
16
+ /**
17
+ * @name AttestationModule
18
+ * @description Manages on-chain attestations for the Solana Agent Protocol.
19
+ * Provides methods to create, revoke, close, and fetch attestation PDAs
20
+ * that form the web-of-trust layer.
21
+ *
22
+ * @category Modules
23
+ * @since v0.1.0
24
+ * @extends BaseModule
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * const sap = new SapClient(provider);
29
+ * // Create an attestation for an agent
30
+ * const sig = await sap.attestation.create(agentWallet, {
31
+ * attestationType: { identity: {} },
32
+ * metadataHash: [...],
33
+ * expiresAt: null,
34
+ * });
35
+ * ```
36
+ */
37
+ export class AttestationModule extends BaseModule {
38
+ // ── PDA helpers ──────────────────────────────────────
39
+ /**
40
+ * @name deriveAttestation
41
+ * @description Derive the `AgentAttestation` PDA for a given agent and attester.
42
+ * @param agentPda - The agent account PDA to attest.
43
+ * @param attester - The attester wallet. Defaults to the connected wallet.
44
+ * @returns A tuple of `[PublicKey, bump]` for the attestation PDA.
45
+ * @see {@link deriveAttestation} from `pda/` module for the underlying derivation.
46
+ * @since v0.1.0
47
+ */
48
+ deriveAttestation(agentPda, attester) {
49
+ return deriveAttestation(agentPda, attester ?? this.walletPubkey);
50
+ }
51
+ // ── Instructions ─────────────────────────────────────
52
+ /**
53
+ * @name create
54
+ * @description Create an on-chain attestation vouching for an agent.
55
+ * The connected wallet becomes the attester.
56
+ * @param agentWallet - The wallet that owns the target agent.
57
+ * @param args - Attestation parameters (type, metadata hash, optional expiry).
58
+ * @returns {Promise<TransactionSignature>} The transaction signature.
59
+ * @since v0.1.0
60
+ */
61
+ async create(agentWallet, args) {
62
+ const [agentPda] = deriveAgent(agentWallet);
63
+ const [attestPda] = this.deriveAttestation(agentPda);
64
+ const [globalPda] = deriveGlobalRegistry();
65
+ return this.methods
66
+ .createAttestation(args.attestationType, args.metadataHash, args.expiresAt)
67
+ .accounts({
68
+ attester: this.walletPubkey,
69
+ agent: agentPda,
70
+ attestation: attestPda,
71
+ globalRegistry: globalPda,
72
+ systemProgram: SystemProgram.programId,
73
+ })
74
+ .rpc();
75
+ }
76
+ /**
77
+ * @name revoke
78
+ * @description Revoke a previously issued attestation. Only the original
79
+ * attester may revoke.
80
+ * @param agentWallet - The wallet of the attested agent.
81
+ * @returns {Promise<TransactionSignature>} The transaction signature.
82
+ * @since v0.1.0
83
+ */
84
+ async revoke(agentWallet) {
85
+ const [agentPda] = deriveAgent(agentWallet);
86
+ const [attestPda] = this.deriveAttestation(agentPda);
87
+ return this.methods
88
+ .revokeAttestation()
89
+ .accounts({
90
+ attester: this.walletPubkey,
91
+ attestation: attestPda,
92
+ })
93
+ .rpc();
94
+ }
95
+ /**
96
+ * @name close
97
+ * @description Close a revoked attestation PDA and reclaim rent to the attester.
98
+ * @param agentWallet - The wallet of the attested agent.
99
+ * @returns {Promise<TransactionSignature>} The transaction signature.
100
+ * @since v0.1.0
101
+ */
102
+ async close(agentWallet) {
103
+ const [agentPda] = deriveAgent(agentWallet);
104
+ const [attestPda] = this.deriveAttestation(agentPda);
105
+ const [globalPda] = deriveGlobalRegistry();
106
+ return this.methods
107
+ .closeAttestation()
108
+ .accounts({
109
+ attester: this.walletPubkey,
110
+ attestation: attestPda,
111
+ globalRegistry: globalPda,
112
+ })
113
+ .rpc();
114
+ }
115
+ // ── Fetchers ─────────────────────────────────────────
116
+ /**
117
+ * @name fetch
118
+ * @description Fetch a deserialized `AgentAttestation` account.
119
+ * @param agentPda - The agent account PDA.
120
+ * @param attester - The attester wallet. Defaults to the connected wallet.
121
+ * @returns {Promise<AgentAttestationData>} The attestation account data.
122
+ * @throws Will throw if the attestation account does not exist.
123
+ * @since v0.1.0
124
+ */
125
+ async fetch(agentPda, attester) {
126
+ const [pda] = this.deriveAttestation(agentPda, attester);
127
+ return this.fetchAccount("agentAttestation", pda);
128
+ }
129
+ /**
130
+ * @name fetchNullable
131
+ * @description Fetch a deserialized `AgentAttestation` account, or `null`
132
+ * if it does not exist on-chain.
133
+ * @param agentPda - The agent account PDA.
134
+ * @param attester - The attester wallet. Defaults to the connected wallet.
135
+ * @returns {Promise<AgentAttestationData | null>} The attestation data or `null`.
136
+ * @since v0.1.0
137
+ */
138
+ async fetchNullable(agentPda, attester) {
139
+ const [pda] = this.deriveAttestation(agentPda, attester);
140
+ return this.fetchAccountNullable("agentAttestation", pda);
141
+ }
142
+ }
143
+ //# sourceMappingURL=attestation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attestation.js","sourceRoot":"","sources":["../../../src/modules/attestation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * @module base
3
+ * @description Abstract base class for all SDK modules.
4
+ *
5
+ * Provides shared access to the Anchor program, provider,
6
+ * and typed `fetch` / `fetchNullable` helpers.
7
+ *
8
+ * @category Modules
9
+ * @since v0.1.0
10
+ * @packageDocumentation
11
+ */
12
+ import { BN } from "@coral-xyz/anchor";
13
+ /**
14
+ * @name BaseModule
15
+ * @description Abstract base module inherited by every domain module in the SDK.
16
+ * Encapsulates the Anchor program reference, provider access, and common
17
+ * helpers for account fetching and BN construction.
18
+ *
19
+ * @abstract
20
+ * @category Modules
21
+ * @since v0.1.0
22
+ *
23
+ * @example
24
+ * ```ts
25
+ * class MyModule extends BaseModule {
26
+ * async doSomething() {
27
+ * const data = await this.fetchAccount<MyData>("myAccount", pda);
28
+ * }
29
+ * }
30
+ * ```
31
+ */
32
+ export class BaseModule {
33
+ program;
34
+ /**
35
+ * Create a new module instance.
36
+ *
37
+ * @param program - The Anchor `Program` instance for the SAP IDL.
38
+ * @protected
39
+ */
40
+ constructor(program) {
41
+ this.program = program;
42
+ }
43
+ /**
44
+ * @name methods
45
+ * @description Instruction method namespace — bypasses `noUncheckedIndexedAccess`
46
+ * on `Program<any>` where every property is `T | undefined`.
47
+ * Used internally by subclasses to build and send instructions.
48
+ * @returns The Anchor program `methods` object for chaining instruction builders.
49
+ * @protected
50
+ * @since v0.1.0
51
+ */
52
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
53
+ get methods() {
54
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
55
+ return this.program.methods;
56
+ }
57
+ /**
58
+ * @name provider
59
+ * @description The AnchorProvider from the program, giving access to
60
+ * the connection and wallet for signing transactions.
61
+ * @returns {AnchorProvider} The Anchor provider instance.
62
+ * @protected
63
+ * @since v0.1.0
64
+ */
65
+ get provider() {
66
+ return this.program.provider;
67
+ }
68
+ /**
69
+ * @name walletPubkey
70
+ * @description Convenience accessor for the signer wallet's public key.
71
+ * @returns {PublicKey} The public key of the connected wallet.
72
+ * @protected
73
+ * @since v0.1.0
74
+ */
75
+ get walletPubkey() {
76
+ return this.provider.wallet.publicKey;
77
+ }
78
+ /**
79
+ * @name fetchAccount
80
+ * @description Generic account fetch — deserializes the on-chain account
81
+ * data into the given type `T`, or throws if the account does not exist.
82
+ * @typeParam T - The expected deserialized account data type.
83
+ * @param accountName - The Anchor account discriminator name (e.g. `"agentAccount"`).
84
+ * @param address - The public key of the account to fetch.
85
+ * @returns {Promise<T>} The deserialized account data.
86
+ * @throws Will throw if the account does not exist on-chain.
87
+ * @protected
88
+ * @since v0.1.0
89
+ */
90
+ async fetchAccount(accountName, address) {
91
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any
92
+ return this.program.account[accountName].fetch(address);
93
+ }
94
+ /**
95
+ * @name fetchAccountNullable
96
+ * @description Generic nullable account fetch — deserializes the on-chain
97
+ * account data into type `T`, or returns `null` if the account does not exist.
98
+ * @typeParam T - The expected deserialized account data type.
99
+ * @param accountName - The Anchor account discriminator name (e.g. `"agentAccount"`).
100
+ * @param address - The public key of the account to fetch.
101
+ * @returns {Promise<T | null>} The deserialized account data, or `null`.
102
+ * @protected
103
+ * @since v0.1.0
104
+ */
105
+ async fetchAccountNullable(accountName, address) {
106
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any
107
+ return this.program.account[accountName].fetchNullable(address);
108
+ }
109
+ /**
110
+ * @name bn
111
+ * @description Create an Anchor `BN` from a number, bigint, or existing BN.
112
+ * Passes through values that are already `BN` instances.
113
+ * @param value - The numeric value to convert.
114
+ * @returns {BN} An Anchor-compatible big number.
115
+ * @protected
116
+ * @since v0.1.0
117
+ */
118
+ bn(value) {
119
+ if (BN.isBN(value))
120
+ return value;
121
+ return new BN(value.toString());
122
+ }
123
+ }
124
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/modules/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAqC,EAAE,EAAE,MAAM,mBAAmB,CAAC;AA2B1E;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAgB,UAAU;IAOC;IAN/B;;;;;OAKG;IACH,YAA+B,OAAmB;QAAnB,YAAO,GAAP,OAAO,CAAY;IAAG,CAAC;IAEtD;;;;;;;;OAQG;IACH,8DAA8D;IAC9D,IAAc,OAAO;QACnB,+DAA+D;QAC/D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED;;;;;;;OAOG;IACH,IAAc,QAAQ;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,QAA0B,CAAC;IACjD,CAAC;IAED;;;;;;OAMG;IACH,IAAc,YAAY;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;IACxC,CAAC;IAED;;;;;;;;;;;OAWG;IACO,KAAK,CAAC,YAAY,CAC1B,WAAmB,EACnB,OAAkB;QAElB,0GAA0G;QAC1G,OAAQ,IAAI,CAAC,OAAO,CAAC,OAAe,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,OAAO,CAAe,CAAC;IACjF,CAAC;IAED;;;;;;;;;;OAUG;IACO,KAAK,CAAC,oBAAoB,CAClC,WAAmB,EACnB,OAAkB;QAElB,0GAA0G;QAC1G,OAAQ,IAAI,CAAC,OAAO,CAAC,OAAe,CAAC,WAAW,CAAC,CAAC,aAAa,CAAC,OAAO,CAAsB,CAAC;IAChG,CAAC;IAED;;;;;;;;OAQG;IACO,EAAE,CAAC,KAA2B;QACtC,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACjC,OAAO,IAAI,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClC,CAAC;CACF"}