@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,343 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Synapse-driver implementation of `FilecoinProviderClient`.
|
|
3
|
+
*
|
|
4
|
+
* Wraps a constructed `Synapse` instance and translates the
|
|
5
|
+
* AtomicMemory-shaped boundary onto the SDK surface:
|
|
6
|
+
*
|
|
7
|
+
* - `put` → `synapse.storage.upload`
|
|
8
|
+
* - `get` → `synapse.storage.download`
|
|
9
|
+
* - `head` → `findDataSets` + `createContext` + `pieceStatus`
|
|
10
|
+
* - `delete` → `findDataSets` + `createContext` + `deletePiece`
|
|
11
|
+
* - `verify` → `get` + plaintext SHA-256 comparison
|
|
12
|
+
*
|
|
13
|
+
* Vendor types (`UploadResult`, `PieceCID`, `Hash`, ...) stay inside
|
|
14
|
+
* this file; the boundary surface (`FilecoinPutResult`, etc.) is
|
|
15
|
+
* the only shape that escapes the provider package.
|
|
16
|
+
*
|
|
17
|
+
* Sanitization: every Synapse error caught here is replaced with
|
|
18
|
+
* `FilecoinProviderError` + a stable `errorCode`. Raw vendor
|
|
19
|
+
* messages, wallet addresses, payment-rail state, and signed
|
|
20
|
+
* requests do not survive the boundary.
|
|
21
|
+
*/
|
|
22
|
+
import { createHash } from 'node:crypto';
|
|
23
|
+
import { FilecoinProviderError } from './errors.js';
|
|
24
|
+
import { wrapSynapseDeleteError, wrapSynapseDownloadError, wrapSynapseHeadError, wrapSynapseStorageInfoError, wrapSynapseUploadError, } from './synapse-error-mapping.js';
|
|
25
|
+
import { synapseCheckReadiness } from './synapse-readiness.js';
|
|
26
|
+
import { formatPieceUri, parsePieceUri } from './uri.js';
|
|
27
|
+
export class SynapseFilecoinProviderClient {
|
|
28
|
+
synapse;
|
|
29
|
+
options;
|
|
30
|
+
provider = 'filecoin';
|
|
31
|
+
driver = 'synapse';
|
|
32
|
+
constructor(synapse, options = {}) {
|
|
33
|
+
this.synapse = synapse;
|
|
34
|
+
this.options = options;
|
|
35
|
+
}
|
|
36
|
+
async put(input) {
|
|
37
|
+
const effectiveTimeoutMs = input.timeoutMs ?? this.options.uploadTimeoutMs ?? null;
|
|
38
|
+
const controller = effectiveTimeoutMs ? new AbortController() : undefined;
|
|
39
|
+
const timer = controller && effectiveTimeoutMs
|
|
40
|
+
? setTimeout(() => controller.abort(), effectiveTimeoutMs)
|
|
41
|
+
: undefined;
|
|
42
|
+
try {
|
|
43
|
+
const result = await this.callSynapseUpload(input, controller?.signal);
|
|
44
|
+
return mapUploadResult(result);
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
if (timer)
|
|
48
|
+
clearTimeout(timer);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async callSynapseUpload(input, signal) {
|
|
52
|
+
const options = {
|
|
53
|
+
...(this.options.copies !== null && this.options.copies !== undefined
|
|
54
|
+
? { copies: this.options.copies }
|
|
55
|
+
: {}),
|
|
56
|
+
...(this.options.providerIds && this.options.providerIds.length > 0
|
|
57
|
+
? { providerIds: this.options.providerIds.map((id) => BigInt(id)) }
|
|
58
|
+
: {}),
|
|
59
|
+
...(this.options.dataSetMetadata
|
|
60
|
+
? { metadata: this.options.dataSetMetadata }
|
|
61
|
+
: {}),
|
|
62
|
+
...(input.pieceMetadata ? { pieceMetadata: input.pieceMetadata } : {}),
|
|
63
|
+
...(signal ? { signal } : {}),
|
|
64
|
+
};
|
|
65
|
+
try {
|
|
66
|
+
// `Buffer` IS a `Uint8Array` at runtime; cast for the SDK's
|
|
67
|
+
// narrower parameter type.
|
|
68
|
+
return await this.synapse.storage.upload(input.body, options);
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
throw wrapSynapseUploadError(err, signal);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async get(input) {
|
|
75
|
+
const pieceCid = parsePieceUri(input.storageUri);
|
|
76
|
+
const effectiveTimeoutMs = input.timeoutMs ?? this.options.retrievalTimeoutMs ?? null;
|
|
77
|
+
const controller = effectiveTimeoutMs ? new AbortController() : undefined;
|
|
78
|
+
const timer = controller && effectiveTimeoutMs
|
|
79
|
+
? setTimeout(() => controller.abort(), effectiveTimeoutMs)
|
|
80
|
+
: undefined;
|
|
81
|
+
try {
|
|
82
|
+
const bytes = await this.callSynapseDownload(pieceCid, controller?.signal);
|
|
83
|
+
return {
|
|
84
|
+
body: Buffer.from(bytes),
|
|
85
|
+
providerMetadata: { piece_cid: pieceCid },
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
if (timer)
|
|
90
|
+
clearTimeout(timer);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async callSynapseDownload(pieceCid, signal) {
|
|
94
|
+
const opts = {
|
|
95
|
+
pieceCid,
|
|
96
|
+
...(this.options.withCdn !== undefined ? { withCDN: this.options.withCdn } : {}),
|
|
97
|
+
...(signal ? { signal } : {}),
|
|
98
|
+
};
|
|
99
|
+
try {
|
|
100
|
+
return await this.synapse.storage.download(opts);
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
throw wrapSynapseDownloadError(err, signal);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
async head(input) {
|
|
107
|
+
const pieceCid = parsePieceUri(input.storageUri);
|
|
108
|
+
try {
|
|
109
|
+
const status = await this.locatePieceStatus(pieceCid, input.dataSetId);
|
|
110
|
+
if (status === null) {
|
|
111
|
+
return {
|
|
112
|
+
exists: false,
|
|
113
|
+
proven: false,
|
|
114
|
+
providerMetadata: { piece_cid: pieceCid },
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
exists: true,
|
|
119
|
+
proven: status.dataSetLastProven !== null,
|
|
120
|
+
providerMetadata: buildHeadMetadata(pieceCid, status),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
throw wrapSynapseHeadError(err);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
async delete(input) {
|
|
128
|
+
const pieceCid = parsePieceUri(input.storageUri);
|
|
129
|
+
try {
|
|
130
|
+
const context = await this.locateContext(pieceCid, input.dataSetId);
|
|
131
|
+
if (context === null) {
|
|
132
|
+
// Piece not found in any data set the signer owns — treat
|
|
133
|
+
// as already-removed under tombstone semantics. The
|
|
134
|
+
// reconciler/cleanup path is idempotent on this.
|
|
135
|
+
return { deleted: false, semantics: 'tombstone' };
|
|
136
|
+
}
|
|
137
|
+
// Prefer the explicit per-copy `piece_id` from the upload
|
|
138
|
+
// sidecar when the caller supplied it. Synapse's
|
|
139
|
+
// `deletePiece({ piece: pieceCid })` resolves the piece via
|
|
140
|
+
// PDP active-piece lookup, which cannot complete for
|
|
141
|
+
// freshly-uploaded calibration pieces before proof lands.
|
|
142
|
+
// `BigInt(pieceId)` short-circuits the lookup and deletes
|
|
143
|
+
// by id directly. CID fallback stays for callers (and
|
|
144
|
+
// legacy rows) that don't carry the sidecar piece_id yet.
|
|
145
|
+
const pieceForDelete = input.pieceId !== undefined
|
|
146
|
+
? toPieceIdBigIntOrThrow(input.pieceId)
|
|
147
|
+
: pieceCid;
|
|
148
|
+
const txHash = await context.deletePiece({ piece: pieceForDelete });
|
|
149
|
+
return { deleted: true, semantics: 'tombstone', txHash };
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
throw wrapSynapseDeleteError(err);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
async checkReadiness(network) {
|
|
156
|
+
return synapseCheckReadiness(this.synapse, this.readinessOptions(), network);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Non-mutating SDK read of the service-advertised minimum
|
|
160
|
+
* upload size in bytes. Exposed for preflight/sizing callers
|
|
161
|
+
* (e.g. the live calibration smoke test) that need to size
|
|
162
|
+
* payloads against the provider's real contract rather than a
|
|
163
|
+
* baked-in constant. Errors map onto
|
|
164
|
+
* `filecoin_storage_info_failed`; vendor strings stay inside.
|
|
165
|
+
*/
|
|
166
|
+
async getServiceMinUploadBytes() {
|
|
167
|
+
try {
|
|
168
|
+
const info = await this.synapse.storage.getStorageInfo();
|
|
169
|
+
return info.serviceParameters.minUploadSize;
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
throw wrapSynapseStorageInfoError(err);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
readinessOptions() {
|
|
176
|
+
return {
|
|
177
|
+
providerIds: this.options.providerIds ?? [],
|
|
178
|
+
minUploadBytes: this.options.minUploadBytes ?? null,
|
|
179
|
+
maxUploadBytes: this.options.maxUploadBytes ?? null,
|
|
180
|
+
...(this.options.withCdn !== undefined ? { withCdn: this.options.withCdn } : {}),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
async verify(input) {
|
|
184
|
+
let body;
|
|
185
|
+
try {
|
|
186
|
+
const got = await this.get({
|
|
187
|
+
storageUri: input.storageUri,
|
|
188
|
+
...(input.timeoutMs !== undefined ? { timeoutMs: input.timeoutMs } : {}),
|
|
189
|
+
});
|
|
190
|
+
body = got.body;
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
if (err instanceof FilecoinProviderError) {
|
|
194
|
+
return { verified: false, reason: err.errorCode };
|
|
195
|
+
}
|
|
196
|
+
return { verified: false, reason: 'filecoin_verify_failed' };
|
|
197
|
+
}
|
|
198
|
+
const actualHash = createHash('sha256').update(body).digest('hex');
|
|
199
|
+
if (actualHash === input.expectedContentHash) {
|
|
200
|
+
return { verified: true };
|
|
201
|
+
}
|
|
202
|
+
return { verified: false, reason: 'content_hash_mismatch' };
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Resolve the StorageContext that holds `pieceCid`. When the
|
|
206
|
+
* caller supplied `dataSetIdHint`, build a context for that
|
|
207
|
+
* specific data set; otherwise iterate the signer's data sets via
|
|
208
|
+
* `findDataSets` and probe each with `pieceStatus`. Returns the
|
|
209
|
+
* first context whose `pieceStatus` is non-null.
|
|
210
|
+
*/
|
|
211
|
+
async locateContext(pieceCid, dataSetIdHint) {
|
|
212
|
+
if (dataSetIdHint !== undefined) {
|
|
213
|
+
const dataSetId = toBigIntOrThrow(dataSetIdHint, 'filecoin_invalid_data_set_id');
|
|
214
|
+
const context = await this.synapse.storage.createContext({ dataSetId });
|
|
215
|
+
const status = await context.pieceStatus({ pieceCid });
|
|
216
|
+
return status === null ? null : context;
|
|
217
|
+
}
|
|
218
|
+
const dataSets = await this.synapse.storage.findDataSets();
|
|
219
|
+
for (const info of dataSets) {
|
|
220
|
+
if (info.isLive === false)
|
|
221
|
+
continue;
|
|
222
|
+
const context = await this.synapse.storage.createContext({ dataSetId: info.dataSetId });
|
|
223
|
+
const status = await context.pieceStatus({ pieceCid });
|
|
224
|
+
if (status !== null)
|
|
225
|
+
return context;
|
|
226
|
+
}
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Variant of `locateContext` that returns the `PieceStatus`
|
|
231
|
+
* directly. Used by `head` so the caller doesn't have to issue a
|
|
232
|
+
* second `pieceStatus` call to read the status it already
|
|
233
|
+
* located.
|
|
234
|
+
*/
|
|
235
|
+
async locatePieceStatus(pieceCid, dataSetIdHint) {
|
|
236
|
+
if (dataSetIdHint !== undefined) {
|
|
237
|
+
const dataSetId = toBigIntOrThrow(dataSetIdHint, 'filecoin_invalid_data_set_id');
|
|
238
|
+
const context = await this.synapse.storage.createContext({ dataSetId });
|
|
239
|
+
return context.pieceStatus({ pieceCid });
|
|
240
|
+
}
|
|
241
|
+
const dataSets = await this.synapse.storage.findDataSets();
|
|
242
|
+
for (const info of dataSets) {
|
|
243
|
+
if (info.isLive === false)
|
|
244
|
+
continue;
|
|
245
|
+
const context = await this.synapse.storage.createContext({ dataSetId: info.dataSetId });
|
|
246
|
+
const status = await context.pieceStatus({ pieceCid });
|
|
247
|
+
if (status !== null)
|
|
248
|
+
return status;
|
|
249
|
+
}
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Project the Synapse `UploadResult` onto the AtomicMemory
|
|
255
|
+
* `FilecoinPutResult` boundary. The transformation is total —
|
|
256
|
+
* every input field maps to a documented output field; vendor
|
|
257
|
+
* types (`PieceCID`, `bigint`) are stringified at the boundary so
|
|
258
|
+
* the result is JSON-safe.
|
|
259
|
+
*/
|
|
260
|
+
function mapUploadResult(result) {
|
|
261
|
+
const pieceCid = stringifyPieceCid(result.pieceCid);
|
|
262
|
+
return {
|
|
263
|
+
pieceCid,
|
|
264
|
+
storageUri: formatPieceUri(pieceCid),
|
|
265
|
+
sizeBytes: result.size,
|
|
266
|
+
copies: result.copies.map(toCopySnapshot),
|
|
267
|
+
failedAttempts: result.failedAttempts.map(toFailedAttempt),
|
|
268
|
+
complete: result.complete,
|
|
269
|
+
requestedCopies: result.requestedCopies,
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
function stringifyPieceCid(pieceCid) {
|
|
273
|
+
// `PieceCID` is a `Link` from `multiformats`; its `.toString()`
|
|
274
|
+
// emits the canonical base32 representation. Defensive in case a
|
|
275
|
+
// future SDK release introduces a different runtime shape.
|
|
276
|
+
if (typeof pieceCid === 'string')
|
|
277
|
+
return pieceCid;
|
|
278
|
+
if (pieceCid && typeof pieceCid.toString === 'function') {
|
|
279
|
+
return pieceCid.toString();
|
|
280
|
+
}
|
|
281
|
+
throw new FilecoinProviderError('filecoin_invalid_piece_cid', 'Synapse upload returned an unserializable PieceCID.');
|
|
282
|
+
}
|
|
283
|
+
function toCopySnapshot(copy) {
|
|
284
|
+
return {
|
|
285
|
+
providerId: copy.providerId.toString(),
|
|
286
|
+
dataSetId: copy.dataSetId.toString(),
|
|
287
|
+
pieceId: copy.pieceId.toString(),
|
|
288
|
+
role: copy.role,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
function toFailedAttempt(attempt) {
|
|
292
|
+
return {
|
|
293
|
+
providerId: attempt.providerId.toString(),
|
|
294
|
+
role: attempt.role,
|
|
295
|
+
errorCode: 'filecoin_copy_failed',
|
|
296
|
+
explicit: attempt.explicit,
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Build the head-result metadata returned to the adapter. Synapse's
|
|
301
|
+
* `PieceStatus.retrievalUrl` is intentionally NOT included: it is
|
|
302
|
+
* an arbitrary provider URL whose public exposure / persistence
|
|
303
|
+
* would violate the plan's CDN/SSRF rule (no arbitrary provider
|
|
304
|
+
* URLs on public or persisted paths). The bounded fields below are
|
|
305
|
+
* all derived state (`piece_cid`, proof timestamps, challenge-
|
|
306
|
+
* window flags) that the reconciler can act on without ever
|
|
307
|
+
* needing the URL.
|
|
308
|
+
*/
|
|
309
|
+
function buildHeadMetadata(pieceCid, status) {
|
|
310
|
+
const meta = { piece_cid: pieceCid };
|
|
311
|
+
if (status.dataSetLastProven !== null && status.dataSetLastProven !== undefined) {
|
|
312
|
+
meta['data_set_last_proven_at'] = status.dataSetLastProven.toISOString();
|
|
313
|
+
}
|
|
314
|
+
if (status.inChallengeWindow !== undefined) {
|
|
315
|
+
meta['in_challenge_window'] = status.inChallengeWindow;
|
|
316
|
+
}
|
|
317
|
+
if (status.isProofOverdue !== undefined) {
|
|
318
|
+
meta['proof_overdue'] = status.isProofOverdue;
|
|
319
|
+
}
|
|
320
|
+
return meta;
|
|
321
|
+
}
|
|
322
|
+
function toBigIntOrThrow(value, errorCode) {
|
|
323
|
+
try {
|
|
324
|
+
return BigInt(value);
|
|
325
|
+
}
|
|
326
|
+
catch {
|
|
327
|
+
throw new FilecoinProviderError(errorCode, `Filecoin id '${value}' is not a valid bigint.`);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Strict positive-decimal-bigint parser for the `piece_id` field
|
|
332
|
+
* accepted by `delete`. The hint reader at the adapter layer
|
|
333
|
+
* already filters malformed values, but defense-in-depth: a
|
|
334
|
+
* caller passing the value directly (bypassing hints) still gets
|
|
335
|
+
* a sanitized rejection. The error message is fixed — the
|
|
336
|
+
* rejected value NEVER leaks across the boundary.
|
|
337
|
+
*/
|
|
338
|
+
function toPieceIdBigIntOrThrow(value) {
|
|
339
|
+
if (!/^[1-9][0-9]*$/.test(value)) {
|
|
340
|
+
throw new FilecoinProviderError('filecoin_invalid_piece_id', 'FilecoinDeleteInput.pieceId must be a positive decimal bigint string.');
|
|
341
|
+
}
|
|
342
|
+
return BigInt(value);
|
|
343
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Construct a `Synapse` instance from a parsed
|
|
3
|
+
* `FilecoinProviderConfig`. Owns the viem-account + chain wiring
|
|
4
|
+
* so the rest of the provider module can stay vendor-agnostic.
|
|
5
|
+
*
|
|
6
|
+
* Boundary rule: this is the ONE place that imports
|
|
7
|
+
* `@filoz/synapse-sdk` / `@filoz/synapse-core/chains` / `viem`.
|
|
8
|
+
* Other provider files depend on the constructed `Synapse`
|
|
9
|
+
* instance via `synapse-client.ts`, not on these packages.
|
|
10
|
+
*
|
|
11
|
+
* Construction is synchronous — `Synapse.create` does not perform
|
|
12
|
+
* network I/O until the first `storage.upload` / `storage.download`
|
|
13
|
+
* / readiness call. Tests inject a fake `Synapse`-shaped object
|
|
14
|
+
* directly into `SynapseFilecoinProviderClient`; the production
|
|
15
|
+
* factory path runs through this module.
|
|
16
|
+
*/
|
|
17
|
+
import { Synapse } from '@filoz/synapse-sdk';
|
|
18
|
+
import type { FilecoinProviderConfig } from './config.js';
|
|
19
|
+
/**
|
|
20
|
+
* Build a `Synapse` instance from validated provider config.
|
|
21
|
+
* Wraps account / chain construction in `FilecoinProviderError`
|
|
22
|
+
* so the boundary stays clean even when viem rejects the key
|
|
23
|
+
* (which `parseFilecoinPrivateKey` already syntactically blocked,
|
|
24
|
+
* but defense-in-depth costs nothing).
|
|
25
|
+
*/
|
|
26
|
+
export declare function buildSynapse(config: FilecoinProviderConfig): Synapse;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Construct a `Synapse` instance from a parsed
|
|
3
|
+
* `FilecoinProviderConfig`. Owns the viem-account + chain wiring
|
|
4
|
+
* so the rest of the provider module can stay vendor-agnostic.
|
|
5
|
+
*
|
|
6
|
+
* Boundary rule: this is the ONE place that imports
|
|
7
|
+
* `@filoz/synapse-sdk` / `@filoz/synapse-core/chains` / `viem`.
|
|
8
|
+
* Other provider files depend on the constructed `Synapse`
|
|
9
|
+
* instance via `synapse-client.ts`, not on these packages.
|
|
10
|
+
*
|
|
11
|
+
* Construction is synchronous — `Synapse.create` does not perform
|
|
12
|
+
* network I/O until the first `storage.upload` / `storage.download`
|
|
13
|
+
* / readiness call. Tests inject a fake `Synapse`-shaped object
|
|
14
|
+
* directly into `SynapseFilecoinProviderClient`; the production
|
|
15
|
+
* factory path runs through this module.
|
|
16
|
+
*/
|
|
17
|
+
import { Synapse, calibration, mainnet } from '@filoz/synapse-sdk';
|
|
18
|
+
import { privateKeyToAccount } from 'viem/accounts';
|
|
19
|
+
import { FilecoinProviderError } from './errors.js';
|
|
20
|
+
/**
|
|
21
|
+
* Build a `Synapse` instance from validated provider config.
|
|
22
|
+
* Wraps account / chain construction in `FilecoinProviderError`
|
|
23
|
+
* so the boundary stays clean even when viem rejects the key
|
|
24
|
+
* (which `parseFilecoinPrivateKey` already syntactically blocked,
|
|
25
|
+
* but defense-in-depth costs nothing).
|
|
26
|
+
*/
|
|
27
|
+
export function buildSynapse(config) {
|
|
28
|
+
const account = toAccount(config.privateKey);
|
|
29
|
+
const chain = config.network === 'mainnet' ? mainnet : calibration;
|
|
30
|
+
return Synapse.create({
|
|
31
|
+
account,
|
|
32
|
+
chain,
|
|
33
|
+
source: config.source,
|
|
34
|
+
withCDN: config.withCdn,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function toAccount(privateKeyHex) {
|
|
38
|
+
try {
|
|
39
|
+
return privateKeyToAccount(privateKeyHex);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// `parseFilecoinPrivateKey` already enforces `^0x[a-fA-F0-9]{64}$`
|
|
43
|
+
// at config-load time. If viem still rejects, surface as a
|
|
44
|
+
// sanitized provider error — NEVER include the key value.
|
|
45
|
+
throw new FilecoinProviderError('filecoin_invalid_private_key', 'RAW_STORAGE_FILECOIN_PRIVATE_KEY failed account derivation.');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Vendor → boundary error mapping for `SynapseFilecoinProviderClient`.
|
|
3
|
+
*
|
|
4
|
+
* Each helper replaces a raw `@filoz/synapse-sdk` error with a
|
|
5
|
+
* sanitized `FilecoinProviderError` carrying a closed-set
|
|
6
|
+
* `errorCode`. The vendor `message` string NEVER reaches the
|
|
7
|
+
* boundary — it could embed wallet addresses, balances, signed
|
|
8
|
+
* requests, RPC URLs, or other operator-internal data that the
|
|
9
|
+
* provider package promises not to leak. The replacement message
|
|
10
|
+
* is a fixed, hand-written sentence whose ONLY variability is the
|
|
11
|
+
* stable `errorCode`.
|
|
12
|
+
*
|
|
13
|
+
* Lives in its own module so `synapse-client.ts` stays under the
|
|
14
|
+
* workspace 400-LOC cap. The boundary surface here is consumed
|
|
15
|
+
* only by `synapse-client.ts`; nothing else in the provider
|
|
16
|
+
* package depends on these helpers.
|
|
17
|
+
*/
|
|
18
|
+
import { FilecoinProviderError } from './errors.js';
|
|
19
|
+
export declare function wrapSynapseUploadError(err: unknown, signal: AbortSignal | undefined): FilecoinProviderError;
|
|
20
|
+
export declare function wrapSynapseDownloadError(err: unknown, signal: AbortSignal | undefined): FilecoinProviderError;
|
|
21
|
+
export declare function wrapSynapseHeadError(err: unknown): FilecoinProviderError;
|
|
22
|
+
export declare function wrapSynapseDeleteError(err: unknown): FilecoinProviderError;
|
|
23
|
+
export declare function wrapSynapseStorageInfoError(err: unknown): FilecoinProviderError;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Vendor → boundary error mapping for `SynapseFilecoinProviderClient`.
|
|
3
|
+
*
|
|
4
|
+
* Each helper replaces a raw `@filoz/synapse-sdk` error with a
|
|
5
|
+
* sanitized `FilecoinProviderError` carrying a closed-set
|
|
6
|
+
* `errorCode`. The vendor `message` string NEVER reaches the
|
|
7
|
+
* boundary — it could embed wallet addresses, balances, signed
|
|
8
|
+
* requests, RPC URLs, or other operator-internal data that the
|
|
9
|
+
* provider package promises not to leak. The replacement message
|
|
10
|
+
* is a fixed, hand-written sentence whose ONLY variability is the
|
|
11
|
+
* stable `errorCode`.
|
|
12
|
+
*
|
|
13
|
+
* Lives in its own module so `synapse-client.ts` stays under the
|
|
14
|
+
* workspace 400-LOC cap. The boundary surface here is consumed
|
|
15
|
+
* only by `synapse-client.ts`; nothing else in the provider
|
|
16
|
+
* package depends on these helpers.
|
|
17
|
+
*/
|
|
18
|
+
import { FilecoinProviderError } from './errors.js';
|
|
19
|
+
export function wrapSynapseUploadError(err, signal) {
|
|
20
|
+
if (signal?.aborted) {
|
|
21
|
+
return new FilecoinProviderError('filecoin_upload_timeout', 'Synapse upload aborted by RAW_STORAGE_FILECOIN_UPLOAD_TIMEOUT_MS.');
|
|
22
|
+
}
|
|
23
|
+
if (err instanceof FilecoinProviderError)
|
|
24
|
+
return err;
|
|
25
|
+
return new FilecoinProviderError('filecoin_upload_failed', 'Synapse upload failed; vendor error suppressed at the provider boundary.');
|
|
26
|
+
}
|
|
27
|
+
export function wrapSynapseDownloadError(err, signal) {
|
|
28
|
+
if (signal?.aborted) {
|
|
29
|
+
return new FilecoinProviderError('filecoin_download_timeout', 'Synapse download aborted by RAW_STORAGE_FILECOIN_RETRIEVAL_TIMEOUT_MS.');
|
|
30
|
+
}
|
|
31
|
+
if (err instanceof FilecoinProviderError)
|
|
32
|
+
return err;
|
|
33
|
+
return new FilecoinProviderError('filecoin_download_failed', 'Synapse download failed; vendor error suppressed at the provider boundary.');
|
|
34
|
+
}
|
|
35
|
+
export function wrapSynapseHeadError(err) {
|
|
36
|
+
if (err instanceof FilecoinProviderError)
|
|
37
|
+
return err;
|
|
38
|
+
return new FilecoinProviderError('filecoin_head_failed', 'Synapse pieceStatus failed; vendor error suppressed at the provider boundary.');
|
|
39
|
+
}
|
|
40
|
+
export function wrapSynapseDeleteError(err) {
|
|
41
|
+
if (err instanceof FilecoinProviderError)
|
|
42
|
+
return err;
|
|
43
|
+
return new FilecoinProviderError('filecoin_delete_failed', 'Synapse deletePiece failed; vendor error suppressed at the provider boundary.');
|
|
44
|
+
}
|
|
45
|
+
export function wrapSynapseStorageInfoError(err) {
|
|
46
|
+
if (err instanceof FilecoinProviderError)
|
|
47
|
+
return err;
|
|
48
|
+
return new FilecoinProviderError('filecoin_storage_info_failed', 'Synapse getStorageInfo failed; vendor error suppressed at the provider boundary.');
|
|
49
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Real Synapse-backed readiness probes.
|
|
3
|
+
*
|
|
4
|
+
* Lives in its own module to keep `synapse-client.ts` under the
|
|
5
|
+
* workspace 400-LOC cap. Exports `synapseCheckReadiness(synapse,
|
|
6
|
+
* options, network)` which runs the non-mutating probes
|
|
7
|
+
* documented in `FILECOIN_READINESS_REQUIRED_CHECKS` and returns
|
|
8
|
+
* the closed-shape check list `FilecoinProviderClient.checkReadiness`
|
|
9
|
+
* promises.
|
|
10
|
+
*
|
|
11
|
+
* All probes are non-mutating SDK reads:
|
|
12
|
+
* - `storage.getStorageInfo()` — pricing / providers / allowances / service bounds
|
|
13
|
+
* - `storage.getUploadCosts()` — canonical "ready to upload at this size" probe
|
|
14
|
+
* - `storage.findDataSets()` — owned data-set inventory (no creation)
|
|
15
|
+
* - `client.getChainId()` — connected-chain id
|
|
16
|
+
*
|
|
17
|
+
* Sanitization rule: NO call inside this module ever lets a wallet
|
|
18
|
+
* address, balance numeric, allowance numeric, provider auth payload,
|
|
19
|
+
* or raw vendor error message escape. Every check carries a stable
|
|
20
|
+
* `errorCode` from the closed set documented inline below.
|
|
21
|
+
*/
|
|
22
|
+
import type { FilecoinReadinessCheck, FilecoinReadinessNetwork } from './provider-client.js';
|
|
23
|
+
import type { SynapseLike } from './synapse-client.js';
|
|
24
|
+
export interface ReadinessProbeOptions {
|
|
25
|
+
readonly providerIds: ReadonlyArray<string>;
|
|
26
|
+
readonly minUploadBytes: number | null;
|
|
27
|
+
readonly maxUploadBytes: number | null;
|
|
28
|
+
readonly withCdn?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Run the documented Synapse readiness probes. Returns the closed-
|
|
32
|
+
* shape check list in `FILECOIN_READINESS_REQUIRED_CHECKS` order.
|
|
33
|
+
* All calls are non-mutating: `getStorageInfo()`,
|
|
34
|
+
* `getUploadCosts()`, `findDataSets()`, `client.getChainId()`. No
|
|
35
|
+
* upload, no data-set creation, no payment side-effects.
|
|
36
|
+
*/
|
|
37
|
+
export declare function synapseCheckReadiness(synapse: SynapseLike, options: ReadinessProbeOptions, network: FilecoinReadinessNetwork): Promise<ReadonlyArray<FilecoinReadinessCheck>>;
|