@feltdb/core 0.13.0 → 0.16.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/dist/agent-runtime.d.ts +64 -2
- package/dist/agent-runtime.d.ts.map +1 -1
- package/dist/agent-runtime.js +121 -11
- package/dist/agent-state.d.ts +68 -0
- package/dist/agent-state.d.ts.map +1 -1
- package/dist/agent-state.js +210 -12
- package/dist/agent.d.ts +10 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +10 -1
- package/dist/build-identity.json +12 -4
- package/dist/cli/commands.js +214 -10
- package/dist/cli/publish-engine.js +116 -16
- package/dist/collection.d.ts +3 -1
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +33 -8
- package/dist/create/build-identity.json +12 -4
- package/dist/create/cli.js +1 -1
- package/dist/create/create.js +4 -6
- package/dist/create/managed-account.js +93 -35
- package/dist/create/package-versions.js +1 -1
- package/dist/create/server-source/Cargo.lock +8 -511
- package/dist/create/server-source/Cargo.toml +2 -13
- package/dist/create/server-source/crates/feltdb-client/Cargo.toml +1 -1
- package/dist/create/server-source/crates/feltdb-server/Cargo.toml +1 -1
- package/dist/create/server-source/crates/feltdb-server/README.md +6 -1
- package/dist/create/server-source/crates/feltdb-server/src/app_state.rs +9 -1
- package/dist/create/server-source/crates/feltdb-server/src/auth.rs +85 -25
- package/dist/create/server-source/crates/feltdb-server/src/backup.rs +4 -0
- package/dist/create/server-source/crates/feltdb-server/src/console_accounts.rs +1009 -0
- package/dist/create/server-source/crates/feltdb-server/src/control_authorization.rs +441 -0
- package/dist/create/server-source/crates/feltdb-server/src/identity.rs +68 -6
- package/dist/create/server-source/crates/feltdb-server/src/key_management.rs +355 -23
- package/dist/create/server-source/crates/feltdb-server/src/lib.rs +3 -0
- package/dist/create/server-source/crates/feltdb-server/src/main.rs +1134 -96
- package/dist/create/server-source/crates/feltdb-server/src/redaction.rs +208 -0
- package/dist/create/server-source/crates/feltdb-server/src/tenancy.rs +198 -19
- package/dist/create/server-source/crates/feltdb-server/tests/transaction_precondition_contract.rs +403 -0
- package/dist/create/server-source/crates/feltdb-wasm/Cargo.toml +1 -1
- package/dist/db.d.ts +75 -10
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +168 -29
- package/dist/deployment.d.ts +19 -0
- package/dist/deployment.d.ts.map +1 -1
- package/dist/deployment.js +38 -2
- package/dist/embedded-query.d.ts.map +1 -1
- package/dist/embedded-query.js +5 -4
- package/dist/embedded-transaction.d.ts +8 -4
- package/dist/embedded-transaction.d.ts.map +1 -1
- package/dist/embedded-transaction.js +55 -19
- package/dist/error-codes.d.ts +36 -2
- package/dist/error-codes.d.ts.map +1 -1
- package/dist/error-codes.js +50 -3
- package/dist/feltdb.d.ts +7 -0
- package/dist/feltdb.d.ts.map +1 -1
- package/dist/file-db.d.ts +27 -0
- package/dist/file-db.d.ts.map +1 -1
- package/dist/file-db.js +145 -7
- package/dist/http-client.d.ts +11 -3
- package/dist/http-client.d.ts.map +1 -1
- package/dist/http-client.js +27 -14
- package/dist/http-db.d.ts +43 -1
- package/dist/http-db.d.ts.map +1 -1
- package/dist/http-db.js +287 -59
- package/dist/index.js +1 -1
- package/dist/local-state-lock.d.ts +34 -0
- package/dist/local-state-lock.d.ts.map +1 -0
- package/dist/local-state-lock.js +225 -0
- package/dist/managed-recovery.d.ts +6 -0
- package/dist/managed-recovery.d.ts.map +1 -1
- package/dist/managed-recovery.js +9 -0
- package/dist/reactive-graph.d.ts +0 -3
- package/dist/reactive-graph.d.ts.map +1 -1
- package/dist/reactive-graph.js +11 -1
- package/dist/runtime-registry.d.ts +7 -2
- package/dist/runtime-registry.d.ts.map +1 -1
- package/dist/runtime-registry.js +2 -2
- package/dist/studio/components/index.js +1 -1
- package/dist/studio/{components-BSGmHfif.js → components-CJmzntBi.js} +2 -1
- package/dist/studio/index.js +1 -1
- package/dist/studio-app/assets/{feltdb_wasm-3hDngl1h.js → feltdb_wasm-DtybUY0q.js} +1 -1
- package/dist/studio-app/assets/feltdb_wasm_bg-DsgIUwaB.wasm +0 -0
- package/dist/studio-app/assets/index-C4OffsZl.js +37 -0
- package/dist/studio-app/index.html +1 -1
- package/dist/transaction.d.ts +27 -11
- package/dist/transaction.d.ts.map +1 -1
- package/dist/transaction.js +20 -14
- package/dist/wasm/feltdb_wasm_bg.wasm +0 -0
- package/dist/wasm/package.json +1 -1
- package/dist/workload.d.ts +86 -6
- package/dist/workload.d.ts.map +1 -1
- package/dist/workload.js +51 -3
- package/dist/workspace/workspace-connection.d.ts.map +1 -1
- package/dist/workspace/workspace-connection.js +14 -3
- package/package.json +1 -1
- package/dist/create/server-source/crates/feltdb/Cargo.lock +0 -175
- package/dist/create/server-source/crates/feltdb/Cargo.toml +0 -102
- package/dist/create/server-source/crates/feltdb/LICENSE +0 -21
- package/dist/create/server-source/crates/feltdb/README.md +0 -75
- package/dist/create/server-source/crates/feltdb/benches/baselines/gate-13-redux.json +0 -370
- package/dist/create/server-source/crates/feltdb/benches/gate13_baseline.rs +0 -589
- package/dist/create/server-source/crates/feltdb/benches/gate13_phase_7_1_release_economics.rs +0 -247
- package/dist/create/server-source/crates/feltdb/benches/gate_13_redux.rs +0 -440
- package/dist/create/server-source/crates/feltdb/benches/gate_13_regression_runner.rs +0 -275
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_concurrent_writer_scaling.rs +0 -381
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_production_admission_revalidation.rs +0 -467
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_rc2_admission_contract.rs +0 -489
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_rc_root_cause.rs +0 -281
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_sync1_queued_prototype.rs +0 -606
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_sync_economics.rs +0 -531
- package/dist/create/server-source/crates/feltdb/benches/gate_14b_causal_backlog_scaling.rs +0 -462
- package/dist/create/server-source/crates/feltdb/benches/gate_14c_replication_contract_test.rs +0 -505
- package/dist/create/server-source/crates/feltdb/benches/gate_14c_replication_scaling.rs +0 -484
- package/dist/create/server-source/crates/feltdb/benches/gate_14d_combined_dimension_scaling.rs +0 -758
- package/dist/create/server-source/crates/feltdb/benches/phase_7_1_2_optimization_benchmark.rs +0 -421
- package/dist/create/server-source/crates/feltdb/benches/phase_7_1_3_crossover_analysis.rs +0 -329
- package/dist/create/server-source/crates/feltdb/src/acceptance_tests.rs +0 -1705
- package/dist/create/server-source/crates/feltdb/src/acquisition.rs +0 -286
- package/dist/create/server-source/crates/feltdb/src/admission.rs +0 -185
- package/dist/create/server-source/crates/feltdb/src/admission_contract_tests.rs +0 -507
- package/dist/create/server-source/crates/feltdb/src/adversarial_transport.rs +0 -539
- package/dist/create/server-source/crates/feltdb/src/agent_state.rs +0 -320
- package/dist/create/server-source/crates/feltdb/src/agent_transition_contract.rs +0 -1545
- package/dist/create/server-source/crates/feltdb/src/analytics.rs +0 -521
- package/dist/create/server-source/crates/feltdb/src/application.rs +0 -2674
- package/dist/create/server-source/crates/feltdb/src/application_runtime.rs +0 -1070
- package/dist/create/server-source/crates/feltdb/src/authority.rs +0 -479
- package/dist/create/server-source/crates/feltdb/src/authority_failover.rs +0 -847
- package/dist/create/server-source/crates/feltdb/src/authorization.rs +0 -1030
- package/dist/create/server-source/crates/feltdb/src/authorization_security_tests.rs +0 -1122
- package/dist/create/server-source/crates/feltdb/src/bin/feltdb-authority-client.rs +0 -32
- package/dist/create/server-source/crates/feltdb/src/bin/feltdb-authority.rs +0 -19
- package/dist/create/server-source/crates/feltdb/src/bin/feltdb_node.rs +0 -1474
- package/dist/create/server-source/crates/feltdb/src/capabilities/mod.rs +0 -8
- package/dist/create/server-source/crates/feltdb/src/capabilities/search.rs +0 -418
- package/dist/create/server-source/crates/feltdb/src/capabilities/vector.rs +0 -482
- package/dist/create/server-source/crates/feltdb/src/capability.rs +0 -903
- package/dist/create/server-source/crates/feltdb/src/cardinality_diagnostics.rs +0 -263
- package/dist/create/server-source/crates/feltdb/src/cardinality_endpoint.rs +0 -77
- package/dist/create/server-source/crates/feltdb/src/causal_backlog_bound.rs +0 -496
- package/dist/create/server-source/crates/feltdb/src/causal_dependency_barrier.rs +0 -2574
- package/dist/create/server-source/crates/feltdb/src/causal_dependency_barrier_phase_7_1.rs +0 -212
- package/dist/create/server-source/crates/feltdb/src/concurrency_fuzzing.rs +0 -422
- package/dist/create/server-source/crates/feltdb/src/consistency_contract.rs +0 -445
- package/dist/create/server-source/crates/feltdb/src/content_distribution.rs +0 -465
- package/dist/create/server-source/crates/feltdb/src/convergence.rs +0 -634
- package/dist/create/server-source/crates/feltdb/src/crash_atomic_boundary.rs +0 -427
- package/dist/create/server-source/crates/feltdb/src/crash_injection.rs +0 -376
- package/dist/create/server-source/crates/feltdb/src/crash_recovery_tests.rs +0 -365
- package/dist/create/server-source/crates/feltdb/src/cron.rs +0 -294
- package/dist/create/server-source/crates/feltdb/src/dedup_bound_investigation.rs +0 -483
- package/dist/create/server-source/crates/feltdb/src/distributed_indexing.rs +0 -477
- package/dist/create/server-source/crates/feltdb/src/distributed_tests.rs +0 -1003
- package/dist/create/server-source/crates/feltdb/src/distributed_transactions.rs +0 -1334
- package/dist/create/server-source/crates/feltdb/src/durability_guarantees.rs +0 -368
- package/dist/create/server-source/crates/feltdb/src/durable_dedup_set.rs +0 -231
- package/dist/create/server-source/crates/feltdb/src/durable_operation_identity.rs +0 -482
- package/dist/create/server-source/crates/feltdb/src/durable_operation_log.rs +0 -203
- package/dist/create/server-source/crates/feltdb/src/durable_sync.rs +0 -317
- package/dist/create/server-source/crates/feltdb/src/equality_index.rs +0 -595
- package/dist/create/server-source/crates/feltdb/src/execution.rs +0 -426
- package/dist/create/server-source/crates/feltdb/src/in_process_transport.rs +0 -214
- package/dist/create/server-source/crates/feltdb/src/indexing.rs +0 -776
- package/dist/create/server-source/crates/feltdb/src/lib.rs +0 -7274
- package/dist/create/server-source/crates/feltdb/src/managed_cas_tests.rs +0 -234
- package/dist/create/server-source/crates/feltdb/src/materialization.rs +0 -184
- package/dist/create/server-source/crates/feltdb/src/metrics.rs +0 -266
- package/dist/create/server-source/crates/feltdb/src/multi_node_convergence.rs +0 -310
- package/dist/create/server-source/crates/feltdb/src/multi_operation_transaction.rs +0 -736
- package/dist/create/server-source/crates/feltdb/src/observability.rs +0 -379
- package/dist/create/server-source/crates/feltdb/src/operation.rs +0 -290
- package/dist/create/server-source/crates/feltdb/src/operation_algebra.rs +0 -439
- package/dist/create/server-source/crates/feltdb/src/operation_log.rs +0 -349
- package/dist/create/server-source/crates/feltdb/src/p1_application_atomicity.rs +0 -332
- package/dist/create/server-source/crates/feltdb/src/p1_atomicity_acceptance.rs +0 -718
- package/dist/create/server-source/crates/feltdb/src/partition_reconciliation.rs +0 -487
- package/dist/create/server-source/crates/feltdb/src/peer_registry.rs +0 -166
- package/dist/create/server-source/crates/feltdb/src/permutation_scheduler.rs +0 -289
- package/dist/create/server-source/crates/feltdb/src/persistence_reality.rs +0 -566
- package/dist/create/server-source/crates/feltdb/src/phase1b_acceptance.rs +0 -3391
- package/dist/create/server-source/crates/feltdb/src/phase1c1_acceptance.rs +0 -203
- package/dist/create/server-source/crates/feltdb/src/phase1c2_acceptance.rs +0 -261
- package/dist/create/server-source/crates/feltdb/src/phase1c3_acceptance.rs +0 -502
- package/dist/create/server-source/crates/feltdb/src/phase1c_atomicity_proof.rs +0 -216
- package/dist/create/server-source/crates/feltdb/src/phase5_integration.rs +0 -303
- package/dist/create/server-source/crates/feltdb/src/phase5_scenarios.rs +0 -323
- package/dist/create/server-source/crates/feltdb/src/phase6_adversarial_scenarios.rs +0 -531
- package/dist/create/server-source/crates/feltdb/src/phase6_convergence_validator.rs +0 -406
- package/dist/create/server-source/crates/feltdb/src/phase6_persistence.rs +0 -436
- package/dist/create/server-source/crates/feltdb/src/phase_1c_real_tcp.rs +0 -387
- package/dist/create/server-source/crates/feltdb/src/phase_2a_failures.rs +0 -378
- package/dist/create/server-source/crates/feltdb/src/phase_2b_network.rs +0 -359
- package/dist/create/server-source/crates/feltdb/src/phase_2c_cascading.rs +0 -372
- package/dist/create/server-source/crates/feltdb/src/phase_3_durability.rs +0 -404
- package/dist/create/server-source/crates/feltdb/src/phase_4_baseline.rs +0 -376
- package/dist/create/server-source/crates/feltdb/src/phase_5_soak.rs +0 -461
- package/dist/create/server-source/crates/feltdb/src/policy_evaluation.rs +0 -2125
- package/dist/create/server-source/crates/feltdb/src/production_api.rs +0 -418
- package/dist/create/server-source/crates/feltdb/src/provenance.rs +0 -207
- package/dist/create/server-source/crates/feltdb/src/query_execution_diagnostics.rs +0 -126
- package/dist/create/server-source/crates/feltdb/src/query_performance.rs +0 -218
- package/dist/create/server-source/crates/feltdb/src/read_basis.rs +0 -257
- package/dist/create/server-source/crates/feltdb/src/references.rs +0 -404
- package/dist/create/server-source/crates/feltdb/src/replay_fuzzing.rs +0 -401
- package/dist/create/server-source/crates/feltdb/src/replica_acknowledgements.rs +0 -501
- package/dist/create/server-source/crates/feltdb/src/replica_membership.rs +0 -680
- package/dist/create/server-source/crates/feltdb/src/replication_manager.rs +0 -163
- package/dist/create/server-source/crates/feltdb/src/replication_protocol.rs +0 -133
- package/dist/create/server-source/crates/feltdb/src/routing.rs +0 -409
- package/dist/create/server-source/crates/feltdb/src/semantic_decision.rs +0 -2029
- package/dist/create/server-source/crates/feltdb/src/semantic_query.rs +0 -599
- package/dist/create/server-source/crates/feltdb/src/sharding.rs +0 -549
- package/dist/create/server-source/crates/feltdb/src/state_conflict_contract.rs +0 -516
- package/dist/create/server-source/crates/feltdb/src/state_contract.rs +0 -5894
- package/dist/create/server-source/crates/feltdb/src/state_diff_contract.rs +0 -222
- package/dist/create/server-source/crates/feltdb/src/state_facade.rs +0 -320
- package/dist/create/server-source/crates/feltdb/src/state_hash.rs +0 -291
- package/dist/create/server-source/crates/feltdb/src/state_model.rs +0 -4158
- package/dist/create/server-source/crates/feltdb/src/state_transition_store.rs +0 -379
- package/dist/create/server-source/crates/feltdb/src/state_trigger.rs +0 -673
- package/dist/create/server-source/crates/feltdb/src/storage.rs +0 -273
- package/dist/create/server-source/crates/feltdb/src/submission.rs +0 -471
- package/dist/create/server-source/crates/feltdb/src/sync.rs +0 -495
- package/dist/create/server-source/crates/feltdb/src/sync_contract.rs +0 -822
- package/dist/create/server-source/crates/feltdb/src/tcp_transport.rs +0 -433
- package/dist/create/server-source/crates/feltdb/src/transaction_api.rs +0 -462
- package/dist/create/server-source/crates/feltdb/src/transaction_invariants.rs +0 -965
- package/dist/create/server-source/crates/feltdb/src/transaction_preconditions.rs +0 -1120
- package/dist/create/server-source/crates/feltdb/src/transactions.rs +0 -643
- package/dist/create/server-source/crates/feltdb/src/trigger.rs +0 -390
- package/dist/create/server-source/crates/feltdb/src/trigger_contract.rs +0 -749
- package/dist/create/server-source/crates/feltdb/src/versioned_object_substrate.rs +0 -708
- package/dist/create/server-source/crates/feltdb/src/worker_mesh.rs +0 -1133
- package/dist/create/server-source/crates/feltdb/src/workflow.rs +0 -713
- package/dist/create/server-source/crates/feltdb/src/workflow_acceptance_tests.rs +0 -510
- package/dist/create/server-source/crates/feltdb/src/workflow_integration.rs +0 -354
- package/dist/create/server-source/crates/feltdb/src/workflow_runtime.rs +0 -594
- package/dist/create/server-source/crates/feltdb/src/workload.rs +0 -2886
- package/dist/create/server-source/crates/feltdb/src/workload_diagnostics.rs +0 -456
- package/dist/create/server-source/crates/feltdb/tests/agent_state_native.rs +0 -1188
- package/dist/create/server-source/crates/feltdb/tests/agent_transition_contract_conformance.rs +0 -2884
- package/dist/create/server-source/crates/feltdb/tests/authority_process.rs +0 -297
- package/dist/create/server-source/crates/feltdb/tests/authority_transaction_identity.rs +0 -534
- package/dist/create/server-source/crates/feltdb/tests/bounded_read_contract.rs +0 -132
- package/dist/create/server-source/crates/feltdb/tests/branching_evidence.rs +0 -299
- package/dist/create/server-source/crates/feltdb/tests/common/mod.rs +0 -96
- package/dist/create/server-source/crates/feltdb/tests/compaction_stall_contract.rs +0 -272
- package/dist/create/server-source/crates/feltdb/tests/crash_durability_contract.rs +0 -467
- package/dist/create/server-source/crates/feltdb/tests/current_revision_authority_evidence.rs +0 -309
- package/dist/create/server-source/crates/feltdb/tests/durable_backup_contract.rs +0 -445
- package/dist/create/server-source/crates/feltdb/tests/durable_corruption_contract.rs +0 -518
- package/dist/create/server-source/crates/feltdb/tests/durable_format_compatibility.rs +0 -392
- package/dist/create/server-source/crates/feltdb/tests/feltdb_state_boundary_tests.rs +0 -850
- package/dist/create/server-source/crates/feltdb/tests/fixtures/agent_transition_corpus.json +0 -23340
- package/dist/create/server-source/crates/feltdb/tests/fixtures/state_conflict_contract_corpus.json +0 -1916
- package/dist/create/server-source/crates/feltdb/tests/fixtures/state_diff_contract_corpus.json +0 -1878
- package/dist/create/server-source/crates/feltdb/tests/fixtures/trigger_contract_corpus.json +0 -1862
- package/dist/create/server-source/crates/feltdb/tests/generalized_version_control_evidence.rs +0 -123
- package/dist/create/server-source/crates/feltdb/tests/generalized_version_control_substrate_completion.rs +0 -299
- package/dist/create/server-source/crates/feltdb/tests/local_process_ownership.rs +0 -69
- package/dist/create/server-source/crates/feltdb/tests/managed_incident_regression.rs +0 -191
- package/dist/create/server-source/crates/feltdb/tests/operational_health_contract.rs +0 -278
- package/dist/create/server-source/crates/feltdb/tests/pr34_query_collection.rs +0 -234
- package/dist/create/server-source/crates/feltdb/tests/pr35_equality_index.rs +0 -947
- package/dist/create/server-source/crates/feltdb/tests/pr7_self_authorization_proof.rs +0 -404
- package/dist/create/server-source/crates/feltdb/tests/pr8_vocabulary_assessment.rs +0 -916
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase2_boundary_tests.rs +0 -1045
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3a_path_a_tests.rs +0 -347
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_authorized_mutations.rs +0 -361
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_role_based_authorization.rs +0 -330
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_simple_auth_delete.rs +0 -93
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_team_delete_role_authorization.rs +0 -622
- package/dist/create/server-source/crates/feltdb/tests/pr9_teams_role_based_access.rs +0 -517
- package/dist/create/server-source/crates/feltdb/tests/production_certification.rs +0 -1153
- package/dist/create/server-source/crates/feltdb/tests/production_contract.rs +0 -771
- package/dist/create/server-source/crates/feltdb/tests/production_readiness_contract.rs +0 -1383
- package/dist/create/server-source/crates/feltdb/tests/reconciliation_application.rs +0 -868
- package/dist/create/server-source/crates/feltdb/tests/reconciliation_wire_format_evidence.rs +0 -221
- package/dist/create/server-source/crates/feltdb/tests/replicated_history_contract.rs +0 -417
- package/dist/create/server-source/crates/feltdb/tests/resource_scoped_revisions.rs +0 -338
- package/dist/create/server-source/crates/feltdb/tests/revision_identity_contract.rs +0 -1039
- package/dist/create/server-source/crates/feltdb/tests/revision_model_decision.rs +0 -739
- package/dist/create/server-source/crates/feltdb/tests/revision_retention_boundary_evidence.rs +0 -452
- package/dist/create/server-source/crates/feltdb/tests/saas_authorization_integration.rs +0 -81
- package/dist/create/server-source/crates/feltdb/tests/saas_invitation_lifecycle.rs +0 -438
- package/dist/create/server-source/crates/feltdb/tests/semantic_decision.rs +0 -1165
- package/dist/create/server-source/crates/feltdb/tests/semantic_query.rs +0 -767
- package/dist/create/server-source/crates/feltdb/tests/semantic_query_contract.rs +0 -363
- package/dist/create/server-source/crates/feltdb/tests/state_conflict_contract_conformance.rs +0 -1799
- package/dist/create/server-source/crates/feltdb/tests/state_diff_contract_conformance.rs +0 -1316
- package/dist/create/server-source/crates/feltdb/tests/state_model_integration.rs +0 -358
- package/dist/create/server-source/crates/feltdb/tests/state_persistence_integration.rs +0 -365
- package/dist/create/server-source/crates/feltdb/tests/state_ref_authority.rs +0 -918
- package/dist/create/server-source/crates/feltdb/tests/state_store_boundary_evidence.rs +0 -299
- package/dist/create/server-source/crates/feltdb/tests/storage_independent_versioned_object_substrate.rs +0 -328
- package/dist/create/server-source/crates/feltdb/tests/sync_divergence_evidence.rs +0 -255
- package/dist/create/server-source/crates/feltdb/tests/three_way_input_boundary_evidence.rs +0 -249
- package/dist/create/server-source/crates/feltdb/tests/trigger_contract_conformance.rs +0 -994
- package/dist/create/server-source/crates/feltdb/tests/workload_envelope_contract.rs +0 -484
- package/dist/studio-app/assets/feltdb_wasm_bg-CFQT4gCy.wasm +0 -0
- package/dist/studio-app/assets/index-Dql1hS5m.js +0 -30
package/dist/db.js
CHANGED
|
@@ -8,10 +8,11 @@ import { describeFreshness, readRevision, } from './freshness.js';
|
|
|
8
8
|
import { Collection, Relationship } from './collection.js';
|
|
9
9
|
import { AtomicTransactionBuilder, AtomicTransactionError, ConditionalConflictError, TransactionIdConflictError, TransactionIdUnverifiableError, conditionalRefusal, normaliseReadSet, } from './transaction.js';
|
|
10
10
|
import { CellImpl } from './cell.js';
|
|
11
|
-
import { createAgentRef } from './agent.js';
|
|
11
|
+
import { createAgentRef, parseAgentRef } from './agent.js';
|
|
12
12
|
import { AgentRegistry } from './agent-registry.js';
|
|
13
13
|
import { AgentRuntime } from './agent-runtime.js';
|
|
14
14
|
import { MemoryJsDb } from './memory-db.js';
|
|
15
|
+
import { getReactiveDependencyGraph } from './reactive-graph.js';
|
|
15
16
|
import { HttpJsDb } from './http-db.js';
|
|
16
17
|
import { IndexedDbJsDb } from './indexeddb-db.js';
|
|
17
18
|
import { requireRuntime } from './runtime-registry.js';
|
|
@@ -20,7 +21,7 @@ import { assertSnapshotDefinition, createRuntimeSnapshot, snapshotDefinitionsMat
|
|
|
20
21
|
import { emptyFlowSpec, planFlowSpecMigration, validateFlowSpec } from './flowspec.js';
|
|
21
22
|
import { SyncController } from './sync-contract.js';
|
|
22
23
|
import { resolveFeltDBDeployment, } from './deployment.js';
|
|
23
|
-
import { WorkloadClient } from './workload.js';
|
|
24
|
+
import { WorkloadClient, UnsupportedWorkloadClient } from './workload.js';
|
|
24
25
|
import { MeshClient, WorkerClient, WorkerPoolClient } from './worker.js';
|
|
25
26
|
import { ArtifactClient } from './artifact.js';
|
|
26
27
|
import { BundleClient } from './bundle.js';
|
|
@@ -62,6 +63,7 @@ function explicitDeployment(options) {
|
|
|
62
63
|
applicationId: options.server.applicationId,
|
|
63
64
|
environment: options.server.environment,
|
|
64
65
|
requestTimeoutMs: options.server.requestTimeoutMs,
|
|
66
|
+
allowServiceKeyInBrowser: options.server.operatorConsole === true,
|
|
65
67
|
};
|
|
66
68
|
}
|
|
67
69
|
if (options.browser)
|
|
@@ -85,11 +87,12 @@ export function createFeltDB(options = {}) {
|
|
|
85
87
|
environment: deployment.environment,
|
|
86
88
|
requestTimeoutMs: options.server?.requestTimeoutMs,
|
|
87
89
|
authorityScope,
|
|
90
|
+
allowServiceKeyInBrowser: options.server?.operatorConsole === true,
|
|
88
91
|
})
|
|
89
92
|
: deployment.mode === 'browser' ? new IndexedDbJsDb(deployment.namespace)
|
|
90
93
|
: deployment.mode === 'local' ? requireRuntime('file', deployment.path, 'createFeltDB() resolved to the local Node runtime, but the Node file runtime is not available here. '
|
|
91
94
|
+ 'In a browser use FELTDB_MODE=browser or createFeltDB({ browser: true }); in Node import "@feltdb/core" '
|
|
92
|
-
+ 'rather than a browser-conditioned build.')
|
|
95
|
+
+ 'rather than a browser-conditioned build.', { access: options.access ?? 'exclusive' })
|
|
93
96
|
: new MemoryJsDb(deployment.namespace);
|
|
94
97
|
const runtimeName = deployment.mode === 'local' ? 'node' : deployment.mode;
|
|
95
98
|
const bridge = attachDevelopmentRuntimeBridge({
|
|
@@ -134,6 +137,13 @@ function observeRuntime(runtime, observation) {
|
|
|
134
137
|
* State-first database interface.
|
|
135
138
|
* Applications use this to treat FeltDB collections as live application state.
|
|
136
139
|
*/
|
|
140
|
+
/** Where embedded agent executions are durable. */
|
|
141
|
+
const AGENT_EXECUTION_COLLECTION = '_flow_agent_executions';
|
|
142
|
+
/** Indexes `findAgentExecution` reads through: newest first per task and per agent. */
|
|
143
|
+
const AGENT_EXECUTION_INDEXES = [
|
|
144
|
+
{ name: 'agent_executions_by_task_created', type: 'compound', fields: ['taskId', 'createdMs', 'id'], directions: ['asc', 'desc', 'asc'], persistent: true },
|
|
145
|
+
{ name: 'agent_executions_by_agent_created', type: 'compound', fields: ['agentRef', 'createdMs', 'id'], directions: ['asc', 'desc', 'asc'], persistent: true },
|
|
146
|
+
];
|
|
137
147
|
export class StateFirstDB {
|
|
138
148
|
jsDb;
|
|
139
149
|
collections = new Map();
|
|
@@ -150,7 +160,12 @@ export class StateFirstDB {
|
|
|
150
160
|
authorityScope;
|
|
151
161
|
tenantFactory;
|
|
152
162
|
localActorSession;
|
|
153
|
-
|
|
163
|
+
/**
|
|
164
|
+
* Durable Work. Server-backed runtimes talk to the authority with their own credentials; embedded runtimes (memory, file, browser) have
|
|
165
|
+
* no Durable Work engine, so each operation refuses with `CONTRACT_UNSUPPORTED` and a pointer to `feltdb-server`
|
|
166
|
+
* (see `capabilities().durableWork`).
|
|
167
|
+
*/
|
|
168
|
+
workloads;
|
|
154
169
|
artifacts = new ArtifactClient();
|
|
155
170
|
bundle = new BundleClient();
|
|
156
171
|
releases = new ReleaseClient();
|
|
@@ -220,6 +235,13 @@ export class StateFirstDB {
|
|
|
220
235
|
source: 'feltdb.client',
|
|
221
236
|
});
|
|
222
237
|
this.runtimeInfo = this.detectRuntime();
|
|
238
|
+
if (jsDb instanceof HttpJsDb) {
|
|
239
|
+
const { baseUrl, fetcher } = jsDb.authority_transport();
|
|
240
|
+
this.workloads = new WorkloadClient(baseUrl, fetcher);
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
this.workloads = new UnsupportedWorkloadClient(this.runtimeInfo.storage);
|
|
244
|
+
}
|
|
223
245
|
this.substrate = new FeltDBPublicContract(this, authorityScope, this.deployment.applicationId, this.deployment.environment ?? 'production', this.jsDb instanceof HttpJsDb ? this.jsDb.public_request.bind(this.jsDb) : undefined);
|
|
224
246
|
this.agentRegistry = new AgentRegistry();
|
|
225
247
|
const agentConfig = {
|
|
@@ -232,6 +254,15 @@ export class StateFirstDB {
|
|
|
232
254
|
},
|
|
233
255
|
};
|
|
234
256
|
this.agentRuntime = new AgentRuntime(this.agentRegistry, agentConfig);
|
|
257
|
+
this.agentRuntime.bindStore({
|
|
258
|
+
create: execution => this.collection(AGENT_EXECUTION_COLLECTION)
|
|
259
|
+
.insert(this.agentExecutionRecord(execution), execution.executionId)
|
|
260
|
+
.then(() => undefined),
|
|
261
|
+
update: execution => this.collection(AGENT_EXECUTION_COLLECTION)
|
|
262
|
+
.update(execution.executionId, this.agentExecutionRecord(execution))
|
|
263
|
+
.then(() => undefined),
|
|
264
|
+
find: query => this.queryAgentExecution(query),
|
|
265
|
+
});
|
|
235
266
|
// Emit initialization telemetry event
|
|
236
267
|
// Non-blocking, fails silently if telemetry unavailable
|
|
237
268
|
emitTelemetry('initialize');
|
|
@@ -344,6 +375,8 @@ export class StateFirstDB {
|
|
|
344
375
|
replication: typeof this.jsDb.export_operations === 'function' || typeof this.jsDb.apply_remote_operations === 'function',
|
|
345
376
|
remoteAuthority,
|
|
346
377
|
offline: !remoteAuthority,
|
|
378
|
+
content: typeof this.jsDb.storeContent === 'function' && typeof this.jsDb.acquireContent === 'function',
|
|
379
|
+
durableWork: remoteAuthority ? 'supported' : 'requires-server',
|
|
347
380
|
};
|
|
348
381
|
}
|
|
349
382
|
/**
|
|
@@ -506,6 +539,33 @@ export class StateFirstDB {
|
|
|
506
539
|
* transactions. Runtimes that cannot refuse rather than silently degrading
|
|
507
540
|
* the transaction into a sequence of independent writes.
|
|
508
541
|
*/
|
|
542
|
+
/**
|
|
543
|
+
* Tell this process's live collections that a transaction committed.
|
|
544
|
+
*
|
|
545
|
+
* Collection writes publish through the reactive dependency graph; a
|
|
546
|
+
* transaction bypasses the collection, so without this a subscriber on the
|
|
547
|
+
* local file or memory runtime never learns about it. The announcement is
|
|
548
|
+
* a notification only (subscribers re-read committed state), and it runs
|
|
549
|
+
* after the commit is durable: a failing subscriber cannot turn a committed
|
|
550
|
+
* transaction into a reported failure.
|
|
551
|
+
*/
|
|
552
|
+
async announceCommittedTransaction(operations) {
|
|
553
|
+
const graph = getReactiveDependencyGraph();
|
|
554
|
+
const timestamp = Date.now();
|
|
555
|
+
for (const operation of operations) {
|
|
556
|
+
try {
|
|
557
|
+
await graph.emitChange(operation.collection, {
|
|
558
|
+
type: operation.value === undefined ? 'delete' : 'update',
|
|
559
|
+
key: `${operation.collection}:${operation.id}`,
|
|
560
|
+
value: operation.value ?? null,
|
|
561
|
+
timestamp,
|
|
562
|
+
});
|
|
563
|
+
}
|
|
564
|
+
catch {
|
|
565
|
+
// Notification is best-effort; the commit already happened.
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
}
|
|
509
569
|
async transaction(build, options = {}) {
|
|
510
570
|
// A transaction may be staged through a callback or described in full. The
|
|
511
571
|
// second is not a second mechanism: it builds the same request, through the
|
|
@@ -534,7 +594,7 @@ export class StateFirstDB {
|
|
|
534
594
|
if (!this.jsDb.commit_transaction) {
|
|
535
595
|
const error = new AtomicTransactionError('This FeltDB runtime does not provide atomic transactions. '
|
|
536
596
|
+ 'Connect to a FeltDB authority (createFeltDB({ server: ... })) to use db.transaction(). '
|
|
537
|
-
+ 'FeltDB will not emulate a transaction with separate writes, because that would not be atomic.', builder.transactionId);
|
|
597
|
+
+ 'FeltDB will not emulate a transaction with separate writes, because that would not be atomic.', builder.transactionId, FeltDBErrorCode.CONTRACT_UNSUPPORTED);
|
|
538
598
|
observed?.fail(error);
|
|
539
599
|
throw error;
|
|
540
600
|
}
|
|
@@ -547,7 +607,7 @@ export class StateFirstDB {
|
|
|
547
607
|
}
|
|
548
608
|
const request = builder.seal();
|
|
549
609
|
if (request.operations.length === 0) {
|
|
550
|
-
const error = new AtomicTransactionError('a transaction requires at least one operation', request.transactionId);
|
|
610
|
+
const error = new AtomicTransactionError('a transaction requires at least one operation', request.transactionId, FeltDBErrorCode.INVALID_REQUEST);
|
|
551
611
|
observed?.fail(error);
|
|
552
612
|
throw error;
|
|
553
613
|
}
|
|
@@ -584,6 +644,11 @@ export class StateFirstDB {
|
|
|
584
644
|
duplicate: completed.duplicate,
|
|
585
645
|
...(completed.binding ? { binding: completed.binding } : {}),
|
|
586
646
|
});
|
|
647
|
+
// A transaction commits the same durable state a collection write does,
|
|
648
|
+
// so it reaches the same live subscribers. A duplicate applied nothing
|
|
649
|
+
// and announces nothing.
|
|
650
|
+
if (!completed.duplicate)
|
|
651
|
+
await this.announceCommittedTransaction(request.operations);
|
|
587
652
|
return completed;
|
|
588
653
|
}
|
|
589
654
|
catch (error) {
|
|
@@ -594,17 +659,23 @@ export class StateFirstDB {
|
|
|
594
659
|
// conflict must be distinguishable from an infrastructure failure without
|
|
595
660
|
// reading the message.
|
|
596
661
|
const refusal = conditionalRefusal(error);
|
|
597
|
-
const
|
|
598
|
-
|
|
599
|
-
const
|
|
662
|
+
const cause = error;
|
|
663
|
+
const remoteCode = cause?.feltdbCode ?? cause?.code;
|
|
664
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
665
|
+
// One typed shape for every runtime and transport: the stable code, the
|
|
666
|
+
// authority's status and request id when it answered, and for a lost
|
|
667
|
+
// race the structured failure. A transport that ended without an answer
|
|
668
|
+
// keeps its `COMMIT_OUTCOME_UNKNOWN`; it is never turned into a refusal.
|
|
669
|
+
const transactionError = error instanceof AtomicTransactionError
|
|
600
670
|
? error
|
|
601
671
|
: remoteCode === 'IDEMPOTENCY_CONFLICT'
|
|
602
672
|
// A managed authority's refusal is the same event as an embedded one.
|
|
603
|
-
? new TransactionIdConflictError(request.transactionId,
|
|
604
|
-
:
|
|
605
|
-
? new
|
|
606
|
-
:
|
|
607
|
-
|
|
673
|
+
? new TransactionIdConflictError(request.transactionId, message, cause?.status, cause?.requestId)
|
|
674
|
+
: remoteCode === 'IDEMPOTENCY_UNVERIFIABLE'
|
|
675
|
+
? new TransactionIdUnverifiableError(request.transactionId, message, cause?.status, cause?.requestId)
|
|
676
|
+
: refusal.conflict
|
|
677
|
+
? new ConditionalConflictError(message, request.transactionId, refusal.failure, cause?.status, cause?.requestId)
|
|
678
|
+
: new AtomicTransactionError(message, request.transactionId, remoteCode ?? FeltDBErrorCode.INTERNAL_ERROR, cause?.status, error, cause?.requestId);
|
|
608
679
|
observed?.fail(transactionError);
|
|
609
680
|
throw transactionError;
|
|
610
681
|
}
|
|
@@ -834,18 +905,35 @@ export class StateFirstDB {
|
|
|
834
905
|
throw new Error('Causal provenance requires a server runtime');
|
|
835
906
|
return this.jsDb.provenance(collection, id);
|
|
836
907
|
}
|
|
837
|
-
/**
|
|
908
|
+
/**
|
|
909
|
+
* Persist immutable content by its SHA-256; repeated bytes deduplicate.
|
|
910
|
+
* Returns `{ hash, bytes, ref: 'sha256:<hash>' }`.
|
|
911
|
+
*
|
|
912
|
+
* A server runtime stores it in the server's content store; the local file
|
|
913
|
+
* runtime stores it under its state directory (`content/<hash>`), durably
|
|
914
|
+
* before this returns. Memory and browser runtimes refuse with
|
|
915
|
+
* `CONTRACT_UNSUPPORTED`.
|
|
916
|
+
*/
|
|
838
917
|
async storeContent(content) {
|
|
839
|
-
if (!
|
|
840
|
-
throw
|
|
918
|
+
if (!this.jsDb.storeContent)
|
|
919
|
+
throw this.contentUnsupported('store');
|
|
841
920
|
return this.jsDb.storeContent(content);
|
|
842
921
|
}
|
|
843
|
-
/**
|
|
922
|
+
/**
|
|
923
|
+
* Resolve content by hash: verified against its SHA-256 before it is
|
|
924
|
+
* returned (`CONTENT_INTEGRITY_FAILURE` otherwise), `null` when absent. A
|
|
925
|
+
* server also asks its configured peers; the local runtime reads its own
|
|
926
|
+
* directory only.
|
|
927
|
+
*/
|
|
844
928
|
async acquireContent(hash) {
|
|
845
|
-
if (!
|
|
846
|
-
throw
|
|
929
|
+
if (!this.jsDb.acquireContent)
|
|
930
|
+
throw this.contentUnsupported('read');
|
|
847
931
|
return this.jsDb.acquireContent(hash);
|
|
848
932
|
}
|
|
933
|
+
contentUnsupported(action) {
|
|
934
|
+
return new FeltDBServiceError(`CONTRACT_UNSUPPORTED: this ${this.runtimeInfo.storage} runtime has no durable content store, so it cannot ${action} `
|
|
935
|
+
+ 'content. Use the local file runtime (createFeltDB({ path })) or a FeltDB server.', FeltDBErrorCode.CONTRACT_UNSUPPORTED);
|
|
936
|
+
}
|
|
849
937
|
/** Define a durable workflow whose lifecycle is ordinary replicated state. */
|
|
850
938
|
async defineWorkflow(name, steps) {
|
|
851
939
|
if (!(this.jsDb instanceof HttpJsDb))
|
|
@@ -925,33 +1013,84 @@ export class StateFirstDB {
|
|
|
925
1013
|
return this.agentRuntime;
|
|
926
1014
|
}
|
|
927
1015
|
/**
|
|
928
|
-
* Create an agent execution
|
|
1016
|
+
* Create an agent execution. It is committed to `_flow_agent_executions`
|
|
1017
|
+
* before this returns; pass `taskId` to find it later with
|
|
1018
|
+
* `findAgentExecution({ taskId })`.
|
|
929
1019
|
*/
|
|
930
|
-
async createAgentExecution(agentRef, goal, inputs) {
|
|
931
|
-
|
|
932
|
-
await this.collection('_flow_agent_executions').insert(this.agentExecutionRecord(execution), execution.executionId);
|
|
933
|
-
return execution;
|
|
1020
|
+
async createAgentExecution(agentRef, goal, inputs, options = {}) {
|
|
1021
|
+
return this.agentRuntime.createExecution(this, agentRef, goal, inputs, options);
|
|
934
1022
|
}
|
|
935
1023
|
agentExecutionRecord(execution) {
|
|
936
1024
|
return { ...execution, id: execution.executionId, agentRef: execution.agentRef.toString() };
|
|
937
1025
|
}
|
|
1026
|
+
agentExecutionIndexesDeclared = false;
|
|
1027
|
+
/** Declare the lookup indexes once per handle, on an embedded runtime only. */
|
|
1028
|
+
async declareAgentExecutionIndexes() {
|
|
1029
|
+
if (this.agentExecutionIndexesDeclared)
|
|
1030
|
+
return;
|
|
1031
|
+
this.agentExecutionIndexesDeclared = true;
|
|
1032
|
+
if (this.capabilities().remoteAuthority)
|
|
1033
|
+
return;
|
|
1034
|
+
const executions = this.collection(AGENT_EXECUTION_COLLECTION);
|
|
1035
|
+
for (const index of AGENT_EXECUTION_INDEXES) {
|
|
1036
|
+
if (executions.listIndexes().some(existing => existing.name === index.name))
|
|
1037
|
+
continue;
|
|
1038
|
+
// A definition committed by an earlier process is already durable.
|
|
1039
|
+
const planned = await this.explain({
|
|
1040
|
+
collection: AGENT_EXECUTION_COLLECTION,
|
|
1041
|
+
where: [{ field: index.fields[0], eq: '' }],
|
|
1042
|
+
limit: 1,
|
|
1043
|
+
}).catch(() => undefined);
|
|
1044
|
+
if (planned?.index === index.name)
|
|
1045
|
+
continue;
|
|
1046
|
+
executions.createIndex(index);
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
async queryAgentExecution(query) {
|
|
1050
|
+
await this.declareAgentExecutionIndexes();
|
|
1051
|
+
const field = 'taskId' in query && query.taskId !== undefined ? 'taskId' : 'agentRef';
|
|
1052
|
+
const value = field === 'taskId' ? query.taskId : String(query.agentRef);
|
|
1053
|
+
const page = await this.query({
|
|
1054
|
+
collection: AGENT_EXECUTION_COLLECTION,
|
|
1055
|
+
where: [{ field, eq: value }],
|
|
1056
|
+
orderBy: [{ field: 'createdMs', direction: 'desc' }],
|
|
1057
|
+
limit: 1,
|
|
1058
|
+
});
|
|
1059
|
+
const row = page.records[0];
|
|
1060
|
+
if (!row)
|
|
1061
|
+
return null;
|
|
1062
|
+
const { id: _id, __version: _version, ...execution } = row;
|
|
1063
|
+
return { ...execution, agentRef: parseAgentRef(String(row.agentRef)) };
|
|
1064
|
+
}
|
|
1065
|
+
/**
|
|
1066
|
+
* The most recently created execution for an agent-state task or an agent,
|
|
1067
|
+
* read from durable state through a declared index (one bounded query; it
|
|
1068
|
+
* never scans `_flow_agent_executions`). Null when there is none.
|
|
1069
|
+
*/
|
|
1070
|
+
async findAgentExecution(query) {
|
|
1071
|
+
return this.agentRuntime.findExecution(query);
|
|
1072
|
+
}
|
|
938
1073
|
/** Claim and durably materialize an embedded agent execution. */
|
|
939
1074
|
async startAgentExecution(execution, peerId = this.instanceId()) {
|
|
940
1075
|
await this.agentRuntime.start(execution, peerId);
|
|
941
|
-
await this.collection('_flow_agent_executions').update(execution.executionId, this.agentExecutionRecord(execution));
|
|
942
1076
|
}
|
|
943
1077
|
/** Advance an agent lifecycle and expose the transition as ordinary state. */
|
|
944
1078
|
async transitionAgentExecution(execution, status) {
|
|
945
1079
|
await this.agentRuntime.transition(execution, status);
|
|
946
|
-
|
|
1080
|
+
}
|
|
1081
|
+
/** Resume an execution for `peerId` (status `Observing`), committed before this returns. */
|
|
1082
|
+
async resumeAgentExecution(execution, peerId = this.instanceId()) {
|
|
1083
|
+
await this.agentRuntime.resume(execution, peerId);
|
|
947
1084
|
}
|
|
948
1085
|
async completeAgentExecution(execution, resultRef) {
|
|
949
1086
|
await this.agentRuntime.complete(execution, resultRef);
|
|
950
|
-
await this.collection('_flow_agent_executions').update(execution.executionId, this.agentExecutionRecord(execution));
|
|
951
1087
|
}
|
|
952
1088
|
async failAgentExecution(execution, error) {
|
|
953
1089
|
await this.agentRuntime.fail(execution, error);
|
|
954
|
-
|
|
1090
|
+
}
|
|
1091
|
+
/** Cancel a non-terminal execution (terminal status `Cancelled`), committed before this returns. */
|
|
1092
|
+
async cancelAgentExecution(execution, reason) {
|
|
1093
|
+
await this.agentRuntime.cancel(execution, reason);
|
|
955
1094
|
}
|
|
956
1095
|
/**
|
|
957
1096
|
* Close the database and clean up resources.
|
package/dist/deployment.d.ts
CHANGED
|
@@ -1,4 +1,21 @@
|
|
|
1
|
+
import { FeltDBServiceError } from './error-codes.js';
|
|
1
2
|
export type FeltDBDeploymentMode = 'browser' | 'local' | 'remote' | 'memory';
|
|
3
|
+
/** Prefix of every FeltDB service (API) key. */
|
|
4
|
+
export declare const FELTDB_SERVICE_KEY_PREFIX = "fdb_live_";
|
|
5
|
+
/**
|
|
6
|
+
* A FeltDB service key reached code running in a browser.
|
|
7
|
+
*
|
|
8
|
+
* Service keys (`fdb_live_…`) authorize everything their scopes name for every
|
|
9
|
+
* caller holding them, so a key in a browser bundle or page is a key published
|
|
10
|
+
* to every visitor. Keep service keys server-side (`FELTDB_TOKEN`, never a
|
|
11
|
+
* `VITE_`/`NEXT_PUBLIC_`/`PUBLIC_` variable) and give browsers an end-user
|
|
12
|
+
* session token from `/v1/auth/signin`, or call FeltDB through your server.
|
|
13
|
+
*/
|
|
14
|
+
export declare class FeltDBBrowserCredentialError extends FeltDBServiceError {
|
|
15
|
+
constructor(source: string);
|
|
16
|
+
}
|
|
17
|
+
/** Throws {@link FeltDBBrowserCredentialError} when a service key reaches a browser runtime. */
|
|
18
|
+
export declare function assertBrowserSafeCredential(token: string | undefined, isBrowser: boolean, source?: string): void;
|
|
2
19
|
export interface FeltDBDeploymentConfig {
|
|
3
20
|
mode?: FeltDBDeploymentMode;
|
|
4
21
|
namespace?: string;
|
|
@@ -8,6 +25,8 @@ export interface FeltDBDeploymentConfig {
|
|
|
8
25
|
environment?: string;
|
|
9
26
|
path?: string;
|
|
10
27
|
requestTimeoutMs?: number;
|
|
28
|
+
/** Explicit configuration only; see `server.operatorConsole` on `createFeltDB`. */
|
|
29
|
+
allowServiceKeyInBrowser?: boolean;
|
|
11
30
|
}
|
|
12
31
|
export interface FeltDBDeploymentResolution {
|
|
13
32
|
mode: FeltDBDeploymentMode;
|
package/dist/deployment.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../src/deployment.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7E,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../src/deployment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7E,gDAAgD;AAChD,eAAO,MAAM,yBAAyB,cAAc,CAAC;AAErD;;;;;;;;GAQG;AACH,qBAAa,4BAA6B,SAAQ,kBAAkB;gBACtD,MAAM,EAAE,MAAM;CAS3B;AAED,gGAAgG;AAChG,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,SAAkB,GAAG,IAAI,CAIzH;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mFAAmF;IACnF,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,UAAU,GAAG,aAAa,GAAG,aAAa,GAAG,MAAM,CAAC;CAC7D;AAED,MAAM,WAAW,iCAAiC;IAChD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC3C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAMD,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,sBAAsB,GAAG,SAAS,GAAG,IAAI,CAErG;AA+FD,wBAAgB,uBAAuB,CACrC,QAAQ,GAAE,sBAA2B,EACrC,OAAO,GAAE,iCAAsC,GAC9C,0BAA0B,CA6C5B"}
|
package/dist/deployment.js
CHANGED
|
@@ -1,3 +1,29 @@
|
|
|
1
|
+
import { FeltDBServiceError } from './error-codes.js';
|
|
2
|
+
/** Prefix of every FeltDB service (API) key. */
|
|
3
|
+
export const FELTDB_SERVICE_KEY_PREFIX = 'fdb_live_';
|
|
4
|
+
/**
|
|
5
|
+
* A FeltDB service key reached code running in a browser.
|
|
6
|
+
*
|
|
7
|
+
* Service keys (`fdb_live_…`) authorize everything their scopes name for every
|
|
8
|
+
* caller holding them, so a key in a browser bundle or page is a key published
|
|
9
|
+
* to every visitor. Keep service keys server-side (`FELTDB_TOKEN`, never a
|
|
10
|
+
* `VITE_`/`NEXT_PUBLIC_`/`PUBLIC_` variable) and give browsers an end-user
|
|
11
|
+
* session token from `/v1/auth/signin`, or call FeltDB through your server.
|
|
12
|
+
*/
|
|
13
|
+
export class FeltDBBrowserCredentialError extends FeltDBServiceError {
|
|
14
|
+
constructor(source) {
|
|
15
|
+
super(`A FeltDB service key (fdb_live_…) was supplied to a browser runtime via ${source}. Service keys must stay server-side: ` +
|
|
16
|
+
'set FELTDB_TOKEN on your server (never a VITE_/NEXT_PUBLIC_/PUBLIC_ variable, which bundlers inline into client code), ' +
|
|
17
|
+
'and give the browser an end-user session token from /v1/auth/signin or proxy requests through your server.', 'SERVICE_KEY_IN_BROWSER');
|
|
18
|
+
this.name = 'FeltDBBrowserCredentialError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** Throws {@link FeltDBBrowserCredentialError} when a service key reaches a browser runtime. */
|
|
22
|
+
export function assertBrowserSafeCredential(token, isBrowser, source = 'configuration') {
|
|
23
|
+
if (isBrowser && typeof token === 'string' && token.trim().startsWith(FELTDB_SERVICE_KEY_PREFIX)) {
|
|
24
|
+
throw new FeltDBBrowserCredentialError(source);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
1
27
|
let configFileLoader;
|
|
2
28
|
export function registerDeploymentConfigLoader(loader) {
|
|
3
29
|
configFileLoader = loader;
|
|
@@ -17,7 +43,10 @@ function envConfig(env) {
|
|
|
17
43
|
mode: modeValue(env.FELTDB_MODE ?? env.VITE_FELTDB_MODE),
|
|
18
44
|
namespace: env.FELTDB_NAMESPACE ?? env.VITE_FELTDB_NAMESPACE,
|
|
19
45
|
url: env.FELTDB_URL ?? env.VITE_FELTDB_URL ?? env.FELTDB_API_URL,
|
|
20
|
-
|
|
46
|
+
// Credentials are read only from server-side names. A VITE_* (or
|
|
47
|
+
// NEXT_PUBLIC_*/PUBLIC_*) variable is inlined into browser bundles by the
|
|
48
|
+
// bundler, so a token there is published; it is never a credential source.
|
|
49
|
+
token: env.FELTDB_TOKEN ?? env.FELTDB_API_KEY,
|
|
21
50
|
applicationId: env.FELTDB_APPLICATION_ID ?? env.VITE_FELTDB_APPLICATION_ID,
|
|
22
51
|
environment: env.FELTDB_ENVIRONMENT ?? env.VITE_FELTDB_ENVIRONMENT,
|
|
23
52
|
path: env.FELTDB_PATH ?? env.FELTDB_DATA_DIR,
|
|
@@ -111,11 +140,18 @@ export function resolveFeltDBDeployment(explicit = {}, context = {}) {
|
|
|
111
140
|
const url = firstValue(sources, 'url');
|
|
112
141
|
if (!url)
|
|
113
142
|
throw new Error('FeltDB remote deployment requires FELTDB_URL or createFeltDB({ server: { url } }).');
|
|
143
|
+
const token = firstValue(sources, 'token');
|
|
144
|
+
const tokenSource = sources.find(candidate => typeof candidate.token === 'string' && candidate.token.trim())?.source;
|
|
145
|
+
// Only an explicit, in-code operator-console opt-in can allow it; an
|
|
146
|
+
// environment or config-file value never can.
|
|
147
|
+
const allowed = explicit.allowServiceKeyInBrowser === true && tokenSource === 'explicit';
|
|
148
|
+
if (!allowed)
|
|
149
|
+
assertBrowserSafeCredential(token, flags.isBrowser, tokenSource === 'explicit' ? 'createFeltDB({ server: { token } })' : `the ${tokenSource} configuration`);
|
|
114
150
|
return {
|
|
115
151
|
mode,
|
|
116
152
|
namespace,
|
|
117
153
|
url,
|
|
118
|
-
token
|
|
154
|
+
token,
|
|
119
155
|
applicationId: firstValue(sources, 'applicationId'),
|
|
120
156
|
environment: firstValue(sources, 'environment'),
|
|
121
157
|
source,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedded-query.d.ts","sourceRoot":"","sources":["../src/embedded-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"embedded-query.d.ts","sourceRoot":"","sources":["../src/embedded-query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAI9E,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAInC,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,aAAa,GAAG,cAAc,GAAG,WAAW,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;CACjB;AAgDD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CASrH;AAkCD,kFAAkF;AAClF,qBAAa,mBAAmB;IAGlB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,OAAO,CAAmC;gBAErB,OAAO,EAAE,MAAM,QAAQ,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIvE,OAAO,IAAI,IAAI;IAMf,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI;IAgCpD,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,IAAI;IAqBZ,OAAO,CAAC,KAAK,EAAE,qBAAqB,GAAG,wBAAwB;IAK/D,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,qBAAqB,GAAG,kBAAkB,CAAC,CAAC,CAAC,GAAG;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE;IAyErG,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,UAAU;IA6BlB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,QAAQ;CAkBjB"}
|
package/dist/embedded-query.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { FeltDBErrorCode, FeltDBServiceError } from './error-codes.js';
|
|
1
2
|
const now = () => typeof performance !== 'undefined' ? performance.now() : Date.now();
|
|
2
3
|
function compareValue(left, right) {
|
|
3
4
|
if (left === right)
|
|
@@ -78,7 +79,7 @@ function decode(cursor, expectedBinding) {
|
|
|
78
79
|
return value;
|
|
79
80
|
}
|
|
80
81
|
catch {
|
|
81
|
-
throw new
|
|
82
|
+
throw new FeltDBServiceError('INVALID_CURSOR: cursor is malformed or does not match this query', FeltDBErrorCode.INVALID_CURSOR);
|
|
82
83
|
}
|
|
83
84
|
}
|
|
84
85
|
/** Small deterministic planner/executor owned by an embedded storage boundary. */
|
|
@@ -331,7 +332,7 @@ export class EmbeddedQueryEngine {
|
|
|
331
332
|
}
|
|
332
333
|
validate(query) {
|
|
333
334
|
if (!query.collection?.trim() || !Number.isInteger(query.limit) || query.limit < 1 || query.limit > 1_000)
|
|
334
|
-
throw new
|
|
335
|
+
throw new FeltDBServiceError('INVALID_QUERY: collection and a limit between 1 and 1000 are required', 'INVALID_QUERY');
|
|
335
336
|
for (const condition of query.where ?? []) {
|
|
336
337
|
// Every key beside `field` must be exactly one known operator. A stray
|
|
337
338
|
// key — a `semantic` clause misplaced into a condition, or anything
|
|
@@ -340,13 +341,13 @@ export class EmbeddedQueryEngine {
|
|
|
340
341
|
const keys = Object.keys(condition).filter(key => key !== 'field');
|
|
341
342
|
const operators = keys.filter(operator => ['eq', 'neq', 'lt', 'lte', 'gt', 'gte'].includes(operator));
|
|
342
343
|
if (!condition.field || operators.length !== 1 || keys.length !== 1)
|
|
343
|
-
throw new
|
|
344
|
+
throw new FeltDBServiceError('INVALID_QUERY: each condition requires a field and exactly one operator', 'INVALID_QUERY');
|
|
344
345
|
}
|
|
345
346
|
if (query.semantic !== undefined) {
|
|
346
347
|
// Semantic composition runs where the Rust decision primitive runs. This
|
|
347
348
|
// embedded engine has no runtime binding, so it refuses the clause
|
|
348
349
|
// rather than answering the deterministic query in its place.
|
|
349
|
-
throw new
|
|
350
|
+
throw new FeltDBServiceError('SEMANTIC_UNSUPPORTED: this runtime has no semantic runtime binding; semantic query composition is available through the managed authority', 'SEMANTIC_UNSUPPORTED');
|
|
350
351
|
}
|
|
351
352
|
}
|
|
352
353
|
}
|
|
@@ -126,7 +126,7 @@ export type EmbeddedPlan =
|
|
|
126
126
|
kind: 'reject';
|
|
127
127
|
reason: string;
|
|
128
128
|
failure?: ConditionalConflictDetail;
|
|
129
|
-
code?: 'INVALID_REQUEST';
|
|
129
|
+
code?: 'INVALID_REQUEST' | 'CONTRACT_UNSUPPORTED';
|
|
130
130
|
} | {
|
|
131
131
|
kind: 'apply';
|
|
132
132
|
mutations: EmbeddedMutation[];
|
|
@@ -184,8 +184,12 @@ export declare function embeddedDuplicate(request: AtomicTransactionRequest, pla
|
|
|
184
184
|
export declare class EmbeddedTransactionRejected extends Error {
|
|
185
185
|
readonly feltdbCode?: 'PRECONDITION_FAILED';
|
|
186
186
|
readonly feltdbConflict?: ConditionalConflictDetail;
|
|
187
|
-
/**
|
|
188
|
-
|
|
189
|
-
|
|
187
|
+
/**
|
|
188
|
+
* Set when the request itself was malformed (`INVALID_REQUEST`) or asks for
|
|
189
|
+
* something this runtime cannot evaluate (`CONTRACT_UNSUPPORTED`), as
|
|
190
|
+
* opposed to refused by state.
|
|
191
|
+
*/
|
|
192
|
+
readonly code?: 'INVALID_REQUEST' | 'CONTRACT_UNSUPPORTED';
|
|
193
|
+
constructor(reason: string, failure?: ConditionalConflictDetail, code?: 'INVALID_REQUEST' | 'CONTRACT_UNSUPPORTED');
|
|
190
194
|
}
|
|
191
195
|
//# sourceMappingURL=embedded-transaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedded-transaction.d.ts","sourceRoot":"","sources":["../src/embedded-transaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAEV,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EAEzB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAS1B,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,yDAAyD;AACzD,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,6DAA6D;AAC7D,MAAM,WAAW,wBAAwB;IACvC,yCAAyC;IACzC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAAC;IAC/D;;;;;;;OAOG;IACH,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACxD;;;;OAIG;IACH,IAAI,CAAC,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CACpF;AAED,sEAAsE;AACtE,eAAO,MAAM,0BAA0B,SAAS,CAAC;AAkBjD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,kBAAkB,EACzB,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,wBAAwB,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,GAC/D,MAAM,CAgBR;AAED,wFAAwF;AACxF,wBAAgB,QAAQ,CACtB,OAAO,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACpC,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAS7C;AAED,MAAM,MAAM,YAAY;AACtB;;;;GAIG;AACD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,UAAU,GAAG,mBAAmB,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;AACnG,yEAAyE;GACvE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE;AACtB,sFAAsF;GACpF;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE;AAC1B;;;;;;GAMG;GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,yBAAyB,CAAC;IAAC,IAAI,CAAC,EAAE,iBAAiB,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"embedded-transaction.d.ts","sourceRoot":"","sources":["../src/embedded-transaction.ts"],"names":[],"mappings":"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"}
|