@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,87 @@
1
+ /**
2
+ * @file Vendor-boundary helpers for the filecoin-pin driver.
3
+ *
4
+ * Encapsulates the surface that crosses from our code into
5
+ * `filecoin-pin/core/upload` + `@ipld/car`. The split exists so
6
+ * `filecoin-pin-client.ts` stays focused on the
7
+ * `FilecoinProviderClient` implementation while this file owns:
8
+ *
9
+ * - The closed minimal type aliases that mirror just the bits
10
+ * of the vendor shapes we consume.
11
+ * - The runtime dynamic-import helpers
12
+ * (`loadExecuteUpload` / `loadCarReader`).
13
+ * - The noop `Logger`-shaped object we hand to
14
+ * `executeUpload`'s required `logger` option (so we don't
15
+ * pull `pino` into the production type graph).
16
+ *
17
+ * Source-build invariant. The production build path
18
+ * (`tsc -p tsconfig.build.json` / `npm run build`) compiles WITHOUT
19
+ * the `optionalDependencies` graph present. Two patterns enforce
20
+ * that here:
21
+ *
22
+ * 1. **Local minimal types.** We do NOT `import type { ... }`
23
+ * from any optional package. Every shape we consume is
24
+ * defined locally so `tsc` never has to resolve the vendor
25
+ * type declarations.
26
+ *
27
+ * 2. **Non-literal dynamic-import specifiers.** Each
28
+ * `await import(...)` call site uses a `VENDOR_*`
29
+ * `const`-stored specifier. `tsc` does not statically
30
+ * resolve a non-literal `import(specifier)` argument, so a
31
+ * synapse-only install
32
+ * (`npm ci --legacy-peer-deps --omit=optional`) successfully
33
+ * runs `tsc -p tsconfig.build.json` even though the optional
34
+ * modules are absent.
35
+ *
36
+ * The dev-mode `tsc --noEmit` (against `tsconfig.json`) still
37
+ * requires the optional packages because TEST files in
38
+ * `providers/filecoin/__tests__/` import them directly (e.g.
39
+ * `@ipld/car` for a hand-rolled multi-root CAR fixture). Tests
40
+ * never run on omit-optional production installs;
41
+ * `tsconfig.build.json` excludes `__tests__`. See
42
+ * `filecoin-pin-lazy-boundary.test.ts` for the static-import
43
+ * invariant that pins this split.
44
+ */
45
+ // Specifiers stored as `const`s so `tsc` does not statically
46
+ // resolve the optional modules. See file header for the
47
+ // source-build-safety rationale.
48
+ const VENDOR_FILECOIN_PIN_UPLOAD = 'filecoin-pin/core/upload';
49
+ const VENDOR_IPLD_CAR = '@ipld/car';
50
+ /**
51
+ * Lazy-load `executeUpload` from `filecoin-pin/core/upload`. The
52
+ * package is in `optionalDependencies`; if a synapse-only build
53
+ * was installed via `npm ci --legacy-peer-deps --omit=optional`,
54
+ * this resolution fails only when an operator selects
55
+ * `RAW_STORAGE_FILECOIN_DRIVER=filecoin_pin` — the intended
56
+ * failure mode.
57
+ */
58
+ export async function loadExecuteUpload() {
59
+ const mod = (await import(VENDOR_FILECOIN_PIN_UPLOAD));
60
+ return mod.executeUpload;
61
+ }
62
+ /** Lazy-load `CarReader.fromBytes` from `@ipld/car`. */
63
+ export async function loadCarReader(carBytes) {
64
+ const mod = (await import(VENDOR_IPLD_CAR));
65
+ return mod.CarReader.fromBytes(carBytes);
66
+ }
67
+ /**
68
+ * Pino-shape silent logger used to satisfy `executeUpload`'s
69
+ * required `logger` option without taking on `pino` as a runtime
70
+ * dep. The `MinimalUploadOptions.logger` field is `unknown` by
71
+ * design so we don't drag pino into the production type graph;
72
+ * the shape below mirrors the closed set of methods filecoin-pin's
73
+ * `executeUpload` actually invokes. If a future filecoin-pin
74
+ * upgrade widens that surface, the runtime call site fails with
75
+ * a clear vendor-side error rather than producing silent test
76
+ * passes against a stale shape.
77
+ */
78
+ export function noopLogger() {
79
+ const noop = () => undefined;
80
+ const logger = {
81
+ level: 'silent',
82
+ fatal: noop, error: noop, warn: noop, info: noop, debug: noop, trace: noop,
83
+ silent: noop,
84
+ child: () => logger,
85
+ };
86
+ return logger;
87
+ }
@@ -0,0 +1,71 @@
1
+ /**
2
+ * @file Strict readers for the `filecoin.*` hints adapters MAY
3
+ * consult to short-circuit lookups (`head`) and bypass the SDK's
4
+ * CID→active-piece resolution (`delete`).
5
+ *
6
+ * Source: `raw_storage_metadata.filecoin` sidecar that
7
+ * `FilecoinRawContentStore.put` wrote (`backend.ts`). The
8
+ * reconciler / cleanup loop read `raw_documents.raw_storage_metadata`
9
+ * straight out of the DB and pass it as the generic
10
+ * `RawContentHints` argument; this module is the only place that
11
+ * interprets it.
12
+ *
13
+ * Validation contract: every numeric id field MUST be a non-empty
14
+ * positive decimal `bigint` string (regex `^[1-9][0-9]*$`).
15
+ * Anything else — `0`, negative, hex/`0x...`, floats, scientific
16
+ * notation, surrounding whitespace, non-string types, missing
17
+ * keys, the `filecoin` sibling not being an object — is treated
18
+ * as **absent**. Malformed values NEVER throw; the helper returns
19
+ * `null` and emits a sanitized `filecoin.hint.malformed`
20
+ * diagnostic so an operator can see in observability that a hint
21
+ * was rejected without the malformed value itself crossing the
22
+ * boundary.
23
+ */
24
+ import type { RawContentHints } from '../../raw-content-store.js';
25
+ /**
26
+ * Bundled hints `delete` consumes. `dataSetId` locates the
27
+ * `StorageContext`; `pieceId` bypasses the CID-based active-piece
28
+ * lookup that fails for freshly-uploaded pieces (the live
29
+ * calibration smoke surfaced this failure mode). Either field
30
+ * may be `null` independently — the adapter MUST tolerate partial
31
+ * hints (data_set_id present + piece_id missing falls back to
32
+ * CID-based delete on the resolved context; both missing falls
33
+ * back to the scan path).
34
+ */
35
+ export interface FilecoinDeleteHints {
36
+ readonly dataSetId: string | null;
37
+ readonly pieceId: string | null;
38
+ }
39
+ /**
40
+ * Returns the validated `data_set_id` string, or `null` when the
41
+ * hint is missing or malformed. Callers pass the result straight
42
+ * through to `FilecoinProviderClient.head({ dataSetId })`; `null`
43
+ * means "no hint, scan normally".
44
+ *
45
+ * `documentIdForDiagnostic` is optional — when supplied (e.g. by
46
+ * the reconciler) it appears on the `filecoin.hint.malformed`
47
+ * event so an operator can correlate the diagnostic with the
48
+ * specific row. The value itself NEVER appears in the event.
49
+ */
50
+ export declare function readFilecoinDataSetIdHint(hints: RawContentHints | undefined, documentIdForDiagnostic?: string): string | null;
51
+ /**
52
+ * Returns `{ dataSetId, pieceId }` from the sidecar — the bundle
53
+ * `FilecoinRawContentStore.delete` consumes. `pieceId` is picked
54
+ * from `filecoin.copies[]`:
55
+ *
56
+ * 1. Top-level `data_set_id` is validated first (positive
57
+ * decimal bigint or `null`).
58
+ * 2. Each copy is read; only copies whose `data_set_id` is a
59
+ * valid positive decimal bigint AND whose `piece_id` is a
60
+ * valid positive decimal bigint are eligible.
61
+ * 3. If the top-level `data_set_id` resolved (non-null), we
62
+ * prefer the first eligible copy whose `data_set_id`
63
+ * matches it. Otherwise the first eligible copy wins.
64
+ *
65
+ * Returns `{ dataSetId, pieceId }` where each field is the
66
+ * validated string or `null`. Never throws. Malformed entries
67
+ * emit one `filecoin.hint.malformed` diagnostic per offending
68
+ * field (per copy) so the rejection is visible without leaking
69
+ * the rejected value.
70
+ */
71
+ export declare function readFilecoinDeleteHints(hints: RawContentHints | undefined, documentIdForDiagnostic?: string): FilecoinDeleteHints;
@@ -0,0 +1,123 @@
1
+ /**
2
+ * @file Strict readers for the `filecoin.*` hints adapters MAY
3
+ * consult to short-circuit lookups (`head`) and bypass the SDK's
4
+ * CID→active-piece resolution (`delete`).
5
+ *
6
+ * Source: `raw_storage_metadata.filecoin` sidecar that
7
+ * `FilecoinRawContentStore.put` wrote (`backend.ts`). The
8
+ * reconciler / cleanup loop read `raw_documents.raw_storage_metadata`
9
+ * straight out of the DB and pass it as the generic
10
+ * `RawContentHints` argument; this module is the only place that
11
+ * interprets it.
12
+ *
13
+ * Validation contract: every numeric id field MUST be a non-empty
14
+ * positive decimal `bigint` string (regex `^[1-9][0-9]*$`).
15
+ * Anything else — `0`, negative, hex/`0x...`, floats, scientific
16
+ * notation, surrounding whitespace, non-string types, missing
17
+ * keys, the `filecoin` sibling not being an object — is treated
18
+ * as **absent**. Malformed values NEVER throw; the helper returns
19
+ * `null` and emits a sanitized `filecoin.hint.malformed`
20
+ * diagnostic so an operator can see in observability that a hint
21
+ * was rejected without the malformed value itself crossing the
22
+ * boundary.
23
+ */
24
+ import { emitFilecoinEvent } from '../../../services/filecoin-observability.js';
25
+ const POSITIVE_DECIMAL_BIGINT = /^[1-9][0-9]*$/;
26
+ /**
27
+ * Returns the validated `data_set_id` string, or `null` when the
28
+ * hint is missing or malformed. Callers pass the result straight
29
+ * through to `FilecoinProviderClient.head({ dataSetId })`; `null`
30
+ * means "no hint, scan normally".
31
+ *
32
+ * `documentIdForDiagnostic` is optional — when supplied (e.g. by
33
+ * the reconciler) it appears on the `filecoin.hint.malformed`
34
+ * event so an operator can correlate the diagnostic with the
35
+ * specific row. The value itself NEVER appears in the event.
36
+ */
37
+ export function readFilecoinDataSetIdHint(hints, documentIdForDiagnostic) {
38
+ const sibling = readFilecoinSibling(hints);
39
+ if (sibling === null)
40
+ return null;
41
+ return readPositiveBigintString(sibling['data_set_id'], 'data_set_id', documentIdForDiagnostic);
42
+ }
43
+ /**
44
+ * Returns `{ dataSetId, pieceId }` from the sidecar — the bundle
45
+ * `FilecoinRawContentStore.delete` consumes. `pieceId` is picked
46
+ * from `filecoin.copies[]`:
47
+ *
48
+ * 1. Top-level `data_set_id` is validated first (positive
49
+ * decimal bigint or `null`).
50
+ * 2. Each copy is read; only copies whose `data_set_id` is a
51
+ * valid positive decimal bigint AND whose `piece_id` is a
52
+ * valid positive decimal bigint are eligible.
53
+ * 3. If the top-level `data_set_id` resolved (non-null), we
54
+ * prefer the first eligible copy whose `data_set_id`
55
+ * matches it. Otherwise the first eligible copy wins.
56
+ *
57
+ * Returns `{ dataSetId, pieceId }` where each field is the
58
+ * validated string or `null`. Never throws. Malformed entries
59
+ * emit one `filecoin.hint.malformed` diagnostic per offending
60
+ * field (per copy) so the rejection is visible without leaking
61
+ * the rejected value.
62
+ */
63
+ export function readFilecoinDeleteHints(hints, documentIdForDiagnostic) {
64
+ const sibling = readFilecoinSibling(hints);
65
+ if (sibling === null)
66
+ return { dataSetId: null, pieceId: null };
67
+ const dataSetId = readPositiveBigintString(sibling['data_set_id'], 'data_set_id', documentIdForDiagnostic);
68
+ const pieceId = pickPieceIdFromCopies(sibling['copies'], dataSetId, documentIdForDiagnostic);
69
+ return { dataSetId, pieceId };
70
+ }
71
+ function readFilecoinSibling(hints) {
72
+ if (!hints || typeof hints !== 'object')
73
+ return null;
74
+ const sibling = hints['filecoin'];
75
+ if (!sibling || typeof sibling !== 'object' || Array.isArray(sibling))
76
+ return null;
77
+ return sibling;
78
+ }
79
+ function readPositiveBigintString(raw, fieldName, documentIdForDiagnostic) {
80
+ if (raw === undefined || raw === null)
81
+ return null;
82
+ if (typeof raw !== 'string') {
83
+ emitMalformed(`${fieldName}_not_a_string`, documentIdForDiagnostic);
84
+ return null;
85
+ }
86
+ if (!POSITIVE_DECIMAL_BIGINT.test(raw)) {
87
+ emitMalformed(`${fieldName}_not_positive_decimal_bigint`, documentIdForDiagnostic);
88
+ return null;
89
+ }
90
+ return raw;
91
+ }
92
+ function pickPieceIdFromCopies(raw, preferredDataSetId, documentIdForDiagnostic) {
93
+ if (!Array.isArray(raw))
94
+ return null;
95
+ let fallback = null;
96
+ for (const entry of raw) {
97
+ const pair = readCopyPair(entry, documentIdForDiagnostic);
98
+ if (pair === null)
99
+ continue;
100
+ if (preferredDataSetId !== null && pair.dataSetId === preferredDataSetId)
101
+ return pair.pieceId;
102
+ if (fallback === null)
103
+ fallback = pair.pieceId;
104
+ }
105
+ return fallback;
106
+ }
107
+ function readCopyPair(entry, documentIdForDiagnostic) {
108
+ if (!entry || typeof entry !== 'object' || Array.isArray(entry))
109
+ return null;
110
+ const copy = entry;
111
+ const dataSetId = readPositiveBigintString(copy['data_set_id'], 'data_set_id', documentIdForDiagnostic);
112
+ const pieceId = readPositiveBigintString(copy['piece_id'], 'piece_id', documentIdForDiagnostic);
113
+ if (dataSetId === null || pieceId === null)
114
+ return null;
115
+ return { dataSetId, pieceId };
116
+ }
117
+ function emitMalformed(errorCode, documentIdForDiagnostic) {
118
+ emitFilecoinEvent('filecoin.hint.malformed', {
119
+ provider: 'filecoin',
120
+ errorCode,
121
+ ...(documentIdForDiagnostic ? { documentId: documentIdForDiagnostic } : {}),
122
+ });
123
+ }
@@ -0,0 +1,51 @@
1
+ /**
2
+ * @file Filecoin storage provider — composition entry point.
3
+ *
4
+ * `createFilecoinStorageBackend(config)` is the single entry point
5
+ * that `src/storage/factory.ts` calls when
6
+ * `rawStorageProvider === 'filecoin'`. The provider REQUIRES a
7
+ * non-null parsed `FilecoinProviderConfig` — the null-config
8
+ * runtime path is not supported now that
9
+ * `head`/`get`/`delete` advertise real capabilities. The central
10
+ * `parseFilecoinProviderConfig` in `src/config.ts` already enforces
11
+ * "filecoin selected ⇒ full env block validated", so production
12
+ * never reaches this entry with a null config.
13
+ *
14
+ * The test client stays isolated in `./skeleton-client.ts` for
15
+ * tests that need a `FilecoinProviderClient`-shaped stub without standing up a real
16
+ * Synapse handle.
17
+ *
18
+ * Reverse import-boundary invariant (enforced by the
19
+ * `import-boundary.test.ts`): this module's only outward imports
20
+ * are sibling files inside `providers/filecoin/`, the adapter
21
+ * contract from `src/storage/raw-content-store.js`, and (inside
22
+ * `synapse-construction.ts`) the vendor packages
23
+ * `@filoz/synapse-sdk` + `viem`. No `RuntimeConfig`, no
24
+ * `process.env`, no route/db/service code.
25
+ */
26
+ import type { FilecoinProviderConfig } from './config.js';
27
+ import type { RawContentStore } from '../../raw-content-store.js';
28
+ /**
29
+ * Build the Filecoin backend from a validated
30
+ * `FilecoinProviderConfig`. Throws `FilecoinProviderError` when
31
+ * the caller passes a non-config — the only path that can happen
32
+ * in production is a misconfiguration the central config
33
+ * validator should have caught, so the throw is a defense-in-
34
+ * depth signal rather than an expected branch.
35
+ *
36
+ * **Lazy-load contract.** Synchronous construction of the default
37
+ * `synapse` client is fine — its imports (`@filoz/synapse-sdk`,
38
+ * `viem`) are already in this module's static graph. The
39
+ * `filecoin_pin` client, however, pulls a much heavier graph
40
+ * (`filecoin-pin/core/upload`, `@helia/unixfs`, `@ipld/car`,
41
+ * `blockstore-core`), so we `await import` it ONLY inside the
42
+ * `filecoin_pin` branch. A deployment running the default
43
+ * `RAW_STORAGE_FILECOIN_DRIVER=synapse` never resolves the
44
+ * filecoin-pin module subtree at runtime, which keeps the
45
+ * `filecoin-pin` package's `optionalDependencies` status honest
46
+ * (a synapse-only deployment can be built without the package
47
+ * installed at all). The function returns `Promise<RawContentStore>`
48
+ * so the dynamic-import branch can await its loader.
49
+ */
50
+ export declare function createFilecoinStorageBackend(config: FilecoinProviderConfig): Promise<RawContentStore>;
51
+ export { FilecoinRawContentStore } from './backend.js';
@@ -0,0 +1,103 @@
1
+ /**
2
+ * @file Filecoin storage provider — composition entry point.
3
+ *
4
+ * `createFilecoinStorageBackend(config)` is the single entry point
5
+ * that `src/storage/factory.ts` calls when
6
+ * `rawStorageProvider === 'filecoin'`. The provider REQUIRES a
7
+ * non-null parsed `FilecoinProviderConfig` — the null-config
8
+ * runtime path is not supported now that
9
+ * `head`/`get`/`delete` advertise real capabilities. The central
10
+ * `parseFilecoinProviderConfig` in `src/config.ts` already enforces
11
+ * "filecoin selected ⇒ full env block validated", so production
12
+ * never reaches this entry with a null config.
13
+ *
14
+ * The test client stays isolated in `./skeleton-client.ts` for
15
+ * tests that need a `FilecoinProviderClient`-shaped stub without standing up a real
16
+ * Synapse handle.
17
+ *
18
+ * Reverse import-boundary invariant (enforced by the
19
+ * `import-boundary.test.ts`): this module's only outward imports
20
+ * are sibling files inside `providers/filecoin/`, the adapter
21
+ * contract from `src/storage/raw-content-store.js`, and (inside
22
+ * `synapse-construction.ts`) the vendor packages
23
+ * `@filoz/synapse-sdk` + `viem`. No `RuntimeConfig`, no
24
+ * `process.env`, no route/db/service code.
25
+ */
26
+ import { FilecoinRawContentStore } from './backend.js';
27
+ import { SynapseFilecoinProviderClient } from './synapse-client.js';
28
+ import { FilecoinProviderError } from './errors.js';
29
+ import { buildSynapse } from './synapse-construction.js';
30
+ /**
31
+ * Build the Filecoin backend from a validated
32
+ * `FilecoinProviderConfig`. Throws `FilecoinProviderError` when
33
+ * the caller passes a non-config — the only path that can happen
34
+ * in production is a misconfiguration the central config
35
+ * validator should have caught, so the throw is a defense-in-
36
+ * depth signal rather than an expected branch.
37
+ *
38
+ * **Lazy-load contract.** Synchronous construction of the default
39
+ * `synapse` client is fine — its imports (`@filoz/synapse-sdk`,
40
+ * `viem`) are already in this module's static graph. The
41
+ * `filecoin_pin` client, however, pulls a much heavier graph
42
+ * (`filecoin-pin/core/upload`, `@helia/unixfs`, `@ipld/car`,
43
+ * `blockstore-core`), so we `await import` it ONLY inside the
44
+ * `filecoin_pin` branch. A deployment running the default
45
+ * `RAW_STORAGE_FILECOIN_DRIVER=synapse` never resolves the
46
+ * filecoin-pin module subtree at runtime, which keeps the
47
+ * `filecoin-pin` package's `optionalDependencies` status honest
48
+ * (a synapse-only deployment can be built without the package
49
+ * installed at all). The function returns `Promise<RawContentStore>`
50
+ * so the dynamic-import branch can await its loader.
51
+ */
52
+ export async function createFilecoinStorageBackend(config) {
53
+ if (config === null || config === undefined) {
54
+ throw new FilecoinProviderError('filecoin_provider_not_configured', 'createFilecoinStorageBackend was called without a FilecoinProviderConfig. ' +
55
+ 'Set the RAW_STORAGE_FILECOIN_* env block before selecting filecoin.');
56
+ }
57
+ const synapse = buildSynapse(config);
58
+ const synapseClient = new SynapseFilecoinProviderClient(synapse, {
59
+ copies: config.copies,
60
+ providerIds: config.providerIds,
61
+ dataSetMetadata: filecoinDataSetMetadataToStrings(config.dataSetMetadata),
62
+ withCdn: config.withCdn,
63
+ uploadTimeoutMs: config.uploadTimeoutMs,
64
+ retrievalTimeoutMs: config.retrievalTimeoutMs,
65
+ minUploadBytes: config.minUploadBytes,
66
+ maxUploadBytes: config.maxUploadBytes,
67
+ });
68
+ let client = synapseClient;
69
+ if (config.driver === 'filecoin_pin') {
70
+ // Dynamic import keeps the filecoin-pin module subtree out
71
+ // of the synapse-only startup graph. The boundary test
72
+ // (`__tests__/lazy-loading-boundary.test.ts`) asserts this
73
+ // invariant statically by AST-scanning `index.ts`.
74
+ const { FilecoinPinFilecoinProviderClient } = await import('./filecoin-pin-client.js');
75
+ client = new FilecoinPinFilecoinProviderClient(synapse, synapseClient, {
76
+ ...(config.copies !== null ? { copies: config.copies } : {}),
77
+ providerIds: config.providerIds,
78
+ dataSetMetadata: filecoinDataSetMetadataToStrings(config.dataSetMetadata),
79
+ ...(config.uploadTimeoutMs !== null ? { uploadTimeoutMs: config.uploadTimeoutMs } : {}),
80
+ ...(config.retrievalTimeoutMs !== null ? { retrievalTimeoutMs: config.retrievalTimeoutMs } : {}),
81
+ minUploadBytes: config.minUploadBytes,
82
+ maxUploadBytes: config.maxUploadBytes,
83
+ });
84
+ }
85
+ return new FilecoinRawContentStore(client);
86
+ }
87
+ export { FilecoinRawContentStore } from './backend.js';
88
+ // Public read-side projection lives in `src/storage/filecoin-public-metadata.ts`
89
+ // so route + service consumers don't import providers/filecoin/* directly.
90
+ // The provider directory keeps the internal upload allowlist only.
91
+ /**
92
+ * Synapse `metadata` accepts `Record<string, string>` only. Convert
93
+ * any number/boolean values from the parsed `dataSetMetadata` to
94
+ * their canonical string form so the SDK boundary stays
95
+ * type-aligned with no silent truncation.
96
+ */
97
+ function filecoinDataSetMetadataToStrings(metadata) {
98
+ const out = {};
99
+ for (const [k, v] of Object.entries(metadata)) {
100
+ out[k] = typeof v === 'string' ? v : String(v);
101
+ }
102
+ return out;
103
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @file IPFS / CAR-root CID parser for the provider boundary.
3
+ *
4
+ * Phase 4 introduces an optional `ipfs_cid` slot on the
5
+ * Filecoin sidecar: a future driver (filecoin-pin) will emit
6
+ * the IPFS / CAR-root identity alongside the canonical PieceCID
7
+ * so consumers that resolve content via IPFS gateways can do so
8
+ * without re-deriving the CID from bytes. Today the live Synapse
9
+ * driver leaves the slot undefined; this parser exists to gate
10
+ * the slot whenever a future driver populates it.
11
+ *
12
+ * The parser uses `multiformats/cid`, which is already inside
13
+ * the lazy provider-load graph (it's a transitive dependency of
14
+ * `@filoz/synapse-core/piece`). Importing it here therefore does
15
+ * NOT change the eager-import surface — non-Filecoin-provider
16
+ * startups still avoid the Filecoin SDK entirely.
17
+ *
18
+ * Codec policy: we accept any CIDv1 (`code` is any IPLD codec,
19
+ * `version === 1`). CIDv0 (`Qm…` base58btc) is rejected — the
20
+ * sidecar slot is a forward-looking field and we do not need to
21
+ * accept the legacy 1.0 shape. The canonical multibase form is
22
+ * `base32-lower` (`b…`); non-canonical encodings (e.g. base58btc
23
+ * `z…`) parse but are returned in their canonical form so the
24
+ * persisted sidecar value is deterministic regardless of how the
25
+ * driver originally serialized it.
26
+ *
27
+ * Sister module — `./piece-cid.ts` performs the same role for
28
+ * PieceCIDv2 via the Synapse SDK's `asPieceCID`. The two parsers
29
+ * are kept separate because the PieceCID parser ALSO enforces
30
+ * codec semantics (raw codec 0x55 + multihash 0x1011), which
31
+ * the IPFS CID slot intentionally does NOT — an IPFS CID may
32
+ * be dag-pb, raw, dag-cbor, etc.
33
+ */
34
+ /**
35
+ * Returns the canonical CIDv1 string form of `value`, or throws
36
+ * `FilecoinProviderError('invalid_ipfs_cid', ...)` with a
37
+ * sanitized message when the value is not a string, is not a
38
+ * parsable CID, or is a CIDv0 (`Qm…`). Promoting a CIDv1 from a
39
+ * non-canonical multibase encoding to its canonical base32-lower
40
+ * `b…` form is done here so callers always get the deterministic
41
+ * persisted shape.
42
+ *
43
+ * `context` is a short noun-phrase that names the seam the
44
+ * caller is guarding (e.g. `"upload result ipfsCid"`). The
45
+ * rejected value itself is NEVER echoed into the error message —
46
+ * malformed CIDs may encode adversarial bytes worth keeping out
47
+ * of log streams. The closed-set `errorCode` is the diagnostic
48
+ * surface.
49
+ */
50
+ export declare function requireIpfsCid(value: unknown, context: string): string;
@@ -0,0 +1,64 @@
1
+ /**
2
+ * @file IPFS / CAR-root CID parser for the provider boundary.
3
+ *
4
+ * Phase 4 introduces an optional `ipfs_cid` slot on the
5
+ * Filecoin sidecar: a future driver (filecoin-pin) will emit
6
+ * the IPFS / CAR-root identity alongside the canonical PieceCID
7
+ * so consumers that resolve content via IPFS gateways can do so
8
+ * without re-deriving the CID from bytes. Today the live Synapse
9
+ * driver leaves the slot undefined; this parser exists to gate
10
+ * the slot whenever a future driver populates it.
11
+ *
12
+ * The parser uses `multiformats/cid`, which is already inside
13
+ * the lazy provider-load graph (it's a transitive dependency of
14
+ * `@filoz/synapse-core/piece`). Importing it here therefore does
15
+ * NOT change the eager-import surface — non-Filecoin-provider
16
+ * startups still avoid the Filecoin SDK entirely.
17
+ *
18
+ * Codec policy: we accept any CIDv1 (`code` is any IPLD codec,
19
+ * `version === 1`). CIDv0 (`Qm…` base58btc) is rejected — the
20
+ * sidecar slot is a forward-looking field and we do not need to
21
+ * accept the legacy 1.0 shape. The canonical multibase form is
22
+ * `base32-lower` (`b…`); non-canonical encodings (e.g. base58btc
23
+ * `z…`) parse but are returned in their canonical form so the
24
+ * persisted sidecar value is deterministic regardless of how the
25
+ * driver originally serialized it.
26
+ *
27
+ * Sister module — `./piece-cid.ts` performs the same role for
28
+ * PieceCIDv2 via the Synapse SDK's `asPieceCID`. The two parsers
29
+ * are kept separate because the PieceCID parser ALSO enforces
30
+ * codec semantics (raw codec 0x55 + multihash 0x1011), which
31
+ * the IPFS CID slot intentionally does NOT — an IPFS CID may
32
+ * be dag-pb, raw, dag-cbor, etc.
33
+ */
34
+ import { CID } from 'multiformats/cid';
35
+ import { FilecoinProviderError } from './errors.js';
36
+ /**
37
+ * Returns the canonical CIDv1 string form of `value`, or throws
38
+ * `FilecoinProviderError('invalid_ipfs_cid', ...)` with a
39
+ * sanitized message when the value is not a string, is not a
40
+ * parsable CID, or is a CIDv0 (`Qm…`). Promoting a CIDv1 from a
41
+ * non-canonical multibase encoding to its canonical base32-lower
42
+ * `b…` form is done here so callers always get the deterministic
43
+ * persisted shape.
44
+ *
45
+ * `context` is a short noun-phrase that names the seam the
46
+ * caller is guarding (e.g. `"upload result ipfsCid"`). The
47
+ * rejected value itself is NEVER echoed into the error message —
48
+ * malformed CIDs may encode adversarial bytes worth keeping out
49
+ * of log streams. The closed-set `errorCode` is the diagnostic
50
+ * surface.
51
+ */
52
+ export function requireIpfsCid(value, context) {
53
+ if (typeof value === 'string' && value.length > 0) {
54
+ try {
55
+ const parsed = CID.parse(value);
56
+ if (parsed.version === 1)
57
+ return parsed.toString();
58
+ }
59
+ catch {
60
+ // Fall through to the sanitized throw below.
61
+ }
62
+ }
63
+ throw new FilecoinProviderError('invalid_ipfs_cid', `Filecoin ${context} carries a value that is not a valid CIDv1.`);
64
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * @file Filecoin provider-internal metadata allowlist + denylist.
3
+ *
4
+ * The public projector lives in
5
+ * `src/storage/filecoin-public-metadata.ts` so routes / services
6
+ * don't have to import `providers/filecoin/*` directly. What
7
+ * remains here is provider-internal:
8
+ *
9
+ * - `buildFilecoinMetadata(input)` produces the closed-shape
10
+ * Synapse piece-metadata envelope upload calls may pass through.
11
+ * Synapse's `METADATA_LIMITS.MAX_KEYS_PER_PIECE`
12
+ * is 5 (per docs.filecoin.cloud/reference/filoz/synapse-core/
13
+ * utils/variables/metadata_limits/); this builder enforces the
14
+ * cap so an over-allowed envelope cannot reach Synapse and
15
+ * fail mid-upload. Key length is also capped at the documented
16
+ * 32 chars and string values at 128 chars.
17
+ * - The allowlist, denylist, and reserved-prefix constants the
18
+ * upload + central config validators share (config.ts's
19
+ * DATA_SET_METADATA validation reads from the same constants
20
+ * and applies the dataset-side limits 10 / 32 / 128).
21
+ *
22
+ * Upload-side safety rule: this module NEVER lets private keys,
23
+ * wallet addresses, payment-rail state, signed requests, auth
24
+ * headers, UCAN proofs, raw Synapse responses, or any other key on
25
+ * the denylist reach the provider. Reserved prefixes
26
+ * (`atomicmemory.`, `synapse.`, `filecoin.`, `_`) are rejected as
27
+ * caller-supplied keys.
28
+ *
29
+ * Read-side projection — what survives onto the public wire when
30
+ * reading `raw_documents.raw_storage_metadata.filecoin` back — is
31
+ * the shared module's job (`projectFilecoinPublicMetadata`). The
32
+ * internal `copies: [{ provider_id, status }]` shape flattens to
33
+ * scalar `copy_count` / `provider_ids` / `copy_statuses` over
34
+ * there.
35
+ */
36
+ export declare const ALLOWED_FILECOIN_METADATA_KEYS: readonly ["artifact_id", "storage_profile_id", "content_type", "stored_hash", "codec_name", "codec_version", "codec_key_id", "source_kind"];
37
+ export type AllowedFilecoinMetadataKey = (typeof ALLOWED_FILECOIN_METADATA_KEYS)[number];
38
+ /**
39
+ * Closed denylist — keys / shapes `buildFilecoinMetadata` MUST
40
+ * reject if a caller (or a stray test fixture) tries to push them
41
+ * onto a Filecoin upload. The list pins items that, if leaked
42
+ * through `provider_metadata` or `data_set_metadata`, would expose
43
+ * secrets or sensitive operational state.
44
+ */
45
+ export declare const FILECOIN_METADATA_DENYLIST: readonly ["private_key", "wallet_address", "payment_rail", "rail_id", "signed_request", "authorization", "auth_header", "ucan_proof", "synapse_response", "raw_synapse_payload"];
46
+ export declare const FILECOIN_METADATA_RESERVED_PREFIXES: readonly ["atomicmemory.", "synapse.", "filecoin.", "_"];
47
+ /**
48
+ * Scalar leaf-type set accepted by `buildFilecoinMetadata`.
49
+ * Matches the existing `ArtifactMetadata` write-side contract
50
+ * (string | finite number | boolean).
51
+ */
52
+ export type FilecoinMetadataLeaf = string | number | boolean;
53
+ /**
54
+ * Input to `buildFilecoinMetadata`: any caller-supplied bag of
55
+ * metadata. Keys are normalized to the allowlist before any I/O;
56
+ * non-leaf values (arrays, objects, null, undefined) cause the
57
+ * call to throw so callers cannot quietly leak shape.
58
+ */
59
+ export type FilecoinMetadataInput = Record<string, unknown>;
60
+ /** Projected closed-shape envelope ready to ship to the provider. */
61
+ export type FilecoinMetadataEnvelope = Readonly<Partial<Record<AllowedFilecoinMetadataKey, FilecoinMetadataLeaf>>>;
62
+ /**
63
+ * Project caller-supplied metadata down to the allowlisted closed
64
+ * envelope, enforcing Synapse's per-piece limits (≤5 entries, ≤32
65
+ * char keys, ≤128 char string values). Throws on denylisted keys,
66
+ * reserved-prefix keys, non-scalar values, over-long strings, or
67
+ * an output that would exceed the 5-key cap. Unknown (non-
68
+ * allowlisted, non-denylisted) keys are silently dropped — fail-
69
+ * open on inputs we don't understand would surface secrets on a
70
+ * future contributor's keystroke.
71
+ */
72
+ export declare function buildFilecoinMetadata(input: FilecoinMetadataInput): FilecoinMetadataEnvelope;