@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,433 @@
1
+ "use strict";
2
+ /**
3
+ * @module registries/session
4
+ * @description Unified session lifecycle manager.
5
+ *
6
+ * Wraps the vault + ledger modules into a single cohesive API
7
+ * that manages the full memory session lifecycle:
8
+ * 1. Ensure vault exists (create if needed)
9
+ * 2. Open a named session
10
+ * 3. Initialize a ledger for the session
11
+ * 4. Write data (ring buffer + TX log)
12
+ * 5. Read latest entries from ring buffer
13
+ * 6. Seal the ring buffer into permanent archive pages
14
+ * 7. Close ledger + session when done
15
+ *
16
+ * This is the RECOMMENDED way to manage agent memory.
17
+ *
18
+ * @category Registries
19
+ * @since v0.1.0
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const session = client.session;
24
+ *
25
+ * // Start a new conversation session
26
+ * const ctx = await session.start("conversation-123");
27
+ *
28
+ * // Write messages
29
+ * await session.write(ctx, "Hello from the agent");
30
+ * await session.write(ctx, "Processing your request...");
31
+ *
32
+ * // Read latest messages from ring buffer
33
+ * const messages = await session.readLatest(ctx);
34
+ *
35
+ * // Seal into permanent archive
36
+ * await session.seal(ctx);
37
+ *
38
+ * // Close when done
39
+ * await session.close(ctx);
40
+ * ```
41
+ */
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.SessionManager = void 0;
44
+ const web3_js_1 = require("@solana/web3.js");
45
+ const pda_1 = require("../pda");
46
+ const utils_1 = require("../utils");
47
+ // ═══════════════════════════════════════════════════════════════════
48
+ // Session Manager
49
+ // ═══════════════════════════════════════════════════════════════════
50
+ /**
51
+ * @name SessionManager
52
+ * @description Unified session lifecycle manager for agent memory.
53
+ *
54
+ * Wraps vault + ledger modules into a single API that manages
55
+ * the full memory session lifecycle: create vault, open session,
56
+ * write data, read ring buffer, seal archives, and close sessions.
57
+ *
58
+ * @category Registries
59
+ * @since v0.1.0
60
+ *
61
+ * @example
62
+ * ```ts
63
+ * const session = client.session;
64
+ * const ctx = await session.start("conversation-123");
65
+ * await session.write(ctx, "Hello from the agent");
66
+ * const entries = await session.readLatest(ctx);
67
+ * await session.seal(ctx);
68
+ * await session.close(ctx);
69
+ * ```
70
+ */
71
+ class SessionManager {
72
+ program;
73
+ wallet;
74
+ constructor(program) {
75
+ this.program = program;
76
+ this.wallet = program.provider.wallet.publicKey;
77
+ }
78
+ // ── Context Derivation ───────────────────────────────
79
+ /**
80
+ * @name deriveContext
81
+ * @description Derive all PDAs for a session without creating anything.
82
+ * Pure computation — no network calls.
83
+ *
84
+ * @param sessionId - Human-readable session identifier (hashed for PDA derivation).
85
+ * @returns A {@link SessionContext} with all resolved PDAs.
86
+ * @since v0.1.0
87
+ */
88
+ deriveContext(sessionId) {
89
+ const sessionHash = (0, utils_1.sha256)(sessionId);
90
+ const [agentPda] = (0, pda_1.deriveAgent)(this.wallet);
91
+ const [vaultPda] = (0, pda_1.deriveVault)(agentPda);
92
+ const [sessionPda] = (0, pda_1.deriveSession)(vaultPda, sessionHash);
93
+ const [ledgerPda] = (0, pda_1.deriveLedger)(sessionPda);
94
+ return {
95
+ sessionId,
96
+ sessionHash,
97
+ sessionHashArray: (0, utils_1.hashToArray)(sessionHash),
98
+ agentPda,
99
+ vaultPda,
100
+ sessionPda,
101
+ ledgerPda,
102
+ wallet: this.wallet,
103
+ };
104
+ }
105
+ // ── Full Lifecycle ───────────────────────────────────
106
+ /**
107
+ * @name start
108
+ * @description Start a new session: ensures vault exists, opens session,
109
+ * and initializes a ledger. Idempotent — skips any step
110
+ * that’s already done.
111
+ *
112
+ * @param sessionId - Human-readable session name (hashed for PDA).
113
+ * @param vaultNonce - Optional 32-byte nonce for vault init (only used if vault doesn’t exist).
114
+ * @returns A {@link SessionContext} with all resolved PDAs.
115
+ * @since v0.1.0
116
+ */
117
+ async start(sessionId, vaultNonce) {
118
+ const ctx = this.deriveContext(sessionId);
119
+ // Step 1: Ensure vault exists
120
+ const vaultExists = await this.accountExists(ctx.vaultPda);
121
+ if (!vaultExists) {
122
+ const nonce = vaultNonce ?? (0, utils_1.hashToArray)((0, utils_1.sha256)(`vault-nonce-${Date.now()}`));
123
+ const [globalPda] = (0, pda_1.deriveGlobalRegistry)();
124
+ await this.methods
125
+ .initVault(nonce)
126
+ .accounts({
127
+ wallet: this.wallet,
128
+ agent: ctx.agentPda,
129
+ vault: ctx.vaultPda,
130
+ globalRegistry: globalPda,
131
+ systemProgram: web3_js_1.SystemProgram.programId,
132
+ })
133
+ .rpc();
134
+ }
135
+ // Step 2: Open session
136
+ const sessionExists = await this.accountExists(ctx.sessionPda);
137
+ if (!sessionExists) {
138
+ await this.methods
139
+ .openSession(ctx.sessionHashArray)
140
+ .accounts({
141
+ wallet: this.wallet,
142
+ vault: ctx.vaultPda,
143
+ session: ctx.sessionPda,
144
+ systemProgram: web3_js_1.SystemProgram.programId,
145
+ })
146
+ .rpc();
147
+ }
148
+ // Step 3: Initialize ledger
149
+ const ledgerExists = await this.accountExists(ctx.ledgerPda);
150
+ if (!ledgerExists) {
151
+ await this.methods
152
+ .initLedger()
153
+ .accounts({
154
+ wallet: this.wallet,
155
+ session: ctx.sessionPda,
156
+ ledger: ctx.ledgerPda,
157
+ systemProgram: web3_js_1.SystemProgram.programId,
158
+ })
159
+ .rpc();
160
+ }
161
+ return ctx;
162
+ }
163
+ /**
164
+ * @name write
165
+ * @description Write data to a session (ring buffer + permanent TX log).
166
+ * Cost: TX fee only (~0.000005 SOL per write).
167
+ *
168
+ * @param ctx - Session context from {@link SessionManager.start} or {@link SessionManager.deriveContext}.
169
+ * @param data - UTF-8 string or raw bytes to write.
170
+ * @returns A {@link WriteResult} with the transaction signature, content hash, and data size.
171
+ * @since v0.1.0
172
+ */
173
+ async write(ctx, data) {
174
+ const dataBuffer = typeof data === "string" ? Buffer.from(data, "utf-8") : Buffer.from(data);
175
+ const contentHash = (0, utils_1.hashToArray)((0, utils_1.sha256)(dataBuffer));
176
+ const txSignature = await this.methods
177
+ .writeLedger(dataBuffer, contentHash)
178
+ .accounts({
179
+ wallet: this.wallet,
180
+ session: ctx.sessionPda,
181
+ ledger: ctx.ledgerPda,
182
+ })
183
+ .rpc();
184
+ return {
185
+ txSignature,
186
+ contentHash,
187
+ dataSize: dataBuffer.length,
188
+ };
189
+ }
190
+ /**
191
+ * @name readLatest
192
+ * @description Read the latest entries from the ring buffer.
193
+ * FREE — uses `getAccountInfo()` on any RPC (no archival needed).
194
+ *
195
+ * @param ctx - Session context.
196
+ * @returns An array of {@link RingBufferEntry} from the current ring buffer.
197
+ * @since v0.1.0
198
+ */
199
+ async readLatest(ctx) {
200
+ const ledger = await this.fetchNullable("memoryLedger", ctx.ledgerPda);
201
+ if (!ledger)
202
+ return [];
203
+ return this.decodeRingBuffer(ledger.ring);
204
+ }
205
+ /**
206
+ * @name seal
207
+ * @description Seal the ring buffer into a permanent LedgerPage.
208
+ * Creates a write-once, never-delete archive (~0.031 SOL per page).
209
+ *
210
+ * @param ctx - Session context.
211
+ * @returns A {@link SealResult} with the transaction signature and page index.
212
+ * @since v0.1.0
213
+ */
214
+ async seal(ctx) {
215
+ const ledger = await this.fetch("memoryLedger", ctx.ledgerPda);
216
+ const pageIndex = ledger.numPages;
217
+ const [pagePda] = (0, pda_1.deriveLedgerPage)(ctx.ledgerPda, pageIndex);
218
+ const txSignature = await this.methods
219
+ .sealLedger()
220
+ .accounts({
221
+ wallet: this.wallet,
222
+ session: ctx.sessionPda,
223
+ ledger: ctx.ledgerPda,
224
+ page: pagePda,
225
+ systemProgram: web3_js_1.SystemProgram.programId,
226
+ })
227
+ .rpc();
228
+ return { txSignature, pageIndex };
229
+ }
230
+ /**
231
+ * @name closeLedger
232
+ * @description Close the ledger and reclaim ~0.032 SOL rent.
233
+ *
234
+ * @param ctx - Session context.
235
+ * @returns The transaction signature.
236
+ * @since v0.1.0
237
+ */
238
+ async closeLedger(ctx) {
239
+ return this.methods
240
+ .closeLedger()
241
+ .accounts({
242
+ wallet: this.wallet,
243
+ session: ctx.sessionPda,
244
+ ledger: ctx.ledgerPda,
245
+ })
246
+ .rpc();
247
+ }
248
+ /**
249
+ * @name closeSession
250
+ * @description Close the session (no more writes allowed).
251
+ *
252
+ * @param ctx - Session context.
253
+ * @returns The transaction signature.
254
+ * @since v0.1.0
255
+ */
256
+ async closeSession(ctx) {
257
+ return this.methods
258
+ .closeSession()
259
+ .accounts({
260
+ wallet: this.wallet,
261
+ vault: ctx.vaultPda,
262
+ session: ctx.sessionPda,
263
+ })
264
+ .rpc();
265
+ }
266
+ /**
267
+ * @name close
268
+ * @description Full session teardown: close ledger → close session.
269
+ * Reclaims all rent. Idempotent — skips steps already done.
270
+ *
271
+ * @param ctx - Session context.
272
+ * @returns Resolves when the session is fully closed.
273
+ * @since v0.1.0
274
+ */
275
+ async close(ctx) {
276
+ const ledgerExists = await this.accountExists(ctx.ledgerPda);
277
+ if (ledgerExists) {
278
+ await this.closeLedger(ctx);
279
+ }
280
+ const sessionData = await this.fetchNullable("sessionLedger", ctx.sessionPda);
281
+ if (sessionData && !sessionData.isClosed) {
282
+ await this.closeSession(ctx);
283
+ }
284
+ }
285
+ // ── Status & Reading ─────────────────────────────────
286
+ /**
287
+ * @name getStatus
288
+ * @description Get the full status of a session.
289
+ * Returns vault/session/ledger existence, closure state, and metrics.
290
+ *
291
+ * @param ctx - Session context.
292
+ * @returns A {@link SessionStatus} with all session state information.
293
+ * @since v0.1.0
294
+ */
295
+ async getStatus(ctx) {
296
+ const [vaultExists, sessionData, ledgerData] = await Promise.all([
297
+ this.accountExists(ctx.vaultPda),
298
+ this.fetchNullable("sessionLedger", ctx.sessionPda),
299
+ this.fetchNullable("memoryLedger", ctx.ledgerPda),
300
+ ]);
301
+ return {
302
+ vaultExists,
303
+ sessionExists: sessionData !== null,
304
+ ledgerExists: ledgerData !== null,
305
+ isClosed: sessionData?.isClosed ?? false,
306
+ totalEntries: ledgerData?.numEntries ?? 0,
307
+ totalDataSize: ledgerData?.totalDataSize?.toString() ?? "0",
308
+ numPages: ledgerData?.numPages ?? 0,
309
+ merkleRoot: ledgerData
310
+ ? Buffer.from(ledgerData.merkleRoot).toString("hex")
311
+ : "0".repeat(64),
312
+ };
313
+ }
314
+ /**
315
+ * @name readPage
316
+ * @description Read a sealed archive page by index.
317
+ *
318
+ * @param ctx - Session context.
319
+ * @param pageIndex - Zero-based index of the sealed page.
320
+ * @returns An array of {@link RingBufferEntry} from the sealed page.
321
+ * @since v0.1.0
322
+ */
323
+ async readPage(ctx, pageIndex) {
324
+ const [pagePda] = (0, pda_1.deriveLedgerPage)(ctx.ledgerPda, pageIndex);
325
+ const page = await this.fetch("ledgerPage", pagePda);
326
+ return this.decodeRingBuffer(page.data);
327
+ }
328
+ /**
329
+ * @name readAll
330
+ * @description Read ALL data: ring buffer (latest) + all sealed pages (history).
331
+ * Returns entries in chronological order (oldest first).
332
+ *
333
+ * @param ctx - Session context.
334
+ * @returns An array of all {@link RingBufferEntry} in chronological order.
335
+ * @since v0.1.0
336
+ */
337
+ async readAll(ctx) {
338
+ const ledger = await this.fetchNullable("memoryLedger", ctx.ledgerPda);
339
+ if (!ledger)
340
+ return [];
341
+ const allEntries = [];
342
+ // Read all sealed pages (oldest first)
343
+ for (let i = 0; i < ledger.numPages; i++) {
344
+ const pageEntries = await this.readPage(ctx, i);
345
+ allEntries.push(...pageEntries);
346
+ }
347
+ // Append current ring buffer (latest)
348
+ const ringEntries = this.decodeRingBuffer(ledger.ring);
349
+ allEntries.push(...ringEntries);
350
+ return allEntries;
351
+ }
352
+ // ── Internals ────────────────────────────────────────
353
+ /**
354
+ * @name decodeRingBuffer
355
+ * @description Decode a raw ring buffer byte array into structured entries.
356
+ * Parses length-prefixed (u16 LE) entries from the byte stream.
357
+ * @param ring - Raw ring buffer bytes.
358
+ * @returns An array of decoded {@link RingBufferEntry}.
359
+ * @private
360
+ */
361
+ decodeRingBuffer(ring) {
362
+ const buf = Buffer.from(ring);
363
+ const entries = [];
364
+ let offset = 0;
365
+ while (offset + 2 <= buf.length) {
366
+ const len = buf.readUInt16LE(offset);
367
+ if (len === 0)
368
+ break;
369
+ offset += 2;
370
+ if (offset + len > buf.length)
371
+ break;
372
+ const data = new Uint8Array(buf.subarray(offset, offset + len));
373
+ entries.push({
374
+ data,
375
+ text: Buffer.from(data).toString("utf-8"),
376
+ size: len,
377
+ });
378
+ offset += len;
379
+ }
380
+ return entries;
381
+ }
382
+ /**
383
+ * @name accountExists
384
+ * @description Check if an on-chain account exists at the given PDA.
385
+ * @param pda - Account public key to check.
386
+ * @returns `true` if the account exists, `false` otherwise.
387
+ * @private
388
+ */
389
+ async accountExists(pda) {
390
+ const info = await this.program.provider.connection.getAccountInfo(pda);
391
+ return info !== null;
392
+ }
393
+ /**
394
+ * @name methods
395
+ * @description Accessor for the Anchor program methods namespace.
396
+ * @returns The program methods object for building RPC calls.
397
+ * @private
398
+ */
399
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
400
+ get methods() {
401
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
402
+ return this.program.methods;
403
+ }
404
+ /**
405
+ * @name fetch
406
+ * @description Fetch an on-chain account by name and PDA. Throws if not found.
407
+ * @param name - Anchor account discriminator name.
408
+ * @param pda - Account public key to fetch.
409
+ * @returns The deserialized account data.
410
+ * @throws If the account does not exist.
411
+ * @private
412
+ */
413
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
414
+ async fetch(name, pda) {
415
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any
416
+ return this.program.account[name].fetch(pda);
417
+ }
418
+ /**
419
+ * @name fetchNullable
420
+ * @description Fetch an on-chain account by name and PDA. Returns `null` if not found.
421
+ * @param name - Anchor account discriminator name.
422
+ * @param pda - Account public key to fetch.
423
+ * @returns The deserialized account data, or `null` if the account does not exist.
424
+ * @private
425
+ */
426
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
427
+ async fetchNullable(name, pda) {
428
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any
429
+ return this.program.account[name].fetchNullable(pda);
430
+ }
431
+ }
432
+ exports.SessionManager = SessionManager;
433
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/registries/session.ts"],"names":[],"mappings":"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"}