@opendatalabs/personal-server-ts-core 0.0.1-canary.0078f25

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 (189) hide show
  1. package/dist/auth/web3-signed.d.ts +48 -0
  2. package/dist/auth/web3-signed.d.ts.map +1 -0
  3. package/dist/auth/web3-signed.js +110 -0
  4. package/dist/auth/web3-signed.js.map +1 -0
  5. package/dist/config/defaults.d.ts +12 -0
  6. package/dist/config/defaults.d.ts.map +1 -0
  7. package/dist/config/defaults.js +14 -0
  8. package/dist/config/defaults.js.map +1 -0
  9. package/dist/config/index.d.ts +4 -0
  10. package/dist/config/index.d.ts.map +1 -0
  11. package/dist/config/index.js +4 -0
  12. package/dist/config/index.js.map +1 -0
  13. package/dist/config/loader.d.ts +8 -0
  14. package/dist/config/loader.d.ts.map +1 -0
  15. package/dist/config/loader.js +38 -0
  16. package/dist/config/loader.js.map +1 -0
  17. package/dist/config/paths.d.ts +9 -0
  18. package/dist/config/paths.d.ts.map +1 -0
  19. package/dist/config/paths.js +22 -0
  20. package/dist/config/paths.js.map +1 -0
  21. package/dist/errors/catalog.d.ts +41 -0
  22. package/dist/errors/catalog.d.ts.map +1 -0
  23. package/dist/errors/catalog.js +79 -0
  24. package/dist/errors/catalog.js.map +1 -0
  25. package/dist/gateway/client.d.ts +98 -0
  26. package/dist/gateway/client.d.ts.map +1 -0
  27. package/dist/gateway/client.js +171 -0
  28. package/dist/gateway/client.js.map +1 -0
  29. package/dist/grants/eip712.d.ts +28 -0
  30. package/dist/grants/eip712.d.ts.map +1 -0
  31. package/dist/grants/eip712.js +30 -0
  32. package/dist/grants/eip712.js.map +1 -0
  33. package/dist/grants/index.d.ts +5 -0
  34. package/dist/grants/index.d.ts.map +1 -0
  35. package/dist/grants/index.js +3 -0
  36. package/dist/grants/index.js.map +1 -0
  37. package/dist/grants/types.d.ts +29 -0
  38. package/dist/grants/types.d.ts.map +1 -0
  39. package/dist/grants/types.js +6 -0
  40. package/dist/grants/types.js.map +1 -0
  41. package/dist/grants/verify.d.ts +24 -0
  42. package/dist/grants/verify.d.ts.map +1 -0
  43. package/dist/grants/verify.js +71 -0
  44. package/dist/grants/verify.js.map +1 -0
  45. package/dist/keys/derive.d.ts +18 -0
  46. package/dist/keys/derive.d.ts.map +1 -0
  47. package/dist/keys/derive.js +43 -0
  48. package/dist/keys/derive.js.map +1 -0
  49. package/dist/keys/index.d.ts +3 -0
  50. package/dist/keys/index.d.ts.map +1 -0
  51. package/dist/keys/index.js +3 -0
  52. package/dist/keys/index.js.map +1 -0
  53. package/dist/keys/server-account.d.ts +28 -0
  54. package/dist/keys/server-account.d.ts.map +1 -0
  55. package/dist/keys/server-account.js +48 -0
  56. package/dist/keys/server-account.js.map +1 -0
  57. package/dist/logger/index.d.ts +5 -0
  58. package/dist/logger/index.d.ts.map +1 -0
  59. package/dist/logger/index.js +9 -0
  60. package/dist/logger/index.js.map +1 -0
  61. package/dist/logging/access-log.d.ts +15 -0
  62. package/dist/logging/access-log.d.ts.map +1 -0
  63. package/dist/logging/access-log.js +25 -0
  64. package/dist/logging/access-log.js.map +1 -0
  65. package/dist/logging/access-reader.d.ts +19 -0
  66. package/dist/logging/access-reader.d.ts.map +1 -0
  67. package/dist/logging/access-reader.js +50 -0
  68. package/dist/logging/access-reader.js.map +1 -0
  69. package/dist/schemas/data-file.d.ts +20 -0
  70. package/dist/schemas/data-file.d.ts.map +1 -0
  71. package/dist/schemas/data-file.js +23 -0
  72. package/dist/schemas/data-file.js.map +1 -0
  73. package/dist/schemas/server-config.d.ts +116 -0
  74. package/dist/schemas/server-config.d.ts.map +1 -0
  75. package/dist/schemas/server-config.js +131 -0
  76. package/dist/schemas/server-config.js.map +1 -0
  77. package/dist/scopes/index.d.ts +3 -0
  78. package/dist/scopes/index.d.ts.map +1 -0
  79. package/dist/scopes/index.js +3 -0
  80. package/dist/scopes/index.js.map +1 -0
  81. package/dist/scopes/match.d.ts +13 -0
  82. package/dist/scopes/match.d.ts.map +1 -0
  83. package/dist/scopes/match.js +23 -0
  84. package/dist/scopes/match.js.map +1 -0
  85. package/dist/scopes/parse.d.ts +12 -0
  86. package/dist/scopes/parse.d.ts.map +1 -0
  87. package/dist/scopes/parse.js +29 -0
  88. package/dist/scopes/parse.js.map +1 -0
  89. package/dist/signing/eip712.d.ts +69 -0
  90. package/dist/signing/eip712.d.ts.map +1 -0
  91. package/dist/signing/eip712.js +68 -0
  92. package/dist/signing/eip712.js.map +1 -0
  93. package/dist/signing/index.d.ts +4 -0
  94. package/dist/signing/index.d.ts.map +1 -0
  95. package/dist/signing/index.js +4 -0
  96. package/dist/signing/index.js.map +1 -0
  97. package/dist/signing/request-signer.d.ts +12 -0
  98. package/dist/signing/request-signer.d.ts.map +1 -0
  99. package/dist/signing/request-signer.js +48 -0
  100. package/dist/signing/request-signer.js.map +1 -0
  101. package/dist/signing/signer.d.ts +14 -0
  102. package/dist/signing/signer.d.ts.map +1 -0
  103. package/dist/signing/signer.js +37 -0
  104. package/dist/signing/signer.js.map +1 -0
  105. package/dist/storage/adapters/index.d.ts +3 -0
  106. package/dist/storage/adapters/index.d.ts.map +1 -0
  107. package/dist/storage/adapters/index.js +2 -0
  108. package/dist/storage/adapters/index.js.map +1 -0
  109. package/dist/storage/adapters/interface.d.ts +47 -0
  110. package/dist/storage/adapters/interface.d.ts.map +1 -0
  111. package/dist/storage/adapters/interface.js +2 -0
  112. package/dist/storage/adapters/interface.js.map +1 -0
  113. package/dist/storage/adapters/vana.d.ts +32 -0
  114. package/dist/storage/adapters/vana.d.ts.map +1 -0
  115. package/dist/storage/adapters/vana.js +96 -0
  116. package/dist/storage/adapters/vana.js.map +1 -0
  117. package/dist/storage/encryption/decrypt.d.ts +10 -0
  118. package/dist/storage/encryption/decrypt.d.ts.map +1 -0
  119. package/dist/storage/encryption/decrypt.js +19 -0
  120. package/dist/storage/encryption/decrypt.js.map +1 -0
  121. package/dist/storage/encryption/encrypt.d.ts +10 -0
  122. package/dist/storage/encryption/encrypt.d.ts.map +1 -0
  123. package/dist/storage/encryption/encrypt.js +19 -0
  124. package/dist/storage/encryption/encrypt.js.map +1 -0
  125. package/dist/storage/encryption/index.d.ts +3 -0
  126. package/dist/storage/encryption/index.d.ts.map +1 -0
  127. package/dist/storage/encryption/index.js +3 -0
  128. package/dist/storage/encryption/index.js.map +1 -0
  129. package/dist/storage/hierarchy/index.d.ts +4 -0
  130. package/dist/storage/hierarchy/index.d.ts.map +1 -0
  131. package/dist/storage/hierarchy/index.js +3 -0
  132. package/dist/storage/hierarchy/index.js.map +1 -0
  133. package/dist/storage/hierarchy/manager.d.ts +23 -0
  134. package/dist/storage/hierarchy/manager.d.ts.map +1 -0
  135. package/dist/storage/hierarchy/manager.js +60 -0
  136. package/dist/storage/hierarchy/manager.js.map +1 -0
  137. package/dist/storage/hierarchy/paths.d.ts +11 -0
  138. package/dist/storage/hierarchy/paths.d.ts.map +1 -0
  139. package/dist/storage/hierarchy/paths.js +36 -0
  140. package/dist/storage/hierarchy/paths.js.map +1 -0
  141. package/dist/storage/index/index.d.ts +4 -0
  142. package/dist/storage/index/index.d.ts.map +1 -0
  143. package/dist/storage/index/index.js +3 -0
  144. package/dist/storage/index/index.js.map +1 -0
  145. package/dist/storage/index/manager.d.ts +37 -0
  146. package/dist/storage/index/manager.d.ts.map +1 -0
  147. package/dist/storage/index/manager.js +132 -0
  148. package/dist/storage/index/manager.js.map +1 -0
  149. package/dist/storage/index/schema.d.ts +4 -0
  150. package/dist/storage/index/schema.d.ts.map +1 -0
  151. package/dist/storage/index/schema.js +27 -0
  152. package/dist/storage/index/schema.js.map +1 -0
  153. package/dist/storage/index/types.d.ts +20 -0
  154. package/dist/storage/index/types.d.ts.map +1 -0
  155. package/dist/storage/index/types.js +2 -0
  156. package/dist/storage/index/types.js.map +1 -0
  157. package/dist/sync/cursor.d.ts +12 -0
  158. package/dist/sync/cursor.d.ts.map +1 -0
  159. package/dist/sync/cursor.js +19 -0
  160. package/dist/sync/cursor.js.map +1 -0
  161. package/dist/sync/engine/sync-manager.d.ts +25 -0
  162. package/dist/sync/engine/sync-manager.d.ts.map +1 -0
  163. package/dist/sync/engine/sync-manager.js +136 -0
  164. package/dist/sync/engine/sync-manager.js.map +1 -0
  165. package/dist/sync/index.d.ts +4 -0
  166. package/dist/sync/index.d.ts.map +1 -0
  167. package/dist/sync/index.js +3 -0
  168. package/dist/sync/index.js.map +1 -0
  169. package/dist/sync/types.d.ts +40 -0
  170. package/dist/sync/types.d.ts.map +1 -0
  171. package/dist/sync/types.js +2 -0
  172. package/dist/sync/types.js.map +1 -0
  173. package/dist/sync/workers/download.d.ts +41 -0
  174. package/dist/sync/workers/download.d.ts.map +1 -0
  175. package/dist/sync/workers/download.js +90 -0
  176. package/dist/sync/workers/download.js.map +1 -0
  177. package/dist/sync/workers/upload.d.ts +43 -0
  178. package/dist/sync/workers/upload.d.ts.map +1 -0
  179. package/dist/sync/workers/upload.js +75 -0
  180. package/dist/sync/workers/upload.js.map +1 -0
  181. package/dist/test-utils/index.d.ts +2 -0
  182. package/dist/test-utils/index.d.ts.map +1 -0
  183. package/dist/test-utils/index.js +2 -0
  184. package/dist/test-utils/index.js.map +1 -0
  185. package/dist/test-utils/wallet.d.ts +40 -0
  186. package/dist/test-utils/wallet.d.ts.map +1 -0
  187. package/dist/test-utils/wallet.js +74 -0
  188. package/dist/test-utils/wallet.js.map +1 -0
  189. package/package.json +115 -0
