@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.
- package/CHANGELOG.md +27 -0
- package/LICENSE +201 -0
- package/README.md +314 -0
- package/dist/app/bind-ephemeral.d.ts +18 -0
- package/dist/app/bind-ephemeral.js +22 -0
- package/dist/app/cors-headers.d.ts +12 -0
- package/dist/app/cors-headers.js +18 -0
- package/dist/app/create-app.d.ts +25 -0
- package/dist/app/create-app.js +156 -0
- package/dist/app/runtime-config-route-snapshot.d.ts +27 -0
- package/dist/app/runtime-config-route-snapshot.js +27 -0
- package/dist/app/runtime-container.d.ts +281 -0
- package/dist/app/runtime-container.js +297 -0
- package/dist/app/startup-checks.d.ts +28 -0
- package/dist/app/startup-checks.js +45 -0
- package/dist/bin.d.ts +17 -0
- package/dist/bin.js +128 -0
- package/dist/config.d.ts +680 -0
- package/dist/config.js +808 -0
- package/dist/db/agent-trust-repository.d.ts +49 -0
- package/dist/db/agent-trust-repository.js +66 -0
- package/dist/db/belief-edges-repository.d.ts +68 -0
- package/dist/db/belief-edges-repository.js +124 -0
- package/dist/db/claim-repository.d.ts +6 -0
- package/dist/db/claim-repository.js +4 -0
- package/dist/db/contradictions-repository.d.ts +56 -0
- package/dist/db/contradictions-repository.js +88 -0
- package/dist/db/document-chunk-repository.d.ts +48 -0
- package/dist/db/document-chunk-repository.js +145 -0
- package/dist/db/document-chunk-types.d.ts +35 -0
- package/dist/db/document-chunk-types.js +9 -0
- package/dist/db/document-list-cursor.d.ts +45 -0
- package/dist/db/document-list-cursor.js +111 -0
- package/dist/db/document-list-repository.d.ts +103 -0
- package/dist/db/document-list-repository.js +204 -0
- package/dist/db/entity-cards-repository.d.ts +37 -0
- package/dist/db/entity-cards-repository.js +46 -0
- package/dist/db/entity-values-repository.d.ts +26 -0
- package/dist/db/entity-values-repository.js +57 -0
- package/dist/db/link-repository.d.ts +30 -0
- package/dist/db/link-repository.js +54 -0
- package/dist/db/memory-repository.d.ts +163 -0
- package/dist/db/memory-repository.js +232 -0
- package/dist/db/migrate.d.ts +6 -0
- package/dist/db/migrate.js +36 -0
- package/dist/db/mmr.d.ts +14 -0
- package/dist/db/mmr.js +57 -0
- package/dist/db/passport-feed-repository.d.ts +91 -0
- package/dist/db/passport-feed-repository.js +198 -0
- package/dist/db/pg-episode-store.d.ts +19 -0
- package/dist/db/pg-episode-store.js +17 -0
- package/dist/db/pg-link-store.d.ts +17 -0
- package/dist/db/pg-link-store.js +14 -0
- package/dist/db/pg-memory-store.d.ts +68 -0
- package/dist/db/pg-memory-store.js +53 -0
- package/dist/db/pg-recap-store.d.ts +13 -0
- package/dist/db/pg-recap-store.js +19 -0
- package/dist/db/pg-representation-store.d.ts +17 -0
- package/dist/db/pg-representation-store.js +17 -0
- package/dist/db/pg-search-store.d.ts +29 -0
- package/dist/db/pg-search-store.js +47 -0
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +21 -0
- package/dist/db/ppr.d.ts +56 -0
- package/dist/db/ppr.js +178 -0
- package/dist/db/query-helpers.d.ts +44 -0
- package/dist/db/query-helpers.js +60 -0
- package/dist/db/raw-doc-artifact-sync.d.ts +128 -0
- package/dist/db/raw-doc-artifact-sync.js +259 -0
- package/dist/db/raw-document-blob-repository.d.ts +148 -0
- package/dist/db/raw-document-blob-repository.js +300 -0
- package/dist/db/raw-document-repository.d.ts +104 -0
- package/dist/db/raw-document-repository.js +410 -0
- package/dist/db/raw-document-status-repository.d.ts +122 -0
- package/dist/db/raw-document-status-repository.js +183 -0
- package/dist/db/raw-document-types.d.ts +236 -0
- package/dist/db/raw-document-types.js +10 -0
- package/dist/db/raw-storage-reconciliation-repository.d.ts +110 -0
- package/dist/db/raw-storage-reconciliation-repository.js +200 -0
- package/dist/db/reflection-jobs-repository.d.ts +33 -0
- package/dist/db/reflection-jobs-repository.js +48 -0
- package/dist/db/reflections-repository.d.ts +41 -0
- package/dist/db/reflections-repository.js +83 -0
- package/dist/db/repository-claims.d.ts +141 -0
- package/dist/db/repository-claims.js +376 -0
- package/dist/db/repository-deferred-audn.d.ts +33 -0
- package/dist/db/repository-deferred-audn.js +69 -0
- package/dist/db/repository-document-delete.d.ts +53 -0
- package/dist/db/repository-document-delete.js +156 -0
- package/dist/db/repository-entities.d.ts +114 -0
- package/dist/db/repository-entities.js +317 -0
- package/dist/db/repository-entity-attributes.d.ts +41 -0
- package/dist/db/repository-entity-attributes.js +65 -0
- package/dist/db/repository-entity-graph.d.ts +32 -0
- package/dist/db/repository-entity-graph.js +87 -0
- package/dist/db/repository-first-mentions.d.ts +41 -0
- package/dist/db/repository-first-mentions.js +79 -0
- package/dist/db/repository-lessons.d.ts +51 -0
- package/dist/db/repository-lessons.js +90 -0
- package/dist/db/repository-links.d.ts +26 -0
- package/dist/db/repository-links.js +105 -0
- package/dist/db/repository-observation.d.ts +26 -0
- package/dist/db/repository-observation.js +51 -0
- package/dist/db/repository-read.d.ts +56 -0
- package/dist/db/repository-read.js +271 -0
- package/dist/db/repository-recaps.d.ts +59 -0
- package/dist/db/repository-recaps.js +158 -0
- package/dist/db/repository-representations.d.ts +48 -0
- package/dist/db/repository-representations.js +162 -0
- package/dist/db/repository-temporal-state.d.ts +35 -0
- package/dist/db/repository-temporal-state.js +46 -0
- package/dist/db/repository-tll.d.ts +88 -0
- package/dist/db/repository-tll.js +179 -0
- package/dist/db/repository-types.d.ts +313 -0
- package/dist/db/repository-types.js +142 -0
- package/dist/db/repository-user-profiles.d.ts +17 -0
- package/dist/db/repository-user-profiles.js +28 -0
- package/dist/db/repository-vector-search.d.ts +33 -0
- package/dist/db/repository-vector-search.js +373 -0
- package/dist/db/repository-wipe.d.ts +34 -0
- package/dist/db/repository-wipe.js +94 -0
- package/dist/db/repository-write.d.ts +61 -0
- package/dist/db/repository-write.js +279 -0
- package/dist/db/schema.sql +1355 -0
- package/dist/db/storage-artifact-delete-tx.d.ts +56 -0
- package/dist/db/storage-artifact-delete-tx.js +123 -0
- package/dist/db/storage-artifact-providers.d.ts +21 -0
- package/dist/db/storage-artifact-providers.js +21 -0
- package/dist/db/storage-artifact-recovery-repository.d.ts +66 -0
- package/dist/db/storage-artifact-recovery-repository.js +58 -0
- package/dist/db/storage-artifact-repository.d.ts +329 -0
- package/dist/db/storage-artifact-repository.js +497 -0
- package/dist/db/stores.d.ts +220 -0
- package/dist/db/stores.js +12 -0
- package/dist/db/summaries-repository.d.ts +74 -0
- package/dist/db/summaries-repository.js +125 -0
- package/dist/eval/beam-10m-loader.d.ts +98 -0
- package/dist/eval/beam-10m-loader.js +128 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +17 -0
- package/dist/middleware/require-bearer.d.ts +27 -0
- package/dist/middleware/require-bearer.js +60 -0
- package/dist/middleware/validate-response.d.ts +33 -0
- package/dist/middleware/validate-response.js +55 -0
- package/dist/middleware/validate.d.ts +43 -0
- package/dist/middleware/validate.js +85 -0
- package/dist/routes/agents.d.ts +13 -0
- package/dist/routes/agents.js +89 -0
- package/dist/routes/document-response-formatters.d.ts +98 -0
- package/dist/routes/document-response-formatters.js +243 -0
- package/dist/routes/documents.d.ts +74 -0
- package/dist/routes/documents.js +425 -0
- package/dist/routes/memories.d.ts +29 -0
- package/dist/routes/memories.js +725 -0
- package/dist/routes/memory-response-formatters.d.ts +179 -0
- package/dist/routes/memory-response-formatters.js +210 -0
- package/dist/routes/public-raw-storage-metadata.d.ts +54 -0
- package/dist/routes/public-raw-storage-metadata.js +56 -0
- package/dist/routes/reflect.d.ts +14 -0
- package/dist/routes/reflect.js +19 -0
- package/dist/routes/response-schema-map.d.ts +14 -0
- package/dist/routes/response-schema-map.js +69 -0
- package/dist/routes/route-errors.d.ts +12 -0
- package/dist/routes/route-errors.js +30 -0
- package/dist/routes/storage-error-handlers.d.ts +34 -0
- package/dist/routes/storage-error-handlers.js +185 -0
- package/dist/routes/storage-response-formatters.d.ts +44 -0
- package/dist/routes/storage-response-formatters.js +155 -0
- package/dist/routes/storage.d.ts +38 -0
- package/dist/routes/storage.js +369 -0
- package/dist/routes/upstream-provider-errors.d.ts +19 -0
- package/dist/routes/upstream-provider-errors.js +95 -0
- package/dist/schemas/agents.d.ts +79 -0
- package/dist/schemas/agents.js +126 -0
- package/dist/schemas/common.d.ts +110 -0
- package/dist/schemas/common.js +190 -0
- package/dist/schemas/document-list-responses.d.ts +102 -0
- package/dist/schemas/document-list-responses.js +87 -0
- package/dist/schemas/document-list-schemas.d.ts +123 -0
- package/dist/schemas/document-list-schemas.js +174 -0
- package/dist/schemas/document-response-schemas.d.ts +610 -0
- package/dist/schemas/document-response-schemas.js +264 -0
- package/dist/schemas/document-status-envelope.d.ts +48 -0
- package/dist/schemas/document-status-envelope.js +54 -0
- package/dist/schemas/documents.d.ts +292 -0
- package/dist/schemas/documents.js +449 -0
- package/dist/schemas/errors.d.ts +75 -0
- package/dist/schemas/errors.js +105 -0
- package/dist/schemas/memories.d.ts +378 -0
- package/dist/schemas/memories.js +542 -0
- package/dist/schemas/openapi.d.ts +24 -0
- package/dist/schemas/openapi.js +1038 -0
- package/dist/schemas/response-scalars.d.ts +10 -0
- package/dist/schemas/response-scalars.js +10 -0
- package/dist/schemas/responses.d.ts +536 -0
- package/dist/schemas/responses.js +350 -0
- package/dist/schemas/search-response-parts.d.ts +97 -0
- package/dist/schemas/search-response-parts.js +103 -0
- package/dist/schemas/storage-schemas.d.ts +175 -0
- package/dist/schemas/storage-schemas.js +277 -0
- package/dist/schemas/zod-setup.d.ts +15 -0
- package/dist/schemas/zod-setup.js +17 -0
- package/dist/server.d.ts +13 -0
- package/dist/server.js +57 -0
- package/dist/services/abstract-query-policy.d.ts +13 -0
- package/dist/services/abstract-query-policy.js +50 -0
- package/dist/services/affinity-clustering.d.ts +66 -0
- package/dist/services/affinity-clustering.js +125 -0
- package/dist/services/agentic-retrieval.d.ts +38 -0
- package/dist/services/agentic-retrieval.js +126 -0
- package/dist/services/answer-format.d.ts +56 -0
- package/dist/services/answer-format.js +118 -0
- package/dist/services/answer-rescue.d.ts +72 -0
- package/dist/services/answer-rescue.js +177 -0
- package/dist/services/answer-verifier.d.ts +24 -0
- package/dist/services/answer-verifier.js +73 -0
- package/dist/services/api-retry.d.ts +6 -0
- package/dist/services/api-retry.js +41 -0
- package/dist/services/assistant-turn-filter.d.ts +20 -0
- package/dist/services/assistant-turn-filter.js +69 -0
- package/dist/services/atomicmem-uri.d.ts +33 -0
- package/dist/services/atomicmem-uri.js +86 -0
- package/dist/services/audit-events.d.ts +54 -0
- package/dist/services/audit-events.js +56 -0
- package/dist/services/chunked-extraction.d.ts +21 -0
- package/dist/services/chunked-extraction.js +108 -0
- package/dist/services/claim-slotting.d.ts +27 -0
- package/dist/services/claim-slotting.js +38 -0
- package/dist/services/claude-code-llm.d.ts +19 -0
- package/dist/services/claude-code-llm.js +96 -0
- package/dist/services/composite-dedup.d.ts +50 -0
- package/dist/services/composite-dedup.js +153 -0
- package/dist/services/composite-grouping.d.ts +41 -0
- package/dist/services/composite-grouping.js +111 -0
- package/dist/services/composite-staleness.d.ts +20 -0
- package/dist/services/composite-staleness.js +50 -0
- package/dist/services/conciseness-preference.d.ts +14 -0
- package/dist/services/conciseness-preference.js +42 -0
- package/dist/services/conflict-policy.d.ts +20 -0
- package/dist/services/conflict-policy.js +335 -0
- package/dist/services/consensus-extraction.d.ts +39 -0
- package/dist/services/consensus-extraction.js +147 -0
- package/dist/services/consensus-validation.d.ts +52 -0
- package/dist/services/consensus-validation.js +206 -0
- package/dist/services/consolidation-service.d.ts +60 -0
- package/dist/services/consolidation-service.js +171 -0
- package/dist/services/content-detection.d.ts +18 -0
- package/dist/services/content-detection.js +25 -0
- package/dist/services/contradiction-surfacing.d.ts +62 -0
- package/dist/services/contradiction-surfacing.js +111 -0
- package/dist/services/cost-telemetry.d.ts +39 -0
- package/dist/services/cost-telemetry.js +58 -0
- package/dist/services/counter-evidence.d.ts +34 -0
- package/dist/services/counter-evidence.js +92 -0
- package/dist/services/current-state-ranking.d.ts +21 -0
- package/dist/services/current-state-ranking.js +152 -0
- package/dist/services/deferred-audn.d.ts +47 -0
- package/dist/services/deferred-audn.js +162 -0
- package/dist/services/document-chunker.d.ts +50 -0
- package/dist/services/document-chunker.js +153 -0
- package/dist/services/document-failure-markers.d.ts +91 -0
- package/dist/services/document-failure-markers.js +305 -0
- package/dist/services/document-indexer.d.ts +122 -0
- package/dist/services/document-indexer.js +405 -0
- package/dist/services/document-service.d.ts +245 -0
- package/dist/services/document-service.js +325 -0
- package/dist/services/document-upload-artifact-sync.d.ts +80 -0
- package/dist/services/document-upload-artifact-sync.js +162 -0
- package/dist/services/document-upload-beta2-recovery.d.ts +72 -0
- package/dist/services/document-upload-beta2-recovery.js +94 -0
- package/dist/services/document-upload.d.ts +44 -0
- package/dist/services/document-upload.js +353 -0
- package/dist/services/embedding.d.ts +57 -0
- package/dist/services/embedding.js +416 -0
- package/dist/services/entity-attribute-extractor.d.ts +34 -0
- package/dist/services/entity-attribute-extractor.js +117 -0
- package/dist/services/entity-card-synthesis.d.ts +54 -0
- package/dist/services/entity-card-synthesis.js +92 -0
- package/dist/services/entity-dedup.d.ts +9 -0
- package/dist/services/entity-dedup.js +14 -0
- package/dist/services/entity-graph.d.ts +17 -0
- package/dist/services/entity-graph.js +135 -0
- package/dist/services/entropy-gate.d.ts +52 -0
- package/dist/services/entropy-gate.js +56 -0
- package/dist/services/episode-fetcher.d.ts +47 -0
- package/dist/services/episode-fetcher.js +128 -0
- package/dist/services/event-anchor-facts.d.ts +8 -0
- package/dist/services/event-anchor-facts.js +205 -0
- package/dist/services/event-chain-detector.d.ts +52 -0
- package/dist/services/event-chain-detector.js +83 -0
- package/dist/services/extraction-cache.d.ts +9 -0
- package/dist/services/extraction-cache.js +54 -0
- package/dist/services/extraction-enrichment.d.ts +9 -0
- package/dist/services/extraction-enrichment.js +223 -0
- package/dist/services/extraction.d.ts +69 -0
- package/dist/services/extraction.js +596 -0
- package/dist/services/fact-normalization.d.ts +12 -0
- package/dist/services/fact-normalization.js +248 -0
- package/dist/services/filecoin-observability.d.ts +127 -0
- package/dist/services/filecoin-observability.js +200 -0
- package/dist/services/first-mention-service.d.ts +76 -0
- package/dist/services/first-mention-service.js +186 -0
- package/dist/services/hierarchical-retrieval.d.ts +49 -0
- package/dist/services/hierarchical-retrieval.js +50 -0
- package/dist/services/ingest-fact-pipeline.d.ts +32 -0
- package/dist/services/ingest-fact-pipeline.js +212 -0
- package/dist/services/ingest-post-write.d.ts +50 -0
- package/dist/services/ingest-post-write.js +117 -0
- package/dist/services/ingest-trace.d.ts +32 -0
- package/dist/services/ingest-trace.js +60 -0
- package/dist/services/input-sanitizer.d.ts +41 -0
- package/dist/services/input-sanitizer.js +135 -0
- package/dist/services/iterative-retrieval.d.ts +26 -0
- package/dist/services/iterative-retrieval.js +139 -0
- package/dist/services/keyword-expansion.d.ts +10 -0
- package/dist/services/keyword-expansion.js +26 -0
- package/dist/services/lesson-service.d.ts +68 -0
- package/dist/services/lesson-service.js +178 -0
- package/dist/services/literal-extractor.d.ts +16 -0
- package/dist/services/literal-extractor.js +74 -0
- package/dist/services/literal-list-protection.d.ts +17 -0
- package/dist/services/literal-list-protection.js +134 -0
- package/dist/services/literal-query-expansion.d.ts +20 -0
- package/dist/services/literal-query-expansion.js +181 -0
- package/dist/services/llm.d.ts +61 -0
- package/dist/services/llm.js +265 -0
- package/dist/services/memcell-projection.d.ts +17 -0
- package/dist/services/memcell-projection.js +41 -0
- package/dist/services/memory-audn.d.ts +43 -0
- package/dist/services/memory-audn.js +419 -0
- package/dist/services/memory-crud.d.ts +93 -0
- package/dist/services/memory-crud.js +255 -0
- package/dist/services/memory-ingest.d.ts +21 -0
- package/dist/services/memory-ingest.js +249 -0
- package/dist/services/memory-lifecycle.d.ts +75 -0
- package/dist/services/memory-lifecycle.js +108 -0
- package/dist/services/memory-lineage.d.ts +181 -0
- package/dist/services/memory-lineage.js +232 -0
- package/dist/services/memory-network.d.ts +40 -0
- package/dist/services/memory-network.js +75 -0
- package/dist/services/memory-search-types.d.ts +25 -0
- package/dist/services/memory-search-types.js +10 -0
- package/dist/services/memory-search.d.ts +48 -0
- package/dist/services/memory-search.js +505 -0
- package/dist/services/memory-service-types.d.ts +371 -0
- package/dist/services/memory-service-types.js +8 -0
- package/dist/services/memory-service.d.ts +152 -0
- package/dist/services/memory-service.js +225 -0
- package/dist/services/memory-storage.d.ts +33 -0
- package/dist/services/memory-storage.js +328 -0
- package/dist/services/msr-aggregator.d.ts +38 -0
- package/dist/services/msr-aggregator.js +97 -0
- package/dist/services/msr-detector.d.ts +35 -0
- package/dist/services/msr-detector.js +65 -0
- package/dist/services/namespace-retrieval.d.ts +60 -0
- package/dist/services/namespace-retrieval.js +180 -0
- package/dist/services/observation-date-extraction.d.ts +12 -0
- package/dist/services/observation-date-extraction.js +50 -0
- package/dist/services/observation-service.d.ts +27 -0
- package/dist/services/observation-service.js +84 -0
- package/dist/services/packaging-observability.d.ts +29 -0
- package/dist/services/packaging-observability.js +146 -0
- package/dist/services/query-expansion.d.ts +83 -0
- package/dist/services/query-expansion.js +242 -0
- package/dist/services/query-keyword-matches.d.ts +6 -0
- package/dist/services/query-keyword-matches.js +56 -0
- package/dist/services/query-term-visibility.d.ts +28 -0
- package/dist/services/query-term-visibility.js +100 -0
- package/dist/services/quick-extraction.d.ts +25 -0
- package/dist/services/quick-extraction.js +431 -0
- package/dist/services/quoted-entity-extraction.d.ts +10 -0
- package/dist/services/quoted-entity-extraction.js +161 -0
- package/dist/services/raw-storage-reconciler-backoff.d.ts +8 -0
- package/dist/services/raw-storage-reconciler-backoff.js +14 -0
- package/dist/services/raw-storage-reconciler-scheduler.d.ts +29 -0
- package/dist/services/raw-storage-reconciler-scheduler.js +43 -0
- package/dist/services/raw-storage-reconciler.d.ts +71 -0
- package/dist/services/raw-storage-reconciler.js +278 -0
- package/dist/services/recap-builder.d.ts +49 -0
- package/dist/services/recap-builder.js +157 -0
- package/dist/services/reflect-jobs.d.ts +23 -0
- package/dist/services/reflect-jobs.js +36 -0
- package/dist/services/reflect-prompts.d.ts +71 -0
- package/dist/services/reflect-prompts.js +99 -0
- package/dist/services/reflect-retrieval.d.ts +33 -0
- package/dist/services/reflect-retrieval.js +30 -0
- package/dist/services/reflect.d.ts +49 -0
- package/dist/services/reflect.js +84 -0
- package/dist/services/relative-temporal.d.ts +14 -0
- package/dist/services/relative-temporal.js +163 -0
- package/dist/services/relevance-policy.d.ts +37 -0
- package/dist/services/relevance-policy.js +109 -0
- package/dist/services/rerank.d.ts +32 -0
- package/dist/services/rerank.js +118 -0
- package/dist/services/reranker.d.ts +20 -0
- package/dist/services/reranker.js +99 -0
- package/dist/services/retrieval-channel-rules.d.ts +34 -0
- package/dist/services/retrieval-channel-rules.js +41 -0
- package/dist/services/retrieval-config-overlay.d.ts +36 -0
- package/dist/services/retrieval-config-overlay.js +44 -0
- package/dist/services/retrieval-format.d.ts +119 -0
- package/dist/services/retrieval-format.js +559 -0
- package/dist/services/retrieval-policy.d.ts +69 -0
- package/dist/services/retrieval-policy.js +275 -0
- package/dist/services/retrieval-profiles.d.ts +37 -0
- package/dist/services/retrieval-profiles.js +90 -0
- package/dist/services/retrieval-side-effects.d.ts +14 -0
- package/dist/services/retrieval-side-effects.js +26 -0
- package/dist/services/retrieval-trace.d.ts +108 -0
- package/dist/services/retrieval-trace.js +147 -0
- package/dist/services/rrf-fusion.d.ts +18 -0
- package/dist/services/rrf-fusion.js +34 -0
- package/dist/services/search-pipeline.d.ts +71 -0
- package/dist/services/search-pipeline.js +788 -0
- package/dist/services/session-date.d.ts +20 -0
- package/dist/services/session-date.js +61 -0
- package/dist/services/session-packaging.d.ts +53 -0
- package/dist/services/session-packaging.js +182 -0
- package/dist/services/session-summary-generator.d.ts +53 -0
- package/dist/services/session-summary-generator.js +134 -0
- package/dist/services/specialists/cr-specialist.d.ts +52 -0
- package/dist/services/specialists/cr-specialist.js +121 -0
- package/dist/services/specialists/dispatch.d.ts +53 -0
- package/dist/services/specialists/dispatch.js +102 -0
- package/dist/services/specialists/ie-ku-specialist.d.ts +37 -0
- package/dist/services/specialists/ie-ku-specialist.js +63 -0
- package/dist/services/specialists/msr-specialist.d.ts +61 -0
- package/dist/services/specialists/msr-specialist.js +162 -0
- package/dist/services/specialists/tr-specialist.d.ts +37 -0
- package/dist/services/specialists/tr-specialist.js +146 -0
- package/dist/services/storage-key-prefix.d.ts +42 -0
- package/dist/services/storage-key-prefix.js +45 -0
- package/dist/services/storage-put-recovery.d.ts +71 -0
- package/dist/services/storage-put-recovery.js +269 -0
- package/dist/services/storage-service-errors.d.ts +124 -0
- package/dist/services/storage-service-errors.js +189 -0
- package/dist/services/storage-service.d.ts +176 -0
- package/dist/services/storage-service.js +423 -0
- package/dist/services/subject-aware-ranking.d.ts +19 -0
- package/dist/services/subject-aware-ranking.js +161 -0
- package/dist/services/supplemental-extraction.d.ts +7 -0
- package/dist/services/supplemental-extraction.js +116 -0
- package/dist/services/tbc-execution.d.ts +49 -0
- package/dist/services/tbc-execution.js +284 -0
- package/dist/services/temporal-classifier.d.ts +56 -0
- package/dist/services/temporal-classifier.js +94 -0
- package/dist/services/temporal-endpoint-evidence.d.ts +12 -0
- package/dist/services/temporal-endpoint-evidence.js +313 -0
- package/dist/services/temporal-fingerprint.d.ts +6 -0
- package/dist/services/temporal-fingerprint.js +12 -0
- package/dist/services/temporal-format.d.ts +9 -0
- package/dist/services/temporal-format.js +21 -0
- package/dist/services/temporal-intent.d.ts +39 -0
- package/dist/services/temporal-intent.js +78 -0
- package/dist/services/temporal-query-constraints.d.ts +16 -0
- package/dist/services/temporal-query-constraints.js +107 -0
- package/dist/services/temporal-query-expansion.d.ts +14 -0
- package/dist/services/temporal-query-expansion.js +131 -0
- package/dist/services/temporal-rerank.d.ts +22 -0
- package/dist/services/temporal-rerank.js +47 -0
- package/dist/services/temporal-result-protection.d.ts +7 -0
- package/dist/services/temporal-result-protection.js +60 -0
- package/dist/services/temporal-state-write.d.ts +57 -0
- package/dist/services/temporal-state-write.js +45 -0
- package/dist/services/tiered-context.d.ts +87 -0
- package/dist/services/tiered-context.js +214 -0
- package/dist/services/tiered-loading.d.ts +88 -0
- package/dist/services/tiered-loading.js +263 -0
- package/dist/services/timeline-pack.d.ts +36 -0
- package/dist/services/timeline-pack.js +50 -0
- package/dist/services/timing.d.ts +13 -0
- package/dist/services/timing.js +72 -0
- package/dist/services/tll-augmentation.d.ts +20 -0
- package/dist/services/tll-augmentation.js +125 -0
- package/dist/services/tll-retrieval.d.ts +55 -0
- package/dist/services/tll-retrieval.js +101 -0
- package/dist/services/topic-abstraction.d.ts +36 -0
- package/dist/services/topic-abstraction.js +105 -0
- package/dist/services/trust-scoring.d.ts +43 -0
- package/dist/services/trust-scoring.js +89 -0
- package/dist/services/typed-belief-calculus.d.ts +126 -0
- package/dist/services/typed-belief-calculus.js +204 -0
- package/dist/services/upload-config.d.ts +34 -0
- package/dist/services/upload-config.js +23 -0
- package/dist/services/upload-decision.d.ts +65 -0
- package/dist/services/upload-decision.js +98 -0
- package/dist/services/upload-helpers.d.ts +107 -0
- package/dist/services/upload-helpers.js +148 -0
- package/dist/services/user-profile-builder.d.ts +22 -0
- package/dist/services/user-profile-builder.js +109 -0
- package/dist/services/voyage-embedding.d.ts +22 -0
- package/dist/services/voyage-embedding.js +77 -0
- package/dist/services/write-security.d.ts +31 -0
- package/dist/services/write-security.js +64 -0
- package/dist/storage/artifact-public-redaction.d.ts +34 -0
- package/dist/storage/artifact-public-redaction.js +83 -0
- package/dist/storage/cleanup.d.ts +103 -0
- package/dist/storage/cleanup.js +138 -0
- package/dist/storage/codec-factory.d.ts +17 -0
- package/dist/storage/codec-factory.js +33 -0
- package/dist/storage/codecs/aes-gcm-codec.d.ts +44 -0
- package/dist/storage/codecs/aes-gcm-codec.js +108 -0
- package/dist/storage/codecs/noop-codec.d.ts +16 -0
- package/dist/storage/codecs/noop-codec.js +23 -0
- package/dist/storage/factory.d.ts +44 -0
- package/dist/storage/factory.js +99 -0
- package/dist/storage/filecoin-cid-validation.d.ts +82 -0
- package/dist/storage/filecoin-cid-validation.js +122 -0
- package/dist/storage/filecoin-public-metadata.d.ts +73 -0
- package/dist/storage/filecoin-public-metadata.js +110 -0
- package/dist/storage/local-fs-store.d.ts +39 -0
- package/dist/storage/local-fs-store.js +145 -0
- package/dist/storage/pointer-uri-allowlist.d.ts +38 -0
- package/dist/storage/pointer-uri-allowlist.js +70 -0
- package/dist/storage/provider-metadata-projection.d.ts +27 -0
- package/dist/storage/provider-metadata-projection.js +68 -0
- package/dist/storage/providers/filecoin/backend.d.ts +42 -0
- package/dist/storage/providers/filecoin/backend.js +250 -0
- package/dist/storage/providers/filecoin/config.d.ts +70 -0
- package/dist/storage/providers/filecoin/config.js +275 -0
- package/dist/storage/providers/filecoin/errors.d.ts +45 -0
- package/dist/storage/providers/filecoin/errors.js +56 -0
- package/dist/storage/providers/filecoin/filecoin-pin-car.d.ts +78 -0
- package/dist/storage/providers/filecoin/filecoin-pin-car.js +155 -0
- package/dist/storage/providers/filecoin/filecoin-pin-client.d.ts +92 -0
- package/dist/storage/providers/filecoin/filecoin-pin-client.js +199 -0
- package/dist/storage/providers/filecoin/filecoin-pin-mapping.d.ts +58 -0
- package/dist/storage/providers/filecoin/filecoin-pin-mapping.js +103 -0
- package/dist/storage/providers/filecoin/filecoin-pin-timeout.d.ts +30 -0
- package/dist/storage/providers/filecoin/filecoin-pin-timeout.js +53 -0
- package/dist/storage/providers/filecoin/filecoin-pin-vendor.d.ts +111 -0
- package/dist/storage/providers/filecoin/filecoin-pin-vendor.js +87 -0
- package/dist/storage/providers/filecoin/hints.d.ts +71 -0
- package/dist/storage/providers/filecoin/hints.js +123 -0
- package/dist/storage/providers/filecoin/index.d.ts +51 -0
- package/dist/storage/providers/filecoin/index.js +103 -0
- package/dist/storage/providers/filecoin/ipfs-cid.d.ts +50 -0
- package/dist/storage/providers/filecoin/ipfs-cid.js +64 -0
- package/dist/storage/providers/filecoin/metadata.d.ts +72 -0
- package/dist/storage/providers/filecoin/metadata.js +137 -0
- package/dist/storage/providers/filecoin/piece-cid.d.ts +48 -0
- package/dist/storage/providers/filecoin/piece-cid.js +57 -0
- package/dist/storage/providers/filecoin/provider-client.d.ts +234 -0
- package/dist/storage/providers/filecoin/provider-client.js +27 -0
- package/dist/storage/providers/filecoin/readiness.d.ts +62 -0
- package/dist/storage/providers/filecoin/readiness.js +85 -0
- package/dist/storage/providers/filecoin/retriever.d.ts +82 -0
- package/dist/storage/providers/filecoin/retriever.js +63 -0
- package/dist/storage/providers/filecoin/skeleton-client.d.ts +36 -0
- package/dist/storage/providers/filecoin/skeleton-client.js +55 -0
- package/dist/storage/providers/filecoin/synapse-client.d.ts +169 -0
- package/dist/storage/providers/filecoin/synapse-client.js +343 -0
- package/dist/storage/providers/filecoin/synapse-construction.d.ts +26 -0
- package/dist/storage/providers/filecoin/synapse-construction.js +47 -0
- package/dist/storage/providers/filecoin/synapse-error-mapping.d.ts +23 -0
- package/dist/storage/providers/filecoin/synapse-error-mapping.js +49 -0
- package/dist/storage/providers/filecoin/synapse-readiness.d.ts +37 -0
- package/dist/storage/providers/filecoin/synapse-readiness.js +231 -0
- package/dist/storage/providers/filecoin/uri.d.ts +49 -0
- package/dist/storage/providers/filecoin/uri.js +84 -0
- package/dist/storage/providers/filecoin/verified-fetch-lifecycle.d.ts +77 -0
- package/dist/storage/providers/filecoin/verified-fetch-lifecycle.js +196 -0
- package/dist/storage/providers/filecoin/verified-fetch-retriever.d.ts +54 -0
- package/dist/storage/providers/filecoin/verified-fetch-retriever.js +81 -0
- package/dist/storage/providers/filecoin/verified-fetch-vendor.d.ts +71 -0
- package/dist/storage/providers/filecoin/verified-fetch-vendor.js +94 -0
- package/dist/storage/raw-content-codec.d.ts +89 -0
- package/dist/storage/raw-content-codec.js +47 -0
- package/dist/storage/raw-content-store-backend-adapter.d.ts +28 -0
- package/dist/storage/raw-content-store-backend-adapter.js +67 -0
- package/dist/storage/raw-content-store.d.ts +228 -0
- package/dist/storage/raw-content-store.js +27 -0
- package/dist/storage/s3-store.d.ts +42 -0
- package/dist/storage/s3-store.js +181 -0
- package/dist/storage/storage-backend-registry.d.ts +58 -0
- package/dist/storage/storage-backend-registry.js +56 -0
- package/dist/storage/storage-backend.d.ts +82 -0
- package/dist/storage/storage-backend.js +14 -0
- package/dist/storage/storage-capabilities.d.ts +56 -0
- package/dist/storage/storage-capabilities.js +170 -0
- package/dist/storage/store-registry.d.ts +67 -0
- package/dist/storage/store-registry.js +77 -0
- package/dist/vector-math.d.ts +15 -0
- package/dist/vector-math.js +31 -0
- package/dist/xml-escape.d.ts +5 -0
- package/dist/xml-escape.js +7 -0
- package/openapi.json +15395 -0
- package/openapi.yaml +10794 -0
- package/package.json +119 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Provider-metadata projection for storage artifact rows.
|
|
3
|
+
*
|
|
4
|
+
* Raw-content adapters keep provider-native metadata in their own
|
|
5
|
+
* nested internal shape. Storage artifacts split that into two
|
|
6
|
+
* public columns: discoverable identifiers and provider details.
|
|
7
|
+
* This module is the single translation point so document-backed
|
|
8
|
+
* artifacts and direct storage artifacts expose the same
|
|
9
|
+
* allowlisted shape, and is consumed by `redactArtifactPublic` to
|
|
10
|
+
* build the public `storage_artifacts` wire response.
|
|
11
|
+
*
|
|
12
|
+
* Phase 3/4 contract: CID-shaped identifiers MUST satisfy the
|
|
13
|
+
* shared structural shape gates in `./filecoin-cid-validation.ts`
|
|
14
|
+
* before they may surface in the public output. The projector
|
|
15
|
+
* silently drops anything that fails the shape — so legacy /
|
|
16
|
+
* adversarial / manually-planted JSONB values (the Phase 4
|
|
17
|
+
* rename's pre-migration `cid` slot, sentinel strings, garbage)
|
|
18
|
+
* cannot reach the wire even on rows the SDK parser never gated.
|
|
19
|
+
* Codec-aware validation (Synapse SDK `asPieceCID`,
|
|
20
|
+
* `multiformats/cid.CID.parse`) lives at the WRITE path on the
|
|
21
|
+
* provider boundary; this module stays eager-import safe.
|
|
22
|
+
*/
|
|
23
|
+
export interface ProjectedArtifactProviderFields {
|
|
24
|
+
identifiers: Record<string, string>;
|
|
25
|
+
providerDetails: Record<string, unknown> | null;
|
|
26
|
+
}
|
|
27
|
+
export declare function projectArtifactProviderFields(provider: string, metadata: Record<string, unknown>): ProjectedArtifactProviderFields;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Provider-metadata projection for storage artifact rows.
|
|
3
|
+
*
|
|
4
|
+
* Raw-content adapters keep provider-native metadata in their own
|
|
5
|
+
* nested internal shape. Storage artifacts split that into two
|
|
6
|
+
* public columns: discoverable identifiers and provider details.
|
|
7
|
+
* This module is the single translation point so document-backed
|
|
8
|
+
* artifacts and direct storage artifacts expose the same
|
|
9
|
+
* allowlisted shape, and is consumed by `redactArtifactPublic` to
|
|
10
|
+
* build the public `storage_artifacts` wire response.
|
|
11
|
+
*
|
|
12
|
+
* Phase 3/4 contract: CID-shaped identifiers MUST satisfy the
|
|
13
|
+
* shared structural shape gates in `./filecoin-cid-validation.ts`
|
|
14
|
+
* before they may surface in the public output. The projector
|
|
15
|
+
* silently drops anything that fails the shape — so legacy /
|
|
16
|
+
* adversarial / manually-planted JSONB values (the Phase 4
|
|
17
|
+
* rename's pre-migration `cid` slot, sentinel strings, garbage)
|
|
18
|
+
* cannot reach the wire even on rows the SDK parser never gated.
|
|
19
|
+
* Codec-aware validation (Synapse SDK `asPieceCID`,
|
|
20
|
+
* `multiformats/cid.CID.parse`) lives at the WRITE path on the
|
|
21
|
+
* provider boundary; this module stays eager-import safe.
|
|
22
|
+
*/
|
|
23
|
+
import { isIpfsCid, isPieceCid } from './filecoin-cid-validation.js';
|
|
24
|
+
export function projectArtifactProviderFields(provider, metadata) {
|
|
25
|
+
if (provider === 'filecoin')
|
|
26
|
+
return projectFilecoin(metadata);
|
|
27
|
+
return { identifiers: {}, providerDetails: null };
|
|
28
|
+
}
|
|
29
|
+
function projectFilecoin(metadata) {
|
|
30
|
+
const filecoin = nestedRecord(metadata, 'filecoin');
|
|
31
|
+
if (filecoin === null)
|
|
32
|
+
return { identifiers: {}, providerDetails: null };
|
|
33
|
+
const identifiers = {};
|
|
34
|
+
// Phase 4: internal sidecar key is `ipfs_cid` (the legacy
|
|
35
|
+
// ambiguous `cid` slot is silently dropped here AND rejected by
|
|
36
|
+
// the public Zod schema). `car_root_cid` shares the broader
|
|
37
|
+
// CIDv1 shape gate — CAR roots are CIDv1 strings.
|
|
38
|
+
const ipfsCid = filecoin['ipfs_cid'];
|
|
39
|
+
if (isIpfsCid(ipfsCid))
|
|
40
|
+
identifiers.ipfsCid = ipfsCid;
|
|
41
|
+
const pieceCid = filecoin['piece_cid'];
|
|
42
|
+
if (isPieceCid(pieceCid))
|
|
43
|
+
identifiers.pieceCid = pieceCid;
|
|
44
|
+
const carRootCid = filecoin['car_root_cid'];
|
|
45
|
+
if (isIpfsCid(carRootCid))
|
|
46
|
+
identifiers.carRootCid = carRootCid;
|
|
47
|
+
// `data_set_id` is intentionally exposed as a non-empty string
|
|
48
|
+
// — the artifact-identifier wire surfaces the per-row Synapse
|
|
49
|
+
// data-set scalar for operators that need to correlate with
|
|
50
|
+
// their own provider tooling. No CID shape applies.
|
|
51
|
+
const dataSetId = filecoin['data_set_id'];
|
|
52
|
+
if (typeof dataSetId === 'string' && dataSetId.length > 0) {
|
|
53
|
+
identifiers.dataSetId = dataSetId;
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
identifiers,
|
|
57
|
+
// No public providerDetails for filecoin until the provider
|
|
58
|
+
// has explicitly projected Synapse-shaped public fields. The
|
|
59
|
+
// public wire carries CIDs (plus `dataSetId`) only.
|
|
60
|
+
providerDetails: null,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function nestedRecord(source, key) {
|
|
64
|
+
const value = source[key];
|
|
65
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value))
|
|
66
|
+
return null;
|
|
67
|
+
return value;
|
|
68
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file `RawContentStore` adapter wrapping a `FilecoinProviderClient`.
|
|
3
|
+
*
|
|
4
|
+
* Two reach-paths to keep in mind:
|
|
5
|
+
*
|
|
6
|
+
* - Direct managed uploads (`POST /v1/storage/artifacts?mode=managed`)
|
|
7
|
+
* are rejected upstream by the
|
|
8
|
+
* `DIRECT_MANAGED_UNSUPPORTED_PROVIDERS` carve-out in
|
|
9
|
+
* `services/storage-service.ts`, so the route returns a typed
|
|
10
|
+
* 501 and no `storage_artifacts` row is ever created — this
|
|
11
|
+
* adapter is not invoked on that path.
|
|
12
|
+
* - Document-path uploads against `RAW_STORAGE_PROVIDER=filecoin`
|
|
13
|
+
* construct this adapter (via `storage/factory.ts`) and call
|
|
14
|
+
* `put`/`get`/`head`/`delete` here. The adapter delegates to
|
|
15
|
+
* the underlying `FilecoinProviderClient`.
|
|
16
|
+
*
|
|
17
|
+
* Status mapping — Filecoin is `retrievalConsistency: 'eventual'`,
|
|
18
|
+
* so `put` ALWAYS reports `'pending'` regardless of
|
|
19
|
+
* `UploadResult.complete`. The reconciler / `head` path is
|
|
20
|
+
* responsible for promoting `blob_pending → blob_available` after
|
|
21
|
+
* a real retrievability check.
|
|
22
|
+
*
|
|
23
|
+
* Capabilities advertised:
|
|
24
|
+
*
|
|
25
|
+
* - `addressing: 'content'` (PieceCID-addressed)
|
|
26
|
+
* - `retrievalConsistency: 'eventual'` (deal lifecycle is async)
|
|
27
|
+
* - `deleteSemantics: 'tombstone'` (provider tombstone only)
|
|
28
|
+
* - `supportsHead: true` (via context.pieceStatus)
|
|
29
|
+
* - `supportsGet: true` (via storage.download)
|
|
30
|
+
*/
|
|
31
|
+
import type { FilecoinProviderClient } from './provider-client.js';
|
|
32
|
+
import type { PutRawContentInput, RawContentDeleteResult, RawContentGetResult, RawContentHeadResult, RawContentHints, RawContentStore, RawContentStoreCapabilities, StoredRawContent } from '../../raw-content-store.js';
|
|
33
|
+
export declare class FilecoinRawContentStore implements RawContentStore {
|
|
34
|
+
private readonly client;
|
|
35
|
+
readonly provider = "filecoin";
|
|
36
|
+
readonly capabilities: RawContentStoreCapabilities;
|
|
37
|
+
constructor(client: FilecoinProviderClient);
|
|
38
|
+
put(input: PutRawContentInput): Promise<StoredRawContent>;
|
|
39
|
+
get(storageUri: string): Promise<RawContentGetResult>;
|
|
40
|
+
head(storageUri: string, hints?: RawContentHints): Promise<RawContentHeadResult>;
|
|
41
|
+
delete(storageUri: string, hints?: RawContentHints): Promise<RawContentDeleteResult>;
|
|
42
|
+
}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file `RawContentStore` adapter wrapping a `FilecoinProviderClient`.
|
|
3
|
+
*
|
|
4
|
+
* Two reach-paths to keep in mind:
|
|
5
|
+
*
|
|
6
|
+
* - Direct managed uploads (`POST /v1/storage/artifacts?mode=managed`)
|
|
7
|
+
* are rejected upstream by the
|
|
8
|
+
* `DIRECT_MANAGED_UNSUPPORTED_PROVIDERS` carve-out in
|
|
9
|
+
* `services/storage-service.ts`, so the route returns a typed
|
|
10
|
+
* 501 and no `storage_artifacts` row is ever created — this
|
|
11
|
+
* adapter is not invoked on that path.
|
|
12
|
+
* - Document-path uploads against `RAW_STORAGE_PROVIDER=filecoin`
|
|
13
|
+
* construct this adapter (via `storage/factory.ts`) and call
|
|
14
|
+
* `put`/`get`/`head`/`delete` here. The adapter delegates to
|
|
15
|
+
* the underlying `FilecoinProviderClient`.
|
|
16
|
+
*
|
|
17
|
+
* Status mapping — Filecoin is `retrievalConsistency: 'eventual'`,
|
|
18
|
+
* so `put` ALWAYS reports `'pending'` regardless of
|
|
19
|
+
* `UploadResult.complete`. The reconciler / `head` path is
|
|
20
|
+
* responsible for promoting `blob_pending → blob_available` after
|
|
21
|
+
* a real retrievability check.
|
|
22
|
+
*
|
|
23
|
+
* Capabilities advertised:
|
|
24
|
+
*
|
|
25
|
+
* - `addressing: 'content'` (PieceCID-addressed)
|
|
26
|
+
* - `retrievalConsistency: 'eventual'` (deal lifecycle is async)
|
|
27
|
+
* - `deleteSemantics: 'tombstone'` (provider tombstone only)
|
|
28
|
+
* - `supportsHead: true` (via context.pieceStatus)
|
|
29
|
+
* - `supportsGet: true` (via storage.download)
|
|
30
|
+
*/
|
|
31
|
+
import { createHash } from 'node:crypto';
|
|
32
|
+
import { FilecoinProviderError } from './errors.js';
|
|
33
|
+
import { readFilecoinDataSetIdHint, readFilecoinDeleteHints } from './hints.js';
|
|
34
|
+
import { requireIpfsCid } from './ipfs-cid.js';
|
|
35
|
+
import { requirePieceCid } from './piece-cid.js';
|
|
36
|
+
import { formatPieceUri, parsePieceUri } from './uri.js';
|
|
37
|
+
const FILECOIN_CAPABILITIES = {
|
|
38
|
+
addressing: 'content',
|
|
39
|
+
retrievalConsistency: 'eventual',
|
|
40
|
+
deleteSemantics: 'tombstone',
|
|
41
|
+
supportsHead: true,
|
|
42
|
+
supportsGet: true,
|
|
43
|
+
};
|
|
44
|
+
export class FilecoinRawContentStore {
|
|
45
|
+
client;
|
|
46
|
+
provider = 'filecoin';
|
|
47
|
+
capabilities = FILECOIN_CAPABILITIES;
|
|
48
|
+
constructor(client) {
|
|
49
|
+
this.client = client;
|
|
50
|
+
}
|
|
51
|
+
async put(input) {
|
|
52
|
+
const result = await this.client.put({
|
|
53
|
+
key: input.key,
|
|
54
|
+
body: input.body,
|
|
55
|
+
...(input.contentType ? { contentType: input.contentType } : {}),
|
|
56
|
+
});
|
|
57
|
+
// Thread the boundary's `driver` into the sidecar — never
|
|
58
|
+
// hardcode `'synapse'` here. Production: the live Synapse
|
|
59
|
+
// client → `'synapse'`. Tests / a future filecoin-pin client
|
|
60
|
+
// → that driver's literal. Hardcoding would lie for the
|
|
61
|
+
// second driver and undermine the driver-agnostic invariant.
|
|
62
|
+
return toStoredRawContent(input, result, this.client.driver);
|
|
63
|
+
}
|
|
64
|
+
async get(storageUri) {
|
|
65
|
+
const result = await this.client.get({ storageUri });
|
|
66
|
+
return {
|
|
67
|
+
body: result.body,
|
|
68
|
+
metadata: {
|
|
69
|
+
contentLength: result.body.length,
|
|
70
|
+
contentType: null,
|
|
71
|
+
contentHash: null,
|
|
72
|
+
providerMetadata: result.providerMetadata,
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
async head(storageUri, hints) {
|
|
77
|
+
const dataSetId = readFilecoinDataSetIdHint(hints);
|
|
78
|
+
const result = await this.client.head({
|
|
79
|
+
storageUri,
|
|
80
|
+
...(dataSetId !== null ? { dataSetId } : {}),
|
|
81
|
+
});
|
|
82
|
+
// Filecoin lifecycle gate: a Synapse piece is RETRIEVABLE only
|
|
83
|
+
// after PDP proof has landed. The reconciler treats any
|
|
84
|
+
// `exists=true` head as "promote blob_pending → blob_available",
|
|
85
|
+
// so we MUST NOT report exists=true on an unproven piece —
|
|
86
|
+
// otherwise the row would promote before the bytes are actually
|
|
87
|
+
// retrievable. An unproven-but-known piece is reported as
|
|
88
|
+
// `exists=false` (without a permanent-failure marker) so the
|
|
89
|
+
// reconciler keeps the row pending and retries on a later tick.
|
|
90
|
+
if (!result.exists || !result.proven) {
|
|
91
|
+
return { exists: false, metadata: null };
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
exists: true,
|
|
95
|
+
metadata: {
|
|
96
|
+
contentLength: 0,
|
|
97
|
+
contentType: null,
|
|
98
|
+
contentHash: null,
|
|
99
|
+
providerMetadata: result.providerMetadata,
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
async delete(storageUri, hints) {
|
|
104
|
+
// Extract BOTH the data-set-id (for context resolution) and
|
|
105
|
+
// the per-copy piece-id (for direct deletePiece-by-id) from
|
|
106
|
+
// the sidecar. The cleanup loop plumbs `raw_storage_metadata`
|
|
107
|
+
// through `ManagedBlobRef` so production cleanup carries the
|
|
108
|
+
// same hints the reconciler uses on `head`. CID-based delete
|
|
109
|
+
// remains the fallback when hints are missing or malformed —
|
|
110
|
+
// useful for legacy rows that pre-date the sidecar — but
|
|
111
|
+
// Synapse cannot resolve a freshly-uploaded piece by CID
|
|
112
|
+
// before PDP proof lands, so `pieceId` is required for the
|
|
113
|
+
// most common case (delete shortly after upload).
|
|
114
|
+
const { dataSetId, pieceId } = readFilecoinDeleteHints(hints);
|
|
115
|
+
const result = await this.client.delete({
|
|
116
|
+
storageUri,
|
|
117
|
+
...(dataSetId !== null ? { dataSetId } : {}),
|
|
118
|
+
...(pieceId !== null ? { pieceId } : {}),
|
|
119
|
+
});
|
|
120
|
+
// Phase 7 — pass `result.txHash` through as the internal-only
|
|
121
|
+
// billing/cost-impact metadata. `RawContentDeleteResult.txHash`
|
|
122
|
+
// is documented as INTERNAL: it MUST NOT cross any public
|
|
123
|
+
// route boundary, and `cleanupManagedBlobs`'s closed-key
|
|
124
|
+
// success DTO never includes it. The legitimate downstream
|
|
125
|
+
// consumer is the `filecoin.delete.tombstoned` observability
|
|
126
|
+
// emitter (operator-side telemetry only).
|
|
127
|
+
return {
|
|
128
|
+
deleted: result.deleted,
|
|
129
|
+
semantics: 'tombstoned',
|
|
130
|
+
...(result.txHash !== undefined ? { txHash: result.txHash } : {}),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Translate a Filecoin upload result to the generic
|
|
136
|
+
* `StoredRawContent` shape persisted by the upload service. The
|
|
137
|
+
* `content_hash` is the SHA-256 of the PLAINTEXT bytes the caller
|
|
138
|
+
* passed in (the codec/AES-GCM layer already wrapped them on the
|
|
139
|
+
* way down). Synapse reports the on-wire byte count in
|
|
140
|
+
* `result.sizeBytes`; we persist `input.body.length` so the row's
|
|
141
|
+
* `size_bytes` matches the plaintext contract the rest of the
|
|
142
|
+
* pipeline uses.
|
|
143
|
+
*
|
|
144
|
+
* Status mapping — Filecoin is `retrievalConsistency: 'eventual'`,
|
|
145
|
+
* so `put` ALWAYS reports `'pending'` regardless of
|
|
146
|
+
* `UploadResult.complete`. A Synapse-side `complete=true` means the
|
|
147
|
+
* SDK saw the requested copies stored on SPs; it does NOT prove the
|
|
148
|
+
* data set's proof has landed or that the bytes are retrievable
|
|
149
|
+
* via `download()`. The reconciler / `head` path is responsible for
|
|
150
|
+
* promoting `blob_pending → blob_available` after a real
|
|
151
|
+
* retrievability check. The original `complete` flag and copy
|
|
152
|
+
* states are preserved in the internal
|
|
153
|
+
* `raw_storage_metadata.filecoin` sidecar so the reconciler can
|
|
154
|
+
* make decisions without re-querying the provider.
|
|
155
|
+
*/
|
|
156
|
+
function toStoredRawContent(input, result, driver) {
|
|
157
|
+
// Phase 3 defense-in-depth: validate AND canonicalize before
|
|
158
|
+
// any identifier reaches `storage_artifacts.uri` or the
|
|
159
|
+
// `raw_storage_metadata.filecoin.piece_cid` sidecar. Both
|
|
160
|
+
// halves of `result` are parsed through the live Synapse SDK
|
|
161
|
+
// (`@filoz/synapse-core/piece.asPieceCID`) via
|
|
162
|
+
// `requirePieceCid`, which ALSO returns the SDK's canonical
|
|
163
|
+
// base32-lower CIDv1 multibase string. `asPieceCID` accepts
|
|
164
|
+
// any parser-valid multibase encoding of the same PieceCID
|
|
165
|
+
// (e.g. base58btc `z…`); the canonicalization step here
|
|
166
|
+
// collapses those to the canonical `bafk…` form before
|
|
167
|
+
// persistence so a future driver returning a non-canonical
|
|
168
|
+
// multibase variant cannot leave a non-canonical URI or
|
|
169
|
+
// sidecar value behind. The cross-field mismatch check then
|
|
170
|
+
// compares the canonical forms — catching the case where
|
|
171
|
+
// both halves parse but refer to different identifiers.
|
|
172
|
+
const canonicalPieceCid = requirePieceCid(result.pieceCid, 'upload result');
|
|
173
|
+
const canonicalFromUri = parsePieceUri(result.storageUri);
|
|
174
|
+
if (canonicalFromUri !== canonicalPieceCid) {
|
|
175
|
+
throw new FilecoinProviderError('identifier_mismatch', 'Provider client returned a storage URI whose PieceCID disagrees with the result.pieceCid field.');
|
|
176
|
+
}
|
|
177
|
+
// Phase 4: validate AND canonicalize the optional IPFS/CAR-root
|
|
178
|
+
// CID using a real `multiformats/cid` parse. The slot is opt-in
|
|
179
|
+
// (live Synapse leaves it `undefined`); when populated, the
|
|
180
|
+
// sidecar carries the canonical CIDv1 string. The canonical
|
|
181
|
+
// storage URI stays PieceCID-based — `ipfsCid` does not change
|
|
182
|
+
// row identity.
|
|
183
|
+
const canonicalIpfsCid = result.ipfsCid === undefined
|
|
184
|
+
? undefined
|
|
185
|
+
: requireIpfsCid(result.ipfsCid, 'upload result ipfsCid');
|
|
186
|
+
return {
|
|
187
|
+
storageUri: formatPieceUri(canonicalPieceCid),
|
|
188
|
+
storageProvider: 'filecoin',
|
|
189
|
+
contentHash: sha256Hex(input.body),
|
|
190
|
+
sizeBytes: input.body.length,
|
|
191
|
+
status: 'pending',
|
|
192
|
+
providerMetadata: toProviderMetadata(result, driver, canonicalPieceCid, canonicalIpfsCid),
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
function sha256Hex(buf) {
|
|
196
|
+
return createHash('sha256').update(buf).digest('hex');
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Build the internal-only `raw_storage_metadata.filecoin` sidecar
|
|
200
|
+
* the document-side pipeline writes. The PUBLIC projection runs
|
|
201
|
+
* later through `src/storage/filecoin-public-metadata.ts`, which
|
|
202
|
+
* flattens `copies[]` into `copy_count` / `provider_ids` /
|
|
203
|
+
* `copy_statuses` and drops everything else.
|
|
204
|
+
*
|
|
205
|
+
* Per-copy `status` is `'accepted'` on upload: the Synapse SDK's
|
|
206
|
+
* `UploadResult.copies[]` only proves the SP accepted the bytes
|
|
207
|
+
* (PDP proof has not landed yet, retrieval is unconfirmed). The
|
|
208
|
+
* reconciler / `head` path advances copies to `'available'` once
|
|
209
|
+
* `StorageContext.pieceStatus` reports proof + retrieval.
|
|
210
|
+
* `complete` carries the raw `UploadResult.complete` flag so the
|
|
211
|
+
* reconciler can distinguish "all copies stored" from "partial".
|
|
212
|
+
*/
|
|
213
|
+
function toProviderMetadata(result, driver, canonicalPieceCid, canonicalIpfsCid) {
|
|
214
|
+
return {
|
|
215
|
+
filecoin: {
|
|
216
|
+
driver,
|
|
217
|
+
// Persist the SDK's canonical multibase form (not
|
|
218
|
+
// `result.pieceCid`) so a non-canonical-but-parser-valid
|
|
219
|
+
// input from a misbehaving driver still lands on disk as
|
|
220
|
+
// the canonical `bafk…` string.
|
|
221
|
+
piece_cid: canonicalPieceCid,
|
|
222
|
+
// Phase 4: optional IPFS / CAR-root identity. Snake_case
|
|
223
|
+
// for the JSONB key; only present when the driver
|
|
224
|
+
// populated `result.ipfsCid`. Omitted entirely (vs. set to
|
|
225
|
+
// `null`) so closed-key assertions over the sidecar stay
|
|
226
|
+
// stable for the live Synapse driver, which never writes
|
|
227
|
+
// this slot today.
|
|
228
|
+
...(canonicalIpfsCid === undefined ? {} : { ipfs_cid: canonicalIpfsCid }),
|
|
229
|
+
data_set_id: result.copies[0]?.dataSetId,
|
|
230
|
+
copies: result.copies.map((copy) => ({
|
|
231
|
+
provider_id: copy.providerId,
|
|
232
|
+
data_set_id: copy.dataSetId,
|
|
233
|
+
// Omit `piece_id` entirely when the driver reported a
|
|
234
|
+
// sentinel/non-positive value. Writing `'0'` (or any
|
|
235
|
+
// non-positive decimal) would later trip the hint
|
|
236
|
+
// reader's positive-decimal-bigint validator and emit a
|
|
237
|
+
// spurious `filecoin.hint.malformed` diagnostic on every
|
|
238
|
+
// delete. Absent silently falls back to the CID-based
|
|
239
|
+
// delete lookup, which is the intended behaviour when a
|
|
240
|
+
// piece-id hint is unavailable.
|
|
241
|
+
...(copy.pieceId !== undefined ? { piece_id: copy.pieceId } : {}),
|
|
242
|
+
role: copy.role,
|
|
243
|
+
status: 'accepted',
|
|
244
|
+
})),
|
|
245
|
+
failed_attempts: result.failedAttempts.length,
|
|
246
|
+
requested_copies: result.requestedCopies,
|
|
247
|
+
complete: result.complete,
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Filecoin provider configuration.
|
|
3
|
+
*
|
|
4
|
+
* `parseFilecoinProviderConfig(env)` is the only env reader inside
|
|
5
|
+
* `src/storage/providers/filecoin/*`. Central `src/config.ts`
|
|
6
|
+
* collects `process.env` into a plain object and hands it to this
|
|
7
|
+
* function; the provider module never reaches for `process.env`
|
|
8
|
+
* itself, matching the workspace rule against direct env access in
|
|
9
|
+
* business code.
|
|
10
|
+
*
|
|
11
|
+
* The cross-provider guard — rejecting any `RAW_STORAGE_FILECOIN_*`
|
|
12
|
+
* environment variable when `RAW_STORAGE_PROVIDER` is non-filecoin —
|
|
13
|
+
* lives in central `src/config.ts`. Reason:
|
|
14
|
+
* `parseFilecoinProviderConfig` is only invoked when the provider IS
|
|
15
|
+
* filecoin, so the cross-provider rejection has to fire at the
|
|
16
|
+
* central seam to catch the misconfiguration. This module exports
|
|
17
|
+
* `collectFilecoinProviderEnvKeys` so the central code can compute
|
|
18
|
+
* which RAW_STORAGE_FILECOIN_* keys an operator set without
|
|
19
|
+
* embedding the prefix string in two places.
|
|
20
|
+
*
|
|
21
|
+
* v1 credential model: operator-owned deployment credentials.
|
|
22
|
+
* Storage-profile / per-org / per-user credential ownership is
|
|
23
|
+
* deferred to a future release. `RAW_STORAGE_FILECOIN_PRIVATE_KEY` is
|
|
24
|
+
* validated syntactically (`^0x[a-fA-F0-9]{64}$`) at startup. The
|
|
25
|
+
* value is NEVER logged on rejection; no account derivation, no
|
|
26
|
+
* chain, balance, and provider checks are handled by the readiness
|
|
27
|
+
* probes in `./readiness.ts`.
|
|
28
|
+
*/
|
|
29
|
+
export type FilecoinNetwork = 'calibration' | 'mainnet';
|
|
30
|
+
export type FilecoinDriver = 'synapse' | 'filecoin_pin';
|
|
31
|
+
/**
|
|
32
|
+
* Parsed deployment-credential block. Constructed by
|
|
33
|
+
* `parseFilecoinProviderConfig` at startup; held on the
|
|
34
|
+
* runtime config and consumed by the Synapse client factory.
|
|
35
|
+
*/
|
|
36
|
+
export interface FilecoinProviderConfig {
|
|
37
|
+
readonly driver: FilecoinDriver;
|
|
38
|
+
readonly network: FilecoinNetwork;
|
|
39
|
+
/** 0x-prefixed 32-byte hex string. Never logged on rejection. */
|
|
40
|
+
readonly privateKey: string;
|
|
41
|
+
readonly source: string;
|
|
42
|
+
readonly withCdn: boolean;
|
|
43
|
+
readonly providerIds: ReadonlyArray<string>;
|
|
44
|
+
readonly copies: number | null;
|
|
45
|
+
readonly dataSetMetadata: Readonly<Record<string, string | number | boolean>>;
|
|
46
|
+
readonly maxUploadBytes: number | null;
|
|
47
|
+
readonly minUploadBytes: number | null;
|
|
48
|
+
readonly uploadTimeoutMs: number | null;
|
|
49
|
+
readonly retrievalTimeoutMs: number | null;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Syntactic-only validator for `RAW_STORAGE_FILECOIN_PRIVATE_KEY`.
|
|
53
|
+
* Accepts a 32-byte hex string with `0x` prefix (case-insensitive).
|
|
54
|
+
* Throws on any other shape WITHOUT echoing the value — the message
|
|
55
|
+
* names only the env var and the expected pattern.
|
|
56
|
+
*/
|
|
57
|
+
export declare function parseFilecoinPrivateKey(value: string): string;
|
|
58
|
+
/**
|
|
59
|
+
* Return the names of every `RAW_STORAGE_FILECOIN_*` key the
|
|
60
|
+
* operator set to a non-empty value. Used by the central
|
|
61
|
+
* cross-provider guard in `src/config.ts` so non-filecoin
|
|
62
|
+
* deployments cannot accidentally carry Filecoin config.
|
|
63
|
+
*/
|
|
64
|
+
export declare function collectFilecoinProviderEnvKeys(env: Record<string, string | undefined>): ReadonlyArray<string>;
|
|
65
|
+
/**
|
|
66
|
+
* Parse + validate the Synapse-shaped Filecoin provider env block.
|
|
67
|
+
* Only invoked when `RAW_STORAGE_PROVIDER=filecoin`; the cross-
|
|
68
|
+
* provider guard runs in `src/config.ts` before this function.
|
|
69
|
+
*/
|
|
70
|
+
export declare function parseFilecoinProviderConfig(env: Record<string, string | undefined>): FilecoinProviderConfig;
|