@atomicmemory/core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (589) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/LICENSE +201 -0
  3. package/README.md +314 -0
  4. package/dist/app/bind-ephemeral.d.ts +18 -0
  5. package/dist/app/bind-ephemeral.js +22 -0
  6. package/dist/app/cors-headers.d.ts +12 -0
  7. package/dist/app/cors-headers.js +18 -0
  8. package/dist/app/create-app.d.ts +25 -0
  9. package/dist/app/create-app.js +156 -0
  10. package/dist/app/runtime-config-route-snapshot.d.ts +27 -0
  11. package/dist/app/runtime-config-route-snapshot.js +27 -0
  12. package/dist/app/runtime-container.d.ts +281 -0
  13. package/dist/app/runtime-container.js +297 -0
  14. package/dist/app/startup-checks.d.ts +28 -0
  15. package/dist/app/startup-checks.js +45 -0
  16. package/dist/bin.d.ts +17 -0
  17. package/dist/bin.js +128 -0
  18. package/dist/config.d.ts +680 -0
  19. package/dist/config.js +808 -0
  20. package/dist/db/agent-trust-repository.d.ts +49 -0
  21. package/dist/db/agent-trust-repository.js +66 -0
  22. package/dist/db/belief-edges-repository.d.ts +68 -0
  23. package/dist/db/belief-edges-repository.js +124 -0
  24. package/dist/db/claim-repository.d.ts +6 -0
  25. package/dist/db/claim-repository.js +4 -0
  26. package/dist/db/contradictions-repository.d.ts +56 -0
  27. package/dist/db/contradictions-repository.js +88 -0
  28. package/dist/db/document-chunk-repository.d.ts +48 -0
  29. package/dist/db/document-chunk-repository.js +145 -0
  30. package/dist/db/document-chunk-types.d.ts +35 -0
  31. package/dist/db/document-chunk-types.js +9 -0
  32. package/dist/db/document-list-cursor.d.ts +45 -0
  33. package/dist/db/document-list-cursor.js +111 -0
  34. package/dist/db/document-list-repository.d.ts +103 -0
  35. package/dist/db/document-list-repository.js +204 -0
  36. package/dist/db/entity-cards-repository.d.ts +37 -0
  37. package/dist/db/entity-cards-repository.js +46 -0
  38. package/dist/db/entity-values-repository.d.ts +26 -0
  39. package/dist/db/entity-values-repository.js +57 -0
  40. package/dist/db/link-repository.d.ts +30 -0
  41. package/dist/db/link-repository.js +54 -0
  42. package/dist/db/memory-repository.d.ts +163 -0
  43. package/dist/db/memory-repository.js +232 -0
  44. package/dist/db/migrate.d.ts +6 -0
  45. package/dist/db/migrate.js +36 -0
  46. package/dist/db/mmr.d.ts +14 -0
  47. package/dist/db/mmr.js +57 -0
  48. package/dist/db/passport-feed-repository.d.ts +91 -0
  49. package/dist/db/passport-feed-repository.js +198 -0
  50. package/dist/db/pg-episode-store.d.ts +19 -0
  51. package/dist/db/pg-episode-store.js +17 -0
  52. package/dist/db/pg-link-store.d.ts +17 -0
  53. package/dist/db/pg-link-store.js +14 -0
  54. package/dist/db/pg-memory-store.d.ts +68 -0
  55. package/dist/db/pg-memory-store.js +53 -0
  56. package/dist/db/pg-recap-store.d.ts +13 -0
  57. package/dist/db/pg-recap-store.js +19 -0
  58. package/dist/db/pg-representation-store.d.ts +17 -0
  59. package/dist/db/pg-representation-store.js +17 -0
  60. package/dist/db/pg-search-store.d.ts +29 -0
  61. package/dist/db/pg-search-store.js +47 -0
  62. package/dist/db/pool.d.ts +5 -0
  63. package/dist/db/pool.js +21 -0
  64. package/dist/db/ppr.d.ts +56 -0
  65. package/dist/db/ppr.js +178 -0
  66. package/dist/db/query-helpers.d.ts +44 -0
  67. package/dist/db/query-helpers.js +60 -0
  68. package/dist/db/raw-doc-artifact-sync.d.ts +128 -0
  69. package/dist/db/raw-doc-artifact-sync.js +259 -0
  70. package/dist/db/raw-document-blob-repository.d.ts +148 -0
  71. package/dist/db/raw-document-blob-repository.js +300 -0
  72. package/dist/db/raw-document-repository.d.ts +104 -0
  73. package/dist/db/raw-document-repository.js +410 -0
  74. package/dist/db/raw-document-status-repository.d.ts +122 -0
  75. package/dist/db/raw-document-status-repository.js +183 -0
  76. package/dist/db/raw-document-types.d.ts +236 -0
  77. package/dist/db/raw-document-types.js +10 -0
  78. package/dist/db/raw-storage-reconciliation-repository.d.ts +110 -0
  79. package/dist/db/raw-storage-reconciliation-repository.js +200 -0
  80. package/dist/db/reflection-jobs-repository.d.ts +33 -0
  81. package/dist/db/reflection-jobs-repository.js +48 -0
  82. package/dist/db/reflections-repository.d.ts +41 -0
  83. package/dist/db/reflections-repository.js +83 -0
  84. package/dist/db/repository-claims.d.ts +141 -0
  85. package/dist/db/repository-claims.js +376 -0
  86. package/dist/db/repository-deferred-audn.d.ts +33 -0
  87. package/dist/db/repository-deferred-audn.js +69 -0
  88. package/dist/db/repository-document-delete.d.ts +53 -0
  89. package/dist/db/repository-document-delete.js +156 -0
  90. package/dist/db/repository-entities.d.ts +114 -0
  91. package/dist/db/repository-entities.js +317 -0
  92. package/dist/db/repository-entity-attributes.d.ts +41 -0
  93. package/dist/db/repository-entity-attributes.js +65 -0
  94. package/dist/db/repository-entity-graph.d.ts +32 -0
  95. package/dist/db/repository-entity-graph.js +87 -0
  96. package/dist/db/repository-first-mentions.d.ts +41 -0
  97. package/dist/db/repository-first-mentions.js +79 -0
  98. package/dist/db/repository-lessons.d.ts +51 -0
  99. package/dist/db/repository-lessons.js +90 -0
  100. package/dist/db/repository-links.d.ts +26 -0
  101. package/dist/db/repository-links.js +105 -0
  102. package/dist/db/repository-observation.d.ts +26 -0
  103. package/dist/db/repository-observation.js +51 -0
  104. package/dist/db/repository-read.d.ts +56 -0
  105. package/dist/db/repository-read.js +271 -0
  106. package/dist/db/repository-recaps.d.ts +59 -0
  107. package/dist/db/repository-recaps.js +158 -0
  108. package/dist/db/repository-representations.d.ts +48 -0
  109. package/dist/db/repository-representations.js +162 -0
  110. package/dist/db/repository-temporal-state.d.ts +35 -0
  111. package/dist/db/repository-temporal-state.js +46 -0
  112. package/dist/db/repository-tll.d.ts +88 -0
  113. package/dist/db/repository-tll.js +179 -0
  114. package/dist/db/repository-types.d.ts +313 -0
  115. package/dist/db/repository-types.js +142 -0
  116. package/dist/db/repository-user-profiles.d.ts +17 -0
  117. package/dist/db/repository-user-profiles.js +28 -0
  118. package/dist/db/repository-vector-search.d.ts +33 -0
  119. package/dist/db/repository-vector-search.js +373 -0
  120. package/dist/db/repository-wipe.d.ts +34 -0
  121. package/dist/db/repository-wipe.js +94 -0
  122. package/dist/db/repository-write.d.ts +61 -0
  123. package/dist/db/repository-write.js +279 -0
  124. package/dist/db/schema.sql +1355 -0
  125. package/dist/db/storage-artifact-delete-tx.d.ts +56 -0
  126. package/dist/db/storage-artifact-delete-tx.js +123 -0
  127. package/dist/db/storage-artifact-providers.d.ts +21 -0
  128. package/dist/db/storage-artifact-providers.js +21 -0
  129. package/dist/db/storage-artifact-recovery-repository.d.ts +66 -0
  130. package/dist/db/storage-artifact-recovery-repository.js +58 -0
  131. package/dist/db/storage-artifact-repository.d.ts +329 -0
  132. package/dist/db/storage-artifact-repository.js +497 -0
  133. package/dist/db/stores.d.ts +220 -0
  134. package/dist/db/stores.js +12 -0
  135. package/dist/db/summaries-repository.d.ts +74 -0
  136. package/dist/db/summaries-repository.js +125 -0
  137. package/dist/eval/beam-10m-loader.d.ts +98 -0
  138. package/dist/eval/beam-10m-loader.js +128 -0
  139. package/dist/index.d.ts +18 -0
  140. package/dist/index.js +17 -0
  141. package/dist/middleware/require-bearer.d.ts +27 -0
  142. package/dist/middleware/require-bearer.js +60 -0
  143. package/dist/middleware/validate-response.d.ts +33 -0
  144. package/dist/middleware/validate-response.js +55 -0
  145. package/dist/middleware/validate.d.ts +43 -0
  146. package/dist/middleware/validate.js +85 -0
  147. package/dist/routes/agents.d.ts +13 -0
  148. package/dist/routes/agents.js +89 -0
  149. package/dist/routes/document-response-formatters.d.ts +98 -0
  150. package/dist/routes/document-response-formatters.js +243 -0
  151. package/dist/routes/documents.d.ts +74 -0
  152. package/dist/routes/documents.js +425 -0
  153. package/dist/routes/memories.d.ts +29 -0
  154. package/dist/routes/memories.js +725 -0
  155. package/dist/routes/memory-response-formatters.d.ts +179 -0
  156. package/dist/routes/memory-response-formatters.js +210 -0
  157. package/dist/routes/public-raw-storage-metadata.d.ts +54 -0
  158. package/dist/routes/public-raw-storage-metadata.js +56 -0
  159. package/dist/routes/reflect.d.ts +14 -0
  160. package/dist/routes/reflect.js +19 -0
  161. package/dist/routes/response-schema-map.d.ts +14 -0
  162. package/dist/routes/response-schema-map.js +69 -0
  163. package/dist/routes/route-errors.d.ts +12 -0
  164. package/dist/routes/route-errors.js +30 -0
  165. package/dist/routes/storage-error-handlers.d.ts +34 -0
  166. package/dist/routes/storage-error-handlers.js +185 -0
  167. package/dist/routes/storage-response-formatters.d.ts +44 -0
  168. package/dist/routes/storage-response-formatters.js +155 -0
  169. package/dist/routes/storage.d.ts +38 -0
  170. package/dist/routes/storage.js +369 -0
  171. package/dist/routes/upstream-provider-errors.d.ts +19 -0
  172. package/dist/routes/upstream-provider-errors.js +95 -0
  173. package/dist/schemas/agents.d.ts +79 -0
  174. package/dist/schemas/agents.js +126 -0
  175. package/dist/schemas/common.d.ts +110 -0
  176. package/dist/schemas/common.js +190 -0
  177. package/dist/schemas/document-list-responses.d.ts +102 -0
  178. package/dist/schemas/document-list-responses.js +87 -0
  179. package/dist/schemas/document-list-schemas.d.ts +123 -0
  180. package/dist/schemas/document-list-schemas.js +174 -0
  181. package/dist/schemas/document-response-schemas.d.ts +610 -0
  182. package/dist/schemas/document-response-schemas.js +264 -0
  183. package/dist/schemas/document-status-envelope.d.ts +48 -0
  184. package/dist/schemas/document-status-envelope.js +54 -0
  185. package/dist/schemas/documents.d.ts +292 -0
  186. package/dist/schemas/documents.js +449 -0
  187. package/dist/schemas/errors.d.ts +75 -0
  188. package/dist/schemas/errors.js +105 -0
  189. package/dist/schemas/memories.d.ts +378 -0
  190. package/dist/schemas/memories.js +542 -0
  191. package/dist/schemas/openapi.d.ts +24 -0
  192. package/dist/schemas/openapi.js +1038 -0
  193. package/dist/schemas/response-scalars.d.ts +10 -0
  194. package/dist/schemas/response-scalars.js +10 -0
  195. package/dist/schemas/responses.d.ts +536 -0
  196. package/dist/schemas/responses.js +350 -0
  197. package/dist/schemas/search-response-parts.d.ts +97 -0
  198. package/dist/schemas/search-response-parts.js +103 -0
  199. package/dist/schemas/storage-schemas.d.ts +175 -0
  200. package/dist/schemas/storage-schemas.js +277 -0
  201. package/dist/schemas/zod-setup.d.ts +15 -0
  202. package/dist/schemas/zod-setup.js +17 -0
  203. package/dist/server.d.ts +13 -0
  204. package/dist/server.js +57 -0
  205. package/dist/services/abstract-query-policy.d.ts +13 -0
  206. package/dist/services/abstract-query-policy.js +50 -0
  207. package/dist/services/affinity-clustering.d.ts +66 -0
  208. package/dist/services/affinity-clustering.js +125 -0
  209. package/dist/services/agentic-retrieval.d.ts +38 -0
  210. package/dist/services/agentic-retrieval.js +126 -0
  211. package/dist/services/answer-format.d.ts +56 -0
  212. package/dist/services/answer-format.js +118 -0
  213. package/dist/services/answer-rescue.d.ts +72 -0
  214. package/dist/services/answer-rescue.js +177 -0
  215. package/dist/services/answer-verifier.d.ts +24 -0
  216. package/dist/services/answer-verifier.js +73 -0
  217. package/dist/services/api-retry.d.ts +6 -0
  218. package/dist/services/api-retry.js +41 -0
  219. package/dist/services/assistant-turn-filter.d.ts +20 -0
  220. package/dist/services/assistant-turn-filter.js +69 -0
  221. package/dist/services/atomicmem-uri.d.ts +33 -0
  222. package/dist/services/atomicmem-uri.js +86 -0
  223. package/dist/services/audit-events.d.ts +54 -0
  224. package/dist/services/audit-events.js +56 -0
  225. package/dist/services/chunked-extraction.d.ts +21 -0
  226. package/dist/services/chunked-extraction.js +108 -0
  227. package/dist/services/claim-slotting.d.ts +27 -0
  228. package/dist/services/claim-slotting.js +38 -0
  229. package/dist/services/claude-code-llm.d.ts +19 -0
  230. package/dist/services/claude-code-llm.js +96 -0
  231. package/dist/services/composite-dedup.d.ts +50 -0
  232. package/dist/services/composite-dedup.js +153 -0
  233. package/dist/services/composite-grouping.d.ts +41 -0
  234. package/dist/services/composite-grouping.js +111 -0
  235. package/dist/services/composite-staleness.d.ts +20 -0
  236. package/dist/services/composite-staleness.js +50 -0
  237. package/dist/services/conciseness-preference.d.ts +14 -0
  238. package/dist/services/conciseness-preference.js +42 -0
  239. package/dist/services/conflict-policy.d.ts +20 -0
  240. package/dist/services/conflict-policy.js +335 -0
  241. package/dist/services/consensus-extraction.d.ts +39 -0
  242. package/dist/services/consensus-extraction.js +147 -0
  243. package/dist/services/consensus-validation.d.ts +52 -0
  244. package/dist/services/consensus-validation.js +206 -0
  245. package/dist/services/consolidation-service.d.ts +60 -0
  246. package/dist/services/consolidation-service.js +171 -0
  247. package/dist/services/content-detection.d.ts +18 -0
  248. package/dist/services/content-detection.js +25 -0
  249. package/dist/services/contradiction-surfacing.d.ts +62 -0
  250. package/dist/services/contradiction-surfacing.js +111 -0
  251. package/dist/services/cost-telemetry.d.ts +39 -0
  252. package/dist/services/cost-telemetry.js +58 -0
  253. package/dist/services/counter-evidence.d.ts +34 -0
  254. package/dist/services/counter-evidence.js +92 -0
  255. package/dist/services/current-state-ranking.d.ts +21 -0
  256. package/dist/services/current-state-ranking.js +152 -0
  257. package/dist/services/deferred-audn.d.ts +47 -0
  258. package/dist/services/deferred-audn.js +162 -0
  259. package/dist/services/document-chunker.d.ts +50 -0
  260. package/dist/services/document-chunker.js +153 -0
  261. package/dist/services/document-failure-markers.d.ts +91 -0
  262. package/dist/services/document-failure-markers.js +305 -0
  263. package/dist/services/document-indexer.d.ts +122 -0
  264. package/dist/services/document-indexer.js +405 -0
  265. package/dist/services/document-service.d.ts +245 -0
  266. package/dist/services/document-service.js +325 -0
  267. package/dist/services/document-upload-artifact-sync.d.ts +80 -0
  268. package/dist/services/document-upload-artifact-sync.js +162 -0
  269. package/dist/services/document-upload-beta2-recovery.d.ts +72 -0
  270. package/dist/services/document-upload-beta2-recovery.js +94 -0
  271. package/dist/services/document-upload.d.ts +44 -0
  272. package/dist/services/document-upload.js +353 -0
  273. package/dist/services/embedding.d.ts +57 -0
  274. package/dist/services/embedding.js +416 -0
  275. package/dist/services/entity-attribute-extractor.d.ts +34 -0
  276. package/dist/services/entity-attribute-extractor.js +117 -0
  277. package/dist/services/entity-card-synthesis.d.ts +54 -0
  278. package/dist/services/entity-card-synthesis.js +92 -0
  279. package/dist/services/entity-dedup.d.ts +9 -0
  280. package/dist/services/entity-dedup.js +14 -0
  281. package/dist/services/entity-graph.d.ts +17 -0
  282. package/dist/services/entity-graph.js +135 -0
  283. package/dist/services/entropy-gate.d.ts +52 -0
  284. package/dist/services/entropy-gate.js +56 -0
  285. package/dist/services/episode-fetcher.d.ts +47 -0
  286. package/dist/services/episode-fetcher.js +128 -0
  287. package/dist/services/event-anchor-facts.d.ts +8 -0
  288. package/dist/services/event-anchor-facts.js +205 -0
  289. package/dist/services/event-chain-detector.d.ts +52 -0
  290. package/dist/services/event-chain-detector.js +83 -0
  291. package/dist/services/extraction-cache.d.ts +9 -0
  292. package/dist/services/extraction-cache.js +54 -0
  293. package/dist/services/extraction-enrichment.d.ts +9 -0
  294. package/dist/services/extraction-enrichment.js +223 -0
  295. package/dist/services/extraction.d.ts +69 -0
  296. package/dist/services/extraction.js +596 -0
  297. package/dist/services/fact-normalization.d.ts +12 -0
  298. package/dist/services/fact-normalization.js +248 -0
  299. package/dist/services/filecoin-observability.d.ts +127 -0
  300. package/dist/services/filecoin-observability.js +200 -0
  301. package/dist/services/first-mention-service.d.ts +76 -0
  302. package/dist/services/first-mention-service.js +186 -0
  303. package/dist/services/hierarchical-retrieval.d.ts +49 -0
  304. package/dist/services/hierarchical-retrieval.js +50 -0
  305. package/dist/services/ingest-fact-pipeline.d.ts +32 -0
  306. package/dist/services/ingest-fact-pipeline.js +212 -0
  307. package/dist/services/ingest-post-write.d.ts +50 -0
  308. package/dist/services/ingest-post-write.js +117 -0
  309. package/dist/services/ingest-trace.d.ts +32 -0
  310. package/dist/services/ingest-trace.js +60 -0
  311. package/dist/services/input-sanitizer.d.ts +41 -0
  312. package/dist/services/input-sanitizer.js +135 -0
  313. package/dist/services/iterative-retrieval.d.ts +26 -0
  314. package/dist/services/iterative-retrieval.js +139 -0
  315. package/dist/services/keyword-expansion.d.ts +10 -0
  316. package/dist/services/keyword-expansion.js +26 -0
  317. package/dist/services/lesson-service.d.ts +68 -0
  318. package/dist/services/lesson-service.js +178 -0
  319. package/dist/services/literal-extractor.d.ts +16 -0
  320. package/dist/services/literal-extractor.js +74 -0
  321. package/dist/services/literal-list-protection.d.ts +17 -0
  322. package/dist/services/literal-list-protection.js +134 -0
  323. package/dist/services/literal-query-expansion.d.ts +20 -0
  324. package/dist/services/literal-query-expansion.js +181 -0
  325. package/dist/services/llm.d.ts +61 -0
  326. package/dist/services/llm.js +265 -0
  327. package/dist/services/memcell-projection.d.ts +17 -0
  328. package/dist/services/memcell-projection.js +41 -0
  329. package/dist/services/memory-audn.d.ts +43 -0
  330. package/dist/services/memory-audn.js +419 -0
  331. package/dist/services/memory-crud.d.ts +93 -0
  332. package/dist/services/memory-crud.js +255 -0
  333. package/dist/services/memory-ingest.d.ts +21 -0
  334. package/dist/services/memory-ingest.js +249 -0
  335. package/dist/services/memory-lifecycle.d.ts +75 -0
  336. package/dist/services/memory-lifecycle.js +108 -0
  337. package/dist/services/memory-lineage.d.ts +181 -0
  338. package/dist/services/memory-lineage.js +232 -0
  339. package/dist/services/memory-network.d.ts +40 -0
  340. package/dist/services/memory-network.js +75 -0
  341. package/dist/services/memory-search-types.d.ts +25 -0
  342. package/dist/services/memory-search-types.js +10 -0
  343. package/dist/services/memory-search.d.ts +48 -0
  344. package/dist/services/memory-search.js +505 -0
  345. package/dist/services/memory-service-types.d.ts +371 -0
  346. package/dist/services/memory-service-types.js +8 -0
  347. package/dist/services/memory-service.d.ts +152 -0
  348. package/dist/services/memory-service.js +225 -0
  349. package/dist/services/memory-storage.d.ts +33 -0
  350. package/dist/services/memory-storage.js +328 -0
  351. package/dist/services/msr-aggregator.d.ts +38 -0
  352. package/dist/services/msr-aggregator.js +97 -0
  353. package/dist/services/msr-detector.d.ts +35 -0
  354. package/dist/services/msr-detector.js +65 -0
  355. package/dist/services/namespace-retrieval.d.ts +60 -0
  356. package/dist/services/namespace-retrieval.js +180 -0
  357. package/dist/services/observation-date-extraction.d.ts +12 -0
  358. package/dist/services/observation-date-extraction.js +50 -0
  359. package/dist/services/observation-service.d.ts +27 -0
  360. package/dist/services/observation-service.js +84 -0
  361. package/dist/services/packaging-observability.d.ts +29 -0
  362. package/dist/services/packaging-observability.js +146 -0
  363. package/dist/services/query-expansion.d.ts +83 -0
  364. package/dist/services/query-expansion.js +242 -0
  365. package/dist/services/query-keyword-matches.d.ts +6 -0
  366. package/dist/services/query-keyword-matches.js +56 -0
  367. package/dist/services/query-term-visibility.d.ts +28 -0
  368. package/dist/services/query-term-visibility.js +100 -0
  369. package/dist/services/quick-extraction.d.ts +25 -0
  370. package/dist/services/quick-extraction.js +431 -0
  371. package/dist/services/quoted-entity-extraction.d.ts +10 -0
  372. package/dist/services/quoted-entity-extraction.js +161 -0
  373. package/dist/services/raw-storage-reconciler-backoff.d.ts +8 -0
  374. package/dist/services/raw-storage-reconciler-backoff.js +14 -0
  375. package/dist/services/raw-storage-reconciler-scheduler.d.ts +29 -0
  376. package/dist/services/raw-storage-reconciler-scheduler.js +43 -0
  377. package/dist/services/raw-storage-reconciler.d.ts +71 -0
  378. package/dist/services/raw-storage-reconciler.js +278 -0
  379. package/dist/services/recap-builder.d.ts +49 -0
  380. package/dist/services/recap-builder.js +157 -0
  381. package/dist/services/reflect-jobs.d.ts +23 -0
  382. package/dist/services/reflect-jobs.js +36 -0
  383. package/dist/services/reflect-prompts.d.ts +71 -0
  384. package/dist/services/reflect-prompts.js +99 -0
  385. package/dist/services/reflect-retrieval.d.ts +33 -0
  386. package/dist/services/reflect-retrieval.js +30 -0
  387. package/dist/services/reflect.d.ts +49 -0
  388. package/dist/services/reflect.js +84 -0
  389. package/dist/services/relative-temporal.d.ts +14 -0
  390. package/dist/services/relative-temporal.js +163 -0
  391. package/dist/services/relevance-policy.d.ts +37 -0
  392. package/dist/services/relevance-policy.js +109 -0
  393. package/dist/services/rerank.d.ts +32 -0
  394. package/dist/services/rerank.js +118 -0
  395. package/dist/services/reranker.d.ts +20 -0
  396. package/dist/services/reranker.js +99 -0
  397. package/dist/services/retrieval-channel-rules.d.ts +34 -0
  398. package/dist/services/retrieval-channel-rules.js +41 -0
  399. package/dist/services/retrieval-config-overlay.d.ts +36 -0
  400. package/dist/services/retrieval-config-overlay.js +44 -0
  401. package/dist/services/retrieval-format.d.ts +119 -0
  402. package/dist/services/retrieval-format.js +559 -0
  403. package/dist/services/retrieval-policy.d.ts +69 -0
  404. package/dist/services/retrieval-policy.js +275 -0
  405. package/dist/services/retrieval-profiles.d.ts +37 -0
  406. package/dist/services/retrieval-profiles.js +90 -0
  407. package/dist/services/retrieval-side-effects.d.ts +14 -0
  408. package/dist/services/retrieval-side-effects.js +26 -0
  409. package/dist/services/retrieval-trace.d.ts +108 -0
  410. package/dist/services/retrieval-trace.js +147 -0
  411. package/dist/services/rrf-fusion.d.ts +18 -0
  412. package/dist/services/rrf-fusion.js +34 -0
  413. package/dist/services/search-pipeline.d.ts +71 -0
  414. package/dist/services/search-pipeline.js +788 -0
  415. package/dist/services/session-date.d.ts +20 -0
  416. package/dist/services/session-date.js +61 -0
  417. package/dist/services/session-packaging.d.ts +53 -0
  418. package/dist/services/session-packaging.js +182 -0
  419. package/dist/services/session-summary-generator.d.ts +53 -0
  420. package/dist/services/session-summary-generator.js +134 -0
  421. package/dist/services/specialists/cr-specialist.d.ts +52 -0
  422. package/dist/services/specialists/cr-specialist.js +121 -0
  423. package/dist/services/specialists/dispatch.d.ts +53 -0
  424. package/dist/services/specialists/dispatch.js +102 -0
  425. package/dist/services/specialists/ie-ku-specialist.d.ts +37 -0
  426. package/dist/services/specialists/ie-ku-specialist.js +63 -0
  427. package/dist/services/specialists/msr-specialist.d.ts +61 -0
  428. package/dist/services/specialists/msr-specialist.js +162 -0
  429. package/dist/services/specialists/tr-specialist.d.ts +37 -0
  430. package/dist/services/specialists/tr-specialist.js +146 -0
  431. package/dist/services/storage-key-prefix.d.ts +42 -0
  432. package/dist/services/storage-key-prefix.js +45 -0
  433. package/dist/services/storage-put-recovery.d.ts +71 -0
  434. package/dist/services/storage-put-recovery.js +269 -0
  435. package/dist/services/storage-service-errors.d.ts +124 -0
  436. package/dist/services/storage-service-errors.js +189 -0
  437. package/dist/services/storage-service.d.ts +176 -0
  438. package/dist/services/storage-service.js +423 -0
  439. package/dist/services/subject-aware-ranking.d.ts +19 -0
  440. package/dist/services/subject-aware-ranking.js +161 -0
  441. package/dist/services/supplemental-extraction.d.ts +7 -0
  442. package/dist/services/supplemental-extraction.js +116 -0
  443. package/dist/services/tbc-execution.d.ts +49 -0
  444. package/dist/services/tbc-execution.js +284 -0
  445. package/dist/services/temporal-classifier.d.ts +56 -0
  446. package/dist/services/temporal-classifier.js +94 -0
  447. package/dist/services/temporal-endpoint-evidence.d.ts +12 -0
  448. package/dist/services/temporal-endpoint-evidence.js +313 -0
  449. package/dist/services/temporal-fingerprint.d.ts +6 -0
  450. package/dist/services/temporal-fingerprint.js +12 -0
  451. package/dist/services/temporal-format.d.ts +9 -0
  452. package/dist/services/temporal-format.js +21 -0
  453. package/dist/services/temporal-intent.d.ts +39 -0
  454. package/dist/services/temporal-intent.js +78 -0
  455. package/dist/services/temporal-query-constraints.d.ts +16 -0
  456. package/dist/services/temporal-query-constraints.js +107 -0
  457. package/dist/services/temporal-query-expansion.d.ts +14 -0
  458. package/dist/services/temporal-query-expansion.js +131 -0
  459. package/dist/services/temporal-rerank.d.ts +22 -0
  460. package/dist/services/temporal-rerank.js +47 -0
  461. package/dist/services/temporal-result-protection.d.ts +7 -0
  462. package/dist/services/temporal-result-protection.js +60 -0
  463. package/dist/services/temporal-state-write.d.ts +57 -0
  464. package/dist/services/temporal-state-write.js +45 -0
  465. package/dist/services/tiered-context.d.ts +87 -0
  466. package/dist/services/tiered-context.js +214 -0
  467. package/dist/services/tiered-loading.d.ts +88 -0
  468. package/dist/services/tiered-loading.js +263 -0
  469. package/dist/services/timeline-pack.d.ts +36 -0
  470. package/dist/services/timeline-pack.js +50 -0
  471. package/dist/services/timing.d.ts +13 -0
  472. package/dist/services/timing.js +72 -0
  473. package/dist/services/tll-augmentation.d.ts +20 -0
  474. package/dist/services/tll-augmentation.js +125 -0
  475. package/dist/services/tll-retrieval.d.ts +55 -0
  476. package/dist/services/tll-retrieval.js +101 -0
  477. package/dist/services/topic-abstraction.d.ts +36 -0
  478. package/dist/services/topic-abstraction.js +105 -0
  479. package/dist/services/trust-scoring.d.ts +43 -0
  480. package/dist/services/trust-scoring.js +89 -0
  481. package/dist/services/typed-belief-calculus.d.ts +126 -0
  482. package/dist/services/typed-belief-calculus.js +204 -0
  483. package/dist/services/upload-config.d.ts +34 -0
  484. package/dist/services/upload-config.js +23 -0
  485. package/dist/services/upload-decision.d.ts +65 -0
  486. package/dist/services/upload-decision.js +98 -0
  487. package/dist/services/upload-helpers.d.ts +107 -0
  488. package/dist/services/upload-helpers.js +148 -0
  489. package/dist/services/user-profile-builder.d.ts +22 -0
  490. package/dist/services/user-profile-builder.js +109 -0
  491. package/dist/services/voyage-embedding.d.ts +22 -0
  492. package/dist/services/voyage-embedding.js +77 -0
  493. package/dist/services/write-security.d.ts +31 -0
  494. package/dist/services/write-security.js +64 -0
  495. package/dist/storage/artifact-public-redaction.d.ts +34 -0
  496. package/dist/storage/artifact-public-redaction.js +83 -0
  497. package/dist/storage/cleanup.d.ts +103 -0
  498. package/dist/storage/cleanup.js +138 -0
  499. package/dist/storage/codec-factory.d.ts +17 -0
  500. package/dist/storage/codec-factory.js +33 -0
  501. package/dist/storage/codecs/aes-gcm-codec.d.ts +44 -0
  502. package/dist/storage/codecs/aes-gcm-codec.js +108 -0
  503. package/dist/storage/codecs/noop-codec.d.ts +16 -0
  504. package/dist/storage/codecs/noop-codec.js +23 -0
  505. package/dist/storage/factory.d.ts +44 -0
  506. package/dist/storage/factory.js +99 -0
  507. package/dist/storage/filecoin-cid-validation.d.ts +82 -0
  508. package/dist/storage/filecoin-cid-validation.js +122 -0
  509. package/dist/storage/filecoin-public-metadata.d.ts +73 -0
  510. package/dist/storage/filecoin-public-metadata.js +110 -0
  511. package/dist/storage/local-fs-store.d.ts +39 -0
  512. package/dist/storage/local-fs-store.js +145 -0
  513. package/dist/storage/pointer-uri-allowlist.d.ts +38 -0
  514. package/dist/storage/pointer-uri-allowlist.js +70 -0
  515. package/dist/storage/provider-metadata-projection.d.ts +27 -0
  516. package/dist/storage/provider-metadata-projection.js +68 -0
  517. package/dist/storage/providers/filecoin/backend.d.ts +42 -0
  518. package/dist/storage/providers/filecoin/backend.js +250 -0
  519. package/dist/storage/providers/filecoin/config.d.ts +70 -0
  520. package/dist/storage/providers/filecoin/config.js +275 -0
  521. package/dist/storage/providers/filecoin/errors.d.ts +45 -0
  522. package/dist/storage/providers/filecoin/errors.js +56 -0
  523. package/dist/storage/providers/filecoin/filecoin-pin-car.d.ts +78 -0
  524. package/dist/storage/providers/filecoin/filecoin-pin-car.js +155 -0
  525. package/dist/storage/providers/filecoin/filecoin-pin-client.d.ts +92 -0
  526. package/dist/storage/providers/filecoin/filecoin-pin-client.js +199 -0
  527. package/dist/storage/providers/filecoin/filecoin-pin-mapping.d.ts +58 -0
  528. package/dist/storage/providers/filecoin/filecoin-pin-mapping.js +103 -0
  529. package/dist/storage/providers/filecoin/filecoin-pin-timeout.d.ts +30 -0
  530. package/dist/storage/providers/filecoin/filecoin-pin-timeout.js +53 -0
  531. package/dist/storage/providers/filecoin/filecoin-pin-vendor.d.ts +111 -0
  532. package/dist/storage/providers/filecoin/filecoin-pin-vendor.js +87 -0
  533. package/dist/storage/providers/filecoin/hints.d.ts +71 -0
  534. package/dist/storage/providers/filecoin/hints.js +123 -0
  535. package/dist/storage/providers/filecoin/index.d.ts +51 -0
  536. package/dist/storage/providers/filecoin/index.js +103 -0
  537. package/dist/storage/providers/filecoin/ipfs-cid.d.ts +50 -0
  538. package/dist/storage/providers/filecoin/ipfs-cid.js +64 -0
  539. package/dist/storage/providers/filecoin/metadata.d.ts +72 -0
  540. package/dist/storage/providers/filecoin/metadata.js +137 -0
  541. package/dist/storage/providers/filecoin/piece-cid.d.ts +48 -0
  542. package/dist/storage/providers/filecoin/piece-cid.js +57 -0
  543. package/dist/storage/providers/filecoin/provider-client.d.ts +234 -0
  544. package/dist/storage/providers/filecoin/provider-client.js +27 -0
  545. package/dist/storage/providers/filecoin/readiness.d.ts +62 -0
  546. package/dist/storage/providers/filecoin/readiness.js +85 -0
  547. package/dist/storage/providers/filecoin/retriever.d.ts +82 -0
  548. package/dist/storage/providers/filecoin/retriever.js +63 -0
  549. package/dist/storage/providers/filecoin/skeleton-client.d.ts +36 -0
  550. package/dist/storage/providers/filecoin/skeleton-client.js +55 -0
  551. package/dist/storage/providers/filecoin/synapse-client.d.ts +169 -0
  552. package/dist/storage/providers/filecoin/synapse-client.js +343 -0
  553. package/dist/storage/providers/filecoin/synapse-construction.d.ts +26 -0
  554. package/dist/storage/providers/filecoin/synapse-construction.js +47 -0
  555. package/dist/storage/providers/filecoin/synapse-error-mapping.d.ts +23 -0
  556. package/dist/storage/providers/filecoin/synapse-error-mapping.js +49 -0
  557. package/dist/storage/providers/filecoin/synapse-readiness.d.ts +37 -0
  558. package/dist/storage/providers/filecoin/synapse-readiness.js +231 -0
  559. package/dist/storage/providers/filecoin/uri.d.ts +49 -0
  560. package/dist/storage/providers/filecoin/uri.js +84 -0
  561. package/dist/storage/providers/filecoin/verified-fetch-lifecycle.d.ts +77 -0
  562. package/dist/storage/providers/filecoin/verified-fetch-lifecycle.js +196 -0
  563. package/dist/storage/providers/filecoin/verified-fetch-retriever.d.ts +54 -0
  564. package/dist/storage/providers/filecoin/verified-fetch-retriever.js +81 -0
  565. package/dist/storage/providers/filecoin/verified-fetch-vendor.d.ts +71 -0
  566. package/dist/storage/providers/filecoin/verified-fetch-vendor.js +94 -0
  567. package/dist/storage/raw-content-codec.d.ts +89 -0
  568. package/dist/storage/raw-content-codec.js +47 -0
  569. package/dist/storage/raw-content-store-backend-adapter.d.ts +28 -0
  570. package/dist/storage/raw-content-store-backend-adapter.js +67 -0
  571. package/dist/storage/raw-content-store.d.ts +228 -0
  572. package/dist/storage/raw-content-store.js +27 -0
  573. package/dist/storage/s3-store.d.ts +42 -0
  574. package/dist/storage/s3-store.js +181 -0
  575. package/dist/storage/storage-backend-registry.d.ts +58 -0
  576. package/dist/storage/storage-backend-registry.js +56 -0
  577. package/dist/storage/storage-backend.d.ts +82 -0
  578. package/dist/storage/storage-backend.js +14 -0
  579. package/dist/storage/storage-capabilities.d.ts +56 -0
  580. package/dist/storage/storage-capabilities.js +170 -0
  581. package/dist/storage/store-registry.d.ts +67 -0
  582. package/dist/storage/store-registry.js +77 -0
  583. package/dist/vector-math.d.ts +15 -0
  584. package/dist/vector-math.js +31 -0
  585. package/dist/xml-escape.d.ts +5 -0
  586. package/dist/xml-escape.js +7 -0
  587. package/openapi.json +15395 -0
  588. package/openapi.yaml +10794 -0
  589. package/package.json +119 -0
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @file Verified-fetch retriever — Phase 6 experimental
3
+ * `FilecoinRetriever` implementation backed by
4
+ * `@helia/verified-fetch`.
5
+ *
6
+ * The retriever takes a parsed `CID` (never a URL) and
7
+ * constructs the canonical `ipfs://<cid>` form internally before
8
+ * handing it to verified-fetch. This is the only path through
9
+ * which an `ipfs://` URL is ever assembled inside core; the
10
+ * type system + the `requireParsedCid` guard (which re-parses
11
+ * via `CID.parse`) reject any other input shape. The full
12
+ * security contract is in `retriever.ts`'s file header.
13
+ *
14
+ * File split (lifecycle helpers + vendor seam are siblings):
15
+ *
16
+ * - `verified-fetch-vendor.ts` — vendor minimal types +
17
+ * `loadAndCreateVerifiedFetch` (sanitised import + create
18
+ * boundary, maps `ERR_MODULE_NOT_FOUND` →
19
+ * `verified_fetch_unsupported`, vendor throws →
20
+ * `verified_fetch_failed`).
21
+ * - `verified-fetch-lifecycle.ts` — `startLifecycle`,
22
+ * `runBoundedRetrieval`, body-reading helpers,
23
+ * `requireParsedCid`, `mapVerifiedFetchFailure`.
24
+ * - This file — the `FilecoinRetriever`-implementing class.
25
+ *
26
+ * Source-build invariant. The production build path
27
+ * (`tsc -p tsconfig.build.json` / `npm run build`) compiles
28
+ * WITHOUT the `optionalDependencies` graph present. The
29
+ * vendor module is reached only via a runtime
30
+ * `await import(VENDOR_VERIFIED_FETCH)` inside
31
+ * `verified-fetch-vendor.ts`; no production source statically
32
+ * imports `@helia/verified-fetch`.
33
+ *
34
+ * Lifecycle. Every `get` call creates a fresh fetch handle,
35
+ * awaits the response inside one `Promise.race` against the
36
+ * timeout sentinel, and tears the handle down in `finally`.
37
+ * The implementation never reuses a handle across calls.
38
+ */
39
+ import type { CID } from 'multiformats/cid';
40
+ import type { FilecoinRetriever, RetrieverGetOptions, RetrieverGetResult } from './retriever.js';
41
+ export interface VerifiedFetchRetrieverOptions {
42
+ /**
43
+ * Bytes ceiling for a single retrieval. Defaults to 100 MiB —
44
+ * roughly the largest object AtomicMemory has reason to fetch
45
+ * from IPFS today. Set lower in tests or in operator
46
+ * deployments with stricter memory budgets.
47
+ */
48
+ readonly maxBodyBytes?: number;
49
+ }
50
+ export declare class VerifiedFetchRetriever implements FilecoinRetriever {
51
+ private readonly maxBodyBytes;
52
+ constructor(options?: VerifiedFetchRetrieverOptions);
53
+ get(ipfsCid: CID, options?: RetrieverGetOptions): Promise<RetrieverGetResult>;
54
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @file Verified-fetch retriever — Phase 6 experimental
3
+ * `FilecoinRetriever` implementation backed by
4
+ * `@helia/verified-fetch`.
5
+ *
6
+ * The retriever takes a parsed `CID` (never a URL) and
7
+ * constructs the canonical `ipfs://<cid>` form internally before
8
+ * handing it to verified-fetch. This is the only path through
9
+ * which an `ipfs://` URL is ever assembled inside core; the
10
+ * type system + the `requireParsedCid` guard (which re-parses
11
+ * via `CID.parse`) reject any other input shape. The full
12
+ * security contract is in `retriever.ts`'s file header.
13
+ *
14
+ * File split (lifecycle helpers + vendor seam are siblings):
15
+ *
16
+ * - `verified-fetch-vendor.ts` — vendor minimal types +
17
+ * `loadAndCreateVerifiedFetch` (sanitised import + create
18
+ * boundary, maps `ERR_MODULE_NOT_FOUND` →
19
+ * `verified_fetch_unsupported`, vendor throws →
20
+ * `verified_fetch_failed`).
21
+ * - `verified-fetch-lifecycle.ts` — `startLifecycle`,
22
+ * `runBoundedRetrieval`, body-reading helpers,
23
+ * `requireParsedCid`, `mapVerifiedFetchFailure`.
24
+ * - This file — the `FilecoinRetriever`-implementing class.
25
+ *
26
+ * Source-build invariant. The production build path
27
+ * (`tsc -p tsconfig.build.json` / `npm run build`) compiles
28
+ * WITHOUT the `optionalDependencies` graph present. The
29
+ * vendor module is reached only via a runtime
30
+ * `await import(VENDOR_VERIFIED_FETCH)` inside
31
+ * `verified-fetch-vendor.ts`; no production source statically
32
+ * imports `@helia/verified-fetch`.
33
+ *
34
+ * Lifecycle. Every `get` call creates a fresh fetch handle,
35
+ * awaits the response inside one `Promise.race` against the
36
+ * timeout sentinel, and tears the handle down in `finally`.
37
+ * The implementation never reuses a handle across calls.
38
+ */
39
+ import { loadAndCreateVerifiedFetch, } from './verified-fetch-vendor.js';
40
+ import { mapVerifiedFetchFailure, requireParsedCid, runBoundedRetrieval, startLifecycle, } from './verified-fetch-lifecycle.js';
41
+ /** Upper bound on what we'll consume from a single retrieval response. */
42
+ const DEFAULT_MAX_BODY_BYTES = 100 * 1024 * 1024;
43
+ export class VerifiedFetchRetriever {
44
+ maxBodyBytes;
45
+ constructor(options = {}) {
46
+ this.maxBodyBytes = options.maxBodyBytes ?? DEFAULT_MAX_BODY_BYTES;
47
+ }
48
+ async get(ipfsCid, options = {}) {
49
+ const canonical = requireParsedCid(ipfsCid);
50
+ const url = `ipfs://${canonical}`;
51
+ const lifecycle = startLifecycle(options.timeoutMs);
52
+ let fetch = null;
53
+ try {
54
+ fetch = await loadAndCreateVerifiedFetch();
55
+ const bytes = await runBoundedRetrieval({
56
+ fetch, url, maxBytes: this.maxBodyBytes,
57
+ signal: lifecycle.aborter?.signal,
58
+ timeoutRejection: lifecycle.timeoutRejection,
59
+ });
60
+ return { body: bytes, ipfsCid: canonical };
61
+ }
62
+ catch (err) {
63
+ throw mapVerifiedFetchFailure(err, lifecycle.aborter, options.timeoutMs);
64
+ }
65
+ finally {
66
+ lifecycle.cancel();
67
+ // Tear the verified-fetch handle down on every path. Swallow
68
+ // any cleanup error so the original failure (if any) is
69
+ // what surfaces to the caller.
70
+ if (fetch !== null) {
71
+ try {
72
+ await fetch.stop();
73
+ }
74
+ catch {
75
+ // intentionally suppressed — cleanup must not mask the
76
+ // primary error.
77
+ }
78
+ }
79
+ }
80
+ }
81
+ }
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @file Vendor-boundary helpers for the verified-fetch retriever.
3
+ *
4
+ * Owns the surface that crosses from our code into
5
+ * `@helia/verified-fetch`. The split exists so
6
+ * `verified-fetch-retriever.ts` stays focused on the
7
+ * `FilecoinRetriever` implementation while this file owns the
8
+ * closed minimal type aliases that mirror the bits of the vendor
9
+ * shape we consume, plus the sanitized load + create helpers.
10
+ *
11
+ * Source-build invariant. The production build path
12
+ * (`tsc -p tsconfig.build.json` / `npm run build`) compiles WITHOUT
13
+ * the `optionalDependencies` graph present. Two patterns enforce
14
+ * that here:
15
+ *
16
+ * 1. **Local minimal types.** We do NOT `import type { … }`
17
+ * from `@helia/verified-fetch`. Every shape we consume is
18
+ * defined locally so `tsc` never has to resolve the vendor
19
+ * type declarations.
20
+ *
21
+ * 2. **Non-literal dynamic-import specifier.** The
22
+ * `await import(...)` call site uses a `VENDOR_*`
23
+ * `const`-stored specifier. `tsc` does not statically
24
+ * resolve a non-literal `import(specifier)` argument, so a
25
+ * synapse-only install
26
+ * (`npm ci --legacy-peer-deps --omit=optional`) compiles
27
+ * cleanly even though the optional module is absent.
28
+ *
29
+ * `loadAndCreateVerifiedFetch` is the single sanitisation seam
30
+ * for both the import failure and the construct failure — see
31
+ * `retriever.ts`'s file-header error-code table for the closed
32
+ * mapping.
33
+ */
34
+ /**
35
+ * Local minimal mirror of the `@helia/verified-fetch` callable
36
+ * surface. The runtime instance is richer; we narrow to the
37
+ * closed set our code actually consumes.
38
+ */
39
+ export interface MinimalVerifiedFetch {
40
+ (resource: string, options?: {
41
+ signal?: AbortSignal;
42
+ }): Promise<Response>;
43
+ stop(): Promise<void>;
44
+ }
45
+ export interface MinimalCreateVerifiedFetch {
46
+ (init?: {
47
+ allowLocal?: boolean;
48
+ allowInsecure?: boolean;
49
+ }): Promise<MinimalVerifiedFetch>;
50
+ }
51
+ /**
52
+ * Load the vendor module AND construct a fetch handle, mapping
53
+ * every failure mode to a sanitized closed `errorCode`:
54
+ *
55
+ * - Missing optional package (`ERR_MODULE_NOT_FOUND`) →
56
+ * `verified_fetch_unsupported`. This is the expected failure
57
+ * on a synapse-only install
58
+ * (`npm ci --legacy-peer-deps --omit=optional`); operators
59
+ * surface it through the closed code rather than seeing a
60
+ * raw `Cannot find module '@helia/verified-fetch'` Node
61
+ * error.
62
+ * - Any other load failure → `verified_fetch_failed`.
63
+ * - Vendor `createVerifiedFetch({...})` throw →
64
+ * `verified_fetch_failed`. Raw vendor messages do NOT cross
65
+ * the boundary.
66
+ *
67
+ * Pinned: `allowLocal: false`, `allowInsecure: false`. Vendor
68
+ * defaults today, but pinning prevents a future vendor flip
69
+ * from silently letting us connect to loopback / HTTP gateways.
70
+ */
71
+ export declare function loadAndCreateVerifiedFetch(): Promise<MinimalVerifiedFetch>;
@@ -0,0 +1,94 @@
1
+ /**
2
+ * @file Vendor-boundary helpers for the verified-fetch retriever.
3
+ *
4
+ * Owns the surface that crosses from our code into
5
+ * `@helia/verified-fetch`. The split exists so
6
+ * `verified-fetch-retriever.ts` stays focused on the
7
+ * `FilecoinRetriever` implementation while this file owns the
8
+ * closed minimal type aliases that mirror the bits of the vendor
9
+ * shape we consume, plus the sanitized load + create helpers.
10
+ *
11
+ * Source-build invariant. The production build path
12
+ * (`tsc -p tsconfig.build.json` / `npm run build`) compiles WITHOUT
13
+ * the `optionalDependencies` graph present. Two patterns enforce
14
+ * that here:
15
+ *
16
+ * 1. **Local minimal types.** We do NOT `import type { … }`
17
+ * from `@helia/verified-fetch`. Every shape we consume is
18
+ * defined locally so `tsc` never has to resolve the vendor
19
+ * type declarations.
20
+ *
21
+ * 2. **Non-literal dynamic-import specifier.** The
22
+ * `await import(...)` call site uses a `VENDOR_*`
23
+ * `const`-stored specifier. `tsc` does not statically
24
+ * resolve a non-literal `import(specifier)` argument, so a
25
+ * synapse-only install
26
+ * (`npm ci --legacy-peer-deps --omit=optional`) compiles
27
+ * cleanly even though the optional module is absent.
28
+ *
29
+ * `loadAndCreateVerifiedFetch` is the single sanitisation seam
30
+ * for both the import failure and the construct failure — see
31
+ * `retriever.ts`'s file-header error-code table for the closed
32
+ * mapping.
33
+ */
34
+ import { FilecoinProviderError } from './errors.js';
35
+ // Specifier stored as a `const` so `tsc` does not statically
36
+ // resolve the optional module — same pattern as the Phase 5
37
+ // `filecoin-pin-vendor.ts` loaders.
38
+ const VENDOR_VERIFIED_FETCH = '@helia/verified-fetch';
39
+ async function loadCreateVerifiedFetch() {
40
+ const mod = (await import(VENDOR_VERIFIED_FETCH));
41
+ return mod.createVerifiedFetch;
42
+ }
43
+ /**
44
+ * Load the vendor module AND construct a fetch handle, mapping
45
+ * every failure mode to a sanitized closed `errorCode`:
46
+ *
47
+ * - Missing optional package (`ERR_MODULE_NOT_FOUND`) →
48
+ * `verified_fetch_unsupported`. This is the expected failure
49
+ * on a synapse-only install
50
+ * (`npm ci --legacy-peer-deps --omit=optional`); operators
51
+ * surface it through the closed code rather than seeing a
52
+ * raw `Cannot find module '@helia/verified-fetch'` Node
53
+ * error.
54
+ * - Any other load failure → `verified_fetch_failed`.
55
+ * - Vendor `createVerifiedFetch({...})` throw →
56
+ * `verified_fetch_failed`. Raw vendor messages do NOT cross
57
+ * the boundary.
58
+ *
59
+ * Pinned: `allowLocal: false`, `allowInsecure: false`. Vendor
60
+ * defaults today, but pinning prevents a future vendor flip
61
+ * from silently letting us connect to loopback / HTTP gateways.
62
+ */
63
+ export async function loadAndCreateVerifiedFetch() {
64
+ let create;
65
+ try {
66
+ create = await loadCreateVerifiedFetch();
67
+ }
68
+ catch (err) {
69
+ if (isModuleNotFound(err)) {
70
+ throw new FilecoinProviderError('verified_fetch_unsupported', 'verified-fetch retriever is unavailable: the @helia/verified-fetch optional package is not installed.');
71
+ }
72
+ throw new FilecoinProviderError('verified_fetch_failed', 'verified-fetch retriever failed to load.');
73
+ }
74
+ try {
75
+ return await create({ allowLocal: false, allowInsecure: false });
76
+ }
77
+ catch (err) {
78
+ // Treat `ERR_MODULE_NOT_FOUND` from the construction path
79
+ // the same as from the import itself — both signal a missing
80
+ // (transitive) optional dependency, which is the
81
+ // `verified_fetch_unsupported` outcome operators care about.
82
+ // Any other vendor throw is the generic `verified_fetch_failed`.
83
+ if (isModuleNotFound(err)) {
84
+ throw new FilecoinProviderError('verified_fetch_unsupported', 'verified-fetch retriever is unavailable: a required optional dependency is not installed.');
85
+ }
86
+ throw new FilecoinProviderError('verified_fetch_failed', 'verified-fetch retriever failed to initialize.');
87
+ }
88
+ }
89
+ function isModuleNotFound(err) {
90
+ if (err === null || typeof err !== 'object')
91
+ return false;
92
+ const code = err.code;
93
+ return code === 'ERR_MODULE_NOT_FOUND' || code === 'MODULE_NOT_FOUND';
94
+ }
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Content-codec layer that sits between the upload service and the
3
+ * raw-content adapter (`RawContentStore`). A codec transforms the bytes
4
+ * the caller asked us to store into the bytes the adapter actually
5
+ * writes (`encode`), and is the inverse on read (`decode`).
6
+ *
7
+ * The motivating use case is Filecoin / IPFS, where the URI is
8
+ * content-addressed: any third party who guesses or learns the CID can
9
+ * pull the bytes from a public gateway. Plaintext storage there leaks
10
+ * user data; encrypting at this layer means the CID commits to
11
+ * ciphertext, while AtomicMemory still hashes the user's plaintext for
12
+ * its own `raw_documents.content_hash` invariants.
13
+ *
14
+ * The codec also serves immediate providers (`local_fs`, `s3`) when an
15
+ * operator wants encryption at rest above what the provider already
16
+ * offers. The interface is unchanged — only the metadata sidecar (`name`,
17
+ * `key_id`, `nonce`, `tag` for AES-GCM) tells the read path how to
18
+ * reverse the transform.
19
+ *
20
+ * Keyring model: encode picks the operator-selected ACTIVE key; decode
21
+ * reads `key_id` from the metadata and finds THAT key in the configured
22
+ * ring. Operators rotate by adding a new key + flipping the active id —
23
+ * old rows keep decoding via their stored `key_id`. Missing keys fail
24
+ * loud (never silently fall back).
25
+ */
26
+ /** Codec name carried in `raw_storage_metadata.codec.name`. */
27
+ export type RawContentCodecName = 'none' | 'aes_gcm';
28
+ /** Public, allowlisted codec metadata projected to the wire. */
29
+ export interface PublicRawContentCodecMetadata {
30
+ name: RawContentCodecName;
31
+ version: number;
32
+ }
33
+ /**
34
+ * Internal codec metadata persisted on `raw_storage_metadata.codec`. The
35
+ * AES-GCM codec also writes `key_id`, `nonce`, `tag`, and optionally
36
+ * `encoded_content_hash` + `encoded_size_bytes` (rev-2 §5 — ops
37
+ * diagnostics). `formatPublicMetadata` strips everything except the
38
+ * `name` + `version` fields when emitting to the wire.
39
+ */
40
+ export interface InternalRawContentCodecMetadata extends PublicRawContentCodecMetadata {
41
+ key_id?: string;
42
+ nonce?: string;
43
+ tag?: string;
44
+ encoded_content_hash?: string;
45
+ encoded_size_bytes?: number;
46
+ }
47
+ export interface RawContentCodecEncodeInput {
48
+ /** Plaintext bytes the caller asked us to store. */
49
+ body: Buffer;
50
+ }
51
+ export interface RawContentCodecEncodeResult {
52
+ /** Bytes the adapter actually writes (ciphertext for `aes_gcm`). */
53
+ body: Buffer;
54
+ /** Internal sidecar; the upload service merges this under `raw_storage_metadata.codec`. */
55
+ metadata: InternalRawContentCodecMetadata;
56
+ }
57
+ export interface RawContentCodecDecodeInput {
58
+ /** Bytes the adapter returned (ciphertext for `aes_gcm`). */
59
+ body: Buffer;
60
+ /** Sidecar read from `raw_storage_metadata.codec`. */
61
+ metadata: InternalRawContentCodecMetadata;
62
+ }
63
+ export interface RawContentCodecDecodeResult {
64
+ /** Plaintext bytes the original caller asked us to store. */
65
+ body: Buffer;
66
+ }
67
+ /**
68
+ * Codec interface. Implementations are stateless and must not mutate
69
+ * the input buffer.
70
+ */
71
+ export interface RawContentCodec {
72
+ readonly name: RawContentCodecName;
73
+ encode(input: RawContentCodecEncodeInput): Promise<RawContentCodecEncodeResult>;
74
+ decode(input: RawContentCodecDecodeInput): Promise<RawContentCodecDecodeResult>;
75
+ }
76
+ /** Thrown for any codec-layer failure (bad input, tamper, key missing). */
77
+ export declare class RawContentCodecError extends Error {
78
+ constructor(message: string);
79
+ }
80
+ /**
81
+ * Thrown when `decode` reads a `key_id` that is not present in the
82
+ * configured keyring. Loud-fail per the no-fallback policy — operators
83
+ * must restore the key (or accept that the row's bytes are
84
+ * unrecoverable) rather than the codec silently skipping.
85
+ */
86
+ export declare class RawContentCodecKeyNotFoundError extends RawContentCodecError {
87
+ readonly keyId: string;
88
+ constructor(keyId: string);
89
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Content-codec layer that sits between the upload service and the
3
+ * raw-content adapter (`RawContentStore`). A codec transforms the bytes
4
+ * the caller asked us to store into the bytes the adapter actually
5
+ * writes (`encode`), and is the inverse on read (`decode`).
6
+ *
7
+ * The motivating use case is Filecoin / IPFS, where the URI is
8
+ * content-addressed: any third party who guesses or learns the CID can
9
+ * pull the bytes from a public gateway. Plaintext storage there leaks
10
+ * user data; encrypting at this layer means the CID commits to
11
+ * ciphertext, while AtomicMemory still hashes the user's plaintext for
12
+ * its own `raw_documents.content_hash` invariants.
13
+ *
14
+ * The codec also serves immediate providers (`local_fs`, `s3`) when an
15
+ * operator wants encryption at rest above what the provider already
16
+ * offers. The interface is unchanged — only the metadata sidecar (`name`,
17
+ * `key_id`, `nonce`, `tag` for AES-GCM) tells the read path how to
18
+ * reverse the transform.
19
+ *
20
+ * Keyring model: encode picks the operator-selected ACTIVE key; decode
21
+ * reads `key_id` from the metadata and finds THAT key in the configured
22
+ * ring. Operators rotate by adding a new key + flipping the active id —
23
+ * old rows keep decoding via their stored `key_id`. Missing keys fail
24
+ * loud (never silently fall back).
25
+ */
26
+ /** Thrown for any codec-layer failure (bad input, tamper, key missing). */
27
+ export class RawContentCodecError extends Error {
28
+ constructor(message) {
29
+ super(message);
30
+ this.name = 'RawContentCodecError';
31
+ }
32
+ }
33
+ /**
34
+ * Thrown when `decode` reads a `key_id` that is not present in the
35
+ * configured keyring. Loud-fail per the no-fallback policy — operators
36
+ * must restore the key (or accept that the row's bytes are
37
+ * unrecoverable) rather than the codec silently skipping.
38
+ */
39
+ export class RawContentCodecKeyNotFoundError extends RawContentCodecError {
40
+ keyId;
41
+ constructor(keyId) {
42
+ super(`Codec key '${keyId}' is not configured in RAW_CONTENT_CODEC_KEYS. ` +
43
+ 'The decode cannot proceed; restore the key or treat the row as unrecoverable.');
44
+ this.name = 'RawContentCodecKeyNotFoundError';
45
+ this.keyId = keyId;
46
+ }
47
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @file Adapter exposing an existing `RawContentStore` as a `StorageBackend`.
3
+ *
4
+ * Step 5 of the storage-sibling plan — adapter, not rewrite. The
5
+ * existing `local_fs`, `s3`, and (excluded-from-direct-uploads)
6
+ * `filecoin` adapters keep their `RawContentStore` shape; this
7
+ * adapter narrows their surface to the smaller `StorageBackend`
8
+ * contract the storage service depends on.
9
+ *
10
+ * Hash semantics for v1 direct API:
11
+ * * `local_fs` / `s3` write identity-codec bytes — `plaintextHash`
12
+ * equals `storedHash` and equals the adapter's returned
13
+ * `contentHash` (SHA-256 of the bytes the adapter persisted).
14
+ * * `filecoin` direct managed upload is 501 in v1 and never
15
+ * reaches this adapter, so we do NOT need to model ciphertext
16
+ * hash divergence here.
17
+ */
18
+ import type { RawContentStore } from './raw-content-store.js';
19
+ import type { DeleteBackendResult, GetBackendResult, HeadBackendResult, PutBackendInput, PutBackendResult, StorageBackend } from './storage-backend.js';
20
+ export declare class RawContentStoreBackendAdapter implements StorageBackend {
21
+ readonly provider: string;
22
+ private readonly store;
23
+ constructor(store: RawContentStore);
24
+ put(input: PutBackendInput): Promise<PutBackendResult>;
25
+ get(uri: string): Promise<GetBackendResult>;
26
+ head(uri: string): Promise<HeadBackendResult>;
27
+ delete(uri: string): Promise<DeleteBackendResult>;
28
+ }
@@ -0,0 +1,67 @@
1
+ /**
2
+ * @file Adapter exposing an existing `RawContentStore` as a `StorageBackend`.
3
+ *
4
+ * Step 5 of the storage-sibling plan — adapter, not rewrite. The
5
+ * existing `local_fs`, `s3`, and (excluded-from-direct-uploads)
6
+ * `filecoin` adapters keep their `RawContentStore` shape; this
7
+ * adapter narrows their surface to the smaller `StorageBackend`
8
+ * contract the storage service depends on.
9
+ *
10
+ * Hash semantics for v1 direct API:
11
+ * * `local_fs` / `s3` write identity-codec bytes — `plaintextHash`
12
+ * equals `storedHash` and equals the adapter's returned
13
+ * `contentHash` (SHA-256 of the bytes the adapter persisted).
14
+ * * `filecoin` direct managed upload is 501 in v1 and never
15
+ * reaches this adapter, so we do NOT need to model ciphertext
16
+ * hash divergence here.
17
+ */
18
+ export class RawContentStoreBackendAdapter {
19
+ provider;
20
+ store;
21
+ constructor(store) {
22
+ this.store = store;
23
+ this.provider = store.provider;
24
+ }
25
+ async put(input) {
26
+ const stored = await this.store.put({
27
+ key: input.key,
28
+ body: input.body,
29
+ contentType: input.contentType,
30
+ });
31
+ return {
32
+ uri: stored.storageUri,
33
+ sizeBytes: stored.sizeBytes,
34
+ // v1 direct API runs identity codec only (Filecoin is 501);
35
+ // the adapter's returned `contentHash` is the SHA-256 of the
36
+ // exact bytes the caller passed.
37
+ plaintextHash: stored.contentHash,
38
+ storedHash: stored.contentHash,
39
+ providerMetadata: stored.providerMetadata,
40
+ };
41
+ }
42
+ async get(uri) {
43
+ const result = await this.store.get(uri);
44
+ return {
45
+ body: result.body,
46
+ contentType: result.metadata.contentType,
47
+ sizeBytes: result.metadata.contentLength,
48
+ };
49
+ }
50
+ async head(uri) {
51
+ const result = await this.store.head(uri);
52
+ return {
53
+ exists: result.exists,
54
+ sizeBytes: extractContentLength(result.metadata),
55
+ contentType: result.metadata?.contentType ?? null,
56
+ };
57
+ }
58
+ async delete(uri) {
59
+ const result = await this.store.delete(uri);
60
+ return { deleted: result.deleted, semantics: result.semantics };
61
+ }
62
+ }
63
+ function extractContentLength(metadata) {
64
+ if (metadata === null)
65
+ return null;
66
+ return metadata.contentLength;
67
+ }