@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,92 @@
1
+ /**
2
+ * @file `FilecoinProviderClient` implementation backed by the
3
+ * `filecoin-pin` package (the Filecoin Project's reference CAR-
4
+ * first upload pipeline).
5
+ *
6
+ * Composition strategy: this client OWNS the `put`, `get`, and
7
+ * `verify` paths (the three seams where the CAR-first wrapper
8
+ * differs from direct Synapse) and DELEGATES every other method
9
+ * to a `SynapseFilecoinProviderClient` instance built off the
10
+ * same `Synapse` handle. `head`, `delete`, `checkReadiness`,
11
+ * and `getServiceMinUploadBytes` reach Synapse SDK calls that the
12
+ * direct driver already implements correctly — re-implementing
13
+ * them here would duplicate code and risk drifting semantics.
14
+ *
15
+ * Sibling helpers split the implementation along three seams:
16
+ *
17
+ * - `filecoin-pin-vendor.ts` — vendor minimal types +
18
+ * `loadExecuteUpload` / `loadCarReader` dynamic-import
19
+ * loaders + `noopLogger`. Owns the
20
+ * `optionalDependencies`-safe vendor boundary.
21
+ * - `filecoin-pin-timeout.ts` — `makeTimeoutHandle` (cancellable
22
+ * timeout sentinel for `put`'s `Promise.race`).
23
+ * - `filecoin-pin-mapping.ts` — `buildCarOrThrow`,
24
+ * `buildUploadOptions`, `mapCopies` / `mapFailedAttempts` /
25
+ * `mapPutResult` / `mapPutFailure`. Vendor→provider-neutral
26
+ * wire-shape translation.
27
+ *
28
+ * Why delegate `head`/`delete` to the direct driver:
29
+ * - `filecoin-pin` does not ship a dedicated head/delete
30
+ * surface. Both the direct and CAR-first paths ultimately
31
+ * call the same Synapse SDK primitives (`pieceStatus`,
32
+ * `deletePiece`), so delegation preserves the Phase 3/4
33
+ * contracts (canonical PieceCID identity, sanitized errors,
34
+ * piece-id hinted delete) without copy-paste.
35
+ * - Delete semantics: the Synapse delegate returns the existing
36
+ * provider tombstone behaviour. The plan calls for "weaker
37
+ * semantics" if the new driver cannot match — it CAN match,
38
+ * so we return the same `tombstone` value the direct driver
39
+ * produces.
40
+ *
41
+ * Why `put`/`get`/`verify` are owned here:
42
+ * - `put` builds a UnixFS DAG from the input bytes, serialises
43
+ * to a CAR, and hands the CAR to filecoin-pin's
44
+ * `executeUpload`. The IPFS root CID is captured and surfaced
45
+ * as the optional Phase 4 `ipfsCid` field — that is the
46
+ * concrete value-add of the filecoin-pin path over direct
47
+ * Synapse.
48
+ * - `get` reverses the wrapper: download the CAR via the same
49
+ * Synapse retrieval path the delegate uses, require the CAR
50
+ * to declare exactly one root (a multi-root CAR is malformed
51
+ * for our put-side contract and is rejected as
52
+ * `filecoin_pin_car_ambiguous_roots`; a stale sidecar must
53
+ * not redirect retrieval either), and walk the UnixFS DAG to
54
+ * recover the original bytes. The wire-level `get` contract
55
+ * still says "return the bytes that were put".
56
+ * - `verify` overrides the delegate's `verify` because the
57
+ * Synapse-side path would hash CAR bytes, but the upload
58
+ * pipeline recorded a plaintext SHA-256. The override runs
59
+ * through THIS client's `get` and hashes the extracted
60
+ * plaintext. `input.timeoutMs` flows through to the
61
+ * retrieval so verify stays bounded the same way direct
62
+ * Synapse verify is bounded.
63
+ *
64
+ * Vendor isolation: every static value/type import of an
65
+ * optional package lives behind the helpers above. The
66
+ * `filecoin-pin-lazy-boundary.test.ts` static-import scan asserts
67
+ * NO production source file in `providers/filecoin/` statically
68
+ * imports `filecoin-pin/*`, `@helia/*`, `@ipld/car`,
69
+ * `blockstore-core`, or `pino`. `tsc -p tsconfig.build.json`
70
+ * passes against a synapse-only install (`npm ci
71
+ * --legacy-peer-deps --omit=optional`).
72
+ */
73
+ import type { Synapse } from '@filoz/synapse-sdk';
74
+ import { type FilecoinPinClientOptions } from './filecoin-pin-mapping.js';
75
+ import type { SynapseFilecoinProviderClient } from './synapse-client.js';
76
+ import type { FilecoinDeleteInput, FilecoinDeleteResult, FilecoinGetInput, FilecoinGetResult, FilecoinHeadInput, FilecoinHeadResult, FilecoinProviderClient, FilecoinPutInput, FilecoinPutResult, FilecoinReadinessCheck, FilecoinVerifyInput, FilecoinVerifyResult } from './provider-client.js';
77
+ export type { FilecoinPinClientOptions } from './filecoin-pin-mapping.js';
78
+ export declare class FilecoinPinFilecoinProviderClient implements FilecoinProviderClient {
79
+ private readonly synapse;
80
+ private readonly synapseDelegate;
81
+ private readonly options;
82
+ readonly provider: "filecoin";
83
+ readonly driver: "filecoin_pin";
84
+ constructor(synapse: Synapse, synapseDelegate: SynapseFilecoinProviderClient, options?: FilecoinPinClientOptions);
85
+ put(input: FilecoinPutInput): Promise<FilecoinPutResult>;
86
+ get(input: FilecoinGetInput): Promise<FilecoinGetResult>;
87
+ head(input: FilecoinHeadInput): Promise<FilecoinHeadResult>;
88
+ delete(input: FilecoinDeleteInput): Promise<FilecoinDeleteResult>;
89
+ verify(input: FilecoinVerifyInput): Promise<FilecoinVerifyResult>;
90
+ checkReadiness(network: 'calibration' | 'mainnet'): Promise<ReadonlyArray<FilecoinReadinessCheck>>;
91
+ getServiceMinUploadBytes(): Promise<number>;
92
+ }
@@ -0,0 +1,199 @@
1
+ /**
2
+ * @file `FilecoinProviderClient` implementation backed by the
3
+ * `filecoin-pin` package (the Filecoin Project's reference CAR-
4
+ * first upload pipeline).
5
+ *
6
+ * Composition strategy: this client OWNS the `put`, `get`, and
7
+ * `verify` paths (the three seams where the CAR-first wrapper
8
+ * differs from direct Synapse) and DELEGATES every other method
9
+ * to a `SynapseFilecoinProviderClient` instance built off the
10
+ * same `Synapse` handle. `head`, `delete`, `checkReadiness`,
11
+ * and `getServiceMinUploadBytes` reach Synapse SDK calls that the
12
+ * direct driver already implements correctly — re-implementing
13
+ * them here would duplicate code and risk drifting semantics.
14
+ *
15
+ * Sibling helpers split the implementation along three seams:
16
+ *
17
+ * - `filecoin-pin-vendor.ts` — vendor minimal types +
18
+ * `loadExecuteUpload` / `loadCarReader` dynamic-import
19
+ * loaders + `noopLogger`. Owns the
20
+ * `optionalDependencies`-safe vendor boundary.
21
+ * - `filecoin-pin-timeout.ts` — `makeTimeoutHandle` (cancellable
22
+ * timeout sentinel for `put`'s `Promise.race`).
23
+ * - `filecoin-pin-mapping.ts` — `buildCarOrThrow`,
24
+ * `buildUploadOptions`, `mapCopies` / `mapFailedAttempts` /
25
+ * `mapPutResult` / `mapPutFailure`. Vendor→provider-neutral
26
+ * wire-shape translation.
27
+ *
28
+ * Why delegate `head`/`delete` to the direct driver:
29
+ * - `filecoin-pin` does not ship a dedicated head/delete
30
+ * surface. Both the direct and CAR-first paths ultimately
31
+ * call the same Synapse SDK primitives (`pieceStatus`,
32
+ * `deletePiece`), so delegation preserves the Phase 3/4
33
+ * contracts (canonical PieceCID identity, sanitized errors,
34
+ * piece-id hinted delete) without copy-paste.
35
+ * - Delete semantics: the Synapse delegate returns the existing
36
+ * provider tombstone behaviour. The plan calls for "weaker
37
+ * semantics" if the new driver cannot match — it CAN match,
38
+ * so we return the same `tombstone` value the direct driver
39
+ * produces.
40
+ *
41
+ * Why `put`/`get`/`verify` are owned here:
42
+ * - `put` builds a UnixFS DAG from the input bytes, serialises
43
+ * to a CAR, and hands the CAR to filecoin-pin's
44
+ * `executeUpload`. The IPFS root CID is captured and surfaced
45
+ * as the optional Phase 4 `ipfsCid` field — that is the
46
+ * concrete value-add of the filecoin-pin path over direct
47
+ * Synapse.
48
+ * - `get` reverses the wrapper: download the CAR via the same
49
+ * Synapse retrieval path the delegate uses, require the CAR
50
+ * to declare exactly one root (a multi-root CAR is malformed
51
+ * for our put-side contract and is rejected as
52
+ * `filecoin_pin_car_ambiguous_roots`; a stale sidecar must
53
+ * not redirect retrieval either), and walk the UnixFS DAG to
54
+ * recover the original bytes. The wire-level `get` contract
55
+ * still says "return the bytes that were put".
56
+ * - `verify` overrides the delegate's `verify` because the
57
+ * Synapse-side path would hash CAR bytes, but the upload
58
+ * pipeline recorded a plaintext SHA-256. The override runs
59
+ * through THIS client's `get` and hashes the extracted
60
+ * plaintext. `input.timeoutMs` flows through to the
61
+ * retrieval so verify stays bounded the same way direct
62
+ * Synapse verify is bounded.
63
+ *
64
+ * Vendor isolation: every static value/type import of an
65
+ * optional package lives behind the helpers above. The
66
+ * `filecoin-pin-lazy-boundary.test.ts` static-import scan asserts
67
+ * NO production source file in `providers/filecoin/` statically
68
+ * imports `filecoin-pin/*`, `@helia/*`, `@ipld/car`,
69
+ * `blockstore-core`, or `pino`. `tsc -p tsconfig.build.json`
70
+ * passes against a synapse-only install (`npm ci
71
+ * --legacy-peer-deps --omit=optional`).
72
+ */
73
+ import { createHash } from 'node:crypto';
74
+ import { CID } from 'multiformats/cid';
75
+ import { FilecoinProviderError } from './errors.js';
76
+ import { extractFileFromCar } from './filecoin-pin-car.js';
77
+ import { buildCarOrThrow, buildUploadOptions, mapPutFailure, mapPutResult, } from './filecoin-pin-mapping.js';
78
+ import { makeTimeoutHandle } from './filecoin-pin-timeout.js';
79
+ import { loadCarReader, loadExecuteUpload } from './filecoin-pin-vendor.js';
80
+ export class FilecoinPinFilecoinProviderClient {
81
+ synapse;
82
+ synapseDelegate;
83
+ options;
84
+ provider = 'filecoin';
85
+ driver = 'filecoin_pin';
86
+ constructor(synapse, synapseDelegate, options = {}) {
87
+ this.synapse = synapse;
88
+ this.synapseDelegate = synapseDelegate;
89
+ this.options = options;
90
+ }
91
+ async put(input) {
92
+ const built = await buildCarOrThrow(input.body);
93
+ const timeoutMs = input.timeoutMs ?? this.options.uploadTimeoutMs;
94
+ const aborter = timeoutMs !== undefined && timeoutMs > 0 ? new AbortController() : null;
95
+ const uploadOptions = buildUploadOptions(this.options, input, aborter);
96
+ const executeUpload = await loadExecuteUpload();
97
+ const uploadPromise = executeUpload(this.synapse, built.carBytes, built.rootCid, uploadOptions);
98
+ const timeoutHandle = aborter !== null && timeoutMs !== undefined
99
+ ? makeTimeoutHandle(timeoutMs, aborter)
100
+ : null;
101
+ try {
102
+ const result = timeoutHandle !== null
103
+ ? await Promise.race([uploadPromise, timeoutHandle.promise])
104
+ : await uploadPromise;
105
+ return mapPutResult(result, built);
106
+ }
107
+ catch (err) {
108
+ throw mapPutFailure(err, aborter, timeoutMs);
109
+ }
110
+ finally {
111
+ timeoutHandle?.cancel();
112
+ }
113
+ }
114
+ async get(input) {
115
+ const carResult = await this.synapseDelegate.get(input);
116
+ let rootCid;
117
+ try {
118
+ const reader = await loadCarReader(carResult.body);
119
+ const roots = await reader.getRoots();
120
+ if (roots.length === 0) {
121
+ throw new FilecoinProviderError('filecoin_pin_car_no_root', 'Retrieved CAR carries no root CID; cannot extract the original file.');
122
+ }
123
+ if (roots.length > 1) {
124
+ // `buildCarFromBytes` emits exactly one root. A retrieved
125
+ // CAR declaring multiple roots is either malformed or a
126
+ // crafted payload trying to redirect retrieval — refuse to
127
+ // silently pick the first.
128
+ throw new FilecoinProviderError('filecoin_pin_car_ambiguous_roots', 'Retrieved CAR declares multiple roots; filecoin-pin uploads emit exactly one.');
129
+ }
130
+ // Re-parse the root string through the canonical
131
+ // `multiformats/cid` so we hand the unixfs walker an
132
+ // instance with the prototype methods it expects (the
133
+ // `@ipld/car`-nested multiformats and the top-level one
134
+ // structurally match at runtime but are TS-distinct types).
135
+ rootCid = CID.parse(roots[0].toString());
136
+ }
137
+ catch (err) {
138
+ if (err instanceof FilecoinProviderError)
139
+ throw err;
140
+ throw new FilecoinProviderError('filecoin_pin_car_parse_failed', 'filecoin-pin driver could not parse the retrieved CAR.');
141
+ }
142
+ let bytes;
143
+ try {
144
+ bytes = await extractFileFromCar(carResult.body, rootCid);
145
+ }
146
+ catch {
147
+ throw new FilecoinProviderError('filecoin_pin_car_extract_failed', 'filecoin-pin driver could not extract the file from the retrieved CAR.');
148
+ }
149
+ return {
150
+ body: bytes,
151
+ providerMetadata: { ...carResult.providerMetadata, ipfs_cid: rootCid.toString() },
152
+ };
153
+ }
154
+ async head(input) {
155
+ return this.synapseDelegate.head(input);
156
+ }
157
+ async delete(input) {
158
+ return this.synapseDelegate.delete(input);
159
+ }
160
+ async verify(input) {
161
+ // Phase 5 blocker fix: the Synapse delegate's `verify` hashes
162
+ // whatever bytes Synapse returned for the PieceCID. Under
163
+ // filecoin-pin those bytes are CAR bytes, NOT the original
164
+ // plaintext, so the delegate's hash would always mismatch
165
+ // `expectedContentHash` (which is the plaintext SHA-256
166
+ // computed at upload time). Run `verify` through THIS client's
167
+ // `get` — that unwraps the CAR and hashes the extracted
168
+ // plaintext, matching the upload-side hash contract.
169
+ // `input.timeoutMs` flows through to the retrieval so verify
170
+ // stays bounded the same way the direct Synapse verify is
171
+ // bounded.
172
+ let body;
173
+ try {
174
+ const fetched = await this.get({
175
+ storageUri: input.storageUri,
176
+ ...(input.timeoutMs !== undefined ? { timeoutMs: input.timeoutMs } : {}),
177
+ });
178
+ body = fetched.body;
179
+ }
180
+ catch (err) {
181
+ // Surface retrieval/parse failures as a typed `verify`
182
+ // outcome rather than a raw throw; the reconciler relies
183
+ // on `verified=false + reason` to drive retries.
184
+ const reason = err instanceof FilecoinProviderError ? err.errorCode : 'filecoin_pin_verify_get_failed';
185
+ return { verified: false, reason };
186
+ }
187
+ const actual = createHash('sha256').update(body).digest('hex');
188
+ if (actual !== input.expectedContentHash) {
189
+ return { verified: false, reason: 'content_hash_mismatch' };
190
+ }
191
+ return { verified: true };
192
+ }
193
+ async checkReadiness(network) {
194
+ return this.synapseDelegate.checkReadiness(network);
195
+ }
196
+ async getServiceMinUploadBytes() {
197
+ return this.synapseDelegate.getServiceMinUploadBytes();
198
+ }
199
+ }
@@ -0,0 +1,58 @@
1
+ /**
2
+ * @file Result-shape mapping + option builder for the
3
+ * filecoin-pin driver's `put` path.
4
+ *
5
+ * Lifted out of `filecoin-pin-client.ts` to keep the client
6
+ * focused on the `FilecoinProviderClient` implementation and
7
+ * this file focused on the wire-shape translation between the
8
+ * vendor's `MinimalUploadResult` and our provider-neutral
9
+ * `FilecoinPutResult`. The closed set of helpers here:
10
+ *
11
+ * - `buildCarOrThrow` — sanitised wrapper around `buildCarFromBytes`.
12
+ * - `buildUploadOptions` — assemble the `executeUpload`
13
+ * option bag with explicit conditional spreads so each
14
+ * field is either present-with-meaning or absent (no
15
+ * `undefined`-valued slots).
16
+ * - `mapCopies` / `mapFailedAttempts` — vendor→provider-neutral
17
+ * copy/failure shape, omitting non-positive piece IDs.
18
+ * - `mapPutResult` — build the `FilecoinPutResult` shape from
19
+ * the vendor `MinimalUploadResult` + built CAR.
20
+ * - `mapPutFailure` — classify a `put`-path error into the
21
+ * closed set of typed `FilecoinProviderError`s.
22
+ *
23
+ * No vendor module is statically imported here; the file
24
+ * type-checks under the production build path even when the
25
+ * `optionalDependencies` graph is absent.
26
+ */
27
+ import type { CID } from 'multiformats/cid';
28
+ import { FilecoinProviderError } from './errors.js';
29
+ import type { MinimalUploadOptions, MinimalUploadResult } from './filecoin-pin-vendor.js';
30
+ import type { FilecoinPutInput, FilecoinPutResult } from './provider-client.js';
31
+ export interface FilecoinPinClientOptions {
32
+ readonly copies?: number;
33
+ readonly providerIds?: ReadonlyArray<string>;
34
+ readonly dataSetMetadata?: Record<string, string>;
35
+ readonly uploadTimeoutMs?: number;
36
+ readonly retrievalTimeoutMs?: number;
37
+ readonly minUploadBytes?: number | null;
38
+ readonly maxUploadBytes?: number | null;
39
+ }
40
+ export declare function buildCarOrThrow(body: Buffer): Promise<{
41
+ carBytes: Buffer;
42
+ rootCid: CID;
43
+ }>;
44
+ /**
45
+ * Assemble the option bag we hand to `executeUpload`. The bag is
46
+ * built with explicit conditional spreads so each field is either
47
+ * present-with-meaning or absent — no `undefined`-valued slots
48
+ * that would force the SDK to apply defaults differently from how
49
+ * the direct driver applies them. IPNI announcement validation is
50
+ * always disabled here: `put` returns once the CAR is stored, and
51
+ * the IPNI lookup is a separate network-side concern.
52
+ */
53
+ export declare function buildUploadOptions(options: FilecoinPinClientOptions, input: FilecoinPutInput, aborter: AbortController | null): MinimalUploadOptions;
54
+ export declare function mapPutResult(result: MinimalUploadResult, built: {
55
+ carBytes: Buffer;
56
+ rootCid: CID;
57
+ }): FilecoinPutResult;
58
+ export declare function mapPutFailure(err: unknown, aborter: AbortController | null, timeoutMs: number | undefined): FilecoinProviderError;
@@ -0,0 +1,103 @@
1
+ /**
2
+ * @file Result-shape mapping + option builder for the
3
+ * filecoin-pin driver's `put` path.
4
+ *
5
+ * Lifted out of `filecoin-pin-client.ts` to keep the client
6
+ * focused on the `FilecoinProviderClient` implementation and
7
+ * this file focused on the wire-shape translation between the
8
+ * vendor's `MinimalUploadResult` and our provider-neutral
9
+ * `FilecoinPutResult`. The closed set of helpers here:
10
+ *
11
+ * - `buildCarOrThrow` — sanitised wrapper around `buildCarFromBytes`.
12
+ * - `buildUploadOptions` — assemble the `executeUpload`
13
+ * option bag with explicit conditional spreads so each
14
+ * field is either present-with-meaning or absent (no
15
+ * `undefined`-valued slots).
16
+ * - `mapCopies` / `mapFailedAttempts` — vendor→provider-neutral
17
+ * copy/failure shape, omitting non-positive piece IDs.
18
+ * - `mapPutResult` — build the `FilecoinPutResult` shape from
19
+ * the vendor `MinimalUploadResult` + built CAR.
20
+ * - `mapPutFailure` — classify a `put`-path error into the
21
+ * closed set of typed `FilecoinProviderError`s.
22
+ *
23
+ * No vendor module is statically imported here; the file
24
+ * type-checks under the production build path even when the
25
+ * `optionalDependencies` graph is absent.
26
+ */
27
+ import { FilecoinProviderError } from './errors.js';
28
+ import { buildCarFromBytes } from './filecoin-pin-car.js';
29
+ import { noopLogger } from './filecoin-pin-vendor.js';
30
+ export async function buildCarOrThrow(body) {
31
+ try {
32
+ return await buildCarFromBytes(body);
33
+ }
34
+ catch {
35
+ throw new FilecoinProviderError('filecoin_pin_car_build_failed', 'filecoin-pin driver failed to wrap upload bytes into a CAR.');
36
+ }
37
+ }
38
+ /**
39
+ * Assemble the option bag we hand to `executeUpload`. The bag is
40
+ * built with explicit conditional spreads so each field is either
41
+ * present-with-meaning or absent — no `undefined`-valued slots
42
+ * that would force the SDK to apply defaults differently from how
43
+ * the direct driver applies them. IPNI announcement validation is
44
+ * always disabled here: `put` returns once the CAR is stored, and
45
+ * the IPNI lookup is a separate network-side concern.
46
+ */
47
+ export function buildUploadOptions(options, input, aborter) {
48
+ const providerIds = options.providerIds?.map((id) => BigInt(id));
49
+ return {
50
+ logger: noopLogger(),
51
+ ...(options.copies !== undefined ? { copies: options.copies } : {}),
52
+ ...(providerIds !== undefined && providerIds.length > 0 ? { providerIds } : {}),
53
+ ...(options.dataSetMetadata !== undefined ? { metadata: options.dataSetMetadata } : {}),
54
+ ...(input.pieceMetadata !== undefined ? { pieceMetadata: { ...input.pieceMetadata } } : {}),
55
+ ...(aborter !== null ? { signal: aborter.signal } : {}),
56
+ ipniValidation: { enabled: false },
57
+ };
58
+ }
59
+ function mapCopies(copies) {
60
+ return copies.map((c) => ({
61
+ providerId: c.providerId.toString(),
62
+ dataSetId: c.dataSetId.toString(),
63
+ // Only carry a positive bigint as the piece-id hint —
64
+ // filecoin-pin's `executeUpload` returns `0n` for copies
65
+ // accepted at the SP but not yet confirmed at the data-set,
66
+ // and persisting `'0'` would trip the hint reader's
67
+ // positive-decimal-bigint validator. Omitting the field
68
+ // routes delete through the CID-lookup fallback cleanly.
69
+ ...(c.pieceId > 0n ? { pieceId: c.pieceId.toString() } : {}),
70
+ role: c.role,
71
+ }));
72
+ }
73
+ function mapFailedAttempts(attempts) {
74
+ // Sanitisation: NEVER pipe the raw vendor `error` string into
75
+ // the public shape. The closed `errorCode` is what surfaces;
76
+ // the original message stays inside the driver.
77
+ return attempts.map((a) => ({
78
+ providerId: a.providerId.toString(),
79
+ role: a.role,
80
+ errorCode: 'filecoin_pin_copy_failed',
81
+ explicit: a.explicit,
82
+ }));
83
+ }
84
+ export function mapPutResult(result, built) {
85
+ return {
86
+ pieceCid: result.pieceCid,
87
+ storageUri: `filecoin://piece/${result.pieceCid}`,
88
+ sizeBytes: built.carBytes.length,
89
+ copies: mapCopies(result.copies),
90
+ failedAttempts: mapFailedAttempts(result.failedAttempts),
91
+ complete: result.complete,
92
+ requestedCopies: result.requestedCopies,
93
+ ipfsCid: built.rootCid.toString(),
94
+ };
95
+ }
96
+ export function mapPutFailure(err, aborter, timeoutMs) {
97
+ if (err instanceof FilecoinProviderError)
98
+ return err;
99
+ if (aborter?.signal.aborted) {
100
+ return new FilecoinProviderError('filecoin_pin_upload_timeout', `filecoin-pin driver aborted CAR upload after ${timeoutMs} ms.`);
101
+ }
102
+ return new FilecoinProviderError('filecoin_pin_upload_failed', 'filecoin-pin driver failed to upload the CAR to Synapse.');
103
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @file Cancellable timeout sentinel for the filecoin-pin
3
+ * driver's `put` path.
4
+ *
5
+ * Lifted out of `filecoin-pin-client.ts` so the client stays
6
+ * focused on the `FilecoinProviderClient` implementation and
7
+ * this file owns the (subtle) timer-lifetime contract.
8
+ *
9
+ * Contract:
10
+ * - `promise` rejects with `FilecoinProviderError(
11
+ * 'filecoin_pin_upload_timeout', …)` after `timeoutMs` AND
12
+ * aborts the supplied controller (cooperative cancel for a
13
+ * signal-aware vendor).
14
+ * - `cancel()` clears the underlying `setTimeout` AND swallows
15
+ * the rejection so the loser of `Promise.race` does not
16
+ * surface as `unhandledRejection`.
17
+ *
18
+ * Callers MUST invoke `cancel()` in a `finally` block — a
19
+ * successful upload that does not call `cancel()` would leak the
20
+ * pending timer and later abort the (now-dead) controller. The
21
+ * companion fake-timer test in
22
+ * `__tests__/filecoin-pin-client-options.test.ts` pins both the
23
+ * timeout-fires and the success-path-no-leak halves of the
24
+ * contract.
25
+ */
26
+ export interface TimeoutHandle {
27
+ readonly promise: Promise<never>;
28
+ cancel(): void;
29
+ }
30
+ export declare function makeTimeoutHandle(timeoutMs: number, aborter: AbortController): TimeoutHandle;
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @file Cancellable timeout sentinel for the filecoin-pin
3
+ * driver's `put` path.
4
+ *
5
+ * Lifted out of `filecoin-pin-client.ts` so the client stays
6
+ * focused on the `FilecoinProviderClient` implementation and
7
+ * this file owns the (subtle) timer-lifetime contract.
8
+ *
9
+ * Contract:
10
+ * - `promise` rejects with `FilecoinProviderError(
11
+ * 'filecoin_pin_upload_timeout', …)` after `timeoutMs` AND
12
+ * aborts the supplied controller (cooperative cancel for a
13
+ * signal-aware vendor).
14
+ * - `cancel()` clears the underlying `setTimeout` AND swallows
15
+ * the rejection so the loser of `Promise.race` does not
16
+ * surface as `unhandledRejection`.
17
+ *
18
+ * Callers MUST invoke `cancel()` in a `finally` block — a
19
+ * successful upload that does not call `cancel()` would leak the
20
+ * pending timer and later abort the (now-dead) controller. The
21
+ * companion fake-timer test in
22
+ * `__tests__/filecoin-pin-client-options.test.ts` pins both the
23
+ * timeout-fires and the success-path-no-leak halves of the
24
+ * contract.
25
+ */
26
+ import { FilecoinProviderError } from './errors.js';
27
+ export function makeTimeoutHandle(timeoutMs, aborter) {
28
+ let cancelled = false;
29
+ let timer = null;
30
+ const promise = new Promise((_, reject) => {
31
+ timer = setTimeout(() => {
32
+ if (cancelled)
33
+ return;
34
+ aborter.abort();
35
+ reject(new FilecoinProviderError('filecoin_pin_upload_timeout', `filecoin-pin driver aborted CAR upload after ${timeoutMs} ms.`));
36
+ }, timeoutMs);
37
+ timer.unref?.();
38
+ });
39
+ // Silently absorb the rejection if the race already returned a
40
+ // result — otherwise Node logs `unhandledRejection` when the
41
+ // sentinel loses.
42
+ promise.catch(() => undefined);
43
+ return {
44
+ promise,
45
+ cancel() {
46
+ cancelled = true;
47
+ if (timer !== null) {
48
+ clearTimeout(timer);
49
+ timer = null;
50
+ }
51
+ },
52
+ };
53
+ }
@@ -0,0 +1,111 @@
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
+ import type { Synapse } from '@filoz/synapse-sdk';
46
+ import type { CID } from 'multiformats/cid';
47
+ /** A single SP-side copy result emitted by `executeUpload`. */
48
+ export interface MinimalUploadCopy {
49
+ readonly providerId: bigint;
50
+ readonly dataSetId: bigint;
51
+ readonly pieceId: bigint;
52
+ readonly role: 'primary' | 'secondary';
53
+ }
54
+ /** A single failed-attempt entry emitted by `executeUpload`. */
55
+ export interface MinimalUploadFailure {
56
+ readonly providerId: bigint;
57
+ readonly role: 'primary' | 'secondary';
58
+ readonly error: string;
59
+ readonly explicit: boolean;
60
+ }
61
+ /** The closed subset of `UploadExecutionResult` the driver consumes. */
62
+ export interface MinimalUploadResult {
63
+ readonly pieceCid: string;
64
+ readonly copies: ReadonlyArray<MinimalUploadCopy>;
65
+ readonly failedAttempts: ReadonlyArray<MinimalUploadFailure>;
66
+ readonly complete: boolean;
67
+ readonly requestedCopies: number;
68
+ }
69
+ /** The closed subset of `UploadExecutionOptions` the driver passes. */
70
+ export interface MinimalUploadOptions {
71
+ readonly logger: unknown;
72
+ readonly copies?: number;
73
+ readonly providerIds?: ReadonlyArray<bigint>;
74
+ readonly metadata?: Record<string, string>;
75
+ readonly pieceMetadata?: Record<string, string>;
76
+ readonly signal?: AbortSignal;
77
+ readonly ipniValidation?: {
78
+ readonly enabled: boolean;
79
+ };
80
+ }
81
+ /** Local signature of `filecoin-pin/core/upload.executeUpload`. */
82
+ export type ExecuteUploadFn = (synapse: Synapse, carData: Uint8Array, rootCid: CID, options: MinimalUploadOptions) => Promise<MinimalUploadResult>;
83
+ /** Closed subset of `@ipld/car.CarReader` the get-side consumes. */
84
+ export interface MinimalCarReader {
85
+ getRoots(): Promise<ReadonlyArray<{
86
+ toString(): string;
87
+ }>>;
88
+ }
89
+ /**
90
+ * Lazy-load `executeUpload` from `filecoin-pin/core/upload`. The
91
+ * package is in `optionalDependencies`; if a synapse-only build
92
+ * was installed via `npm ci --legacy-peer-deps --omit=optional`,
93
+ * this resolution fails only when an operator selects
94
+ * `RAW_STORAGE_FILECOIN_DRIVER=filecoin_pin` — the intended
95
+ * failure mode.
96
+ */
97
+ export declare function loadExecuteUpload(): Promise<ExecuteUploadFn>;
98
+ /** Lazy-load `CarReader.fromBytes` from `@ipld/car`. */
99
+ export declare function loadCarReader(carBytes: Uint8Array): Promise<MinimalCarReader>;
100
+ /**
101
+ * Pino-shape silent logger used to satisfy `executeUpload`'s
102
+ * required `logger` option without taking on `pino` as a runtime
103
+ * dep. The `MinimalUploadOptions.logger` field is `unknown` by
104
+ * design so we don't drag pino into the production type graph;
105
+ * the shape below mirrors the closed set of methods filecoin-pin's
106
+ * `executeUpload` actually invokes. If a future filecoin-pin
107
+ * upgrade widens that surface, the runtime call site fails with
108
+ * a clear vendor-side error rather than producing silent test
109
+ * passes against a stale shape.
110
+ */
111
+ export declare function noopLogger(): unknown;