@@ -0,0 +1,68 @@
1
+ /**
2
+ * EIP-712 domain and type definitions for gateway write operations.
3
+ * Must match the gateway's lib/eip712.ts exactly.
4
+ */
5
+ const DOMAIN_NAME = "Vana Data Portability";
6
+ const DOMAIN_VERSION = "1";
7
+ /** Build a domain for a specific verifying contract. */
8
+ function buildDomain(chainId, verifyingContract) {
9
+ return {
10
+ name: DOMAIN_NAME,
11
+ version: DOMAIN_VERSION,
12
+ chainId,
13
+ verifyingContract,
14
+ };
15
+ }
16
+ export function fileRegistrationDomain(config) {
17
+ return buildDomain(config.chainId, config.contracts.dataRegistry);
18
+ }
19
+ export function grantRegistrationDomain(config) {
20
+ return buildDomain(config.chainId, config.contracts.dataPortabilityPermissions);
21
+ }
22
+ export function grantRevocationDomain(config) {
23
+ return buildDomain(config.chainId, config.contracts.dataPortabilityPermissions);
24
+ }
25
+ export const FILE_REGISTRATION_TYPES = {
26
+ FileRegistration: [
27
+ { name: "ownerAddress", type: "address" },
28
+ { name: "url", type: "string" },
29
+ { name: "schemaId", type: "bytes32" },
30
+ ],
31
+ };
32
+ export const GRANT_REGISTRATION_TYPES = {
33
+ GrantRegistration: [
34
+ { name: "grantorAddress", type: "address" },
35
+ { name: "granteeId", type: "bytes32" },
36
+ { name: "grant", type: "string" },
37
+ { name: "fileIds", type: "uint256[]" },
38
+ ],
39
+ };
40
+ export const GRANT_REVOCATION_TYPES = {
41
+ GrantRevocation: [
42
+ { name: "grantorAddress", type: "address" },
43
+ { name: "grantId", type: "bytes32" },
44
+ ],
45
+ };
46
+ export function serverRegistrationDomain(config) {
47
+ return buildDomain(config.chainId, config.contracts.dataPortabilityServer);
48
+ }
49
+ export const SERVER_REGISTRATION_TYPES = {
50
+ ServerRegistration: [
51
+ { name: "ownerAddress", type: "address" },
52
+ { name: "serverAddress", type: "address" },
53
+ { name: "publicKey", type: "string" },
54
+ { name: "serverUrl", type: "string" },
55
+ ],
56
+ };
57
+ export function builderRegistrationDomain(config) {
58
+ return buildDomain(config.chainId, config.contracts.dataPortabilityGrantees);
59
+ }
60
+ export const BUILDER_REGISTRATION_TYPES = {
61
+ BuilderRegistration: [
62
+ { name: "ownerAddress", type: "address" },
63
+ { name: "granteeAddress", type: "address" },
64
+ { name: "publicKey", type: "string" },
65
+ { name: "appUrl", type: "string" },
66
+ ],
67
+ };
68
+ //# sourceMappingURL=eip712.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eip712.js","sourceRoot":"","sources":["../../src/signing/eip712.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,GAAG,uBAAuB,CAAC;AAC5C,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,wDAAwD;AACxD,SAAS,WAAW,CAClB,OAAe,EACf,iBAAgC;IAEhC,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,cAAc;QACvB,OAAO;QACP,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAqB;IAC1D,OAAO,WAAW,CAChB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,SAAS,CAAC,YAA6B,CAC/C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,MAAqB;IAErB,OAAO,WAAW,CAChB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,SAAS,CAAC,0BAA2C,CAC7D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAqB;IACzD,OAAO,WAAW,CAChB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,SAAS,CAAC,0BAA2C,CAC7D,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,gBAAgB,EAAE;QAChB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE;QACzC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC/B,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;KACtC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,iBAAiB,EAAE;QACjB,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3C,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE;QACtC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;QACjC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;KACvC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,eAAe,EAAE;QACf,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;KACrC;CACF,CAAC;AAoBF,MAAM,UAAU,wBAAwB,CACtC,MAAqB;IAErB,OAAO,WAAW,CAChB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,SAAS,CAAC,qBAAsC,CACxD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,kBAAkB,EAAE;QAClB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE;QACzC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE;QAC1C,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;QACrC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;KACtC;CACF,CAAC;AASF,MAAM,UAAU,yBAAyB,CACvC,MAAqB;IAErB,OAAO,WAAW,CAChB,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,SAAS,CAAC,uBAAwC,CAC1D,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,mBAAmB,EAAE;QACnB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE;QACzC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3C,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;QACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;KACnC;CACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { fileRegistrationDomain, grantRegistrationDomain, grantRevocationDomain, serverRegistrationDomain, builderRegistrationDomain, FILE_REGISTRATION_TYPES, GRANT_REGISTRATION_TYPES, GRANT_REVOCATION_TYPES, SERVER_REGISTRATION_TYPES, BUILDER_REGISTRATION_TYPES, type FileRegistrationMessage, type GrantRegistrationMessage, type GrantRevocationMessage, type ServerRegistrationMessage, type BuilderRegistrationMessage, } from "./eip712.js";
2
+ export { createServerSigner, type ServerSigner } from "./signer.js";
3
+ export { createRequestSigner } from "./request-signer.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,0BAA0B,GAChC,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { fileRegistrationDomain, grantRegistrationDomain, grantRevocationDomain, serverRegistrationDomain, builderRegistrationDomain, FILE_REGISTRATION_TYPES, GRANT_REGISTRATION_TYPES, GRANT_REVOCATION_TYPES, SERVER_REGISTRATION_TYPES, BUILDER_REGISTRATION_TYPES, } from "./eip712.js";
2
+ export { createServerSigner } from "./signer.js";
3
+ export { createRequestSigner } from "./request-signer.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,GAM3B,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * RequestSigner — produces Web3Signed Authorization headers for HTTP requests.
3
+ * Used by the Vana Storage adapter for authenticated blob operations.
4
+ */
5
+ import type { ServerAccount } from "../keys/server-account.js";
6
+ import type { RequestSigner } from "../storage/adapters/vana.js";
7
+ /**
8
+ * Create a RequestSigner that produces Web3Signed Authorization headers
9
+ * using the server account's EIP-191 signing capability.
10
+ */
11
+ export declare function createRequestSigner(account: ServerAccount): RequestSigner;
12
+ //# sourceMappingURL=request-signer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-signer.d.ts","sourceRoot":"","sources":["../../src/signing/request-signer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAWjE;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,aAAa,CAuCzE"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * RequestSigner — produces Web3Signed Authorization headers for HTTP requests.
3
+ * Used by the Vana Storage adapter for authenticated blob operations.
4
+ */
5
+ import { createHash } from "node:crypto";
6
+ /** Base64url encode a string (no padding). */
7
+ function base64urlEncode(input) {
8
+ return Buffer.from(input, "utf-8")
9
+ .toString("base64")
10
+ .replace(/\+/g, "-")
11
+ .replace(/\//g, "_")
12
+ .replace(/=+$/, "");
13
+ }
14
+ /**
15
+ * Create a RequestSigner that produces Web3Signed Authorization headers
16
+ * using the server account's EIP-191 signing capability.
17
+ */
18
+ export function createRequestSigner(account) {
19
+ return {
20
+ async signRequest(params) {
21
+ const now = Math.floor(Date.now() / 1000);
22
+ const payload = {
23
+ aud: params.aud,
24
+ // SHA256 of empty string is a well-known constant
25
+ bodyHash: params.body
26
+ ? `sha256:${createHash("sha256").update(params.body).digest("hex")}`
27
+ : "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
28
+ exp: now + 300,
29
+ iat: now,
30
+ method: params.method,
31
+ uri: params.uri,
32
+ };
33
+ // Sort keys for deterministic serialization
34
+ const sortedPayload = Object.keys(payload)
35
+ .sort()
36
+ .reduce((acc, key) => {
37
+ acc[key] = payload[key];
38
+ return acc;
39
+ }, {});
40
+ const payloadJson = JSON.stringify(sortedPayload);
41
+ const payloadBase64 = base64urlEncode(payloadJson);
42
+ // Sign the base64url string via EIP-191
43
+ const signature = await account.signMessage(payloadBase64);
44
+ return `Web3Signed ${payloadBase64}.${signature}`;
45
+ },
46
+ };
47
+ }
48
+ //# sourceMappingURL=request-signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-signer.js","sourceRoot":"","sources":["../../src/signing/request-signer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,8CAA8C;AAC9C,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;SAC/B,QAAQ,CAAC,QAAQ,CAAC;SAClB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAsB;IACxD,OAAO;QACL,KAAK,CAAC,WAAW,CAAC,MAKjB;YACC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAE1C,MAAM,OAAO,GAA4B;gBACvC,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,kDAAkD;gBAClD,QAAQ,EAAE,MAAM,CAAC,IAAI;oBACnB,CAAC,CAAC,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBACpE,CAAC,CAAC,yEAAyE;gBAC7E,GAAG,EAAE,GAAG,GAAG,GAAG;gBACd,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,GAAG,EAAE,MAAM,CAAC,GAAG;aAChB,CAAC;YAEF,4CAA4C;YAC5C,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;iBACvC,IAAI,EAAE;iBACN,MAAM,CAA0B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBAC5C,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;gBACxB,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAAE,CAAC,CAAC;YAET,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAClD,MAAM,aAAa,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;YAEnD,wCAAwC;YACxC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YAE3D,OAAO,cAAc,aAAa,IAAI,SAAS,EAAE,CAAC;QACpD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * ServerSigner — signs EIP-712 messages for gateway write operations.
3
+ * Uses the ServerAccount's derived key for all signatures.
4
+ */
5
+ import type { ServerAccount } from "../keys/server-account.js";
6
+ import type { GatewayConfig } from "../schemas/server-config.js";
7
+ import { type FileRegistrationMessage, type GrantRegistrationMessage, type GrantRevocationMessage } from "./eip712.js";
8
+ export interface ServerSigner {
9
+ signFileRegistration(msg: FileRegistrationMessage): Promise<`0x${string}`>;
10
+ signGrantRegistration(msg: GrantRegistrationMessage): Promise<`0x${string}`>;
11
+ signGrantRevocation(msg: GrantRevocationMessage): Promise<`0x${string}`>;
12
+ }
13
+ export declare function createServerSigner(account: ServerAccount, gatewayConfig: GatewayConfig): ServerSigner;
14
+ //# sourceMappingURL=signer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../../src/signing/signer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAOL,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC5B,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,YAAY;IAC3B,oBAAoB,CAAC,GAAG,EAAE,uBAAuB,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;IAC3E,qBAAqB,CAAC,GAAG,EAAE,wBAAwB,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;IAC7E,mBAAmB,CAAC,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;CAC1E;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,aAAa,EACtB,aAAa,EAAE,aAAa,GAC3B,YAAY,CAsCd"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * ServerSigner — signs EIP-712 messages for gateway write operations.
3
+ * Uses the ServerAccount's derived key for all signatures.
4
+ */
5
+ import { fileRegistrationDomain, grantRegistrationDomain, grantRevocationDomain, FILE_REGISTRATION_TYPES, GRANT_REGISTRATION_TYPES, GRANT_REVOCATION_TYPES, } from "./eip712.js";
6
+ export function createServerSigner(account, gatewayConfig) {
7
+ return {
8
+ async signFileRegistration(msg) {
9
+ return account.signTypedData({
10
+ domain: fileRegistrationDomain(gatewayConfig),
11
+ types: FILE_REGISTRATION_TYPES,
12
+ primaryType: "FileRegistration",
13
+ message: msg,
14
+ });
15
+ },
16
+ async signGrantRegistration(msg) {
17
+ return account.signTypedData({
18
+ domain: grantRegistrationDomain(gatewayConfig),
19
+ types: GRANT_REGISTRATION_TYPES,
20
+ primaryType: "GrantRegistration",
21
+ message: {
22
+ ...msg,
23
+ fileIds: msg.fileIds.map((id) => id),
24
+ },
25
+ });
26
+ },
27
+ async signGrantRevocation(msg) {
28
+ return account.signTypedData({
29
+ domain: grantRevocationDomain(gatewayConfig),
30
+ types: GRANT_REVOCATION_TYPES,
31
+ primaryType: "GrantRevocation",
32
+ message: msg,
33
+ });
34
+ },
35
+ };
36
+ }
37
+ //# sourceMappingURL=signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signer.js","sourceRoot":"","sources":["../../src/signing/signer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,GAIvB,MAAM,aAAa,CAAC;AAQrB,MAAM,UAAU,kBAAkB,CAChC,OAAsB,EACtB,aAA4B;IAE5B,OAAO;QACL,KAAK,CAAC,oBAAoB,CACxB,GAA4B;YAE5B,OAAO,OAAO,CAAC,aAAa,CAAC;gBAC3B,MAAM,EAAE,sBAAsB,CAAC,aAAa,CAAC;gBAC7C,KAAK,EAAE,uBAAuB;gBAC9B,WAAW,EAAE,kBAAkB;gBAC/B,OAAO,EAAE,GAAyC;aACnD,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,qBAAqB,CACzB,GAA6B;YAE7B,OAAO,OAAO,CAAC,aAAa,CAAC;gBAC3B,MAAM,EAAE,uBAAuB,CAAC,aAAa,CAAC;gBAC9C,KAAK,EAAE,wBAAwB;gBAC/B,WAAW,EAAE,mBAAmB;gBAChC,OAAO,EAAE;oBACP,GAAG,GAAG;oBACN,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;iBACC;aACxC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,mBAAmB,CACvB,GAA2B;YAE3B,OAAO,OAAO,CAAC,aAAa,CAAC;gBAC3B,MAAM,EAAE,qBAAqB,CAAC,aAAa,CAAC;gBAC5C,KAAK,EAAE,sBAAsB;gBAC7B,WAAW,EAAE,iBAAiB;gBAC9B,OAAO,EAAE,GAAyC;aACnD,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type { StorageAdapter } from "./interface.js";
2
+ export { createVanaStorageAdapter, type VanaStorageOptions, type RequestSigner, } from "./vana.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/adapters/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EACL,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,KAAK,aAAa,GACnB,MAAM,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createVanaStorageAdapter, } from "./vana.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/adapters/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,GAGzB,MAAM,WAAW,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Abstract storage backend adapter.
3
+ * All methods operate on encrypted binary blobs.
4
+ * Keys are opaque strings (e.g., "{scope}/{collectedAt}").
5
+ */
6
+ export interface StorageAdapter {
7
+ /**
8
+ * Upload an encrypted blob to the storage backend.
9
+ * @param key - unique storage key / path
10
+ * @param data - encrypted binary data
11
+ * @returns URL where the blob is accessible
12
+ */
13
+ upload(key: string, data: Uint8Array): Promise<string>;
14
+ /**
15
+ * Download an encrypted blob from the storage backend.
16
+ * @param url - storage URL returned by upload()
17
+ * @returns encrypted binary data
18
+ * @throws if blob not found
19
+ */
20
+ download(url: string): Promise<Uint8Array>;
21
+ /**
22
+ * Delete an encrypted blob from the storage backend.
23
+ * @param url - storage URL
24
+ * @returns true if deleted, false if not found
25
+ */
26
+ delete(url: string): Promise<boolean>;
27
+ /**
28
+ * Check if a blob exists in the storage backend.
29
+ * @param url - storage URL
30
+ * @returns true if blob exists
31
+ */
32
+ exists(url: string): Promise<boolean>;
33
+ /**
34
+ * Bulk delete all blobs for a scope.
35
+ * Optional — not all backends support bulk delete.
36
+ * @param scope - scope identifier (dot notation)
37
+ * @returns count of blobs deleted
38
+ */
39
+ deleteScope?(scope: string): Promise<number>;
40
+ /**
41
+ * Delete all blobs for the owner.
42
+ * Optional — not all backends support bulk delete.
43
+ * @returns count of blobs deleted
44
+ */
45
+ deleteAll?(): Promise<number>;
46
+ }
47
+ //# sourceMappingURL=interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/storage/adapters/interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvD;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAE3C;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtC;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtC;;;;;OAKG;IACH,WAAW,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE7C;;;;OAIG;IACH,SAAS,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../../src/storage/adapters/interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Vana Storage adapter.
3
+ * Uses REST: PUT/GET/DELETE/HEAD against {apiUrl}/v1/blobs/{ownerAddress}/{key}
4
+ * Auth: Web3Signed header on all requests (see vana-storage-design.md Section 3).
5
+ * URL format: full HTTPS URL (no vana:// scheme).
6
+ */
7
+ import type { StorageAdapter } from "./interface.js";
8
+ /**
9
+ * Signs HTTP requests for Web3Signed auth.
10
+ * Produces "Web3Signed {base64url(payload)}.{signature}" header values.
11
+ * Implementation provided by the caller (typically wraps the server keypair).
12
+ */
13
+ export interface RequestSigner {
14
+ /**
15
+ * Produce a Web3Signed Authorization header value for an HTTP request.
16
+ * @param params - request metadata to sign
17
+ * @returns full Authorization header value (e.g., "Web3Signed ...")
18
+ */
19
+ signRequest(params: {
20
+ aud: string;
21
+ method: string;
22
+ uri: string;
23
+ body?: Uint8Array;
24
+ }): Promise<string>;
25
+ }
26
+ export interface VanaStorageOptions {
27
+ apiUrl: string;
28
+ ownerAddress: string;
29
+ signer: RequestSigner;
30
+ }
31
+ export declare function createVanaStorageAdapter(options: VanaStorageOptions): StorageAdapter;
32
+ //# sourceMappingURL=vana.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vana.d.ts","sourceRoot":"","sources":["../../../src/storage/adapters/vana.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,CAAC,EAAE,UAAU,CAAC;KACnB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,kBAAkB,GAC1B,cAAc,CA6GhB"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Vana Storage adapter.
3
+ * Uses REST: PUT/GET/DELETE/HEAD against {apiUrl}/v1/blobs/{ownerAddress}/{key}
4
+ * Auth: Web3Signed header on all requests (see vana-storage-design.md Section 3).
5
+ * URL format: full HTTPS URL (no vana:// scheme).
6
+ */
7
+ export function createVanaStorageAdapter(options) {
8
+ const base = options.apiUrl.replace(/\/+$/, "");
9
+ const { ownerAddress, signer } = options;
10
+ function blobUrl(key) {
11
+ return `${base}/v1/blobs/${ownerAddress}/${key}`;
12
+ }
13
+ async function authHeaders(method, uri, body) {
14
+ const header = await signer.signRequest({
15
+ aud: options.apiUrl,
16
+ method,
17
+ uri,
18
+ body,
19
+ });
20
+ return { Authorization: header };
21
+ }
22
+ return {
23
+ async upload(key, data) {
24
+ const url = blobUrl(key);
25
+ const uri = `/v1/blobs/${ownerAddress}/${key}`;
26
+ const auth = await authHeaders("PUT", uri, data);
27
+ const res = await fetch(url, {
28
+ method: "PUT",
29
+ body: Buffer.from(data),
30
+ headers: {
31
+ "Content-Type": "application/octet-stream",
32
+ ...auth,
33
+ },
34
+ });
35
+ if (!res.ok) {
36
+ throw new Error(`Vana Storage upload failed: ${res.status} ${res.statusText}`);
37
+ }
38
+ return url;
39
+ },
40
+ async download(storageUrl) {
41
+ const uri = new URL(storageUrl).pathname;
42
+ const auth = await authHeaders("GET", uri);
43
+ const res = await fetch(storageUrl, { headers: auth });
44
+ if (res.status === 404) {
45
+ throw new Error(`Blob not found: ${storageUrl}`);
46
+ }
47
+ if (!res.ok) {
48
+ throw new Error(`Vana Storage download failed: ${res.status} ${res.statusText}`);
49
+ }
50
+ return new Uint8Array(await res.arrayBuffer());
51
+ },
52
+ async delete(storageUrl) {
53
+ const uri = new URL(storageUrl).pathname;
54
+ const auth = await authHeaders("DELETE", uri);
55
+ const res = await fetch(storageUrl, {
56
+ method: "DELETE",
57
+ headers: auth,
58
+ });
59
+ if (res.status === 404)
60
+ return false;
61
+ if (!res.ok) {
62
+ throw new Error(`Vana Storage delete failed: ${res.status} ${res.statusText}`);
63
+ }
64
+ return true;
65
+ },
66
+ async exists(storageUrl) {
67
+ const uri = new URL(storageUrl).pathname;
68
+ const auth = await authHeaders("HEAD", uri);
69
+ const res = await fetch(storageUrl, { method: "HEAD", headers: auth });
70
+ return res.ok;
71
+ },
72
+ async deleteScope(scope) {
73
+ const url = `${base}/v1/blobs/${ownerAddress}/${scope}`;
74
+ const uri = `/v1/blobs/${ownerAddress}/${scope}`;
75
+ const auth = await authHeaders("DELETE", uri);
76
+ const res = await fetch(url, { method: "DELETE", headers: auth });
77
+ if (!res.ok) {
78
+ throw new Error(`Vana Storage deleteScope failed: ${res.status} ${res.statusText}`);
79
+ }
80
+ const body = (await res.json());
81
+ return body.count ?? 0;
82
+ },
83
+ async deleteAll() {
84
+ const url = `${base}/v1/blobs/${ownerAddress}`;
85
+ const uri = `/v1/blobs/${ownerAddress}`;
86
+ const auth = await authHeaders("DELETE", uri);
87
+ const res = await fetch(url, { method: "DELETE", headers: auth });
88
+ if (!res.ok) {
89
+ throw new Error(`Vana Storage deleteAll failed: ${res.status} ${res.statusText}`);
90
+ }
91
+ const body = (await res.json());
92
+ return body.count ?? 0;
93
+ },
94
+ };
95
+ }
96
+ //# sourceMappingURL=vana.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vana.js","sourceRoot":"","sources":["../../../src/storage/adapters/vana.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Decrypt an OpenPGP password-encrypted binary.
3
+ *
4
+ * @param encrypted - OpenPGP encrypted binary data
5
+ * @param password - hex-encoded scope key
6
+ * @returns plaintext Uint8Array
7
+ * @throws if password is wrong or data is corrupted
8
+ */
9
+ export declare function decryptWithPassword(encrypted: Uint8Array, password: string): Promise<Uint8Array>;
10
+ //# sourceMappingURL=decrypt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decrypt.d.ts","sourceRoot":"","sources":["../../../src/storage/encryption/decrypt.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,UAAU,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CAQrB"}
@@ -0,0 +1,19 @@
1
+ import * as openpgp from "openpgp";
2
+ /**
3
+ * Decrypt an OpenPGP password-encrypted binary.
4
+ *
5
+ * @param encrypted - OpenPGP encrypted binary data
6
+ * @param password - hex-encoded scope key
7
+ * @returns plaintext Uint8Array
8
+ * @throws if password is wrong or data is corrupted
9
+ */
10
+ export async function decryptWithPassword(encrypted, password) {
11
+ const message = await openpgp.readMessage({ binaryMessage: encrypted });
12
+ const { data } = await openpgp.decrypt({
13
+ message,
14
+ passwords: [password],
15
+ format: "binary",
16
+ });
17
+ return data;
18
+ }
19
+ //# sourceMappingURL=decrypt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decrypt.js","sourceRoot":"","sources":["../../../src/storage/encryption/decrypt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAqB,EACrB,QAAgB;IAEhB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC;IACxE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;QACrC,OAAO;QACP,SAAS,EAAE,CAAC,QAAQ,CAAC;QACrB,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC;IACH,OAAO,IAAkB,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Encrypt plaintext using OpenPGP password-based encryption.
3
+ * Produces the same binary format as vana-sdk.
4
+ *
5
+ * @param plaintext - data to encrypt (typically JSON.stringify of envelope)
6
+ * @param password - hex-encoded scope key from deriveScopeKey()
7
+ * @returns OpenPGP encrypted binary (Uint8Array)
8
+ */
9
+ export declare function encryptWithPassword(plaintext: Uint8Array, password: string): Promise<Uint8Array>;
10
+ //# sourceMappingURL=encrypt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encrypt.d.ts","sourceRoot":"","sources":["../../../src/storage/encryption/encrypt.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,UAAU,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CAQrB"}
@@ -0,0 +1,19 @@
1
+ import * as openpgp from "openpgp";
2
+ /**
3
+ * Encrypt plaintext using OpenPGP password-based encryption.
4
+ * Produces the same binary format as vana-sdk.
5
+ *
6
+ * @param plaintext - data to encrypt (typically JSON.stringify of envelope)
7
+ * @param password - hex-encoded scope key from deriveScopeKey()
8
+ * @returns OpenPGP encrypted binary (Uint8Array)
9
+ */
10
+ export async function encryptWithPassword(plaintext, password) {
11
+ const message = await openpgp.createMessage({ binary: plaintext });
12
+ const encrypted = await openpgp.encrypt({
13
+ message,
14
+ passwords: [password],
15
+ format: "binary",
16
+ });
17
+ return encrypted;
18
+ }
19
+ //# sourceMappingURL=encrypt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encrypt.js","sourceRoot":"","sources":["../../../src/storage/encryption/encrypt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAqB,EACrB,QAAgB;IAEhB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;QACtC,OAAO;QACP,SAAS,EAAE,CAAC,QAAQ,CAAC;QACrB,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC;IACH,OAAO,SAAuB,CAAC;AACjC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { encryptWithPassword } from "./encrypt.js";
2
+ export { decryptWithPassword } from "./decrypt.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/encryption/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { encryptWithPassword } from "./encrypt.js";
2
+ export { decryptWithPassword } from "./decrypt.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/encryption/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { timestampToFilename, filenameToTimestamp, buildDataFilePath, buildScopeDir, generateCollectedAt, } from "./paths.js";
2
+ export { writeDataFile, readDataFile, listVersions, deleteDataFile, deleteAllForScope, } from "./manager.js";
3
+ export type { HierarchyManagerOptions, WriteResult } from "./manager.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/hierarchy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { timestampToFilename, filenameToTimestamp, buildDataFilePath, buildScopeDir, generateCollectedAt, } from "./paths.js";
2
+ export { writeDataFile, readDataFile, listVersions, deleteDataFile, deleteAllForScope, } from "./manager.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/hierarchy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,iBAAiB,GAClB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { DataFileEnvelope } from "../../schemas/data-file.js";
2
+ export interface HierarchyManagerOptions {
3
+ dataDir: string;
4
+ }
5
+ export interface WriteResult {
6
+ path: string;
7
+ relativePath: string;
8
+ sizeBytes: number;
9
+ }
10
+ /** Atomic write: mkdir -p, write temp file, rename */
11
+ export declare function writeDataFile(options: HierarchyManagerOptions, envelope: DataFileEnvelope): Promise<WriteResult>;
12
+ /** Read and parse a data file */
13
+ export declare function readDataFile(options: HierarchyManagerOptions, scope: string, collectedAt: string): Promise<DataFileEnvelope>;
14
+ /** List version filenames for a scope, newest first. Empty array if scope dir doesn't exist. */
15
+ export declare function listVersions(options: HierarchyManagerOptions, scope: string): Promise<string[]>;
16
+ /** Delete a single data file */
17
+ export declare function deleteDataFile(options: HierarchyManagerOptions, scope: string, collectedAt: string): Promise<void>;
18
+ /**
19
+ * Delete all files for a scope by removing the scope directory recursively.
20
+ * No-op if directory doesn't exist.
21
+ */
22
+ export declare function deleteAllForScope(options: HierarchyManagerOptions, scope: string): Promise<void>;
23
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/storage/hierarchy/manager.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAQnE,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,sDAAsD;AACtD,wBAAsB,aAAa,CACjC,OAAO,EAAE,uBAAuB,EAChC,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,WAAW,CAAC,CAuBtB;AAED,iCAAiC;AACjC,wBAAsB,YAAY,CAChC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,CAAC,CAI3B;AAED,gGAAgG;AAChG,wBAAsB,YAAY,CAChC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CAmBnB;AAED,gCAAgC;AAChC,wBAAsB,cAAc,CAClC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAGf;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAGf"}