@opendatalabs/personal-server-ts-core 0.0.1-canary.016adf9 → 0.0.1-canary.052d47e

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 (496) hide show
  1. package/dist/api/index.d.ts +361 -0
  2. package/dist/api/index.d.ts.map +1 -0
  3. package/dist/api/index.js +1213 -0
  4. package/dist/api/index.js.map +1 -0
  5. package/dist/auth/index.d.ts +2 -0
  6. package/dist/auth/index.d.ts.map +1 -0
  7. package/dist/auth/index.js +2 -0
  8. package/dist/auth/index.js.map +1 -0
  9. package/dist/auth/request.d.ts +28 -0
  10. package/dist/auth/request.d.ts.map +1 -0
  11. package/dist/auth/request.js +106 -0
  12. package/dist/auth/request.js.map +1 -0
  13. package/dist/client.d.ts +233 -0
  14. package/dist/client.d.ts.map +1 -0
  15. package/dist/client.js +243 -0
  16. package/dist/client.js.map +1 -0
  17. package/dist/config/defaults.d.ts +5 -5
  18. package/dist/config/defaults.d.ts.map +1 -1
  19. package/dist/config/defaults.js +3 -5
  20. package/dist/config/defaults.js.map +1 -1
  21. package/dist/config/index.d.ts +0 -1
  22. package/dist/config/index.d.ts.map +1 -1
  23. package/dist/config/index.js +0 -1
  24. package/dist/config/index.js.map +1 -1
  25. package/dist/config/paths.d.ts.map +1 -1
  26. package/dist/config/paths.js +1 -9
  27. package/dist/config/paths.js.map +1 -1
  28. package/dist/contracts/access-logs.d.ts +8 -0
  29. package/dist/contracts/access-logs.d.ts.map +1 -0
  30. package/dist/contracts/access-logs.js +7 -0
  31. package/dist/contracts/access-logs.js.map +1 -0
  32. package/dist/contracts/auth-device.d.ts +70 -0
  33. package/dist/contracts/auth-device.d.ts.map +1 -0
  34. package/dist/contracts/auth-device.js +163 -0
  35. package/dist/contracts/auth-device.js.map +1 -0
  36. package/dist/contracts/binary.d.ts +66 -0
  37. package/dist/contracts/binary.d.ts.map +1 -0
  38. package/dist/contracts/binary.js +123 -0
  39. package/dist/contracts/binary.js.map +1 -0
  40. package/dist/contracts/config.d.ts +5 -0
  41. package/dist/contracts/config.d.ts.map +1 -0
  42. package/dist/contracts/config.js +30 -0
  43. package/dist/contracts/config.js.map +1 -0
  44. package/dist/contracts/data.d.ts +165 -0
  45. package/dist/contracts/data.d.ts.map +1 -0
  46. package/dist/contracts/data.js +371 -0
  47. package/dist/contracts/data.js.map +1 -0
  48. package/dist/contracts/grants.d.ts +45 -0
  49. package/dist/contracts/grants.d.ts.map +1 -0
  50. package/dist/contracts/grants.js +177 -0
  51. package/dist/contracts/grants.js.map +1 -0
  52. package/dist/contracts/http.d.ts +21 -0
  53. package/dist/contracts/http.d.ts.map +1 -0
  54. package/dist/contracts/http.js +49 -0
  55. package/dist/contracts/http.js.map +1 -0
  56. package/dist/contracts/index.d.ts +16 -0
  57. package/dist/contracts/index.d.ts.map +1 -0
  58. package/dist/contracts/index.js +10 -0
  59. package/dist/contracts/index.js.map +1 -0
  60. package/dist/contracts/oauth.d.ts +38 -0
  61. package/dist/contracts/oauth.d.ts.map +1 -0
  62. package/dist/contracts/oauth.js +130 -0
  63. package/dist/contracts/oauth.js.map +1 -0
  64. package/dist/contracts/sync.d.ts +10 -0
  65. package/dist/contracts/sync.d.ts.map +1 -0
  66. package/dist/contracts/sync.js +34 -0
  67. package/dist/contracts/sync.js.map +1 -0
  68. package/dist/derivatives/api.d.ts +48 -0
  69. package/dist/derivatives/api.d.ts.map +1 -0
  70. package/dist/derivatives/api.js +366 -0
  71. package/dist/derivatives/api.js.map +1 -0
  72. package/dist/derivatives/compute.d.ts +106 -0
  73. package/dist/derivatives/compute.d.ts.map +1 -0
  74. package/dist/derivatives/compute.js +414 -0
  75. package/dist/derivatives/compute.js.map +1 -0
  76. package/dist/derivatives/e2ee/aad.d.ts +22 -0
  77. package/dist/derivatives/e2ee/aad.d.ts.map +1 -0
  78. package/dist/derivatives/e2ee/aad.js +32 -0
  79. package/dist/derivatives/e2ee/aad.js.map +1 -0
  80. package/dist/derivatives/e2ee/attestation.d.ts +134 -0
  81. package/dist/derivatives/e2ee/attestation.d.ts.map +1 -0
  82. package/dist/derivatives/e2ee/attestation.js +248 -0
  83. package/dist/derivatives/e2ee/attestation.js.map +1 -0
  84. package/dist/derivatives/e2ee/index.d.ts +6 -0
  85. package/dist/derivatives/e2ee/index.d.ts.map +1 -0
  86. package/dist/derivatives/e2ee/index.js +6 -0
  87. package/dist/derivatives/e2ee/index.js.map +1 -0
  88. package/dist/derivatives/e2ee/jcs.d.ts +17 -0
  89. package/dist/derivatives/e2ee/jcs.d.ts.map +1 -0
  90. package/dist/derivatives/e2ee/jcs.js +55 -0
  91. package/dist/derivatives/e2ee/jcs.js.map +1 -0
  92. package/dist/derivatives/e2ee/phala.d.ts +62 -0
  93. package/dist/derivatives/e2ee/phala.d.ts.map +1 -0
  94. package/dist/derivatives/e2ee/phala.js +168 -0
  95. package/dist/derivatives/e2ee/phala.js.map +1 -0
  96. package/dist/derivatives/e2ee/suite.d.ts +56 -0
  97. package/dist/derivatives/e2ee/suite.d.ts.map +1 -0
  98. package/dist/derivatives/e2ee/suite.js +164 -0
  99. package/dist/derivatives/e2ee/suite.js.map +1 -0
  100. package/dist/derivatives/index.d.ts +10 -0
  101. package/dist/derivatives/index.d.ts.map +1 -0
  102. package/dist/derivatives/index.js +10 -0
  103. package/dist/derivatives/index.js.map +1 -0
  104. package/dist/derivatives/inference.d.ts +151 -0
  105. package/dist/derivatives/inference.d.ts.map +1 -0
  106. package/dist/derivatives/inference.js +262 -0
  107. package/dist/derivatives/inference.js.map +1 -0
  108. package/dist/derivatives/prompt.d.ts +64 -0
  109. package/dist/derivatives/prompt.d.ts.map +1 -0
  110. package/dist/derivatives/prompt.js +193 -0
  111. package/dist/derivatives/prompt.js.map +1 -0
  112. package/dist/derivatives/registration.d.ts +54 -0
  113. package/dist/derivatives/registration.d.ts.map +1 -0
  114. package/dist/derivatives/registration.js +180 -0
  115. package/dist/derivatives/registration.js.map +1 -0
  116. package/dist/derivatives/scheduler.d.ts +84 -0
  117. package/dist/derivatives/scheduler.d.ts.map +1 -0
  118. package/dist/derivatives/scheduler.js +257 -0
  119. package/dist/derivatives/scheduler.js.map +1 -0
  120. package/dist/derivatives/store.d.ts +14 -0
  121. package/dist/derivatives/store.d.ts.map +1 -0
  122. package/dist/derivatives/store.js +77 -0
  123. package/dist/derivatives/store.js.map +1 -0
  124. package/dist/derivatives/types.d.ts +92 -0
  125. package/dist/derivatives/types.d.ts.map +1 -0
  126. package/dist/derivatives/types.js +27 -0
  127. package/dist/derivatives/types.js.map +1 -0
  128. package/dist/errors/catalog.d.ts +84 -0
  129. package/dist/errors/catalog.d.ts.map +1 -1
  130. package/dist/errors/catalog.js +119 -0
  131. package/dist/errors/catalog.js.map +1 -1
  132. package/dist/grants/index.d.ts +2 -4
  133. package/dist/grants/index.d.ts.map +1 -1
  134. package/dist/grants/index.js +1 -2
  135. package/dist/grants/index.js.map +1 -1
  136. package/dist/keys/index.d.ts +2 -2
  137. package/dist/keys/index.d.ts.map +1 -1
  138. package/dist/keys/index.js +1 -2
  139. package/dist/keys/index.js.map +1 -1
  140. package/dist/keys/public-only-account.d.ts +8 -0
  141. package/dist/keys/public-only-account.d.ts.map +1 -0
  142. package/dist/keys/public-only-account.js +21 -0
  143. package/dist/keys/public-only-account.js.map +1 -0
  144. package/dist/keys/server-account.d.ts +7 -11
  145. package/dist/keys/server-account.d.ts.map +1 -1
  146. package/dist/keys/server-account.js +1 -47
  147. package/dist/keys/server-account.js.map +1 -1
  148. package/dist/lineage/attestation.d.ts +42 -0
  149. package/dist/lineage/attestation.d.ts.map +1 -0
  150. package/dist/lineage/attestation.js +25 -0
  151. package/dist/lineage/attestation.js.map +1 -0
  152. package/dist/lineage/gateway.d.ts +105 -0
  153. package/dist/lineage/gateway.d.ts.map +1 -0
  154. package/dist/lineage/gateway.js +242 -0
  155. package/dist/lineage/gateway.js.map +1 -0
  156. package/dist/lineage/index.d.ts +5 -0
  157. package/dist/lineage/index.d.ts.map +1 -0
  158. package/dist/lineage/index.js +5 -0
  159. package/dist/lineage/index.js.map +1 -0
  160. package/dist/lineage/lineage.d.ts +141 -0
  161. package/dist/lineage/lineage.d.ts.map +1 -0
  162. package/dist/lineage/lineage.js +255 -0
  163. package/dist/lineage/lineage.js.map +1 -0
  164. package/dist/logger/index.d.ts +6 -2
  165. package/dist/logger/index.d.ts.map +1 -1
  166. package/dist/logger/index.js +2 -6
  167. package/dist/logger/index.js.map +1 -1
  168. package/dist/logging/access-log.d.ts +10 -2
  169. package/dist/logging/access-log.d.ts.map +1 -1
  170. package/dist/logging/access-log.js +1 -24
  171. package/dist/logging/access-log.js.map +1 -1
  172. package/dist/logging/access-reader.d.ts +0 -5
  173. package/dist/logging/access-reader.d.ts.map +1 -1
  174. package/dist/logging/access-reader.js +1 -49
  175. package/dist/logging/access-reader.js.map +1 -1
  176. package/dist/mcp/activity.d.ts +68 -0
  177. package/dist/mcp/activity.d.ts.map +1 -0
  178. package/dist/mcp/activity.js +111 -0
  179. package/dist/mcp/activity.js.map +1 -0
  180. package/dist/mcp/builder-registration.d.ts +24 -0
  181. package/dist/mcp/builder-registration.d.ts.map +1 -0
  182. package/dist/mcp/builder-registration.js +89 -0
  183. package/dist/mcp/builder-registration.js.map +1 -0
  184. package/dist/mcp/connection-api.d.ts +170 -0
  185. package/dist/mcp/connection-api.d.ts.map +1 -0
  186. package/dist/mcp/connection-api.js +379 -0
  187. package/dist/mcp/connection-api.js.map +1 -0
  188. package/dist/mcp/grantee.d.ts +52 -0
  189. package/dist/mcp/grantee.d.ts.map +1 -0
  190. package/dist/mcp/grantee.js +91 -0
  191. package/dist/mcp/grantee.js.map +1 -0
  192. package/dist/mcp/index.d.ts +11 -0
  193. package/dist/mcp/index.d.ts.map +1 -0
  194. package/dist/mcp/index.js +11 -0
  195. package/dist/mcp/index.js.map +1 -0
  196. package/dist/mcp/read-client.d.ts +174 -0
  197. package/dist/mcp/read-client.d.ts.map +1 -0
  198. package/dist/mcp/read-client.js +576 -0
  199. package/dist/mcp/read-client.js.map +1 -0
  200. package/dist/mcp/resources.d.ts +37 -0
  201. package/dist/mcp/resources.d.ts.map +1 -0
  202. package/dist/mcp/resources.js +114 -0
  203. package/dist/mcp/resources.js.map +1 -0
  204. package/dist/mcp/search/index.d.ts +34 -0
  205. package/dist/mcp/search/index.d.ts.map +1 -0
  206. package/dist/mcp/search/index.js +156 -0
  207. package/dist/mcp/search/index.js.map +1 -0
  208. package/dist/mcp/server.d.ts +53 -0
  209. package/dist/mcp/server.d.ts.map +1 -0
  210. package/dist/mcp/server.js +307 -0
  211. package/dist/mcp/server.js.map +1 -0
  212. package/dist/mcp/session.d.ts +160 -0
  213. package/dist/mcp/session.d.ts.map +1 -0
  214. package/dist/mcp/session.js +243 -0
  215. package/dist/mcp/session.js.map +1 -0
  216. package/dist/mcp/store.d.ts +13 -0
  217. package/dist/mcp/store.d.ts.map +1 -0
  218. package/dist/mcp/store.js +98 -0
  219. package/dist/mcp/store.js.map +1 -0
  220. package/dist/mcp/tools.d.ts +70 -0
  221. package/dist/mcp/tools.d.ts.map +1 -0
  222. package/dist/mcp/tools.js +1346 -0
  223. package/dist/mcp/tools.js.map +1 -0
  224. package/dist/mcp/types.d.ts +97 -0
  225. package/dist/mcp/types.d.ts.map +1 -0
  226. package/dist/mcp/types.js +24 -0
  227. package/dist/mcp/types.js.map +1 -0
  228. package/dist/payment/index.d.ts +2 -0
  229. package/dist/payment/index.d.ts.map +1 -0
  230. package/dist/payment/index.js +2 -0
  231. package/dist/payment/index.js.map +1 -0
  232. package/dist/payment/x402.d.ts +155 -0
  233. package/dist/payment/x402.d.ts.map +1 -0
  234. package/dist/payment/x402.js +402 -0
  235. package/dist/payment/x402.js.map +1 -0
  236. package/dist/policy/data-read.d.ts +32 -0
  237. package/dist/policy/data-read.d.ts.map +1 -0
  238. package/dist/policy/data-read.js +128 -0
  239. package/dist/policy/data-read.js.map +1 -0
  240. package/dist/policy/data-write.d.ts +69 -0
  241. package/dist/policy/data-write.d.ts.map +1 -0
  242. package/dist/policy/data-write.js +131 -0
  243. package/dist/policy/data-write.js.map +1 -0
  244. package/dist/policy/index.d.ts +4 -0
  245. package/dist/policy/index.d.ts.map +1 -0
  246. package/dist/policy/index.js +4 -0
  247. package/dist/policy/index.js.map +1 -0
  248. package/dist/policy/signed-artifacts.d.ts +17 -0
  249. package/dist/policy/signed-artifacts.d.ts.map +1 -0
  250. package/dist/policy/signed-artifacts.js +110 -0
  251. package/dist/policy/signed-artifacts.js.map +1 -0
  252. package/dist/ports/index.d.ts +239 -0
  253. package/dist/ports/index.d.ts.map +1 -0
  254. package/dist/ports/index.js +7 -0
  255. package/dist/ports/index.js.map +1 -0
  256. package/dist/schemas/server-config.d.ts +55 -0
  257. package/dist/schemas/server-config.d.ts.map +1 -1
  258. package/dist/schemas/server-config.js +107 -4
  259. package/dist/schemas/server-config.js.map +1 -1
  260. package/dist/signing/index.d.ts +1 -2
  261. package/dist/signing/index.d.ts.map +1 -1
  262. package/dist/signing/index.js +0 -1
  263. package/dist/signing/index.js.map +1 -1
  264. package/dist/signing/request-signer.d.ts +10 -2
  265. package/dist/signing/request-signer.d.ts.map +1 -1
  266. package/dist/signing/request-signer.js +6 -31
  267. package/dist/signing/request-signer.js.map +1 -1
  268. package/dist/signing/signer.d.ts +28 -2
  269. package/dist/signing/signer.d.ts.map +1 -1
  270. package/dist/signing/signer.js +32 -13
  271. package/dist/signing/signer.js.map +1 -1
  272. package/dist/storage/adapters/index.d.ts +2 -1
  273. package/dist/storage/adapters/index.d.ts.map +1 -1
  274. package/dist/storage/adapters/index.js +2 -1
  275. package/dist/storage/adapters/index.js.map +1 -1
  276. package/dist/storage/adapters/interface.d.ts +10 -0
  277. package/dist/storage/adapters/interface.d.ts.map +1 -1
  278. package/dist/storage/adapters/sdk.d.ts +23 -0
  279. package/dist/storage/adapters/sdk.d.ts.map +1 -0
  280. package/dist/storage/adapters/sdk.js +73 -0
  281. package/dist/storage/adapters/sdk.js.map +1 -0
  282. package/dist/storage/adapters/vana.d.ts +10 -30
  283. package/dist/storage/adapters/vana.d.ts.map +1 -1
  284. package/dist/storage/adapters/vana.js +94 -84
  285. package/dist/storage/adapters/vana.js.map +1 -1
  286. package/dist/storage/blocks/build.d.ts +20 -0
  287. package/dist/storage/blocks/build.d.ts.map +1 -0
  288. package/dist/storage/blocks/build.js +378 -0
  289. package/dist/storage/blocks/build.js.map +1 -0
  290. package/dist/storage/blocks/cursor.d.ts +33 -0
  291. package/dist/storage/blocks/cursor.d.ts.map +1 -0
  292. package/dist/storage/blocks/cursor.js +142 -0
  293. package/dist/storage/blocks/cursor.js.map +1 -0
  294. package/dist/storage/blocks/errors.d.ts +6 -0
  295. package/dist/storage/blocks/errors.d.ts.map +1 -0
  296. package/dist/storage/blocks/errors.js +9 -0
  297. package/dist/storage/blocks/errors.js.map +1 -0
  298. package/dist/storage/blocks/index.d.ts +6 -0
  299. package/dist/storage/blocks/index.d.ts.map +1 -0
  300. package/dist/storage/blocks/index.js +5 -0
  301. package/dist/storage/blocks/index.js.map +1 -0
  302. package/dist/storage/blocks/select.d.ts +29 -0
  303. package/dist/storage/blocks/select.d.ts.map +1 -0
  304. package/dist/storage/blocks/select.js +120 -0
  305. package/dist/storage/blocks/select.js.map +1 -0
  306. package/dist/storage/blocks/types.d.ts +56 -0
  307. package/dist/storage/blocks/types.d.ts.map +1 -0
  308. package/dist/storage/blocks/types.js +2 -0
  309. package/dist/{grants → storage/blocks}/types.js.map +1 -1
  310. package/dist/storage/hierarchy/index.d.ts +0 -1
  311. package/dist/storage/hierarchy/index.d.ts.map +1 -1
  312. package/dist/storage/hierarchy/index.js +0 -1
  313. package/dist/storage/hierarchy/index.js.map +1 -1
  314. package/dist/storage/hierarchy/manager.d.ts +0 -14
  315. package/dist/storage/hierarchy/manager.d.ts.map +1 -1
  316. package/dist/storage/hierarchy/manager.js +1 -59
  317. package/dist/storage/hierarchy/manager.js.map +1 -1
  318. package/dist/storage/hierarchy/paths.d.ts.map +1 -1
  319. package/dist/storage/hierarchy/paths.js +11 -4
  320. package/dist/storage/hierarchy/paths.js.map +1 -1
  321. package/dist/storage/index/index.d.ts +2 -3
  322. package/dist/storage/index/index.d.ts.map +1 -1
  323. package/dist/storage/index/index.js +1 -2
  324. package/dist/storage/index/index.js.map +1 -1
  325. package/dist/storage/index/manager.d.ts +32 -6
  326. package/dist/storage/index/manager.d.ts.map +1 -1
  327. package/dist/storage/index/manager.js +1 -131
  328. package/dist/storage/index/manager.js.map +1 -1
  329. package/dist/storage/index/schema.d.ts +1 -3
  330. package/dist/storage/index/schema.d.ts.map +1 -1
  331. package/dist/storage/index/schema.js +1 -26
  332. package/dist/storage/index/schema.js.map +1 -1
  333. package/dist/storage/index/types.d.ts +17 -0
  334. package/dist/storage/index/types.d.ts.map +1 -1
  335. package/dist/storage/preview.d.ts +12 -0
  336. package/dist/storage/preview.d.ts.map +1 -0
  337. package/dist/storage/preview.js +239 -0
  338. package/dist/storage/preview.js.map +1 -0
  339. package/dist/sync/cursor.d.ts +5 -7
  340. package/dist/sync/cursor.d.ts.map +1 -1
  341. package/dist/sync/cursor.js +1 -18
  342. package/dist/sync/cursor.js.map +1 -1
  343. package/dist/sync/data-point-feed.d.ts +35 -0
  344. package/dist/sync/data-point-feed.d.ts.map +1 -0
  345. package/dist/sync/data-point-feed.js +122 -0
  346. package/dist/sync/data-point-feed.js.map +1 -0
  347. package/dist/sync/data-point-id.d.ts +7 -0
  348. package/dist/sync/data-point-id.d.ts.map +1 -0
  349. package/dist/sync/data-point-id.js +16 -0
  350. package/dist/sync/data-point-id.js.map +1 -0
  351. package/dist/sync/delete-data-port.d.ts +50 -0
  352. package/dist/sync/delete-data-port.d.ts.map +1 -0
  353. package/dist/sync/delete-data-port.js +244 -0
  354. package/dist/sync/delete-data-port.js.map +1 -0
  355. package/dist/sync/engine/sync-manager.d.ts +29 -0
  356. package/dist/sync/engine/sync-manager.d.ts.map +1 -1
  357. package/dist/sync/engine/sync-manager.js +156 -45
  358. package/dist/sync/engine/sync-manager.js.map +1 -1
  359. package/dist/sync/index.d.ts +11 -2
  360. package/dist/sync/index.d.ts.map +1 -1
  361. package/dist/sync/index.js +8 -1
  362. package/dist/sync/index.js.map +1 -1
  363. package/dist/sync/issues.d.ts +55 -0
  364. package/dist/sync/issues.d.ts.map +1 -0
  365. package/dist/sync/issues.js +168 -0
  366. package/dist/sync/issues.js.map +1 -0
  367. package/dist/sync/pending-blob-deletions.d.ts +29 -0
  368. package/dist/sync/pending-blob-deletions.d.ts.map +1 -0
  369. package/dist/sync/pending-blob-deletions.js +116 -0
  370. package/dist/sync/pending-blob-deletions.js.map +1 -0
  371. package/dist/sync/retry-memory.d.ts +33 -0
  372. package/dist/sync/retry-memory.d.ts.map +1 -0
  373. package/dist/sync/retry-memory.js +68 -0
  374. package/dist/sync/retry-memory.js.map +1 -0
  375. package/dist/sync/scope-deletions.d.ts +155 -0
  376. package/dist/sync/scope-deletions.d.ts.map +1 -0
  377. package/dist/sync/scope-deletions.js +225 -0
  378. package/dist/sync/scope-deletions.js.map +1 -0
  379. package/dist/sync/tombstone.d.ts +27 -0
  380. package/dist/sync/tombstone.d.ts.map +1 -0
  381. package/dist/sync/tombstone.js +28 -0
  382. package/dist/sync/tombstone.js.map +1 -0
  383. package/dist/sync/types.d.ts +9 -24
  384. package/dist/sync/types.d.ts.map +1 -1
  385. package/dist/sync/workers/delete.d.ts +163 -0
  386. package/dist/sync/workers/delete.d.ts.map +1 -0
  387. package/dist/sync/workers/delete.js +474 -0
  388. package/dist/sync/workers/delete.js.map +1 -0
  389. package/dist/sync/workers/download.d.ts +115 -18
  390. package/dist/sync/workers/download.d.ts.map +1 -1
  391. package/dist/sync/workers/download.js +523 -54
  392. package/dist/sync/workers/download.js.map +1 -1
  393. package/dist/sync/workers/upload.d.ts +73 -18
  394. package/dist/sync/workers/upload.d.ts.map +1 -1
  395. package/dist/sync/workers/upload.js +382 -45
  396. package/dist/sync/workers/upload.js.map +1 -1
  397. package/dist/test-utils/e2ee-fixtures.d.ts +94 -0
  398. package/dist/test-utils/e2ee-fixtures.d.ts.map +1 -0
  399. package/dist/test-utils/e2ee-fixtures.js +116 -0
  400. package/dist/test-utils/e2ee-fixtures.js.map +1 -0
  401. package/dist/test-utils/e2ee-gateway.d.ts +61 -0
  402. package/dist/test-utils/e2ee-gateway.d.ts.map +1 -0
  403. package/dist/test-utils/e2ee-gateway.js +248 -0
  404. package/dist/test-utils/e2ee-gateway.js.map +1 -0
  405. package/dist/test-utils/index.d.ts +3 -0
  406. package/dist/test-utils/index.d.ts.map +1 -1
  407. package/dist/test-utils/index.js +3 -0
  408. package/dist/test-utils/index.js.map +1 -1
  409. package/dist/test-utils/memory-storage.d.ts +12 -0
  410. package/dist/test-utils/memory-storage.d.ts.map +1 -0
  411. package/dist/test-utils/memory-storage.js +146 -0
  412. package/dist/test-utils/memory-storage.js.map +1 -0
  413. package/dist/test-utils/wallet.d.ts +7 -0
  414. package/dist/test-utils/wallet.d.ts.map +1 -1
  415. package/dist/test-utils/wallet.js +51 -27
  416. package/dist/test-utils/wallet.js.map +1 -1
  417. package/dist/write/attribution.d.ts +185 -0
  418. package/dist/write/attribution.d.ts.map +1 -0
  419. package/dist/write/attribution.js +450 -0
  420. package/dist/write/attribution.js.map +1 -0
  421. package/dist/write/authorize.d.ts +77 -0
  422. package/dist/write/authorize.d.ts.map +1 -0
  423. package/dist/write/authorize.js +109 -0
  424. package/dist/write/authorize.js.map +1 -0
  425. package/dist/write/index.d.ts +5 -0
  426. package/dist/write/index.d.ts.map +1 -0
  427. package/dist/write/index.js +5 -0
  428. package/dist/write/index.js.map +1 -0
  429. package/dist/write/route.d.ts +61 -0
  430. package/dist/write/route.d.ts.map +1 -0
  431. package/dist/write/route.js +132 -0
  432. package/dist/write/route.js.map +1 -0
  433. package/dist/write/session.d.ts +96 -0
  434. package/dist/write/session.d.ts.map +1 -0
  435. package/dist/write/session.js +136 -0
  436. package/dist/write/session.js.map +1 -0
  437. package/package.json +63 -27
  438. package/dist/auth/web3-signed.d.ts +0 -48
  439. package/dist/auth/web3-signed.d.ts.map +0 -1
  440. package/dist/auth/web3-signed.js +0 -110
  441. package/dist/auth/web3-signed.js.map +0 -1
  442. package/dist/config/loader.d.ts +0 -8
  443. package/dist/config/loader.d.ts.map +0 -1
  444. package/dist/config/loader.js +0 -74
  445. package/dist/config/loader.js.map +0 -1
  446. package/dist/gateway/client.d.ts +0 -98
  447. package/dist/gateway/client.d.ts.map +0 -1
  448. package/dist/gateway/client.js +0 -171
  449. package/dist/gateway/client.js.map +0 -1
  450. package/dist/grants/eip712.d.ts +0 -28
  451. package/dist/grants/eip712.d.ts.map +0 -1
  452. package/dist/grants/eip712.js +0 -30
  453. package/dist/grants/eip712.js.map +0 -1
  454. package/dist/grants/types.d.ts +0 -29
  455. package/dist/grants/types.d.ts.map +0 -1
  456. package/dist/grants/types.js +0 -6
  457. package/dist/grants/verify.d.ts +0 -24
  458. package/dist/grants/verify.d.ts.map +0 -1
  459. package/dist/grants/verify.js +0 -71
  460. package/dist/grants/verify.js.map +0 -1
  461. package/dist/keys/derive.d.ts +0 -18
  462. package/dist/keys/derive.d.ts.map +0 -1
  463. package/dist/keys/derive.js +0 -43
  464. package/dist/keys/derive.js.map +0 -1
  465. package/dist/schemas/data-file.d.ts +0 -20
  466. package/dist/schemas/data-file.d.ts.map +0 -1
  467. package/dist/schemas/data-file.js +0 -23
  468. package/dist/schemas/data-file.js.map +0 -1
  469. package/dist/scopes/index.d.ts +0 -3
  470. package/dist/scopes/index.d.ts.map +0 -1
  471. package/dist/scopes/index.js +0 -3
  472. package/dist/scopes/index.js.map +0 -1
  473. package/dist/scopes/match.d.ts +0 -13
  474. package/dist/scopes/match.d.ts.map +0 -1
  475. package/dist/scopes/match.js +0 -23
  476. package/dist/scopes/match.js.map +0 -1
  477. package/dist/scopes/parse.d.ts +0 -12
  478. package/dist/scopes/parse.d.ts.map +0 -1
  479. package/dist/scopes/parse.js +0 -29
  480. package/dist/scopes/parse.js.map +0 -1
  481. package/dist/signing/eip712.d.ts +0 -69
  482. package/dist/signing/eip712.d.ts.map +0 -1
  483. package/dist/signing/eip712.js +0 -68
  484. package/dist/signing/eip712.js.map +0 -1
  485. package/dist/storage/encryption/decrypt.d.ts +0 -10
  486. package/dist/storage/encryption/decrypt.d.ts.map +0 -1
  487. package/dist/storage/encryption/decrypt.js +0 -19
  488. package/dist/storage/encryption/decrypt.js.map +0 -1
  489. package/dist/storage/encryption/encrypt.d.ts +0 -10
  490. package/dist/storage/encryption/encrypt.d.ts.map +0 -1
  491. package/dist/storage/encryption/encrypt.js +0 -19
  492. package/dist/storage/encryption/encrypt.js.map +0 -1
  493. package/dist/storage/encryption/index.d.ts +0 -3
  494. package/dist/storage/encryption/index.d.ts.map +0 -1
  495. package/dist/storage/encryption/index.js +0 -3
  496. package/dist/storage/encryption/index.js.map +0 -1
