@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,137 @@
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 const ALLOWED_FILECOIN_METADATA_KEYS = [
37
+ 'artifact_id',
38
+ 'storage_profile_id',
39
+ 'content_type',
40
+ 'stored_hash',
41
+ 'codec_name',
42
+ 'codec_version',
43
+ 'codec_key_id',
44
+ 'source_kind',
45
+ ];
46
+ /**
47
+ * Closed denylist — keys / shapes `buildFilecoinMetadata` MUST
48
+ * reject if a caller (or a stray test fixture) tries to push them
49
+ * onto a Filecoin upload. The list pins items that, if leaked
50
+ * through `provider_metadata` or `data_set_metadata`, would expose
51
+ * secrets or sensitive operational state.
52
+ */
53
+ export const FILECOIN_METADATA_DENYLIST = [
54
+ 'private_key',
55
+ 'wallet_address',
56
+ 'payment_rail',
57
+ 'rail_id',
58
+ 'signed_request',
59
+ 'authorization',
60
+ 'auth_header',
61
+ 'ucan_proof',
62
+ 'synapse_response',
63
+ 'raw_synapse_payload',
64
+ ];
65
+ export const FILECOIN_METADATA_RESERVED_PREFIXES = [
66
+ 'atomicmemory.',
67
+ 'synapse.',
68
+ 'filecoin.',
69
+ '_',
70
+ ];
71
+ const ALLOWED_KEY_SET = new Set(ALLOWED_FILECOIN_METADATA_KEYS);
72
+ const DENY_KEY_SET = new Set(FILECOIN_METADATA_DENYLIST);
73
+ /**
74
+ * Mirrored from Synapse's `METADATA_LIMITS` (per
75
+ * docs.filecoin.cloud/reference/filoz/synapse-core/utils/variables/
76
+ * metadata_limits/). The dataset-side limits (10 keys) live in
77
+ * `./config.ts`; the piece-side limits (5 keys) live here because
78
+ * `buildFilecoinMetadata` produces the per-piece envelope.
79
+ */
80
+ const MAX_PIECE_METADATA_KEYS = 5;
81
+ const MAX_PIECE_METADATA_KEY_LENGTH = 32;
82
+ const MAX_PIECE_METADATA_VALUE_LENGTH = 128;
83
+ /**
84
+ * Project caller-supplied metadata down to the allowlisted closed
85
+ * envelope, enforcing Synapse's per-piece limits (≤5 entries, ≤32
86
+ * char keys, ≤128 char string values). Throws on denylisted keys,
87
+ * reserved-prefix keys, non-scalar values, over-long strings, or
88
+ * an output that would exceed the 5-key cap. Unknown (non-
89
+ * allowlisted, non-denylisted) keys are silently dropped — fail-
90
+ * open on inputs we don't understand would surface secrets on a
91
+ * future contributor's keystroke.
92
+ */
93
+ export function buildFilecoinMetadata(input) {
94
+ const out = {};
95
+ let count = 0;
96
+ for (const [key, value] of Object.entries(input)) {
97
+ rejectReservedOrDeniedKey(key);
98
+ if (!ALLOWED_KEY_SET.has(key))
99
+ continue;
100
+ if (key.length > MAX_PIECE_METADATA_KEY_LENGTH) {
101
+ throw new Error(`Filecoin metadata key '${key}' exceeds Synapse MAX_KEY_LENGTH ` +
102
+ `(${MAX_PIECE_METADATA_KEY_LENGTH}).`);
103
+ }
104
+ if (count >= MAX_PIECE_METADATA_KEYS) {
105
+ throw new Error(`Filecoin piece metadata would exceed Synapse MAX_KEYS_PER_PIECE ` +
106
+ `(${MAX_PIECE_METADATA_KEYS}). Drop entries before calling buildFilecoinMetadata.`);
107
+ }
108
+ out[key] = coerceLeaf(key, value);
109
+ count += 1;
110
+ }
111
+ return out;
112
+ }
113
+ function rejectReservedOrDeniedKey(key) {
114
+ for (const prefix of FILECOIN_METADATA_RESERVED_PREFIXES) {
115
+ if (key.startsWith(prefix)) {
116
+ throw new Error(`Filecoin metadata key '${key}' uses reserved prefix '${prefix}'.`);
117
+ }
118
+ }
119
+ if (DENY_KEY_SET.has(key.toLowerCase())) {
120
+ throw new Error(`Filecoin metadata key '${key}' is denylisted.`);
121
+ }
122
+ }
123
+ function coerceLeaf(key, value) {
124
+ if (typeof value === 'string') {
125
+ if (value.length > MAX_PIECE_METADATA_VALUE_LENGTH) {
126
+ throw new Error(`Filecoin metadata value for '${key}' exceeds Synapse ` +
127
+ `MAX_VALUE_LENGTH (${MAX_PIECE_METADATA_VALUE_LENGTH}, got ${value.length}).`);
128
+ }
129
+ return value;
130
+ }
131
+ if (typeof value === 'number' && Number.isFinite(value))
132
+ return value;
133
+ if (typeof value === 'boolean')
134
+ return value;
135
+ throw new Error(`Filecoin metadata value for '${key}' must be a scalar ` +
136
+ '(string, finite number, or boolean).');
137
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @file Synapse-SDK-backed PieceCID parser for the provider
3
+ * boundary.
4
+ *
5
+ * The shared validator (`src/storage/filecoin-cid-validation.ts`)
6
+ * is intentionally a structural-shape regex with no codec
7
+ * awareness. It exists so the public-projection seam can silently
8
+ * drop adversarial JSONB without dynamically loading the Filecoin
9
+ * SDK at startup (the eager-import path runs even when
10
+ * `RAW_STORAGE_PROVIDER !== 'filecoin'`).
11
+ *
12
+ * The provider boundary is the OPPOSITE trust seam: anything that
13
+ * crosses `parsePieceUri` / `formatPieceUri` /
14
+ * `FilecoinRawContentStore.put` must match the real PieceCIDv2
15
+ * grammar the rest of the Synapse pipeline operates on — CIDv1,
16
+ * raw codec (0x55), multihash code 0x1011
17
+ * (`fr32-sha2-256-trunc254-padded-binary-tree` from
18
+ * `@web3-storage/data-segment`). A string that merely "looks like"
19
+ * a PieceCID but cannot round-trip through the SDK would be
20
+ * persisted only to fail downstream at `head` / `get` / `delete`
21
+ * with a vendor-shaped error that callers can't sanitize.
22
+ *
23
+ * This module sits inside the provider directory and is reached
24
+ * only through the lazy provider-load graph established in Phase
25
+ * 2 — importing it does NOT pull the Synapse SDK into a non-
26
+ * Filecoin-provider startup. The wrapper is intentionally
27
+ * minimal: it just translates the SDK's `asPieceCID(...) | null`
28
+ * contract into a typed `FilecoinProviderError('invalid_piece_cid',
29
+ * ...)` with a sanitized message (no value echo) so callers
30
+ * never surface vendor stack traces.
31
+ */
32
+ /**
33
+ * Returns the SDK's canonical string form of `value` as a
34
+ * PieceCIDv2, or throws `FilecoinProviderError('invalid_piece_cid',
35
+ * ...)` with a sanitized message when the value is not a string,
36
+ * not a parsable CID, or is a CID that does not satisfy
37
+ * `isPieceCID` (codec/multihash/version).
38
+ *
39
+ * Used at trust seams where a malformed value must NOT be
40
+ * persisted (URI parser, URI formatter, upload result mapper).
41
+ * `context` is a short noun-phrase that names the seam the
42
+ * caller is guarding (e.g. `"upload result"`, `"storage URI"`).
43
+ * The value itself is NEVER echoed into the error message —
44
+ * malformed CIDs may encode adversarial bytes worth keeping out
45
+ * of log streams. The closed-set `errorCode` is the diagnostic
46
+ * surface.
47
+ */
48
+ export declare function requirePieceCid(value: unknown, context: string): string;
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @file Synapse-SDK-backed PieceCID parser for the provider
3
+ * boundary.
4
+ *
5
+ * The shared validator (`src/storage/filecoin-cid-validation.ts`)
6
+ * is intentionally a structural-shape regex with no codec
7
+ * awareness. It exists so the public-projection seam can silently
8
+ * drop adversarial JSONB without dynamically loading the Filecoin
9
+ * SDK at startup (the eager-import path runs even when
10
+ * `RAW_STORAGE_PROVIDER !== 'filecoin'`).
11
+ *
12
+ * The provider boundary is the OPPOSITE trust seam: anything that
13
+ * crosses `parsePieceUri` / `formatPieceUri` /
14
+ * `FilecoinRawContentStore.put` must match the real PieceCIDv2
15
+ * grammar the rest of the Synapse pipeline operates on — CIDv1,
16
+ * raw codec (0x55), multihash code 0x1011
17
+ * (`fr32-sha2-256-trunc254-padded-binary-tree` from
18
+ * `@web3-storage/data-segment`). A string that merely "looks like"
19
+ * a PieceCID but cannot round-trip through the SDK would be
20
+ * persisted only to fail downstream at `head` / `get` / `delete`
21
+ * with a vendor-shaped error that callers can't sanitize.
22
+ *
23
+ * This module sits inside the provider directory and is reached
24
+ * only through the lazy provider-load graph established in Phase
25
+ * 2 — importing it does NOT pull the Synapse SDK into a non-
26
+ * Filecoin-provider startup. The wrapper is intentionally
27
+ * minimal: it just translates the SDK's `asPieceCID(...) | null`
28
+ * contract into a typed `FilecoinProviderError('invalid_piece_cid',
29
+ * ...)` with a sanitized message (no value echo) so callers
30
+ * never surface vendor stack traces.
31
+ */
32
+ import { asPieceCID } from '@filoz/synapse-core/piece';
33
+ import { FilecoinProviderError } from './errors.js';
34
+ /**
35
+ * Returns the SDK's canonical string form of `value` as a
36
+ * PieceCIDv2, or throws `FilecoinProviderError('invalid_piece_cid',
37
+ * ...)` with a sanitized message when the value is not a string,
38
+ * not a parsable CID, or is a CID that does not satisfy
39
+ * `isPieceCID` (codec/multihash/version).
40
+ *
41
+ * Used at trust seams where a malformed value must NOT be
42
+ * persisted (URI parser, URI formatter, upload result mapper).
43
+ * `context` is a short noun-phrase that names the seam the
44
+ * caller is guarding (e.g. `"upload result"`, `"storage URI"`).
45
+ * The 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 function requirePieceCid(value, context) {
51
+ if (typeof value === 'string') {
52
+ const parsed = asPieceCID(value);
53
+ if (parsed !== null)
54
+ return parsed.toString();
55
+ }
56
+ throw new FilecoinProviderError('invalid_piece_cid', `Filecoin ${context} carries a value that is not a valid PieceCIDv2.`);
57
+ }
@@ -0,0 +1,234 @@
1
+ /**
2
+ * @file Filecoin provider-client interface — the seam between the
3
+ * `RawContentStore` adapter and any vendor-specific Filecoin client.
4
+ *
5
+ * The interface admits two drivers today (`FilecoinDriverName =
6
+ * 'synapse' | 'filecoin_pin'`). The default is `'synapse'`,
7
+ * backed by `@filoz/synapse-sdk` directly; the Phase 5 opt-in
8
+ * `'filecoin_pin'` driver is backed by `filecoin-pin/core/upload`
9
+ * and composes the Synapse client for non-CAR-first operations.
10
+ * The closed-union type forces every new driver to be a literal-
11
+ * by-literal addition; never widen it to plain `string`.
12
+ *
13
+ * Boundary rules:
14
+ *
15
+ * - The wrapper `backend.ts` is the ONLY caller of these methods.
16
+ * The reconciler, the route layer, and the service layer never
17
+ * talk to a `FilecoinProviderClient` directly.
18
+ * - Inputs and outputs are AtomicMemory-shaped, NOT Synapse-shaped.
19
+ * Mapping happens inside the concrete client
20
+ * (`synapse-client.ts`); vendor types never escape
21
+ * `providers/filecoin/`.
22
+ * - Sanitization (see `errors.ts`): any vendor error a client
23
+ * catches must be replaced with a `FilecoinProviderError` whose
24
+ * `errorCode` is one of the documented stable codes. Raw vendor
25
+ * messages do not escape.
26
+ */
27
+ export interface FilecoinCopySnapshot {
28
+ /** SP identifier (stringified bigint — JSON cannot carry bigint). */
29
+ readonly providerId: string;
30
+ /** Data-set identifier this copy lives in (stringified bigint). */
31
+ readonly dataSetId: string;
32
+ /**
33
+ * Piece-id within the data set (stringified positive decimal
34
+ * bigint). OMITTED when the underlying driver returned a
35
+ * sentinel/non-positive value: filecoin-pin's `executeUpload`
36
+ * can return `pieceId === 0n` for copies that have been stored
37
+ * at the SP but not yet confirmed at the data-set, and writing
38
+ * the raw `'0'` into the sidecar would later trip the hint
39
+ * reader's positive-decimal-bigint validator and emit a
40
+ * spurious `filecoin.hint.malformed` diagnostic on every
41
+ * delete. Absent is silently skipped; only positive values are
42
+ * carried.
43
+ */
44
+ readonly pieceId?: string;
45
+ /** `'primary'` (uploaded direct) or `'secondary'` (pulled SP→SP). */
46
+ readonly role: 'primary' | 'secondary';
47
+ }
48
+ export interface FilecoinFailedAttempt {
49
+ readonly providerId: string;
50
+ readonly role: 'primary' | 'secondary';
51
+ /** Sanitized error code; never the raw vendor message. */
52
+ readonly errorCode: string;
53
+ /** Whether the caller explicitly pinned the provider (no retry). */
54
+ readonly explicit: boolean;
55
+ }
56
+ export interface FilecoinPutInput {
57
+ /**
58
+ * Storage-key prefix the upload pipeline computed (PII-safe HMAC).
59
+ * The Synapse client does not consume this directly — the SDK
60
+ * routes by data set, not key — but the adapter still propagates
61
+ * it for shared observability/metrics with the immediate
62
+ * providers.
63
+ */
64
+ readonly key: string;
65
+ /** Bytes to upload. The Synapse SDK accepts `Uint8Array | ReadableStream`. */
66
+ readonly body: Buffer;
67
+ readonly contentType?: string;
68
+ /**
69
+ * Optional sanitized per-piece metadata produced by
70
+ * `metadata.ts:buildFilecoinMetadata`. Caller is responsible for
71
+ * staying under Synapse's `MAX_KEYS_PER_PIECE` cap. The adapter
72
+ * passes this through to `StorageManager.upload`'s
73
+ * `pieceMetadata` option as string-only entries.
74
+ */
75
+ readonly pieceMetadata?: Readonly<Record<string, string>>;
76
+ /** Per-call timeout (ms); the adapter wires this to an `AbortSignal`. */
77
+ readonly timeoutMs?: number;
78
+ }
79
+ export interface FilecoinPutResult {
80
+ /** PieceCID stringified for stable serialization across logs/storage. */
81
+ readonly pieceCid: string;
82
+ /**
83
+ * Canonical storage URI persisted on the row, of the form
84
+ * `filecoin://piece/<pieceCid>`.
85
+ */
86
+ readonly storageUri: string;
87
+ /** Bytes the SDK reported as stored (post-padding). */
88
+ readonly sizeBytes: number;
89
+ /** Successful copies reported by `UploadResult.copies`. */
90
+ readonly copies: ReadonlyArray<FilecoinCopySnapshot>;
91
+ /** Sanitized failed attempts from `UploadResult.failedAttempts`. */
92
+ readonly failedAttempts: ReadonlyArray<FilecoinFailedAttempt>;
93
+ /** `true` iff every requested copy succeeded. */
94
+ readonly complete: boolean;
95
+ /** Copy count the caller requested (echoed from the SDK). */
96
+ readonly requestedCopies: number;
97
+ /**
98
+ * Optional IPFS / CAR-root CID (CIDv1, any IPLD codec) the
99
+ * driver derived alongside the PieceCID. The live Synapse
100
+ * driver leaves this `undefined` today; the filecoin-pin
101
+ * driver (Phase 5) is expected to populate it so consumers
102
+ * can resolve content via IPFS gateways without re-deriving
103
+ * the CID from bytes. The adapter validates the value via
104
+ * `requireIpfsCid` (real `multiformats/cid` parse), persists
105
+ * the canonical multibase form under
106
+ * `raw_storage_metadata.filecoin.ipfs_cid`, and projects it
107
+ * publicly as `ipfs_cid`. The canonical AtomicMemory storage
108
+ * URI stays `filecoin://piece/<canonicalPieceCid>` regardless —
109
+ * `ipfsCid` does NOT change row identity.
110
+ */
111
+ readonly ipfsCid?: string;
112
+ }
113
+ export interface FilecoinGetInput {
114
+ readonly storageUri: string;
115
+ readonly timeoutMs?: number;
116
+ }
117
+ export interface FilecoinGetResult {
118
+ readonly body: Buffer;
119
+ /**
120
+ * Bounded provider metadata that survived public projection. The
121
+ * adapter does NOT echo the full SDK download result back — it
122
+ * only carries the piece identity for the reconciler.
123
+ */
124
+ readonly providerMetadata: Record<string, unknown>;
125
+ }
126
+ export interface FilecoinHeadInput {
127
+ readonly storageUri: string;
128
+ /**
129
+ * Optional hint for which data set holds the piece. When omitted
130
+ * the adapter consults `StorageManager.findDataSets` to locate
131
+ * the right context.
132
+ */
133
+ readonly dataSetId?: string;
134
+ }
135
+ export interface FilecoinHeadResult {
136
+ readonly exists: boolean;
137
+ /**
138
+ * `true` once the piece is retrievable AND the data set's most
139
+ * recent proof has been accepted. Bounded so the reconciler can
140
+ * promote `blob_pending → blob_available` without exposing the
141
+ * full PDP cycle state on the public wire.
142
+ */
143
+ readonly proven: boolean;
144
+ readonly providerMetadata: Record<string, unknown>;
145
+ }
146
+ export interface FilecoinDeleteInput {
147
+ readonly storageUri: string;
148
+ readonly dataSetId?: string;
149
+ /**
150
+ * Positive decimal bigint string carrying the per-copy
151
+ * `piece_id` Synapse assigned at upload time (see
152
+ * `UploadResult.copies[].pieceId` and the sidecar
153
+ * `raw_storage_metadata.filecoin.copies[].piece_id`). When
154
+ * supplied, the Synapse driver issues
155
+ * `deletePiece({ piece: BigInt(pieceId) })` against the
156
+ * resolved data-set context. This bypasses the SDK's
157
+ * CID→active-piece lookup, which cannot resolve freshly
158
+ * uploaded pieces before PDP proof lands — the lookup path
159
+ * is the failure mode the live calibration smoke surfaced.
160
+ */
161
+ readonly pieceId?: string;
162
+ }
163
+ export interface FilecoinDeleteResult {
164
+ readonly deleted: boolean;
165
+ readonly semantics: 'tombstone' | 'unpin' | 'delete';
166
+ /**
167
+ * Hex transaction hash of the scheduled-removal tx, when the
168
+ * provider returned one. `undefined` is reported as
169
+ * `already-scheduled` semantics.
170
+ */
171
+ readonly txHash?: string;
172
+ }
173
+ export interface FilecoinVerifyInput {
174
+ readonly storageUri: string;
175
+ readonly expectedContentHash: string;
176
+ readonly timeoutMs?: number;
177
+ }
178
+ export interface FilecoinVerifyResult {
179
+ readonly verified: boolean;
180
+ readonly reason?: string;
181
+ }
182
+ export type FilecoinReadinessNetwork = 'calibration' | 'mainnet';
183
+ export type FilecoinReadinessStatus = 'passed' | 'failed' | 'unknown';
184
+ /**
185
+ * Closed-shape readiness probe entry. Errors are reported via the
186
+ * opaque `errorCode` from a documented stable set — raw vendor
187
+ * messages, wallet addresses, allowances, and provider auth
188
+ * payloads do NOT cross this boundary.
189
+ */
190
+ export interface FilecoinReadinessCheck {
191
+ readonly name: string;
192
+ readonly status: FilecoinReadinessStatus;
193
+ readonly errorCode?: string;
194
+ }
195
+ /**
196
+ * Closed union of accepted driver names. New drivers MUST be added
197
+ * to this union literal-by-literal so exhaustive `switch (driver)`
198
+ * coverage stays compiler-enforced. NEVER widen this to plain
199
+ * `string` — that would forfeit the exhaustiveness invariant the
200
+ * harvest plan §Virtues 1 calls out. Adding a new value here is a
201
+ * type-level capability gate; runtime acceptance is gated
202
+ * separately by `parseFilecoinProviderConfig` in `config.ts`.
203
+ */
204
+ export type FilecoinDriverName = 'synapse' | 'filecoin_pin';
205
+ export interface FilecoinProviderClient {
206
+ readonly provider: 'filecoin';
207
+ readonly driver: FilecoinDriverName;
208
+ put(input: FilecoinPutInput): Promise<FilecoinPutResult>;
209
+ get(input: FilecoinGetInput): Promise<FilecoinGetResult>;
210
+ head(input: FilecoinHeadInput): Promise<FilecoinHeadResult>;
211
+ delete(input: FilecoinDeleteInput): Promise<FilecoinDeleteResult>;
212
+ verify(input: FilecoinVerifyInput): Promise<FilecoinVerifyResult>;
213
+ /**
214
+ * Non-mutating readiness probe used by the factory and (later)
215
+ * the reconciler. The provider client owns the probe — the
216
+ * adapter, route layer, and document service never call into
217
+ * the SDK for readiness. Every check carries a stable
218
+ * `errorCode` from the documented enum so log consumers and
219
+ * tests can rely on the shape regardless of how the SDK
220
+ * reports the underlying condition.
221
+ */
222
+ checkReadiness(network: FilecoinReadinessNetwork): Promise<ReadonlyArray<FilecoinReadinessCheck>>;
223
+ /**
224
+ * Non-mutating SDK read of the provider's advertised minimum
225
+ * upload size in bytes. Used by preflight/sizing callers
226
+ * (live calibration smoke + future direct-upload sizing) to
227
+ * size payloads against the provider's real contract rather
228
+ * than a baked-in constant. Lookup failures throw a typed
229
+ * `FilecoinProviderError` (errorCode `filecoin_storage_info_failed`
230
+ * on Synapse; per-driver code on other implementations); they
231
+ * never resolve to `null` or silently degrade.
232
+ */
233
+ getServiceMinUploadBytes(): Promise<number>;
234
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @file Filecoin provider-client interface — the seam between the
3
+ * `RawContentStore` adapter and any vendor-specific Filecoin client.
4
+ *
5
+ * The interface admits two drivers today (`FilecoinDriverName =
6
+ * 'synapse' | 'filecoin_pin'`). The default is `'synapse'`,
7
+ * backed by `@filoz/synapse-sdk` directly; the Phase 5 opt-in
8
+ * `'filecoin_pin'` driver is backed by `filecoin-pin/core/upload`
9
+ * and composes the Synapse client for non-CAR-first operations.
10
+ * The closed-union type forces every new driver to be a literal-
11
+ * by-literal addition; never widen it to plain `string`.
12
+ *
13
+ * Boundary rules:
14
+ *
15
+ * - The wrapper `backend.ts` is the ONLY caller of these methods.
16
+ * The reconciler, the route layer, and the service layer never
17
+ * talk to a `FilecoinProviderClient` directly.
18
+ * - Inputs and outputs are AtomicMemory-shaped, NOT Synapse-shaped.
19
+ * Mapping happens inside the concrete client
20
+ * (`synapse-client.ts`); vendor types never escape
21
+ * `providers/filecoin/`.
22
+ * - Sanitization (see `errors.ts`): any vendor error a client
23
+ * catches must be replaced with a `FilecoinProviderError` whose
24
+ * `errorCode` is one of the documented stable codes. Raw vendor
25
+ * messages do not escape.
26
+ */
27
+ export {};
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @file Filecoin readiness — INTERNAL-only.
3
+ *
4
+ * The check types (`FilecoinReadinessCheck`,
5
+ * `FilecoinReadinessStatus`, `FilecoinReadinessNetwork`) live on
6
+ * `provider-client.ts` because they are part of the
7
+ * `FilecoinProviderClient.checkReadiness` boundary. This module
8
+ * carries:
9
+ *
10
+ * - `FilecoinReadiness` — the aggregate shape consumers see.
11
+ * - `aggregateFilecoinReadiness` — pure aggregator (closed,
12
+ * fail-closed on empty input).
13
+ * - `checkFilecoinReadiness(client, network)` — thin wrapper
14
+ * that delegates to `client.checkReadiness(network)` and
15
+ * builds the aggregate.
16
+ * - `FILECOIN_READINESS_REQUIRED_CHECKS` — documented required
17
+ * probe names.
18
+ *
19
+ * The aggregate is INTERNAL to `src/storage/providers/filecoin/`
20
+ * in v1. It is NOT exposed on any public HTTP route, NOT
21
+ * projected into the SDK, and NOT included in the OpenAPI schema.
22
+ * The factory exposes the helper so the document-upload pipeline
23
+ * and (later) the reconciler can gate work on a successful probe
24
+ * without re-implementing the SDK contract.
25
+ *
26
+ * Sanitization rule: the readiness object NEVER carries wallet
27
+ * addresses, balances, allowances, provider auth payloads, or
28
+ * raw vendor messages. The only public fields are the check
29
+ * `name`, status enum, and an opaque `errorCode` string from the
30
+ * closed set documented at the bottom of this file.
31
+ */
32
+ import type { FilecoinDriverName, FilecoinProviderClient, FilecoinReadinessCheck, FilecoinReadinessNetwork } from './provider-client.js';
33
+ export type { FilecoinDriverName, FilecoinReadinessCheck, FilecoinReadinessNetwork, FilecoinReadinessStatus, } from './provider-client.js';
34
+ export interface FilecoinReadiness {
35
+ readonly provider: 'filecoin';
36
+ readonly driver: FilecoinDriverName;
37
+ readonly network: FilecoinReadinessNetwork;
38
+ readonly ready: boolean;
39
+ readonly checks: ReadonlyArray<FilecoinReadinessCheck>;
40
+ }
41
+ /**
42
+ * Documented required-check names. Callers may treat any
43
+ * name not in this list as advisory; everything in it must be
44
+ * `'passed'` for `ready === true`.
45
+ */
46
+ export declare const FILECOIN_READINESS_REQUIRED_CHECKS: readonly ["network_reachable", "key_loadable", "account_on_expected_network", "payment_covers_minimum_upload", "provider_ids_reachable", "data_set_available", "retrieval_available", "upload_size_bounds_compatible"];
47
+ /**
48
+ * Pure aggregator: `ready === true` iff (1) the supplied checks
49
+ * list is non-empty AND (2) every supplied check has
50
+ * `status === 'passed'`. An empty list fails CLOSED — a future
51
+ * wiring bug that hands this function an empty array must NOT
52
+ * mark Filecoin ready.
53
+ */
54
+ export declare function aggregateFilecoinReadiness(checks: ReadonlyArray<FilecoinReadinessCheck>): boolean;
55
+ /**
56
+ * Delegate to the underlying provider client's
57
+ * `checkReadiness(network)` probe and wrap the result in the
58
+ * documented aggregate shape. The test client returns all-
59
+ * `'unknown'` checks; the real Synapse client issues
60
+ * non-mutating SDK reads.
61
+ */
62
+ export declare function checkFilecoinReadiness(client: FilecoinProviderClient, network: FilecoinReadinessNetwork): Promise<FilecoinReadiness>;
@@ -0,0 +1,85 @@
1
+ /**
2
+ * @file Filecoin readiness — INTERNAL-only.
3
+ *
4
+ * The check types (`FilecoinReadinessCheck`,
5
+ * `FilecoinReadinessStatus`, `FilecoinReadinessNetwork`) live on
6
+ * `provider-client.ts` because they are part of the
7
+ * `FilecoinProviderClient.checkReadiness` boundary. This module
8
+ * carries:
9
+ *
10
+ * - `FilecoinReadiness` — the aggregate shape consumers see.
11
+ * - `aggregateFilecoinReadiness` — pure aggregator (closed,
12
+ * fail-closed on empty input).
13
+ * - `checkFilecoinReadiness(client, network)` — thin wrapper
14
+ * that delegates to `client.checkReadiness(network)` and
15
+ * builds the aggregate.
16
+ * - `FILECOIN_READINESS_REQUIRED_CHECKS` — documented required
17
+ * probe names.
18
+ *
19
+ * The aggregate is INTERNAL to `src/storage/providers/filecoin/`
20
+ * in v1. It is NOT exposed on any public HTTP route, NOT
21
+ * projected into the SDK, and NOT included in the OpenAPI schema.
22
+ * The factory exposes the helper so the document-upload pipeline
23
+ * and (later) the reconciler can gate work on a successful probe
24
+ * without re-implementing the SDK contract.
25
+ *
26
+ * Sanitization rule: the readiness object NEVER carries wallet
27
+ * addresses, balances, allowances, provider auth payloads, or
28
+ * raw vendor messages. The only public fields are the check
29
+ * `name`, status enum, and an opaque `errorCode` string from the
30
+ * closed set documented at the bottom of this file.
31
+ */
32
+ /**
33
+ * Documented required-check names. Callers may treat any
34
+ * name not in this list as advisory; everything in it must be
35
+ * `'passed'` for `ready === true`.
36
+ */
37
+ export const FILECOIN_READINESS_REQUIRED_CHECKS = [
38
+ 'network_reachable',
39
+ 'key_loadable',
40
+ 'account_on_expected_network',
41
+ 'payment_covers_minimum_upload',
42
+ 'provider_ids_reachable',
43
+ 'data_set_available',
44
+ 'retrieval_available',
45
+ 'upload_size_bounds_compatible',
46
+ ];
47
+ /**
48
+ * Pure aggregator: `ready === true` iff (1) the supplied checks
49
+ * list is non-empty AND (2) every supplied check has
50
+ * `status === 'passed'`. An empty list fails CLOSED — a future
51
+ * wiring bug that hands this function an empty array must NOT
52
+ * mark Filecoin ready.
53
+ */
54
+ export function aggregateFilecoinReadiness(checks) {
55
+ if (checks.length === 0)
56
+ return false;
57
+ for (const check of checks) {
58
+ if (check.status !== 'passed')
59
+ return false;
60
+ }
61
+ return true;
62
+ }
63
+ /**
64
+ * Delegate to the underlying provider client's
65
+ * `checkReadiness(network)` probe and wrap the result in the
66
+ * documented aggregate shape. The test client returns all-
67
+ * `'unknown'` checks; the real Synapse client issues
68
+ * non-mutating SDK reads.
69
+ */
70
+ export async function checkFilecoinReadiness(client, network) {
71
+ const checks = await client.checkReadiness(network);
72
+ // `driver` reflects the boundary's actual driver — never a
73
+ // hardcoded literal. Production: the live Synapse client →
74
+ // `'synapse'`. Tests / a future filecoin-pin client → that
75
+ // driver's literal. Hardcoding here would lie for non-Synapse
76
+ // implementations and undermine the driver-agnostic invariant
77
+ // the harvest plan establishes.
78
+ return {
79
+ provider: 'filecoin',
80
+ driver: client.driver,
81
+ network,
82
+ ready: aggregateFilecoinReadiness(checks),
83
+ checks,
84
+ };
85
+ }