kynjal-cli 4.0.0 → 4.0.1
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/dist/src/appliance/gguf-engine.d.ts +91 -0
- package/dist/src/appliance/gguf-engine.d.ts.map +1 -0
- package/dist/src/appliance/gguf-engine.js +286 -525
- package/dist/src/appliance/gguf-engine.js.map +1 -1
- package/dist/src/appliance/ruvllm-bridge.d.ts +102 -0
- package/dist/src/appliance/ruvllm-bridge.d.ts.map +1 -0
- package/dist/src/appliance/ruvllm-bridge.js +203 -403
- package/dist/src/appliance/ruvllm-bridge.js.map +1 -1
- package/dist/src/appliance/rvfa-builder.d.ts +44 -0
- package/dist/src/appliance/rvfa-builder.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-builder.js +154 -208
- package/dist/src/appliance/rvfa-builder.js.map +1 -1
- package/dist/src/appliance/rvfa-distribution.d.ts +97 -0
- package/dist/src/appliance/rvfa-distribution.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-distribution.js +260 -423
- package/dist/src/appliance/rvfa-distribution.js.map +1 -1
- package/dist/src/appliance/rvfa-format.d.ts +111 -0
- package/dist/src/appliance/rvfa-format.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-format.js +128 -200
- package/dist/src/appliance/rvfa-format.js.map +1 -1
- package/dist/src/appliance/rvfa-runner.d.ts +69 -0
- package/dist/src/appliance/rvfa-runner.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-runner.js +168 -304
- package/dist/src/appliance/rvfa-runner.js.map +1 -1
- package/dist/src/appliance/rvfa-signing.d.ts +123 -0
- package/dist/src/appliance/rvfa-signing.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-signing.js +173 -295
- package/dist/src/appliance/rvfa-signing.js.map +1 -1
- package/dist/src/benchmarks/pretrain/index.d.ts +58 -0
- package/dist/src/benchmarks/pretrain/index.d.ts.map +1 -0
- package/dist/src/benchmarks/pretrain/index.js +331 -542
- package/dist/src/benchmarks/pretrain/index.js.map +1 -1
- package/dist/src/commands/agent.js +574 -697
- package/dist/src/commands/agent.js.map +1 -1
- package/dist/src/commands/analyze.js +1218 -1548
- package/dist/src/commands/analyze.js.map +1 -1
- package/dist/src/commands/appliance-advanced.js +158 -267
- package/dist/src/commands/appliance-advanced.js.map +1 -1
- package/dist/src/commands/appliance.js +318 -493
- package/dist/src/commands/appliance.js.map +1 -1
- package/dist/src/commands/benchmark.js +372 -523
- package/dist/src/commands/benchmark.js.map +1 -1
- package/dist/src/commands/claims.js +274 -364
- package/dist/src/commands/claims.js.map +1 -1
- package/dist/src/commands/cleanup.js +113 -157
- package/dist/src/commands/cleanup.js.map +1 -1
- package/dist/src/commands/completions.js +477 -118
- package/dist/src/commands/completions.js.map +1 -1
- package/dist/src/commands/config.js +237 -303
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/daemon.js +487 -596
- package/dist/src/commands/daemon.js.map +1 -1
- package/dist/src/commands/deployment.js +194 -275
- package/dist/src/commands/deployment.js.map +1 -1
- package/dist/src/commands/doctor.js +504 -686
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/embeddings.js +1293 -1543
- package/dist/src/commands/embeddings.js.map +1 -1
- package/dist/src/commands/guidance.js +449 -596
- package/dist/src/commands/guidance.js.map +1 -1
- package/dist/src/commands/hive-mind.js +854 -938
- package/dist/src/commands/hive-mind.js.map +1 -1
- package/dist/src/commands/hooks.js +3112 -3519
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/index.d.ts +115 -0
- package/dist/src/commands/index.d.ts.map +1 -0
- package/dist/src/commands/index.js +126 -308
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/init.js +788 -940
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/issues.js +383 -558
- package/dist/src/commands/issues.js.map +1 -1
- package/dist/src/commands/mcp.js +493 -605
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/memory.js +833 -1026
- package/dist/src/commands/memory.js.map +1 -1
- package/dist/src/commands/migrate.js +282 -347
- package/dist/src/commands/migrate.js.map +1 -1
- package/dist/src/commands/neural.js +1289 -1563
- package/dist/src/commands/neural.js.map +1 -1
- package/dist/src/commands/performance.js +497 -643
- package/dist/src/commands/performance.js.map +1 -1
- package/dist/src/commands/plugins.js +668 -841
- package/dist/src/commands/plugins.js.map +1 -1
- package/dist/src/commands/process.js +392 -447
- package/dist/src/commands/process.js.map +1 -1
- package/dist/src/commands/progress.js +162 -256
- package/dist/src/commands/progress.js.map +1 -1
- package/dist/src/commands/providers.js +150 -220
- package/dist/src/commands/providers.js.map +1 -1
- package/dist/src/commands/route.js +520 -665
- package/dist/src/commands/route.js.map +1 -1
- package/dist/src/commands/ruvector/backup.js +505 -651
- package/dist/src/commands/ruvector/backup.js.map +1 -1
- package/dist/src/commands/ruvector/benchmark.js +349 -401
- package/dist/src/commands/ruvector/benchmark.js.map +1 -1
- package/dist/src/commands/ruvector/import.js +224 -266
- package/dist/src/commands/ruvector/import.js.map +1 -1
- package/dist/src/commands/ruvector/index.js +37 -75
- package/dist/src/commands/ruvector/index.js.map +1 -1
- package/dist/src/commands/ruvector/init.js +336 -359
- package/dist/src/commands/ruvector/init.js.map +1 -1
- package/dist/src/commands/ruvector/migrate.js +335 -322
- package/dist/src/commands/ruvector/migrate.js.map +1 -1
- package/dist/src/commands/ruvector/optimize.js +375 -431
- package/dist/src/commands/ruvector/optimize.js.map +1 -1
- package/dist/src/commands/ruvector/setup.js +703 -117
- package/dist/src/commands/ruvector/setup.js.map +1 -1
- package/dist/src/commands/ruvector/status.js +364 -419
- package/dist/src/commands/ruvector/status.js.map +1 -1
- package/dist/src/commands/security.js +485 -608
- package/dist/src/commands/security.js.map +1 -1
- package/dist/src/commands/session.js +504 -626
- package/dist/src/commands/session.js.map +1 -1
- package/dist/src/commands/start.js +267 -364
- package/dist/src/commands/start.js.map +1 -1
- package/dist/src/commands/status.js +380 -486
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/commands/swarm.js +408 -488
- package/dist/src/commands/swarm.js.map +1 -1
- package/dist/src/commands/task.js +423 -538
- package/dist/src/commands/task.js.map +1 -1
- package/dist/src/commands/transfer-store.js +322 -412
- package/dist/src/commands/transfer-store.js.map +1 -1
- package/dist/src/commands/update.js +196 -291
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/commands/workflow.js +386 -486
- package/dist/src/commands/workflow.js.map +1 -1
- package/dist/src/config-adapter.d.ts +15 -0
- package/dist/src/config-adapter.d.ts.map +1 -0
- package/dist/src/config-adapter.js +38 -39
- package/dist/src/config-adapter.js.map +1 -1
- package/dist/src/index.d.ts +77 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +309 -411
- package/dist/src/index.js.map +1 -1
- package/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
- package/dist/src/infrastructure/in-memory-repositories.d.ts.map +1 -0
- package/dist/src/infrastructure/in-memory-repositories.js +246 -507
- package/dist/src/infrastructure/in-memory-repositories.js.map +1 -1
- package/dist/src/init/claudemd-generator.d.ts +25 -0
- package/dist/src/init/claudemd-generator.d.ts.map +1 -0
- package/dist/src/init/claudemd-generator.js +368 -78
- package/dist/src/init/claudemd-generator.js.map +1 -1
- package/dist/src/init/executor.d.ts +41 -0
- package/dist/src/init/executor.d.ts.map +1 -0
- package/dist/src/init/executor.js +1307 -996
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/helpers-generator.d.ts +60 -0
- package/dist/src/init/helpers-generator.d.ts.map +1 -0
- package/dist/src/init/helpers-generator.js +657 -12
- package/dist/src/init/helpers-generator.js.map +1 -1
- package/dist/src/init/index.d.ts +1 -1
- package/dist/src/init/index.d.ts.map +1 -1
- package/dist/src/init/index.js +1 -1
- package/dist/src/init/index.js.map +1 -1
- package/dist/src/init/mcp-generator.js +33 -37
- package/dist/src/init/mcp-generator.js.map +1 -1
- package/dist/src/init/settings-generator.js +76 -77
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/init/statusline-generator.js +801 -3
- package/dist/src/init/statusline-generator.js.map +1 -1
- package/dist/src/init/types.d.ts +1 -1
- package/dist/src/init/types.d.ts.map +1 -1
- package/dist/src/init/types.js +76 -59
- package/dist/src/init/types.js.map +1 -1
- package/dist/src/mcp-client.d.ts +92 -0
- package/dist/src/mcp-client.d.ts.map +1 -0
- package/dist/src/mcp-client.js +81 -125
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-server.d.ts +161 -0
- package/dist/src/mcp-server.d.ts.map +1 -0
- package/dist/src/mcp-server.js +470 -757
- package/dist/src/mcp-server.js.map +1 -1
- package/dist/src/mcp-tools/agent-tools.js +391 -492
- package/dist/src/mcp-tools/agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/agentdb-tools.js +332 -533
- package/dist/src/mcp-tools/agentdb-tools.js.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.js +172 -236
- package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
- package/dist/src/mcp-tools/auto-install.d.ts +83 -0
- package/dist/src/mcp-tools/auto-install.d.ts.map +1 -0
- package/dist/src/mcp-tools/auto-install.js +80 -142
- package/dist/src/mcp-tools/auto-install.js.map +1 -1
- package/dist/src/mcp-tools/browser-tools.js +252 -375
- package/dist/src/mcp-tools/browser-tools.js.map +1 -1
- package/dist/src/mcp-tools/claims-tools.js +473 -565
- package/dist/src/mcp-tools/claims-tools.js.map +1 -1
- package/dist/src/mcp-tools/config-tools.js +197 -272
- package/dist/src/mcp-tools/config-tools.js.map +1 -1
- package/dist/src/mcp-tools/coordination-tools.js +500 -572
- package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
- package/dist/src/mcp-tools/daa-tools.js +286 -364
- package/dist/src/mcp-tools/daa-tools.js.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.js +582 -693
- package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
- package/dist/src/mcp-tools/github-tools.js +260 -311
- package/dist/src/mcp-tools/github-tools.js.map +1 -1
- package/dist/src/mcp-tools/hive-mind-tools.js +573 -640
- package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +2215 -2648
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +350 -505
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/mcp-tools/neural-tools.js +315 -412
- package/dist/src/mcp-tools/neural-tools.js.map +1 -1
- package/dist/src/mcp-tools/performance-tools.js +420 -480
- package/dist/src/mcp-tools/performance-tools.js.map +1 -1
- package/dist/src/mcp-tools/progress-tools.js +204 -278
- package/dist/src/mcp-tools/progress-tools.js.map +1 -1
- package/dist/src/mcp-tools/ruvllm-tools.js +163 -279
- package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -1
- package/dist/src/mcp-tools/security-tools.js +297 -429
- package/dist/src/mcp-tools/security-tools.js.map +1 -1
- package/dist/src/mcp-tools/session-tools.js +185 -234
- package/dist/src/mcp-tools/session-tools.js.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.js +207 -260
- package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
- package/dist/src/mcp-tools/system-tools.js +276 -325
- package/dist/src/mcp-tools/system-tools.js.map +1 -1
- package/dist/src/mcp-tools/task-tools.js +270 -336
- package/dist/src/mcp-tools/task-tools.js.map +1 -1
- package/dist/src/mcp-tools/terminal-tools.js +148 -196
- package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
- package/dist/src/mcp-tools/transfer-tools.js +186 -333
- package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
- package/dist/src/mcp-tools/types.d.ts +31 -0
- package/dist/src/mcp-tools/types.d.ts.map +1 -0
- package/dist/src/mcp-tools/wasm-agent-tools.js +133 -280
- package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/workflow-tools.js +405 -450
- package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
- package/dist/src/memory/ewc-consolidation.d.ts +295 -0
- package/dist/src/memory/ewc-consolidation.d.ts.map +1 -0
- package/dist/src/memory/ewc-consolidation.js +190 -303
- package/dist/src/memory/ewc-consolidation.js.map +1 -1
- package/dist/src/memory/intelligence.d.ts +338 -0
- package/dist/src/memory/intelligence.d.ts.map +1 -0
- package/dist/src/memory/intelligence.js +569 -794
- package/dist/src/memory/intelligence.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts +407 -0
- package/dist/src/memory/memory-bridge.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge.js +1170 -1640
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-initializer.d.ts +412 -0
- package/dist/src/memory/memory-initializer.d.ts.map +1 -0
- package/dist/src/memory/memory-initializer.js +1836 -1851
- package/dist/src/memory/memory-initializer.js.map +1 -1
- package/dist/src/memory/sona-optimizer.d.ts +227 -0
- package/dist/src/memory/sona-optimizer.d.ts.map +1 -0
- package/dist/src/memory/sona-optimizer.js +199 -329
- package/dist/src/memory/sona-optimizer.js.map +1 -1
- package/dist/src/output.d.ts +2 -2
- package/dist/src/output.d.ts.map +1 -1
- package/dist/src/output.js +242 -272
- package/dist/src/output.js.map +1 -1
- package/dist/src/parser.d.ts +51 -0
- package/dist/src/parser.d.ts.map +1 -0
- package/dist/src/parser.js +140 -187
- package/dist/src/parser.js.map +1 -1
- package/dist/src/plugins/manager.d.ts +133 -0
- package/dist/src/plugins/manager.d.ts.map +1 -0
- package/dist/src/plugins/manager.js +285 -521
- package/dist/src/plugins/manager.js.map +1 -1
- package/dist/src/plugins/store/discovery.d.ts +88 -0
- package/dist/src/plugins/store/discovery.d.ts.map +1 -0
- package/dist/src/plugins/store/discovery.js +271 -358
- package/dist/src/plugins/store/discovery.js.map +1 -1
- package/dist/src/plugins/store/index.d.ts +76 -0
- package/dist/src/plugins/store/index.d.ts.map +1 -0
- package/dist/src/plugins/store/index.js +48 -105
- package/dist/src/plugins/store/index.js.map +1 -1
- package/dist/src/plugins/store/search.d.ts +46 -0
- package/dist/src/plugins/store/search.d.ts.map +1 -0
- package/dist/src/plugins/store/search.js +69 -107
- package/dist/src/plugins/store/search.js.map +1 -1
- package/dist/src/plugins/store/types.d.ts +274 -0
- package/dist/src/plugins/store/types.d.ts.map +1 -0
- package/dist/src/plugins/tests/demo-plugin-store.js +113 -160
- package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -1
- package/dist/src/plugins/tests/standalone-test.js +172 -223
- package/dist/src/plugins/tests/standalone-test.js.map +1 -1
- package/dist/src/plugins/tests/test-plugin-store.js +190 -228
- package/dist/src/plugins/tests/test-plugin-store.js.map +1 -1
- package/dist/src/production/circuit-breaker.d.ts +101 -0
- package/dist/src/production/circuit-breaker.d.ts.map +1 -0
- package/dist/src/production/circuit-breaker.js +62 -126
- package/dist/src/production/circuit-breaker.js.map +1 -1
- package/dist/src/production/error-handler.d.ts +92 -0
- package/dist/src/production/error-handler.d.ts.map +1 -0
- package/dist/src/production/error-handler.js +86 -156
- package/dist/src/production/error-handler.js.map +1 -1
- package/dist/src/production/monitoring.d.ts +161 -0
- package/dist/src/production/monitoring.d.ts.map +1 -0
- package/dist/src/production/monitoring.js +139 -220
- package/dist/src/production/monitoring.js.map +1 -1
- package/dist/src/production/rate-limiter.d.ts +80 -0
- package/dist/src/production/rate-limiter.d.ts.map +1 -0
- package/dist/src/production/rate-limiter.js +74 -93
- package/dist/src/production/rate-limiter.js.map +1 -1
- package/dist/src/production/retry.d.ts +48 -0
- package/dist/src/production/retry.d.ts.map +1 -0
- package/dist/src/production/retry.js +75 -167
- package/dist/src/production/retry.js.map +1 -1
- package/dist/src/prompt.d.ts +44 -0
- package/dist/src/prompt.d.ts.map +1 -0
- package/dist/src/prompt.js +436 -560
- package/dist/src/prompt.js.map +1 -1
- package/dist/src/runtime/headless.d.ts +60 -0
- package/dist/src/runtime/headless.d.ts.map +1 -0
- package/dist/src/runtime/headless.js +197 -286
- package/dist/src/runtime/headless.js.map +1 -1
- package/dist/src/ruvector/agent-wasm.d.ts +182 -0
- package/dist/src/ruvector/agent-wasm.d.ts.map +1 -0
- package/dist/src/ruvector/agent-wasm.js +156 -351
- package/dist/src/ruvector/agent-wasm.js.map +1 -1
- package/dist/src/ruvector/ast-analyzer.d.ts +67 -0
- package/dist/src/ruvector/ast-analyzer.d.ts.map +1 -0
- package/dist/src/ruvector/ast-analyzer.js +145 -232
- package/dist/src/ruvector/ast-analyzer.js.map +1 -1
- package/dist/src/ruvector/coverage-router.d.ts +160 -0
- package/dist/src/ruvector/coverage-router.d.ts.map +1 -0
- package/dist/src/ruvector/coverage-router.js +287 -419
- package/dist/src/ruvector/coverage-router.js.map +1 -1
- package/dist/src/ruvector/coverage-tools.js +56 -101
- package/dist/src/ruvector/coverage-tools.js.map +1 -1
- package/dist/src/ruvector/diff-classifier.d.ts +175 -0
- package/dist/src/ruvector/diff-classifier.d.ts.map +1 -0
- package/dist/src/ruvector/diff-classifier.js +324 -451
- package/dist/src/ruvector/diff-classifier.js.map +1 -1
- package/dist/src/ruvector/enhanced-model-router.d.ts +146 -0
- package/dist/src/ruvector/enhanced-model-router.d.ts.map +1 -0
- package/dist/src/ruvector/enhanced-model-router.js +260 -336
- package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
- package/dist/src/ruvector/flash-attention.d.ts +195 -0
- package/dist/src/ruvector/flash-attention.d.ts.map +1 -0
- package/dist/src/ruvector/flash-attention.js +223 -254
- package/dist/src/ruvector/flash-attention.js.map +1 -1
- package/dist/src/ruvector/graph-analyzer.d.ts +187 -0
- package/dist/src/ruvector/graph-analyzer.d.ts.map +1 -0
- package/dist/src/ruvector/graph-analyzer.js +486 -680
- package/dist/src/ruvector/graph-analyzer.js.map +1 -1
- package/dist/src/ruvector/index.d.ts +40 -0
- package/dist/src/ruvector/index.d.ts.map +1 -0
- package/dist/src/ruvector/index.js +36 -106
- package/dist/src/ruvector/index.js.map +1 -1
- package/dist/src/ruvector/lora-adapter.d.ts +218 -0
- package/dist/src/ruvector/lora-adapter.d.ts.map +1 -0
- package/dist/src/ruvector/lora-adapter.js +155 -248
- package/dist/src/ruvector/lora-adapter.js.map +1 -1
- package/dist/src/ruvector/model-router.d.ts +220 -0
- package/dist/src/ruvector/model-router.d.ts.map +1 -0
- package/dist/src/ruvector/model-router.js +175 -248
- package/dist/src/ruvector/model-router.js.map +1 -1
- package/dist/src/ruvector/moe-router.d.ts +206 -0
- package/dist/src/ruvector/moe-router.d.ts.map +1 -0
- package/dist/src/ruvector/moe-router.js +228 -286
- package/dist/src/ruvector/moe-router.js.map +1 -1
- package/dist/src/ruvector/q-learning-router.d.ts +211 -0
- package/dist/src/ruvector/q-learning-router.d.ts.map +1 -0
- package/dist/src/ruvector/q-learning-router.js +257 -338
- package/dist/src/ruvector/q-learning-router.js.map +1 -1
- package/dist/src/ruvector/ruvllm-wasm.d.ts +179 -0
- package/dist/src/ruvector/ruvllm-wasm.d.ts.map +1 -0
- package/dist/src/ruvector/ruvllm-wasm.js +270 -434
- package/dist/src/ruvector/ruvllm-wasm.js.map +1 -1
- package/dist/src/ruvector/semantic-router.d.ts +77 -0
- package/dist/src/ruvector/semantic-router.d.ts.map +1 -0
- package/dist/src/ruvector/semantic-router.js +60 -67
- package/dist/src/ruvector/semantic-router.js.map +1 -1
- package/dist/src/ruvector/vector-db.d.ts +69 -0
- package/dist/src/ruvector/vector-db.d.ts.map +1 -0
- package/dist/src/ruvector/vector-db.js +119 -205
- package/dist/src/ruvector/vector-db.js.map +1 -1
- package/dist/src/services/agentic-flow-bridge.d.ts +50 -0
- package/dist/src/services/agentic-flow-bridge.d.ts.map +1 -0
- package/dist/src/services/agentic-flow-bridge.js +32 -105
- package/dist/src/services/agentic-flow-bridge.js.map +1 -1
- package/dist/src/services/claim-service.d.ts +204 -0
- package/dist/src/services/claim-service.d.ts.map +1 -0
- package/dist/src/services/claim-service.js +615 -940
- package/dist/src/services/claim-service.js.map +1 -1
- package/dist/src/services/container-worker-pool.d.ts +197 -0
- package/dist/src/services/container-worker-pool.d.ts.map +1 -0
- package/dist/src/services/container-worker-pool.js +398 -666
- package/dist/src/services/container-worker-pool.js.map +1 -1
- package/dist/src/services/headless-worker-executor.d.ts +304 -0
- package/dist/src/services/headless-worker-executor.d.ts.map +1 -0
- package/dist/src/services/headless-worker-executor.js +441 -467
- package/dist/src/services/headless-worker-executor.js.map +1 -1
- package/dist/src/services/index.d.ts +4 -4
- package/dist/src/services/index.d.ts.map +1 -1
- package/dist/src/services/index.js +4 -4
- package/dist/src/services/index.js.map +1 -1
- package/dist/src/services/registry-api.d.ts +58 -0
- package/dist/src/services/registry-api.d.ts.map +1 -0
- package/dist/src/services/registry-api.js +92 -200
- package/dist/src/services/registry-api.js.map +1 -1
- package/dist/src/services/ruvector-training.d.ts +222 -0
- package/dist/src/services/ruvector-training.d.ts.map +1 -0
- package/dist/src/services/ruvector-training.js +257 -337
- package/dist/src/services/ruvector-training.js.map +1 -1
- package/dist/src/services/worker-daemon.d.ts +228 -0
- package/dist/src/services/worker-daemon.d.ts.map +1 -0
- package/dist/src/services/worker-daemon.js +591 -849
- package/dist/src/services/worker-daemon.js.map +1 -1
- package/dist/src/services/worker-queue.d.ts +194 -0
- package/dist/src/services/worker-queue.d.ts.map +1 -0
- package/dist/src/services/worker-queue.js +331 -548
- package/dist/src/services/worker-queue.js.map +1 -1
- package/dist/src/suggest.d.ts +53 -0
- package/dist/src/suggest.d.ts.map +1 -0
- package/dist/src/suggest.js +45 -55
- package/dist/src/suggest.js.map +1 -1
- package/dist/src/transfer/anonymization/index.js +29 -37
- package/dist/src/transfer/anonymization/index.js.map +1 -1
- package/dist/src/transfer/deploy-seraphine.js +128 -155
- package/dist/src/transfer/deploy-seraphine.js.map +1 -1
- package/dist/src/transfer/export.d.ts +25 -0
- package/dist/src/transfer/export.d.ts.map +1 -0
- package/dist/src/transfer/export.js +84 -142
- package/dist/src/transfer/export.js.map +1 -1
- package/dist/src/transfer/index.d.ts +1 -1
- package/dist/src/transfer/index.d.ts.map +1 -1
- package/dist/src/transfer/index.js +0 -2
- package/dist/src/transfer/index.js.map +1 -1
- package/dist/src/transfer/ipfs/client.d.ts +109 -0
- package/dist/src/transfer/ipfs/client.d.ts.map +1 -0
- package/dist/src/transfer/ipfs/client.js +187 -337
- package/dist/src/transfer/ipfs/client.js.map +1 -1
- package/dist/src/transfer/ipfs/upload.d.ts +95 -0
- package/dist/src/transfer/ipfs/upload.d.ts.map +1 -0
- package/dist/src/transfer/ipfs/upload.js +288 -434
- package/dist/src/transfer/ipfs/upload.js.map +1 -1
- package/dist/src/transfer/models/seraphine.d.ts +72 -0
- package/dist/src/transfer/models/seraphine.d.ts.map +1 -0
- package/dist/src/transfer/models/seraphine.js +55 -55
- package/dist/src/transfer/models/seraphine.js.map +1 -1
- package/dist/src/transfer/serialization/cfp.d.ts +49 -0
- package/dist/src/transfer/serialization/cfp.d.ts.map +1 -0
- package/dist/src/transfer/serialization/cfp.js +30 -31
- package/dist/src/transfer/serialization/cfp.js.map +1 -1
- package/dist/src/transfer/storage/gcs.d.ts +82 -0
- package/dist/src/transfer/storage/gcs.d.ts.map +1 -0
- package/dist/src/transfer/storage/gcs.js +165 -232
- package/dist/src/transfer/storage/gcs.js.map +1 -1
- package/dist/src/transfer/store/discovery.d.ts +84 -0
- package/dist/src/transfer/store/discovery.d.ts.map +1 -0
- package/dist/src/transfer/store/discovery.js +239 -349
- package/dist/src/transfer/store/discovery.js.map +1 -1
- package/dist/src/transfer/store/download.d.ts +70 -0
- package/dist/src/transfer/store/download.d.ts.map +1 -0
- package/dist/src/transfer/store/download.js +243 -365
- package/dist/src/transfer/store/download.js.map +1 -1
- package/dist/src/transfer/store/index.d.ts +84 -0
- package/dist/src/transfer/store/index.d.ts.map +1 -0
- package/dist/src/transfer/store/index.js +63 -130
- package/dist/src/transfer/store/index.js.map +1 -1
- package/dist/src/transfer/store/publish.d.ts +76 -0
- package/dist/src/transfer/store/publish.d.ts.map +1 -0
- package/dist/src/transfer/store/publish.js +184 -258
- package/dist/src/transfer/store/publish.js.map +1 -1
- package/dist/src/transfer/store/registry.js +50 -72
- package/dist/src/transfer/store/registry.js.map +1 -1
- package/dist/src/transfer/store/search.d.ts +54 -0
- package/dist/src/transfer/store/search.d.ts.map +1 -0
- package/dist/src/transfer/store/search.js +64 -96
- package/dist/src/transfer/store/search.js.map +1 -1
- package/dist/src/transfer/store/tests/standalone-test.js +174 -231
- package/dist/src/transfer/store/tests/standalone-test.js.map +1 -1
- package/dist/src/transfer/test-seraphine.js +95 -130
- package/dist/src/transfer/test-seraphine.js.map +1 -1
- package/dist/src/transfer/tests/test-store.js +194 -239
- package/dist/src/transfer/tests/test-store.js.map +1 -1
- package/dist/src/transfer/types.d.ts +245 -0
- package/dist/src/transfer/types.d.ts.map +1 -0
- package/dist/src/types.d.ts +198 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +26 -55
- package/dist/src/types.js.map +1 -1
- package/dist/src/update/checker.d.ts +34 -0
- package/dist/src/update/checker.d.ts.map +1 -0
- package/dist/src/update/checker.js +106 -183
- package/dist/src/update/checker.js.map +1 -1
- package/dist/src/update/executor.d.ts +32 -0
- package/dist/src/update/executor.d.ts.map +1 -0
- package/dist/src/update/executor.js +135 -198
- package/dist/src/update/executor.js.map +1 -1
- package/dist/src/update/index.d.ts +33 -0
- package/dist/src/update/index.d.ts.map +1 -0
- package/dist/src/update/index.js +38 -85
- package/dist/src/update/index.js.map +1 -1
- package/dist/src/update/rate-limiter.d.ts +20 -0
- package/dist/src/update/rate-limiter.d.ts.map +1 -0
- package/dist/src/update/rate-limiter.js +19 -31
- package/dist/src/update/rate-limiter.js.map +1 -1
- package/dist/src/update/validator.d.ts +17 -0
- package/dist/src/update/validator.d.ts.map +1 -0
- package/dist/src/update/validator.js +38 -64
- package/dist/src/update/validator.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -5,42 +5,6 @@
|
|
|
5
5
|
* @module @claude-flow/cli/transfer/ipfs/upload
|
|
6
6
|
* @version 3.0.0
|
|
7
7
|
*/
|
|
8
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
-
});
|
|
16
|
-
};
|
|
17
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
18
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
19
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
20
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
21
|
-
function step(op) {
|
|
22
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
23
|
-
while (_) try {
|
|
24
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
25
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
26
|
-
switch (op[0]) {
|
|
27
|
-
case 0: case 1: t = op; break;
|
|
28
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
29
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
30
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
31
|
-
default:
|
|
32
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
33
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
34
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
35
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
36
|
-
if (t[2]) _.ops.pop();
|
|
37
|
-
_.trys.pop(); continue;
|
|
38
|
-
}
|
|
39
|
-
op = body.call(thisArg, _);
|
|
40
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
41
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
8
|
import * as crypto from 'crypto';
|
|
45
9
|
/**
|
|
46
10
|
* Get web3.storage token from environment or config
|
|
@@ -55,15 +19,15 @@ function getWeb3StorageToken() {
|
|
|
55
19
|
* Uses CIDv1 with dag-pb codec and sha2-256 multihash
|
|
56
20
|
*/
|
|
57
21
|
function generateDemoCID(content) {
|
|
58
|
-
|
|
22
|
+
const hash = crypto.createHash('sha256').update(content).digest();
|
|
59
23
|
// CIDv1 with dag-pb codec and sha2-256 multihash
|
|
60
|
-
|
|
61
|
-
|
|
24
|
+
const prefix = Buffer.from([0x01, 0x70, 0x12, 0x20]);
|
|
25
|
+
const cidBytes = Buffer.concat([prefix, hash]);
|
|
62
26
|
// Base32 encode
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
for (
|
|
66
|
-
|
|
27
|
+
const base32Chars = 'abcdefghijklmnopqrstuvwxyz234567';
|
|
28
|
+
let result = 'bafybei';
|
|
29
|
+
for (let i = 0; i < 44; i++) {
|
|
30
|
+
const byte = cidBytes[i % cidBytes.length] || 0;
|
|
67
31
|
result += base32Chars[byte % 32];
|
|
68
32
|
}
|
|
69
33
|
return result;
|
|
@@ -71,123 +35,98 @@ function generateDemoCID(content) {
|
|
|
71
35
|
/**
|
|
72
36
|
* Upload to web3.storage (real IPFS)
|
|
73
37
|
*/
|
|
74
|
-
function uploadToWeb3Storage(content, options) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
'Authorization': "Bearer " + token,
|
|
100
|
-
'Content-Type': "multipart/form-data; boundary=" + boundary
|
|
101
|
-
},
|
|
102
|
-
body: body
|
|
103
|
-
})];
|
|
104
|
-
case 1:
|
|
105
|
-
response = _a.sent();
|
|
106
|
-
if (!!response.ok) return [3 /*break*/, 3];
|
|
107
|
-
return [4 /*yield*/, response.text()];
|
|
108
|
-
case 2:
|
|
109
|
-
error = _a.sent();
|
|
110
|
-
throw new Error("Web3.storage upload failed: " + response.status + " " + error);
|
|
111
|
-
case 3: return [4 /*yield*/, response.json()];
|
|
112
|
-
case 4:
|
|
113
|
-
result = _a.sent();
|
|
114
|
-
cid = result.cid;
|
|
115
|
-
gateway = options.gateway || 'https://w3s.link';
|
|
116
|
-
console.log("[IPFS] Upload complete!");
|
|
117
|
-
console.log("[IPFS] CID: " + cid);
|
|
118
|
-
return [2 /*return*/, {
|
|
119
|
-
cid: cid,
|
|
120
|
-
size: content.length,
|
|
121
|
-
gateway: gateway,
|
|
122
|
-
pinnedAt: new Date().toISOString(),
|
|
123
|
-
url: gateway + "/ipfs/" + cid
|
|
124
|
-
}];
|
|
125
|
-
}
|
|
126
|
-
});
|
|
38
|
+
async function uploadToWeb3Storage(content, options) {
|
|
39
|
+
const token = options.apiKey || getWeb3StorageToken();
|
|
40
|
+
if (!token) {
|
|
41
|
+
throw new Error('Web3.storage token not found. Set WEB3_STORAGE_TOKEN environment variable.\n' +
|
|
42
|
+
'Get a free token at: https://web3.storage');
|
|
43
|
+
}
|
|
44
|
+
const endpoint = options.endpoint || 'https://api.web3.storage';
|
|
45
|
+
const name = options.name || 'pattern.cfp.json';
|
|
46
|
+
console.log(`[IPFS] Uploading ${content.length} bytes to web3.storage...`);
|
|
47
|
+
// Create FormData-like body for upload
|
|
48
|
+
const boundary = '----WebKitFormBoundary' + crypto.randomBytes(16).toString('hex');
|
|
49
|
+
const body = Buffer.concat([
|
|
50
|
+
Buffer.from(`--${boundary}\r\n`),
|
|
51
|
+
Buffer.from(`Content-Disposition: form-data; name="file"; filename="${name}"\r\n`),
|
|
52
|
+
Buffer.from(`Content-Type: application/json\r\n\r\n`),
|
|
53
|
+
content,
|
|
54
|
+
Buffer.from(`\r\n--${boundary}--\r\n`),
|
|
55
|
+
]);
|
|
56
|
+
const response = await fetch(`${endpoint}/upload`, {
|
|
57
|
+
method: 'POST',
|
|
58
|
+
headers: {
|
|
59
|
+
'Authorization': `Bearer ${token}`,
|
|
60
|
+
'Content-Type': `multipart/form-data; boundary=${boundary}`,
|
|
61
|
+
},
|
|
62
|
+
body,
|
|
127
63
|
});
|
|
64
|
+
if (!response.ok) {
|
|
65
|
+
const error = await response.text();
|
|
66
|
+
throw new Error(`Web3.storage upload failed: ${response.status} ${error}`);
|
|
67
|
+
}
|
|
68
|
+
const result = await response.json();
|
|
69
|
+
const cid = result.cid;
|
|
70
|
+
const gateway = options.gateway || 'https://w3s.link';
|
|
71
|
+
console.log(`[IPFS] Upload complete!`);
|
|
72
|
+
console.log(`[IPFS] CID: ${cid}`);
|
|
73
|
+
return {
|
|
74
|
+
cid,
|
|
75
|
+
size: content.length,
|
|
76
|
+
gateway,
|
|
77
|
+
pinnedAt: new Date().toISOString(),
|
|
78
|
+
url: `${gateway}/ipfs/${cid}`,
|
|
79
|
+
};
|
|
128
80
|
}
|
|
129
81
|
/**
|
|
130
82
|
* Upload to Pinata
|
|
131
83
|
*/
|
|
132
|
-
function uploadToPinata(content, options) {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
'pinata_api_key': apiKey,
|
|
162
|
-
'pinata_secret_api_key': apiSecret,
|
|
163
|
-
'Content-Type': "multipart/form-data; boundary=" + boundary
|
|
164
|
-
},
|
|
165
|
-
body: body
|
|
166
|
-
})];
|
|
167
|
-
case 1:
|
|
168
|
-
response = _a.sent();
|
|
169
|
-
if (!!response.ok) return [3 /*break*/, 3];
|
|
170
|
-
return [4 /*yield*/, response.text()];
|
|
171
|
-
case 2:
|
|
172
|
-
error = _a.sent();
|
|
173
|
-
throw new Error("Pinata upload failed: " + response.status + " " + error);
|
|
174
|
-
case 3: return [4 /*yield*/, response.json()];
|
|
175
|
-
case 4:
|
|
176
|
-
result = _a.sent();
|
|
177
|
-
cid = result.IpfsHash;
|
|
178
|
-
gateway = options.gateway || 'https://gateway.pinata.cloud';
|
|
179
|
-
console.log("[IPFS] Upload complete!");
|
|
180
|
-
console.log("[IPFS] CID: " + cid);
|
|
181
|
-
return [2 /*return*/, {
|
|
182
|
-
cid: cid,
|
|
183
|
-
size: content.length,
|
|
184
|
-
gateway: gateway,
|
|
185
|
-
pinnedAt: new Date().toISOString(),
|
|
186
|
-
url: gateway + "/ipfs/" + cid
|
|
187
|
-
}];
|
|
188
|
-
}
|
|
189
|
-
});
|
|
84
|
+
async function uploadToPinata(content, options) {
|
|
85
|
+
const apiKey = options.apiKey || process.env.PINATA_API_KEY;
|
|
86
|
+
const apiSecret = options.apiSecret || process.env.PINATA_API_SECRET;
|
|
87
|
+
if (!apiKey || !apiSecret) {
|
|
88
|
+
throw new Error('Pinata API credentials not found. Set PINATA_API_KEY and PINATA_API_SECRET.\n' +
|
|
89
|
+
'Get credentials at: https://pinata.cloud');
|
|
90
|
+
}
|
|
91
|
+
const name = options.name || 'pattern.cfp.json';
|
|
92
|
+
console.log(`[IPFS] Uploading ${content.length} bytes to Pinata...`);
|
|
93
|
+
const boundary = '----WebKitFormBoundary' + crypto.randomBytes(16).toString('hex');
|
|
94
|
+
const metadata = JSON.stringify({ name });
|
|
95
|
+
const body = Buffer.concat([
|
|
96
|
+
Buffer.from(`--${boundary}\r\n`),
|
|
97
|
+
Buffer.from(`Content-Disposition: form-data; name="pinataMetadata"\r\n\r\n`),
|
|
98
|
+
Buffer.from(`${metadata}\r\n`),
|
|
99
|
+
Buffer.from(`--${boundary}\r\n`),
|
|
100
|
+
Buffer.from(`Content-Disposition: form-data; name="file"; filename="${name}"\r\n`),
|
|
101
|
+
Buffer.from(`Content-Type: application/json\r\n\r\n`),
|
|
102
|
+
content,
|
|
103
|
+
Buffer.from(`\r\n--${boundary}--\r\n`),
|
|
104
|
+
]);
|
|
105
|
+
const response = await fetch('https://api.pinata.cloud/pinning/pinFileToIPFS', {
|
|
106
|
+
method: 'POST',
|
|
107
|
+
headers: {
|
|
108
|
+
'pinata_api_key': apiKey,
|
|
109
|
+
'pinata_secret_api_key': apiSecret,
|
|
110
|
+
'Content-Type': `multipart/form-data; boundary=${boundary}`,
|
|
111
|
+
},
|
|
112
|
+
body,
|
|
190
113
|
});
|
|
114
|
+
if (!response.ok) {
|
|
115
|
+
const error = await response.text();
|
|
116
|
+
throw new Error(`Pinata upload failed: ${response.status} ${error}`);
|
|
117
|
+
}
|
|
118
|
+
const result = await response.json();
|
|
119
|
+
const cid = result.IpfsHash;
|
|
120
|
+
const gateway = options.gateway || 'https://gateway.pinata.cloud';
|
|
121
|
+
console.log(`[IPFS] Upload complete!`);
|
|
122
|
+
console.log(`[IPFS] CID: ${cid}`);
|
|
123
|
+
return {
|
|
124
|
+
cid,
|
|
125
|
+
size: content.length,
|
|
126
|
+
gateway,
|
|
127
|
+
pinnedAt: new Date().toISOString(),
|
|
128
|
+
url: `${gateway}/ipfs/${cid}`,
|
|
129
|
+
};
|
|
191
130
|
}
|
|
192
131
|
/**
|
|
193
132
|
* Upload content to IPFS
|
|
@@ -198,313 +137,228 @@ function uploadToPinata(content, options) {
|
|
|
198
137
|
* - Pinata (PINATA_API_KEY + PINATA_API_SECRET) - Free 1GB tier
|
|
199
138
|
* - Demo mode (generates deterministic CIDs when no credentials)
|
|
200
139
|
*/
|
|
201
|
-
export function uploadToIPFS(content, options) {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
_d.label = 1;
|
|
214
|
-
case 1:
|
|
215
|
-
_d.trys.push([1, 6, , 7]);
|
|
216
|
-
return [4 /*yield*/, checkLocalIPFSNode()];
|
|
217
|
-
case 2:
|
|
218
|
-
isAvailable = _d.sent();
|
|
219
|
-
if (!isAvailable) return [3 /*break*/, 4];
|
|
220
|
-
return [4 /*yield*/, uploadToLocalIPFS(content, options)];
|
|
221
|
-
case 3: return [2 /*return*/, _d.sent()];
|
|
222
|
-
case 4:
|
|
223
|
-
console.warn("[IPFS] Local node at " + (localIPFS || 'localhost:5001') + " not available");
|
|
224
|
-
_d.label = 5;
|
|
225
|
-
case 5: return [3 /*break*/, 7];
|
|
226
|
-
case 6:
|
|
227
|
-
error_1 = _d.sent();
|
|
228
|
-
console.warn("[IPFS] Local IPFS upload failed: " + error_1);
|
|
229
|
-
return [3 /*break*/, 7];
|
|
230
|
-
case 7:
|
|
231
|
-
if (!(pinningService === 'pinata' || (pinataKey && !web3Token))) return [3 /*break*/, 11];
|
|
232
|
-
_d.label = 8;
|
|
233
|
-
case 8:
|
|
234
|
-
_d.trys.push([8, 10, , 11]);
|
|
235
|
-
return [4 /*yield*/, uploadToPinata(content, options)];
|
|
236
|
-
case 9: return [2 /*return*/, _d.sent()];
|
|
237
|
-
case 10:
|
|
238
|
-
error_2 = _d.sent();
|
|
239
|
-
console.warn("[IPFS] Pinata upload failed: " + error_2);
|
|
240
|
-
return [3 /*break*/, 11];
|
|
241
|
-
case 11:
|
|
242
|
-
if (!(web3Token || pinningService === 'web3storage')) return [3 /*break*/, 15];
|
|
243
|
-
_d.label = 12;
|
|
244
|
-
case 12:
|
|
245
|
-
_d.trys.push([12, 14, , 15]);
|
|
246
|
-
return [4 /*yield*/, uploadToWeb3Storage(content, options)];
|
|
247
|
-
case 13: return [2 /*return*/, _d.sent()];
|
|
248
|
-
case 14:
|
|
249
|
-
error_3 = _d.sent();
|
|
250
|
-
console.warn("[IPFS] Web3.storage upload failed: " + error_3);
|
|
251
|
-
return [3 /*break*/, 15];
|
|
252
|
-
case 15:
|
|
253
|
-
// Fall back to demo mode - WARN user prominently
|
|
254
|
-
console.warn("\u26A0 [IPFS] DEMO MODE - No IPFS credentials configured");
|
|
255
|
-
console.warn("\u26A0 [IPFS] Content will NOT be uploaded to decentralized storage");
|
|
256
|
-
console.warn("\u26A0 [IPFS] To enable real uploads, configure one of:");
|
|
257
|
-
console.warn("\u26A0 [IPFS] - IPFS_API_URL=http://YOUR_NODE:5001 (FREE - your own node)");
|
|
258
|
-
console.warn("\u26A0 [IPFS] - WEB3_STORAGE_TOKEN (free 5GB at web3.storage)");
|
|
259
|
-
console.warn("\u26A0 [IPFS] - PINATA_API_KEY + PINATA_SECRET_KEY (free tier available)");
|
|
260
|
-
cid = generateDemoCID(content);
|
|
261
|
-
size = content.length;
|
|
262
|
-
console.log("[IPFS] Demo upload: " + size + " bytes");
|
|
263
|
-
console.log("[IPFS] Name: " + name);
|
|
264
|
-
result = {
|
|
265
|
-
cid: cid,
|
|
266
|
-
size: size,
|
|
267
|
-
gateway: gateway,
|
|
268
|
-
url: gateway + "/ipfs/" + cid
|
|
269
|
-
};
|
|
270
|
-
if (pin) {
|
|
271
|
-
result.pinnedAt = new Date().toISOString();
|
|
272
|
-
console.log("[IPFS] Demo pinned at: " + result.pinnedAt);
|
|
273
|
-
}
|
|
274
|
-
console.log("[IPFS] Demo CID: " + cid);
|
|
275
|
-
console.log("[IPFS] Demo URL: " + result.url);
|
|
276
|
-
return [2 /*return*/, result];
|
|
140
|
+
export async function uploadToIPFS(content, options = {}) {
|
|
141
|
+
const { pin = true, pinningService, gateway = 'https://w3s.link', name = 'pattern', } = options;
|
|
142
|
+
// Check environment variables
|
|
143
|
+
const localIPFS = process.env.IPFS_API_URL;
|
|
144
|
+
const web3Token = getWeb3StorageToken();
|
|
145
|
+
const pinataKey = process.env.PINATA_API_KEY;
|
|
146
|
+
// 1. Try local/custom IPFS node first (FREE - your own node)
|
|
147
|
+
if (localIPFS || pinningService === 'local') {
|
|
148
|
+
try {
|
|
149
|
+
const isAvailable = await checkLocalIPFSNode();
|
|
150
|
+
if (isAvailable) {
|
|
151
|
+
return await uploadToLocalIPFS(content, options);
|
|
277
152
|
}
|
|
278
|
-
|
|
279
|
-
|
|
153
|
+
else {
|
|
154
|
+
console.warn(`[IPFS] Local node at ${localIPFS || 'localhost:5001'} not available`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
console.warn(`[IPFS] Local IPFS upload failed: ${error}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// 2. Try Pinata
|
|
162
|
+
if (pinningService === 'pinata' || (pinataKey && !web3Token)) {
|
|
163
|
+
try {
|
|
164
|
+
return await uploadToPinata(content, options);
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
console.warn(`[IPFS] Pinata upload failed: ${error}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// 3. Try Web3.storage
|
|
171
|
+
if (web3Token || pinningService === 'web3storage') {
|
|
172
|
+
try {
|
|
173
|
+
return await uploadToWeb3Storage(content, options);
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
console.warn(`[IPFS] Web3.storage upload failed: ${error}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// Fall back to demo mode - WARN user prominently
|
|
180
|
+
console.warn(`⚠ [IPFS] DEMO MODE - No IPFS credentials configured`);
|
|
181
|
+
console.warn(`⚠ [IPFS] Content will NOT be uploaded to decentralized storage`);
|
|
182
|
+
console.warn(`⚠ [IPFS] To enable real uploads, configure one of:`);
|
|
183
|
+
console.warn(`⚠ [IPFS] - IPFS_API_URL=http://YOUR_NODE:5001 (FREE - your own node)`);
|
|
184
|
+
console.warn(`⚠ [IPFS] - WEB3_STORAGE_TOKEN (free 5GB at web3.storage)`);
|
|
185
|
+
console.warn(`⚠ [IPFS] - PINATA_API_KEY + PINATA_SECRET_KEY (free tier available)`);
|
|
186
|
+
const cid = generateDemoCID(content);
|
|
187
|
+
const size = content.length;
|
|
188
|
+
console.log(`[IPFS] Demo upload: ${size} bytes`);
|
|
189
|
+
console.log(`[IPFS] Name: ${name}`);
|
|
190
|
+
const result = {
|
|
191
|
+
cid,
|
|
192
|
+
size,
|
|
193
|
+
gateway,
|
|
194
|
+
url: `${gateway}/ipfs/${cid}`,
|
|
195
|
+
};
|
|
196
|
+
if (pin) {
|
|
197
|
+
result.pinnedAt = new Date().toISOString();
|
|
198
|
+
console.log(`[IPFS] Demo pinned at: ${result.pinnedAt}`);
|
|
199
|
+
}
|
|
200
|
+
console.log(`[IPFS] Demo CID: ${cid}`);
|
|
201
|
+
console.log(`[IPFS] Demo URL: ${result.url}`);
|
|
202
|
+
return result;
|
|
280
203
|
}
|
|
281
204
|
/**
|
|
282
205
|
* Pin content by CID
|
|
283
206
|
*/
|
|
284
|
-
export function pinContent(cid, options) {
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
pinataMetadata: { name: options.name || cid }
|
|
308
|
-
})
|
|
309
|
-
})];
|
|
310
|
-
case 2:
|
|
311
|
-
response = _a.sent();
|
|
312
|
-
if (response.ok) {
|
|
313
|
-
pinnedAt_1 = new Date().toISOString();
|
|
314
|
-
console.log("[IPFS] Pinned " + cid + " via Pinata at " + pinnedAt_1);
|
|
315
|
-
return [2 /*return*/, { success: true, pinnedAt: pinnedAt_1 }];
|
|
316
|
-
}
|
|
317
|
-
return [3 /*break*/, 4];
|
|
318
|
-
case 3:
|
|
319
|
-
error_4 = _a.sent();
|
|
320
|
-
console.warn("[IPFS] Pinata pin failed: " + error_4);
|
|
321
|
-
return [3 /*break*/, 4];
|
|
322
|
-
case 4:
|
|
323
|
-
pinnedAt = new Date().toISOString();
|
|
324
|
-
console.log("[IPFS] Demo pinning " + cid + "...");
|
|
325
|
-
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 300); })];
|
|
326
|
-
case 5:
|
|
327
|
-
_a.sent();
|
|
328
|
-
console.log("[IPFS] Demo pinned at " + pinnedAt);
|
|
329
|
-
return [2 /*return*/, { success: true, pinnedAt: pinnedAt }];
|
|
207
|
+
export async function pinContent(cid, options = {}) {
|
|
208
|
+
const web3Token = getWeb3StorageToken();
|
|
209
|
+
const pinataKey = process.env.PINATA_API_KEY;
|
|
210
|
+
// Real pinning with Pinata
|
|
211
|
+
if (pinataKey && options.service !== 'web3storage') {
|
|
212
|
+
try {
|
|
213
|
+
const pinataSecret = process.env.PINATA_API_SECRET;
|
|
214
|
+
const response = await fetch('https://api.pinata.cloud/pinning/pinByHash', {
|
|
215
|
+
method: 'POST',
|
|
216
|
+
headers: {
|
|
217
|
+
'Content-Type': 'application/json',
|
|
218
|
+
'pinata_api_key': pinataKey,
|
|
219
|
+
'pinata_secret_api_key': pinataSecret || '',
|
|
220
|
+
},
|
|
221
|
+
body: JSON.stringify({
|
|
222
|
+
hashToPin: cid,
|
|
223
|
+
pinataMetadata: { name: options.name || cid },
|
|
224
|
+
}),
|
|
225
|
+
});
|
|
226
|
+
if (response.ok) {
|
|
227
|
+
const pinnedAt = new Date().toISOString();
|
|
228
|
+
console.log(`[IPFS] Pinned ${cid} via Pinata at ${pinnedAt}`);
|
|
229
|
+
return { success: true, pinnedAt };
|
|
330
230
|
}
|
|
331
|
-
}
|
|
332
|
-
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
console.warn(`[IPFS] Pinata pin failed: ${error}`);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// Demo mode
|
|
237
|
+
const pinnedAt = new Date().toISOString();
|
|
238
|
+
console.log(`[IPFS] Demo pinning ${cid}...`);
|
|
239
|
+
await new Promise(resolve => setTimeout(resolve, 300));
|
|
240
|
+
console.log(`[IPFS] Demo pinned at ${pinnedAt}`);
|
|
241
|
+
return { success: true, pinnedAt };
|
|
333
242
|
}
|
|
334
243
|
/**
|
|
335
244
|
* Unpin content by CID
|
|
336
245
|
*/
|
|
337
|
-
export function unpinContent(cid, options) {
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
'pinata_api_key': pinataKey,
|
|
354
|
-
'pinata_secret_api_key': pinataSecret || ''
|
|
355
|
-
}
|
|
356
|
-
})];
|
|
357
|
-
case 2:
|
|
358
|
-
response = _a.sent();
|
|
359
|
-
if (response.ok) {
|
|
360
|
-
console.log("[IPFS] Unpinned " + cid + " from Pinata");
|
|
361
|
-
return [2 /*return*/, { success: true }];
|
|
362
|
-
}
|
|
363
|
-
return [3 /*break*/, 4];
|
|
364
|
-
case 3:
|
|
365
|
-
error_5 = _a.sent();
|
|
366
|
-
console.warn("[IPFS] Pinata unpin failed: " + error_5);
|
|
367
|
-
return [3 /*break*/, 4];
|
|
368
|
-
case 4:
|
|
369
|
-
// Demo mode
|
|
370
|
-
console.log("[IPFS] Demo unpinning " + cid + "...");
|
|
371
|
-
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 200); })];
|
|
372
|
-
case 5:
|
|
373
|
-
_a.sent();
|
|
374
|
-
console.log("[IPFS] Demo unpinned");
|
|
375
|
-
return [2 /*return*/, { success: true }];
|
|
246
|
+
export async function unpinContent(cid, options = {}) {
|
|
247
|
+
const pinataKey = process.env.PINATA_API_KEY;
|
|
248
|
+
// Real unpinning with Pinata
|
|
249
|
+
if (pinataKey) {
|
|
250
|
+
try {
|
|
251
|
+
const pinataSecret = process.env.PINATA_API_SECRET;
|
|
252
|
+
const response = await fetch(`https://api.pinata.cloud/pinning/unpin/${cid}`, {
|
|
253
|
+
method: 'DELETE',
|
|
254
|
+
headers: {
|
|
255
|
+
'pinata_api_key': pinataKey,
|
|
256
|
+
'pinata_secret_api_key': pinataSecret || '',
|
|
257
|
+
},
|
|
258
|
+
});
|
|
259
|
+
if (response.ok) {
|
|
260
|
+
console.log(`[IPFS] Unpinned ${cid} from Pinata`);
|
|
261
|
+
return { success: true };
|
|
376
262
|
}
|
|
377
|
-
}
|
|
378
|
-
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
console.warn(`[IPFS] Pinata unpin failed: ${error}`);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
// Demo mode
|
|
269
|
+
console.log(`[IPFS] Demo unpinning ${cid}...`);
|
|
270
|
+
await new Promise(resolve => setTimeout(resolve, 200));
|
|
271
|
+
console.log(`[IPFS] Demo unpinned`);
|
|
272
|
+
return { success: true };
|
|
379
273
|
}
|
|
380
274
|
/**
|
|
381
275
|
* Check if content exists on IPFS
|
|
382
276
|
*/
|
|
383
|
-
export function checkContent(cid, gateway) {
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
switch (_a.label) {
|
|
389
|
-
case 0:
|
|
390
|
-
console.log("[IPFS] Checking " + cid + "...");
|
|
391
|
-
_a.label = 1;
|
|
392
|
-
case 1:
|
|
393
|
-
_a.trys.push([1, 3, , 4]);
|
|
394
|
-
return [4 /*yield*/, fetch(gateway + "/ipfs/" + cid, {
|
|
395
|
-
method: 'HEAD'
|
|
396
|
-
})];
|
|
397
|
-
case 2:
|
|
398
|
-
response = _a.sent();
|
|
399
|
-
if (response.ok) {
|
|
400
|
-
size = parseInt(response.headers.get('content-length') || '0', 10);
|
|
401
|
-
console.log("[IPFS] Content exists, size: " + size);
|
|
402
|
-
return [2 /*return*/, { exists: true, size: size }];
|
|
403
|
-
}
|
|
404
|
-
return [3 /*break*/, 4];
|
|
405
|
-
case 3:
|
|
406
|
-
error_6 = _a.sent();
|
|
407
|
-
console.log("[IPFS] Content check failed: " + error_6);
|
|
408
|
-
return [3 /*break*/, 4];
|
|
409
|
-
case 4: return [2 /*return*/, { exists: false }];
|
|
410
|
-
}
|
|
277
|
+
export async function checkContent(cid, gateway = 'https://w3s.link') {
|
|
278
|
+
console.log(`[IPFS] Checking ${cid}...`);
|
|
279
|
+
try {
|
|
280
|
+
const response = await fetch(`${gateway}/ipfs/${cid}`, {
|
|
281
|
+
method: 'HEAD',
|
|
411
282
|
});
|
|
412
|
-
|
|
283
|
+
if (response.ok) {
|
|
284
|
+
const size = parseInt(response.headers.get('content-length') || '0', 10);
|
|
285
|
+
console.log(`[IPFS] Content exists, size: ${size}`);
|
|
286
|
+
return { exists: true, size };
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
console.log(`[IPFS] Content check failed: ${error}`);
|
|
291
|
+
}
|
|
292
|
+
return { exists: false };
|
|
413
293
|
}
|
|
414
294
|
/**
|
|
415
295
|
* Get gateway URL for CID
|
|
416
296
|
*/
|
|
417
|
-
export function getGatewayURL(cid, gateway) {
|
|
418
|
-
|
|
419
|
-
return gateway + "/ipfs/" + cid;
|
|
297
|
+
export function getGatewayURL(cid, gateway = 'https://w3s.link') {
|
|
298
|
+
return `${gateway}/ipfs/${cid}`;
|
|
420
299
|
}
|
|
421
300
|
/**
|
|
422
301
|
* Get IPNS URL for name
|
|
423
302
|
*/
|
|
424
|
-
export function getIPNSURL(name, gateway) {
|
|
425
|
-
|
|
426
|
-
return gateway + "/ipns/" + name;
|
|
303
|
+
export function getIPNSURL(name, gateway = 'https://w3s.link') {
|
|
304
|
+
return `${gateway}/ipns/${name}`;
|
|
427
305
|
}
|
|
428
306
|
/**
|
|
429
307
|
* Upload to a local/custom IPFS node
|
|
430
308
|
* Connect to your own IPFS daemon via HTTP API
|
|
431
309
|
*/
|
|
432
|
-
function uploadToLocalIPFS(content, options) {
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
method: 'POST',
|
|
451
|
-
headers: {
|
|
452
|
-
'Content-Type': "multipart/form-data; boundary=" + boundary
|
|
453
|
-
},
|
|
454
|
-
body: body
|
|
455
|
-
})];
|
|
456
|
-
case 1:
|
|
457
|
-
response = _a.sent();
|
|
458
|
-
if (!!response.ok) return [3 /*break*/, 3];
|
|
459
|
-
return [4 /*yield*/, response.text()];
|
|
460
|
-
case 2:
|
|
461
|
-
error = _a.sent();
|
|
462
|
-
throw new Error("Local IPFS upload failed: " + response.status + " " + error);
|
|
463
|
-
case 3: return [4 /*yield*/, response.json()];
|
|
464
|
-
case 4:
|
|
465
|
-
result = _a.sent();
|
|
466
|
-
cid = result.Hash;
|
|
467
|
-
gatewayUrl = process.env.IPFS_GATEWAY_URL || options.gateway || 'https://ipfs.io';
|
|
468
|
-
console.log("[IPFS] Upload complete!");
|
|
469
|
-
console.log("[IPFS] CID: " + cid);
|
|
470
|
-
return [2 /*return*/, {
|
|
471
|
-
cid: cid,
|
|
472
|
-
size: content.length,
|
|
473
|
-
gateway: gatewayUrl,
|
|
474
|
-
pinnedAt: options.pin !== false ? new Date().toISOString() : undefined,
|
|
475
|
-
url: gatewayUrl + "/ipfs/" + cid
|
|
476
|
-
}];
|
|
477
|
-
}
|
|
478
|
-
});
|
|
310
|
+
async function uploadToLocalIPFS(content, options) {
|
|
311
|
+
const apiUrl = process.env.IPFS_API_URL || 'http://localhost:5001';
|
|
312
|
+
const name = options.name || 'pattern.cfp.json';
|
|
313
|
+
console.log(`[IPFS] Uploading ${content.length} bytes to ${apiUrl}...`);
|
|
314
|
+
const boundary = '----IPFSBoundary' + crypto.randomBytes(16).toString('hex');
|
|
315
|
+
const body = Buffer.concat([
|
|
316
|
+
Buffer.from(`--${boundary}\r\n`),
|
|
317
|
+
Buffer.from(`Content-Disposition: form-data; name="file"; filename="${name}"\r\n`),
|
|
318
|
+
Buffer.from(`Content-Type: application/json\r\n\r\n`),
|
|
319
|
+
content,
|
|
320
|
+
Buffer.from(`\r\n--${boundary}--\r\n`),
|
|
321
|
+
]);
|
|
322
|
+
const response = await fetch(`${apiUrl}/api/v0/add?pin=${options.pin !== false}`, {
|
|
323
|
+
method: 'POST',
|
|
324
|
+
headers: {
|
|
325
|
+
'Content-Type': `multipart/form-data; boundary=${boundary}`,
|
|
326
|
+
},
|
|
327
|
+
body,
|
|
479
328
|
});
|
|
329
|
+
if (!response.ok) {
|
|
330
|
+
const error = await response.text();
|
|
331
|
+
throw new Error(`Local IPFS upload failed: ${response.status} ${error}`);
|
|
332
|
+
}
|
|
333
|
+
const result = await response.json();
|
|
334
|
+
const cid = result.Hash;
|
|
335
|
+
// Try to get external gateway URL if configured
|
|
336
|
+
const gatewayUrl = process.env.IPFS_GATEWAY_URL || options.gateway || 'https://ipfs.io';
|
|
337
|
+
console.log(`[IPFS] Upload complete!`);
|
|
338
|
+
console.log(`[IPFS] CID: ${cid}`);
|
|
339
|
+
return {
|
|
340
|
+
cid,
|
|
341
|
+
size: content.length,
|
|
342
|
+
gateway: gatewayUrl,
|
|
343
|
+
pinnedAt: options.pin !== false ? new Date().toISOString() : undefined,
|
|
344
|
+
url: `${gatewayUrl}/ipfs/${cid}`,
|
|
345
|
+
};
|
|
480
346
|
}
|
|
481
347
|
/**
|
|
482
348
|
* Check if local IPFS node is available
|
|
483
349
|
*/
|
|
484
|
-
function checkLocalIPFSNode() {
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
apiUrl = process.env.IPFS_API_URL || 'http://localhost:5001';
|
|
491
|
-
_b.label = 1;
|
|
492
|
-
case 1:
|
|
493
|
-
_b.trys.push([1, 3, , 4]);
|
|
494
|
-
return [4 /*yield*/, fetch(apiUrl + "/api/v0/id", {
|
|
495
|
-
method: 'POST',
|
|
496
|
-
signal: AbortSignal.timeout(2000)
|
|
497
|
-
})];
|
|
498
|
-
case 2:
|
|
499
|
-
response = _b.sent();
|
|
500
|
-
return [2 /*return*/, response.ok];
|
|
501
|
-
case 3:
|
|
502
|
-
_a = _b.sent();
|
|
503
|
-
return [2 /*return*/, false];
|
|
504
|
-
case 4: return [2 /*return*/];
|
|
505
|
-
}
|
|
350
|
+
async function checkLocalIPFSNode() {
|
|
351
|
+
const apiUrl = process.env.IPFS_API_URL || 'http://localhost:5001';
|
|
352
|
+
try {
|
|
353
|
+
const response = await fetch(`${apiUrl}/api/v0/id`, {
|
|
354
|
+
method: 'POST',
|
|
355
|
+
signal: AbortSignal.timeout(2000),
|
|
506
356
|
});
|
|
507
|
-
|
|
357
|
+
return response.ok;
|
|
358
|
+
}
|
|
359
|
+
catch {
|
|
360
|
+
return false;
|
|
361
|
+
}
|
|
508
362
|
}
|
|
509
363
|
/**
|
|
510
364
|
* Check if real IPFS credentials are available
|
|
@@ -516,29 +370,29 @@ export function hasIPFSCredentials() {
|
|
|
516
370
|
* Get IPFS service status
|
|
517
371
|
*/
|
|
518
372
|
export function getIPFSServiceStatus() {
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
373
|
+
const localIPFS = process.env.IPFS_API_URL;
|
|
374
|
+
const web3Token = getWeb3StorageToken();
|
|
375
|
+
const pinataKey = process.env.PINATA_API_KEY;
|
|
522
376
|
if (localIPFS) {
|
|
523
377
|
return {
|
|
524
378
|
service: 'local',
|
|
525
379
|
configured: true,
|
|
526
|
-
message:
|
|
527
|
-
apiUrl: localIPFS
|
|
380
|
+
message: `Local IPFS node configured at ${localIPFS} - FREE uploads enabled`,
|
|
381
|
+
apiUrl: localIPFS,
|
|
528
382
|
};
|
|
529
383
|
}
|
|
530
384
|
if (web3Token) {
|
|
531
385
|
return {
|
|
532
386
|
service: 'web3storage',
|
|
533
387
|
configured: true,
|
|
534
|
-
message: 'Web3.storage configured - real IPFS uploads enabled'
|
|
388
|
+
message: 'Web3.storage configured - real IPFS uploads enabled',
|
|
535
389
|
};
|
|
536
390
|
}
|
|
537
391
|
if (pinataKey) {
|
|
538
392
|
return {
|
|
539
393
|
service: 'pinata',
|
|
540
394
|
configured: true,
|
|
541
|
-
message: 'Pinata configured - real IPFS uploads enabled'
|
|
395
|
+
message: 'Pinata configured - real IPFS uploads enabled',
|
|
542
396
|
};
|
|
543
397
|
}
|
|
544
398
|
return {
|
|
@@ -547,7 +401,7 @@ export function getIPFSServiceStatus() {
|
|
|
547
401
|
message: 'No IPFS credentials - using demo mode. Options:\n' +
|
|
548
402
|
' 1. IPFS_API_URL=http://YOUR_NODE:5001 (FREE - your own node)\n' +
|
|
549
403
|
' 2. WEB3_STORAGE_TOKEN (free 5GB at web3.storage)\n' +
|
|
550
|
-
' 3. PINATA_API_KEY (free 1GB at pinata.cloud)'
|
|
404
|
+
' 3. PINATA_API_KEY (free 1GB at pinata.cloud)',
|
|
551
405
|
};
|
|
552
406
|
}
|
|
553
407
|
/**
|