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