@@ -0,0 +1,163 @@
1
+ import type { Logger } from "../../logger/index.js";
2
+ import type { DataPointFeedPort, DataStoragePort, DeleteDataPort, PendingBlobDeletion, PendingBlobDeletionStore } from "../../ports/index.js";
3
+ import { type ScopeDeletionTracker } from "../scope-deletions.js";
4
+ /**
5
+ * Exact blob deletes sent per pass. vana-storage allows 30 DELETE requests
6
+ * per owner per 60 seconds. A DELETE request's own pass and the next sync
7
+ * cycle's retry pass can land inside one window, so each pass sends at most
8
+ * half the budget; whatever does not fit is queued and drained on later
9
+ * cycles, and a 429 simply re-queues its key.
10
+ */
11
+ export declare const BLOB_DELETE_BATCH_SIZE = 15;
12
+ export interface DeleteScopeDeps {
13
+ storage: DataStoragePort;
14
+ /** Data owner; absent only on an unconfigured host (no key material). */
15
+ serverOwner?: string;
16
+ /**
17
+ * Remote deletion (gateway tombstone + storage blobs). Absent when the host
18
+ * runs without sync (no owner key material): deletion is then local-only
19
+ * and reported as such, never silently "durable".
20
+ */
21
+ deleteData?: DeleteDataPort | null;
22
+ /** Exact-key retry markers for blob deletes that did not finish. */
23
+ pendingBlobDeletions?: PendingBlobDeletionStore;
24
+ /**
25
+ * Read-side deletion memory. A landed tombstone is recorded here so this
26
+ * replica's reads answer 410 immediately, before any sync cycle.
27
+ */
28
+ scopeDeletions?: ScopeDeletionTracker;
29
+ /**
30
+ * Deletion-aware registry lookup, re-read right after the tombstone attempt
31
+ * (a registration racing a "not-registered" answer) and by the retry to
32
+ * expand a marker whose tombstone version was not known.
33
+ */
34
+ dataPointFeed?: DataPointFeedPort;
35
+ logger: Logger;
36
+ now?: () => Date;
37
+ }
38
+ export type DeleteStepStatus = "ok" | "skipped" | "failed" | "deferred";
39
+ export interface DeleteScopeStep {
40
+ status: DeleteStepStatus;
41
+ /** Why the step was skipped (e.g. "not-registered", "sync-disabled"). */
42
+ reason?: string;
43
+ /** Error message when status is "failed". */
44
+ error?: string;
45
+ }
46
+ export interface DeleteScopeResult {
47
+ scope: string;
48
+ /** DPv2 identity: keccak256(abi.encode(owner, scope)); null without an owner. */
49
+ dataPointId: string | null;
50
+ /**
51
+ * True once the gateway holds the tombstone (or never held the point at
52
+ * all): sync can no longer resurrect the scope on any replica. False when
53
+ * only the local copy was removed.
54
+ */
55
+ durable: boolean;
56
+ steps: {
57
+ gateway: DeleteScopeStep & {
58
+ /** Tombstone version at the gateway; null when it did not report one. */
59
+ version?: string | null;
60
+ deletedAt?: string | null;
61
+ };
62
+ /**
63
+ * Storage step. "ok": every blob key the tombstone covers is gone.
64
+ * "deferred": some keys are queued for later passes (rate-limit batch,
65
+ * or a tombstone version the gateway did not report). "failed": at
66
+ * least one delete errored; the failed keys are queued too.
67
+ */
68
+ storage: DeleteScopeStep & {
69
+ blobsDeleted?: number;
70
+ blobsMissing?: number;
71
+ blobsPending?: number;
72
+ };
73
+ local: DeleteScopeStep & {
74
+ deletedCount?: number;
75
+ };
76
+ };
77
+ /**
78
+ * True when the tombstone landed but blob deletion did not finish: exact
79
+ * retry markers were recorded and later sync cycles finish them.
80
+ */
81
+ pendingBlobDeletion: boolean;
82
+ }
83
+ export interface BlobDeletionPlan {
84
+ /**
85
+ * Exact keys of covered local entries that lie outside the registry range:
86
+ * an upload that landed under a key the registry never saw (crashed before
87
+ * registering, or rebased later) is still deleted data. Bounded by the
88
+ * local index size.
89
+ */
90
+ keys: string[];
91
+ /**
92
+ * Every registry version up to and including the tombstone's, as inclusive
93
+ * bounds. Versions are a dense, strictly increasing integer sequence per
94
+ * scope and an absent key answers 404, so the range is exact and complete
95
+ * across replicas without listing storage. Kept as bounds, never
96
+ * materialised: a large tombstone version costs nothing until its keys are
97
+ * actually sent, a batch at a time. Null without a tombstone version.
98
+ */
99
+ range: {
100
+ from: string;
101
+ to: string;
102
+ } | null;
103
+ }
104
+ /**
105
+ * The storage keys a tombstone covers for `scope`. A re-add registered after
106
+ * the tombstone lives under a higher version key, so it is never in this set
107
+ * and survives by construction. With no tombstone version (never registered,
108
+ * or the gateway did not report one) only the local entries' keys can be
109
+ * enumerated.
110
+ */
111
+ export declare function planBlobDeletions(storage: Pick<DataStoragePort, "listVersions">, scope: string, tombstoneVersionValue: string | null): BlobDeletionPlan;
112
+ /**
113
+ * Durable scope deletion, in the only order that cannot resurrect data:
114
+ *
115
+ * 1. gateway tombstone (owner-signed AddData at current + 1; the fact)
116
+ * 2. storage blobs (exact keys of every version the tombstone covers)
117
+ * 3. local copy (index rows + files + sidecars)
118
+ *
119
+ * The local delete never runs before the gateway has acknowledged: until the
120
+ * registry says "deleted", the next sync cycle would re-pull the point from
121
+ * the still-live row. Step 2 deletes exact per-version keys, never the scope
122
+ * prefix, so a re-add another replica lands at any time keeps its ciphertext
123
+ * (it is registered above the tombstone version and stored under that key).
124
+ * Keys that could not be deleted in this pass are queued as exact retry
125
+ * markers; step 3 does not wait for them because the tombstone already makes
126
+ * the deletion stick.
127
+ *
128
+ * Not serialised here: the sync manager runs this under the same lock as its
129
+ * upload/download cycles so a delete cannot interleave with an upload of the
130
+ * same scope on this replica (see engine/sync-manager.ts). Uploads racing on
131
+ * another replica are handled by the upload worker's deletion guard and the
132
+ * download worker's reconcile.
133
+ */
134
+ export declare function deleteScope(deps: DeleteScopeDeps, scope: string): Promise<DeleteScopeResult>;
135
+ export interface RetryPendingBlobDeletionsResult {
136
+ /** Exact keys finished this pass (deleted, or already absent). */
137
+ completed: PendingBlobDeletion[];
138
+ /** Unexpanded markers dropped because the scope is live again. */
139
+ superseded: string[];
140
+ failed: Array<{
141
+ scope: string;
142
+ version: string | null;
143
+ error: string;
144
+ }>;
145
+ /** Markers still queued after this pass (a range counts once). */
146
+ remaining: number;
147
+ }
148
+ /**
149
+ * Finish blob deletions whose tombstone landed but whose storage deletes did
150
+ * not: one batch of exact keys per sync cycle, taken from exact-key markers
151
+ * first and then from the head of range markers (which advance in place),
152
+ * each key retried until storage acknowledges (2xx or 404). Unexpanded
153
+ * markers (the gateway did not report a tombstone version at delete time)
154
+ * are expanded from the registry first; if the registry shows the scope live
155
+ * again the old tombstone's version is unknowable, so the marker is dropped
156
+ * and the pre-tombstone ciphertext stays (owner-decryptable only) until the
157
+ * next delete of that scope.
158
+ */
159
+ export declare function retryPendingBlobDeletions(deps: Pick<DeleteScopeDeps, "deleteData" | "pendingBlobDeletions" | "dataPointFeed" | "serverOwner" | "logger"> & {
160
+ /** Local index, for expanding unexpanded markers into exact keys. */
161
+ storage?: Pick<DataStoragePort, "listVersions">;
162
+ }): Promise<RetryPendingBlobDeletionsResult>;
163
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/sync/workers/delete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,474 @@
1
+ import { computeDataPointId } from "../data-point-id.js";
2
+ import { deletionTimestamp, isEntryCoveredByTombstone, tombstoneVersion, } from "../scope-deletions.js";
3
+ /**
4
+ * Exact blob deletes sent per pass. vana-storage allows 30 DELETE requests
5
+ * per owner per 60 seconds. A DELETE request's own pass and the next sync
6
+ * cycle's retry pass can land inside one window, so each pass sends at most
7
+ * half the budget; whatever does not fit is queued and drained on later
8
+ * cycles, and a 429 simply re-queues its key.
9
+ */
10
+ export const BLOB_DELETE_BATCH_SIZE = 15;
11
+ /**
12
+ * The storage keys a tombstone covers for `scope`. A re-add registered after
13
+ * the tombstone lives under a higher version key, so it is never in this set
14
+ * and survives by construction. With no tombstone version (never registered,
15
+ * or the gateway did not report one) only the local entries' keys can be
16
+ * enumerated.
17
+ */
18
+ export function planBlobDeletions(storage, scope, tombstoneVersionValue) {
19
+ const tombstone = { version: tombstoneVersionValue };
20
+ const last = tombstoneVersionValue === null ? null : BigInt(tombstoneVersionValue);
21
+ const keys = new Set();
22
+ const PAGE_SIZE = 500;
23
+ for (let offset = 0;; offset += PAGE_SIZE) {
24
+ const entries = storage.listVersions(scope, { limit: PAGE_SIZE, offset });
25
+ for (const entry of entries) {
26
+ if (!isEntryCoveredByTombstone(entry, tombstone))
27
+ continue;
28
+ const version = BigInt(entry.version);
29
+ if (last !== null && version >= 1n && version <= last)
30
+ continue;
31
+ keys.add(version.toString());
32
+ }
33
+ if (entries.length < PAGE_SIZE)
34
+ break;
35
+ }
36
+ return {
37
+ keys: [...keys].sort((a, b) => (BigInt(a) < BigInt(b) ? -1 : 1)),
38
+ range: last === null || last < 1n ? null : { from: "1", to: last.toString() },
39
+ };
40
+ }
41
+ /** Take up to `count` versions from the head of a range; `rest` is what remains. */
42
+ function takeFromRange(range, count) {
43
+ const from = BigInt(range.from);
44
+ const to = BigInt(range.to);
45
+ const versions = [];
46
+ let cursor = from;
47
+ while (cursor <= to && versions.length < count) {
48
+ versions.push(cursor.toString());
49
+ cursor += 1n;
50
+ }
51
+ return {
52
+ versions,
53
+ rest: cursor <= to ? { from: cursor.toString(), to: range.to } : null,
54
+ };
55
+ }
56
+ function rangeSize(range) {
57
+ return BigInt(range.to) - BigInt(range.from) + 1n;
58
+ }
59
+ /**
60
+ * Count of blob keys a marker list still stands for, clamped for reporting.
61
+ * An unexpanded marker (range not known yet) counts as one.
62
+ */
63
+ function countPendingKeys(markers) {
64
+ let total = 0n;
65
+ for (const marker of markers) {
66
+ if (marker.version !== null)
67
+ total += 1n;
68
+ else if (marker.range)
69
+ total += rangeSize(marker.range);
70
+ else
71
+ total += 1n;
72
+ }
73
+ return total > BigInt(Number.MAX_SAFE_INTEGER)
74
+ ? Number.MAX_SAFE_INTEGER
75
+ : Number(total);
76
+ }
77
+ /**
78
+ * Durable scope deletion, in the only order that cannot resurrect data:
79
+ *
80
+ * 1. gateway tombstone (owner-signed AddData at current + 1; the fact)
81
+ * 2. storage blobs (exact keys of every version the tombstone covers)
82
+ * 3. local copy (index rows + files + sidecars)
83
+ *
84
+ * The local delete never runs before the gateway has acknowledged: until the
85
+ * registry says "deleted", the next sync cycle would re-pull the point from
86
+ * the still-live row. Step 2 deletes exact per-version keys, never the scope
87
+ * prefix, so a re-add another replica lands at any time keeps its ciphertext
88
+ * (it is registered above the tombstone version and stored under that key).
89
+ * Keys that could not be deleted in this pass are queued as exact retry
90
+ * markers; step 3 does not wait for them because the tombstone already makes
91
+ * the deletion stick.
92
+ *
93
+ * Not serialised here: the sync manager runs this under the same lock as its
94
+ * upload/download cycles so a delete cannot interleave with an upload of the
95
+ * same scope on this replica (see engine/sync-manager.ts). Uploads racing on
96
+ * another replica are handled by the upload worker's deletion guard and the
97
+ * download worker's reconcile.
98
+ */
99
+ export async function deleteScope(deps, scope) {
100
+ const { storage, deleteData, pendingBlobDeletions, scopeDeletions, logger } = deps;
101
+ const now = deps.now ?? (() => new Date());
102
+ const dataPointId = deps.serverOwner
103
+ ? computeDataPointId(deps.serverOwner, scope)
104
+ : null;
105
+ const result = {
106
+ scope,
107
+ dataPointId,
108
+ durable: false,
109
+ steps: {
110
+ gateway: { status: "skipped", reason: "sync-disabled" },
111
+ storage: { status: "skipped", reason: "sync-disabled" },
112
+ local: { status: "skipped" },
113
+ },
114
+ pendingBlobDeletion: false,
115
+ };
116
+ if (deleteData) {
117
+ // 1. Gateway tombstone: the durable fact. Nothing else happens if it
118
+ // fails, so the owner gets a clear "nothing was deleted" instead of a
119
+ // local delete that sync silently undoes.
120
+ let tombstoneVersionValue = null;
121
+ let tombstoneKnown = false;
122
+ try {
123
+ let outcome = await deleteData.tombstone(scope);
124
+ if (outcome.status === "not-registered") {
125
+ // "Nothing to tombstone" is only durable if the registry still has
126
+ // no row. A registration racing our lookup would otherwise survive
127
+ // the local delete and sync would restore the scope: re-read, and
128
+ // tombstone the row that appeared. If it keeps appearing, or the
129
+ // registry cannot be asked, refuse rather than delete on a guess.
130
+ let registry = await registryState(deps, scope);
131
+ if (registry.status === "live") {
132
+ outcome = await deleteData.tombstone(scope);
133
+ registry = await registryState(deps, scope);
134
+ }
135
+ if (outcome.status === "not-registered" &&
136
+ registry.status !== "deleted-or-absent") {
137
+ throw registry.status === "unknown"
138
+ ? registry.error
139
+ : new Error("Scope was registered concurrently while it was being deleted; retry the delete");
140
+ }
141
+ }
142
+ if (outcome.status === "not-registered") {
143
+ result.steps.gateway = { status: "skipped", reason: "not-registered" };
144
+ }
145
+ else {
146
+ tombstoneKnown = true;
147
+ tombstoneVersionValue =
148
+ outcome.version === null
149
+ ? null
150
+ : tombstoneVersion({ expectedVersion: outcome.version });
151
+ result.steps.gateway = {
152
+ status: "ok",
153
+ ...(outcome.status === "already-deleted" && {
154
+ reason: "already-deleted",
155
+ }),
156
+ version: outcome.version,
157
+ deletedAt: outcome.deletedAt,
158
+ };
159
+ // Reads on this replica must refuse the scope from this point on,
160
+ // without waiting for the feed to echo the tombstone back. A missing
161
+ // `deletedAt` (gateway did not echo one) is taken as "now": later
162
+ // than any local entry the deletion covers, so nothing slips through.
163
+ scopeDeletions?.markDeleted(scope, {
164
+ deletedAt: outcome.deletedAt ?? now().toISOString(),
165
+ version: outcome.version,
166
+ }, "local-delete");
167
+ }
168
+ result.durable = true;
169
+ }
170
+ catch (err) {
171
+ const message = errorMessage(err);
172
+ result.steps.gateway = { status: "failed", error: message };
173
+ result.steps.storage = { status: "skipped", reason: "gateway-failed" };
174
+ result.steps.local = { status: "skipped", reason: "gateway-failed" };
175
+ logger.error({ scope, dataPointId, error: message }, "Gateway tombstone failed; scope NOT deleted (local copy kept so sync cannot resurrect a half-deleted scope)");
176
+ return result;
177
+ }
178
+ // 2. Storage blobs: exact keys, one pass of at most a batch, the rest
179
+ // queued. A tombstone whose version the gateway did not report cannot be
180
+ // expanded into registry keys yet; a version-less marker asks the retry
181
+ // to expand it once the registry answers.
182
+ const plan = planBlobDeletions(storage, scope, tombstoneVersionValue);
183
+ const batch = plan.keys.slice(0, BLOB_DELETE_BATCH_SIZE);
184
+ const leftovers = plan.keys
185
+ .slice(BLOB_DELETE_BATCH_SIZE)
186
+ .map((version) => ({ scope, version }));
187
+ if (plan.range) {
188
+ const taken = takeFromRange(plan.range, BLOB_DELETE_BATCH_SIZE - batch.length);
189
+ batch.push(...taken.versions);
190
+ if (taken.rest)
191
+ leftovers.push({ scope, version: null, range: taken.rest });
192
+ }
193
+ if (tombstoneKnown && tombstoneVersionValue === null) {
194
+ leftovers.push({ scope, version: null });
195
+ }
196
+ const storageStep = await deleteBlobKeys({ deleteData, pendingBlobDeletions, logger }, scope, batch, leftovers);
197
+ result.steps.storage = storageStep.step;
198
+ result.pendingBlobDeletion = storageStep.pending > 0;
199
+ }
200
+ // 3. Local copy. Safe now: the registry row is a tombstone (or the point
201
+ // was never registered / sync is off), so nothing can re-pull it.
202
+ try {
203
+ const deletedCount = await storage.deleteScope(scope);
204
+ result.steps.local = { status: "ok", deletedCount };
205
+ }
206
+ catch (err) {
207
+ const message = errorMessage(err);
208
+ result.steps.local = { status: "failed", error: message };
209
+ logger.error({ scope, error: message }, "Local scope deletion failed");
210
+ }
211
+ logger.info({
212
+ scope,
213
+ dataPointId,
214
+ durable: result.durable,
215
+ gateway: result.steps.gateway.status,
216
+ storage: result.steps.storage.status,
217
+ local: result.steps.local.status,
218
+ }, "Scope deletion finished");
219
+ return result;
220
+ }
221
+ /**
222
+ * Delete one pass worth of exact keys and reconcile the retry markers:
223
+ * completed keys (deleted or already absent) leave the store, failed and
224
+ * not-yet-attempted keys enter it.
225
+ */
226
+ async function deleteBlobKeys(deps, scope, batch, leftovers) {
227
+ const { deleteData, pendingBlobDeletions, logger } = deps;
228
+ let outcome;
229
+ try {
230
+ outcome =
231
+ batch.length > 0 && deleteData
232
+ ? await deleteData.deleteBlobVersions(scope, batch)
233
+ : { deleted: [], missing: [], failed: [] };
234
+ }
235
+ catch (err) {
236
+ // The port reports per-key failures; a thrown error means none of the
237
+ // batch can be trusted as done.
238
+ outcome = {
239
+ deleted: [],
240
+ missing: [],
241
+ failed: batch.map((version) => ({ version, error: errorMessage(err) })),
242
+ };
243
+ }
244
+ const completed = [...outcome.deleted, ...outcome.missing].map((version) => ({ scope, version }));
245
+ const remaining = [
246
+ ...outcome.failed.map(({ version }) => ({ scope, version })),
247
+ ...leftovers,
248
+ ];
249
+ const remainingKeys = countPendingKeys(remaining);
250
+ let recorded = remainingKeys;
251
+ if (pendingBlobDeletions) {
252
+ try {
253
+ if (completed.length > 0)
254
+ await pendingBlobDeletions.remove(completed);
255
+ if (remaining.length > 0)
256
+ await pendingBlobDeletions.add(remaining);
257
+ }
258
+ catch (markerErr) {
259
+ recorded = 0;
260
+ logger.error({ scope, error: errorMessage(markerErr), keys: remainingKeys }, "Could not record pending blob deletion markers");
261
+ }
262
+ }
263
+ else if (remaining.length > 0) {
264
+ recorded = 0;
265
+ logger.error({ scope, keys: remainingKeys }, "Blob deletions left unfinished with no marker store to retry them");
266
+ }
267
+ const counts = {
268
+ blobsDeleted: outcome.deleted.length,
269
+ blobsMissing: outcome.missing.length,
270
+ blobsPending: remainingKeys,
271
+ };
272
+ if (outcome.failed.length > 0) {
273
+ const first = outcome.failed[0];
274
+ logger.warn({
275
+ scope,
276
+ failed: outcome.failed.length,
277
+ pending: recorded,
278
+ error: first.error,
279
+ }, "Storage blob deletion failed for some keys after gateway tombstone; will retry");
280
+ return {
281
+ step: {
282
+ status: "failed",
283
+ error: `${outcome.failed.length} blob delete(s) failed: ${first.error}`,
284
+ ...counts,
285
+ },
286
+ pending: recorded,
287
+ };
288
+ }
289
+ if (remaining.length > 0) {
290
+ logger.info({ scope, ...counts }, "Storage blob deletion continues on later sync cycles (rate-limited batch)");
291
+ return { step: { status: "deferred", ...counts }, pending: recorded };
292
+ }
293
+ return { step: { status: "ok", ...counts }, pending: 0 };
294
+ }
295
+ /**
296
+ * Finish blob deletions whose tombstone landed but whose storage deletes did
297
+ * not: one batch of exact keys per sync cycle, taken from exact-key markers
298
+ * first and then from the head of range markers (which advance in place),
299
+ * each key retried until storage acknowledges (2xx or 404). Unexpanded
300
+ * markers (the gateway did not report a tombstone version at delete time)
301
+ * are expanded from the registry first; if the registry shows the scope live
302
+ * again the old tombstone's version is unknowable, so the marker is dropped
303
+ * and the pre-tombstone ciphertext stays (owner-decryptable only) until the
304
+ * next delete of that scope.
305
+ */
306
+ export async function retryPendingBlobDeletions(deps) {
307
+ const { deleteData, pendingBlobDeletions, logger } = deps;
308
+ const result = {
309
+ completed: [],
310
+ superseded: [],
311
+ failed: [],
312
+ remaining: 0,
313
+ };
314
+ if (!deleteData || !pendingBlobDeletions)
315
+ return result;
316
+ let markers = await pendingBlobDeletions.list();
317
+ if (markers.length === 0)
318
+ return result;
319
+ // Expand markers whose tombstone version was unknown at delete time.
320
+ for (const marker of markers.filter((key) => key.version === null && !key.range)) {
321
+ const registry = await registryState(deps, marker.scope);
322
+ if (registry.status === "unknown") {
323
+ result.failed.push({
324
+ scope: marker.scope,
325
+ version: null,
326
+ error: registry.error.message,
327
+ });
328
+ continue;
329
+ }
330
+ if (registry.status === "live") {
331
+ await pendingBlobDeletions.remove([marker]);
332
+ result.superseded.push(marker.scope);
333
+ logger.warn({
334
+ scope: marker.scope,
335
+ dataPointId: registry.record.id,
336
+ version: registry.record.expectedVersion,
337
+ }, "Scope was re-added after its tombstone; dropping the unexpanded blob deletion marker so the live version's ciphertext survives");
338
+ continue;
339
+ }
340
+ const plan = planBlobDeletions(deps.storage ?? { listVersions: () => [] }, marker.scope, registry.status === "deleted" ? registry.version : null);
341
+ const expanded = plan.keys.map((version) => ({
342
+ scope: marker.scope,
343
+ version,
344
+ }));
345
+ if (plan.range) {
346
+ expanded.push({ scope: marker.scope, version: null, range: plan.range });
347
+ }
348
+ await pendingBlobDeletions.remove([marker]);
349
+ await pendingBlobDeletions.add(expanded);
350
+ }
351
+ markers = await pendingBlobDeletions.list();
352
+ // One rate-limited batch in stored order: exact keys, then range heads.
353
+ let budget = BLOB_DELETE_BATCH_SIZE;
354
+ const byScope = new Map();
355
+ const exactOrigin = new Set();
356
+ const advancedRanges = [];
357
+ const enqueue = (scope, version) => {
358
+ const versions = byScope.get(scope) ?? [];
359
+ versions.push(version);
360
+ byScope.set(scope, versions);
361
+ };
362
+ for (const marker of markers) {
363
+ if (budget === 0)
364
+ break;
365
+ if (marker.version !== null) {
366
+ enqueue(marker.scope, marker.version);
367
+ exactOrigin.add(`${marker.scope}\u0000${marker.version}`);
368
+ budget -= 1;
369
+ }
370
+ }
371
+ for (const marker of markers) {
372
+ if (budget === 0)
373
+ break;
374
+ if (marker.version === null && marker.range) {
375
+ const taken = takeFromRange(marker.range, budget);
376
+ for (const version of taken.versions)
377
+ enqueue(marker.scope, version);
378
+ budget -= taken.versions.length;
379
+ advancedRanges.push({
380
+ old: marker,
381
+ next: taken.rest
382
+ ? { scope: marker.scope, version: null, range: taken.rest }
383
+ : null,
384
+ });
385
+ }
386
+ }
387
+ for (const [scope, versions] of byScope) {
388
+ let outcome;
389
+ try {
390
+ outcome = await deleteData.deleteBlobVersions(scope, versions);
391
+ }
392
+ catch (err) {
393
+ const message = errorMessage(err);
394
+ outcome = {
395
+ deleted: [],
396
+ missing: [],
397
+ failed: versions.map((version) => ({ version, error: message })),
398
+ };
399
+ }
400
+ const completed = [...outcome.deleted, ...outcome.missing]
401
+ .filter((version) => exactOrigin.has(`${scope}\u0000${version}`))
402
+ .map((version) => ({ scope, version }));
403
+ if (completed.length > 0)
404
+ await pendingBlobDeletions.remove(completed);
405
+ result.completed.push(...[...outcome.deleted, ...outcome.missing].map((version) => ({ scope, version })));
406
+ // A failed key that came from a range becomes an exact marker; a failed
407
+ // exact marker simply stays.
408
+ const failedFromRange = outcome.failed
409
+ .filter(({ version }) => !exactOrigin.has(`${scope}\u0000${version}`))
410
+ .map(({ version }) => ({ scope, version }));
411
+ if (failedFromRange.length > 0) {
412
+ await pendingBlobDeletions.add(failedFromRange);
413
+ }
414
+ for (const failure of outcome.failed) {
415
+ result.failed.push({ scope, ...failure });
416
+ }
417
+ if (outcome.deleted.length + outcome.missing.length > 0) {
418
+ logger.info({
419
+ scope,
420
+ deleted: outcome.deleted.length,
421
+ missing: outcome.missing.length,
422
+ }, "Completed pending blob deletions");
423
+ }
424
+ if (outcome.failed.length > 0) {
425
+ logger.warn({
426
+ scope,
427
+ failed: outcome.failed.length,
428
+ error: outcome.failed[0].error,
429
+ }, "Pending blob deletion failed again");
430
+ }
431
+ }
432
+ // Advance the ranges only now: a crash mid-pass re-sends already-deleted
433
+ // keys (404, harmless) rather than skipping keys that were never sent.
434
+ for (const { old, next } of advancedRanges) {
435
+ await pendingBlobDeletions.remove([old]);
436
+ if (next)
437
+ await pendingBlobDeletions.add([next]);
438
+ }
439
+ result.remaining = (await pendingBlobDeletions.list()).length;
440
+ return result;
441
+ }
442
+ /**
443
+ * What the registry currently says about `scope`. "live" means a row exists
444
+ * that is not a tombstone; "deleted" carries the tombstone's version;
445
+ * "deleted-or-absent" is used when nothing can be asked (no feed or owner
446
+ * wired) or the row is gone.
447
+ */
448
+ async function registryState(deps, scope) {
449
+ if (!deps.dataPointFeed || !deps.serverOwner) {
450
+ return { status: "deleted-or-absent" };
451
+ }
452
+ let record;
453
+ try {
454
+ record = await deps.dataPointFeed.getDataPoint({
455
+ ownerAddress: deps.serverOwner,
456
+ scope,
457
+ });
458
+ }
459
+ catch (err) {
460
+ return {
461
+ status: "unknown",
462
+ error: err instanceof Error ? err : new Error(String(err)),
463
+ };
464
+ }
465
+ if (record === null)
466
+ return { status: "deleted-or-absent" };
467
+ if (deletionTimestamp(record) === null)
468
+ return { status: "live", record };
469
+ return { status: "deleted", version: tombstoneVersion(record) };
470
+ }
471
+ function errorMessage(err) {
472
+ return err instanceof Error ? err.message : String(err);
473
+ }
474
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/sync/workers/delete.ts"],"names":[],"mappings":"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"}