@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,416 @@
1
+ /**
2
+ * @module core/client
3
+ * @description Core SapClient — thin wrapper around the Anchor program
4
+ * that wires up provider, IDL, and exposes typed module accessors.
5
+ *
6
+ * This is the primary entry point for the `@synapse-sap/sdk` package.
7
+ * All protocol domains (agent lifecycle, reputation, vault, escrow, etc.)
8
+ * are available as lazily-instantiated, strongly-typed module accessors.
9
+ *
10
+ * @since v0.1.0
11
+ * @category Core
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * import { SapClient } from "@synapse-sap/sdk";
16
+ *
17
+ * const client = SapClient.from(provider); // auto-IDL
18
+ * const client = SapClient.fromProgram(program); // existing program
19
+ *
20
+ * // Use domain modules:
21
+ * await client.agent.register({ ... });
22
+ * await client.vault.initVault(vaultNonce);
23
+ * const escrow = await client.escrow.fetch(escrowPda);
24
+ * ```
25
+ */
26
+
27
+ import { type AnchorProvider, Program } from "@coral-xyz/anchor";
28
+ import type { PublicKey } from "@solana/web3.js";
29
+ import { SAP_PROGRAM_ID } from "../constants";
30
+ import { AgentModule } from "../modules/agent";
31
+ import { FeedbackModule } from "../modules/feedback";
32
+ import { IndexingModule } from "../modules/indexing";
33
+ import { ToolsModule } from "../modules/tools";
34
+ import { VaultModule } from "../modules/vault";
35
+ import { EscrowModule } from "../modules/escrow";
36
+ import { AttestationModule } from "../modules/attestation";
37
+ import { LedgerModule } from "../modules/ledger";
38
+ import { EventParser } from "../events";
39
+ import { DiscoveryRegistry } from "../registries/discovery";
40
+ import { X402Registry } from "../registries/x402";
41
+ import { SessionManager } from "../registries/session";
42
+ import { AgentBuilder } from "../registries/builder";
43
+
44
+ // IDL is embedded inside the SDK — no external workspace dependency
45
+ import idl from "../idl/synapse_agent_sap.json";
46
+
47
+ /** Re-usable Anchor program type (untyped — SDK provides its own types). */
48
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
49
+ type SapProgram = Program<any>;
50
+
51
+ /**
52
+ * @name SapClient
53
+ * @description Root entry point for the Solana Agent Protocol v2 TypeScript SDK.
54
+ *
55
+ * Each protocol domain is exposed as a lazily-instantiated module:
56
+ * `agent`, `feedback`, `indexing`, `tools`, `vault`, `escrow`,
57
+ * `attestation`, `ledger`, `events`.
58
+ *
59
+ * Higher-level abstractions (`discovery`, `x402`, `session`, `builder`)
60
+ * compose the low-level modules into ergonomic workflows.
61
+ *
62
+ * Instantiate via the static factory methods {@link SapClient.from} or
63
+ * {@link SapClient.fromProgram} — the constructor is private.
64
+ *
65
+ * @category Core
66
+ * @since v0.1.0
67
+ *
68
+ * @example
69
+ * ```ts
70
+ * import { SapClient } from "@synapse-sap/sdk";
71
+ * import { AnchorProvider } from "@coral-xyz/anchor";
72
+ *
73
+ * const provider = AnchorProvider.env();
74
+ * const client = SapClient.from(provider);
75
+ *
76
+ * // Register an agent
77
+ * await client.agent.register({
78
+ * name: "SwapBot",
79
+ * description: "AI-powered swap agent",
80
+ * });
81
+ *
82
+ * // Discover agents
83
+ * const agents = await client.discovery.findAgentsByProtocol("jupiter");
84
+ * ```
85
+ */
86
+ export class SapClient {
87
+ /**
88
+ * @name program
89
+ * @description The underlying Anchor `Program` instance used for all RPC
90
+ * calls and account deserialization.
91
+ * @readonly
92
+ * @category Core
93
+ * @since v0.1.0
94
+ */
95
+ readonly program: SapProgram;
96
+
97
+ /**
98
+ * @name walletPubkey
99
+ * @description The provider wallet's public key, extracted from the
100
+ * Anchor provider for convenience. This is the default authority /
101
+ * payer used by module instructions unless overridden.
102
+ * @readonly
103
+ * @category Core
104
+ * @since v0.1.0
105
+ */
106
+ readonly walletPubkey: PublicKey;
107
+
108
+ // ── Lazy module singletons ────────────────────────
109
+ #agent?: AgentModule;
110
+ #feedback?: FeedbackModule;
111
+ #indexing?: IndexingModule;
112
+ #tools?: ToolsModule;
113
+ #vault?: VaultModule;
114
+ #escrow?: EscrowModule;
115
+ #attestation?: AttestationModule;
116
+ #ledger?: LedgerModule;
117
+ #events?: EventParser;
118
+
119
+ // ── Lazy registry singletons ──────────────────────
120
+ #discovery?: DiscoveryRegistry;
121
+ #x402?: X402Registry;
122
+ #session?: SessionManager;
123
+
124
+ private constructor(program: SapProgram) {
125
+ this.program = program;
126
+ this.walletPubkey = (program.provider as AnchorProvider).wallet.publicKey;
127
+ }
128
+
129
+ // ═════════════════════════════════════════════
130
+ // Factory Methods
131
+ // ═════════════════════════════════════════════
132
+
133
+ /**
134
+ * @name from
135
+ * @description Create a {@link SapClient} from an `AnchorProvider`.
136
+ * Automatically loads the embedded IDL shipped with the SDK.
137
+ *
138
+ * @param provider - A configured `AnchorProvider` with wallet and connection.
139
+ * @param programId - Optional override for the SAP program ID.
140
+ * Defaults to `SAP_PROGRAM_ID` from `@synapse-sap/sdk/constants`.
141
+ * @returns A fully-initialised `SapClient` ready for use.
142
+ *
143
+ * @category Core
144
+ * @since v0.1.0
145
+ * @see {@link SapClient.fromProgram} for an alternative accepting a pre-built `Program`.
146
+ *
147
+ * @example
148
+ * ```ts
149
+ * import { SapClient } from "@synapse-sap/sdk";
150
+ * import { AnchorProvider } from "@coral-xyz/anchor";
151
+ *
152
+ * const provider = AnchorProvider.env();
153
+ * const client = SapClient.from(provider);
154
+ * ```
155
+ *
156
+ * @example Custom program ID (e.g. localnet)
157
+ * ```ts
158
+ * const client = SapClient.from(provider, myLocalProgramId);
159
+ * ```
160
+ */
161
+ static from(
162
+ provider: AnchorProvider,
163
+ programId: PublicKey = SAP_PROGRAM_ID,
164
+ ): SapClient {
165
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
166
+ const program = new Program(idl as any, provider);
167
+ // Override program ID if non-default
168
+ if (!programId.equals(SAP_PROGRAM_ID)) {
169
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
170
+ (program as any).programId = programId;
171
+ }
172
+ return new SapClient(program);
173
+ }
174
+
175
+ /**
176
+ * @name fromProgram
177
+ * @description Create a {@link SapClient} from an existing Anchor `Program`
178
+ * instance. Useful when the caller already has a configured program or
179
+ * needs full control over IDL resolution.
180
+ *
181
+ * @param program - A pre-built Anchor `Program` targeting the SAP program.
182
+ * @returns A fully-initialised `SapClient` wrapping the supplied program.
183
+ *
184
+ * @category Core
185
+ * @since v0.1.0
186
+ * @see {@link SapClient.from} for the convenience factory that auto-loads the IDL.
187
+ *
188
+ * @example
189
+ * ```ts
190
+ * import { Program } from "@coral-xyz/anchor";
191
+ * import { SapClient } from "@synapse-sap/sdk";
192
+ *
193
+ * const program = new Program(idl, provider);
194
+ * const client = SapClient.fromProgram(program);
195
+ * ```
196
+ */
197
+ static fromProgram(program: SapProgram): SapClient {
198
+ return new SapClient(program);
199
+ }
200
+
201
+ // ═════════════════════════════════════════════
202
+ // Module Accessors (lazy singletons)
203
+ // ═════════════════════════════════════════════
204
+
205
+ /**
206
+ * @name agent
207
+ * @description Agent lifecycle: register, update, deactivate, close, and
208
+ * query agent metrics on-chain.
209
+ * @returns {AgentModule} The lazily-instantiated `AgentModule` singleton.
210
+ * @category Modules
211
+ * @since v0.1.0
212
+ * @see {@link AgentModule}
213
+ */
214
+ get agent(): AgentModule {
215
+ return (this.#agent ??= new AgentModule(this.program));
216
+ }
217
+
218
+ /**
219
+ * @name feedback
220
+ * @description Trustless reputation: give, update, revoke, and close
221
+ * on-chain feedback entries for agents.
222
+ * @returns {FeedbackModule} The lazily-instantiated `FeedbackModule` singleton.
223
+ * @category Modules
224
+ * @since v0.1.0
225
+ * @see {@link FeedbackModule}
226
+ */
227
+ get feedback(): FeedbackModule {
228
+ return (this.#feedback ??= new FeedbackModule(this.program));
229
+ }
230
+
231
+ /**
232
+ * @name indexing
233
+ * @description Scalable discovery: capability, protocol, and tool-category
234
+ * on-chain indexes for agent search.
235
+ * @returns {IndexingModule} The lazily-instantiated `IndexingModule` singleton.
236
+ * @category Modules
237
+ * @since v0.1.0
238
+ * @see {@link IndexingModule}
239
+ */
240
+ get indexing(): IndexingModule {
241
+ return (this.#indexing ??= new IndexingModule(this.program));
242
+ }
243
+
244
+ /**
245
+ * @name tools
246
+ * @description Tool schema registry: publish, inscribe, update, and close
247
+ * on-chain tool definitions.
248
+ * @returns {ToolsModule} The lazily-instantiated `ToolsModule` singleton.
249
+ * @category Modules
250
+ * @since v0.1.0
251
+ * @see {@link ToolsModule}
252
+ */
253
+ get tools(): ToolsModule {
254
+ return (this.#tools ??= new ToolsModule(this.program));
255
+ }
256
+
257
+ /**
258
+ * @name vault
259
+ * @description Encrypted memory vault: initialise vaults, manage sessions,
260
+ * inscribe data, and delegate access.
261
+ * @returns {VaultModule} The lazily-instantiated `VaultModule` singleton.
262
+ * @category Modules
263
+ * @since v0.1.0
264
+ * @see {@link VaultModule}
265
+ */
266
+ get vault(): VaultModule {
267
+ return (this.#vault ??= new VaultModule(this.program));
268
+ }
269
+
270
+ /**
271
+ * @name escrow
272
+ * @description x402 escrow settlement: create escrow accounts, deposit
273
+ * funds, settle payments, and withdraw balances.
274
+ * @returns {EscrowModule} The lazily-instantiated `EscrowModule` singleton.
275
+ * @category Modules
276
+ * @since v0.1.0
277
+ * @see {@link EscrowModule}
278
+ */
279
+ get escrow(): EscrowModule {
280
+ return (this.#escrow ??= new EscrowModule(this.program));
281
+ }
282
+
283
+ /**
284
+ * @name attestation
285
+ * @description Web of trust: create, revoke, and close on-chain
286
+ * attestations between agents.
287
+ * @returns {AttestationModule} The lazily-instantiated `AttestationModule` singleton.
288
+ * @category Modules
289
+ * @since v0.1.0
290
+ * @see {@link AttestationModule}
291
+ */
292
+ get attestation(): AttestationModule {
293
+ return (this.#attestation ??= new AttestationModule(this.program));
294
+ }
295
+
296
+ /**
297
+ * @name ledger
298
+ * @description Unified on-chain memory: initialise ledger accounts, write
299
+ * entries, seal pages, and close ledgers.
300
+ * @returns {LedgerModule} The lazily-instantiated `LedgerModule` singleton.
301
+ * @category Modules
302
+ * @since v0.1.0
303
+ * @see {@link LedgerModule}
304
+ */
305
+ get ledger(): LedgerModule {
306
+ return (this.#ledger ??= new LedgerModule(this.program));
307
+ }
308
+
309
+ /**
310
+ * @name events
311
+ * @description Decode SAP protocol events from on-chain transaction logs.
312
+ * @returns {EventParser} The lazily-instantiated `EventParser` singleton.
313
+ * @category Modules
314
+ * @since v0.1.0
315
+ * @see {@link EventParser}
316
+ */
317
+ get events(): EventParser {
318
+ return (this.#events ??= new EventParser(this.program));
319
+ }
320
+
321
+ // ═════════════════════════════════════════════
322
+ // Registry Accessors (high-level abstractions)
323
+ // ═════════════════════════════════════════════
324
+
325
+ /**
326
+ * @name discovery
327
+ * @description Agent & tool discovery across the SAP network.
328
+ * Provides high-level queries for locating agents by capability,
329
+ * protocol, or wallet address.
330
+ *
331
+ * @returns {DiscoveryRegistry} The lazily-instantiated `DiscoveryRegistry` singleton.
332
+ * @category Registries
333
+ * @since v0.1.0
334
+ * @see {@link DiscoveryRegistry}
335
+ *
336
+ * @example
337
+ * ```ts
338
+ * const agents = await client.discovery.findAgentsByProtocol("jupiter");
339
+ * const profile = await client.discovery.getAgentProfile(wallet);
340
+ * ```
341
+ */
342
+ get discovery(): DiscoveryRegistry {
343
+ return (this.#discovery ??= new DiscoveryRegistry(this.program));
344
+ }
345
+
346
+ /**
347
+ * @name x402
348
+ * @description x402 micropayment lifecycle — pricing, escrow, headers,
349
+ * and settlement. Orchestrates the full pay-per-call flow between
350
+ * consumer and agent.
351
+ *
352
+ * @returns {X402Registry} The lazily-instantiated `X402Registry` singleton.
353
+ * @category Registries
354
+ * @since v0.1.0
355
+ * @see {@link X402Registry}
356
+ *
357
+ * @example
358
+ * ```ts
359
+ * const ctx = await client.x402.preparePayment(agentWallet, { ... });
360
+ * const headers = client.x402.buildPaymentHeaders(ctx);
361
+ * const receipt = await client.x402.settle(depositor, 5, serviceData);
362
+ * ```
363
+ */
364
+ get x402(): X402Registry {
365
+ return (this.#x402 ??= new X402Registry(this.program));
366
+ }
367
+
368
+ /**
369
+ * @name session
370
+ * @description Unified memory session lifecycle — vault, session, and
371
+ * ledger management. Provides a single interface for starting
372
+ * conversations, writing messages, and reading back history.
373
+ *
374
+ * @returns {SessionManager} The lazily-instantiated `SessionManager` singleton.
375
+ * @category Registries
376
+ * @since v0.1.0
377
+ * @see {@link SessionManager}
378
+ *
379
+ * @example
380
+ * ```ts
381
+ * const ctx = await client.session.start("conversation-123");
382
+ * await client.session.write(ctx, "Hello from agent");
383
+ * const msgs = await client.session.readLatest(ctx);
384
+ * ```
385
+ */
386
+ get session(): SessionManager {
387
+ return (this.#session ??= new SessionManager(this.program));
388
+ }
389
+
390
+ /**
391
+ * @name builder
392
+ * @description Fluent agent registration builder.
393
+ * Returns a **new** `AgentBuilder` on every access — use for one-shot
394
+ * registration flows. Chain configuration calls and finalise with
395
+ * `.register()`.
396
+ *
397
+ * @returns {AgentBuilder} A fresh `AgentBuilder` instance.
398
+ * @category Registries
399
+ * @since v0.1.0
400
+ * @see {@link AgentBuilder}
401
+ *
402
+ * @example
403
+ * ```ts
404
+ * await client.builder
405
+ * .agent("SwapBot")
406
+ * .description("AI-powered swap agent")
407
+ * .x402Endpoint("https://api.example.com/x402")
408
+ * .addCapability("jupiter:swap", { protocol: "jupiter" })
409
+ * .addPricingTier({ tierId: "standard", pricePerCall: 1000, rateLimit: 60 })
410
+ * .register();
411
+ * ```
412
+ */
413
+ get builder(): AgentBuilder {
414
+ return new AgentBuilder(this.program);
415
+ }
416
+ }