@feltdb/core 0.9.1 → 0.10.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/cli/commands.js +19 -21
- package/dist/cli/development-session.js +16 -0
- package/dist/cli/studio-artifact.js +33 -0
- package/dist/create/package-versions.js +1 -1
- package/dist/create/server-source/crates/feltdb/src/acceptance_tests.rs +8 -1
- package/dist/create/server-source/crates/feltdb/src/application.rs +16 -0
- package/dist/create/server-source/crates/feltdb/src/bin/feltdb_node.rs +21 -22
- package/dist/create/server-source/crates/feltdb/src/lib.rs +451 -33
- package/dist/create/server-source/crates/feltdb/src/state_contract.rs +48 -3
- package/dist/create/server-source/crates/feltdb/src/state_model.rs +569 -4
- package/dist/create/server-source/crates/feltdb/src/state_trigger.rs +1 -0
- package/dist/create/server-source/crates/feltdb/src/versioned_object_substrate.rs +708 -0
- package/dist/create/server-source/crates/feltdb/src/worker_mesh.rs +1 -0
- package/dist/create/server-source/crates/feltdb/src/workload.rs +480 -44
- package/dist/create/server-source/crates/feltdb/tests/generalized_version_control_evidence.rs +123 -0
- package/dist/create/server-source/crates/feltdb/tests/generalized_version_control_substrate_completion.rs +281 -0
- package/dist/create/server-source/crates/feltdb/tests/production_readiness_contract.rs +15 -3
- package/dist/create/server-source/crates/feltdb/tests/revision_retention_boundary_evidence.rs +28 -18
- package/dist/create/server-source/crates/feltdb/tests/storage_independent_versioned_object_substrate.rs +328 -0
- package/dist/create/server-source/crates/feltdb/tests/workload_envelope_contract.rs +20 -3
- package/dist/create/server-source/crates/feltdb-server/src/app_state.rs +14 -4
- package/dist/create/server-source/crates/feltdb-server/src/backup.rs +0 -4
- package/dist/create/server-source/crates/feltdb-server/src/canonical_principals.rs +1093 -0
- package/dist/create/server-source/crates/feltdb-server/src/causal.rs +905 -144
- package/dist/create/server-source/crates/feltdb-server/src/connections.rs +9 -6
- package/dist/create/server-source/crates/feltdb-server/src/control_plane.rs +90 -0
- package/dist/create/server-source/crates/feltdb-server/src/lib.rs +1 -0
- package/dist/create/server-source/crates/feltdb-server/src/main.rs +408 -74
- package/dist/create/server-source/crates/feltdb-server/src/principals.rs +9 -501
- package/dist/create/server-source/crates/feltdb-server/src/tenancy.rs +22 -0
- package/dist/create/server-source/crates/feltdb-server/tests/principal_tenant_migration.rs +247 -0
- package/dist/db.d.ts +6 -5
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +18 -24
- package/dist/deployment.d.ts.map +1 -1
- package/dist/deployment.js +4 -2
- package/dist/embedded-transaction.d.ts.map +1 -1
- package/dist/embedded-transaction.js +4 -0
- package/dist/error-codes.d.ts +12 -0
- package/dist/error-codes.d.ts.map +1 -1
- package/dist/error-codes.js +20 -2
- package/dist/feltdb.d.ts +4 -0
- package/dist/feltdb.d.ts.map +1 -1
- package/dist/file-db.d.ts +10 -0
- package/dist/file-db.d.ts.map +1 -1
- package/dist/file-db.js +18 -0
- package/dist/http-db.d.ts +4 -0
- package/dist/http-db.d.ts.map +1 -1
- package/dist/http-db.js +73 -12
- package/dist/index-core.d.ts +1 -0
- package/dist/index-core.d.ts.map +1 -1
- package/dist/index-core.js +1 -0
- package/dist/public-contract.d.ts +112 -0
- package/dist/public-contract.d.ts.map +1 -0
- package/dist/public-contract.js +125 -0
- package/dist/studio/app.d.ts +23 -0
- package/dist/studio/app.d.ts.map +1 -1
- package/dist/studio/components/ContractInspector.d.ts +5 -0
- package/dist/studio/components/ContractInspector.d.ts.map +1 -1
- package/dist/studio/components/SettingsPanel.d.ts +4 -1
- package/dist/studio/components/SettingsPanel.d.ts.map +1 -1
- package/dist/studio/components/index.js +4 -4
- package/dist/studio/{components-CehkcX_k.js → components-CJFgdKG6.js} +322 -303
- package/dist/studio/control-plane/Data.d.ts.map +1 -1
- package/dist/studio/control-plane/Instance.d.ts +10 -0
- package/dist/studio/control-plane/Instance.d.ts.map +1 -1
- package/dist/studio/control-plane/Operations.d.ts +3 -0
- package/dist/studio/control-plane/Operations.d.ts.map +1 -1
- package/dist/studio/control-plane/State.d.ts.map +1 -1
- package/dist/studio/control-plane/index.d.ts +4 -2
- package/dist/studio/control-plane/index.d.ts.map +1 -1
- package/dist/studio/control-plane/index.js +2 -2
- package/dist/studio/control-plane-DP8ljTDO.js +3207 -0
- package/dist/studio/index.js +96 -75
- package/dist/studio/utils/api.d.ts +1 -1
- package/dist/studio/utils/api.d.ts.map +1 -1
- package/dist/studio/utils/control-plane-api.d.ts +12 -1
- package/dist/studio/utils/control-plane-api.d.ts.map +1 -1
- package/dist/studio/utils/control-plane-api.js +1 -1
- package/dist/studio/utils/index.js +16 -16
- package/dist/studio/utils/service-api.d.ts +8 -0
- package/dist/studio/utils/service-api.d.ts.map +1 -1
- package/dist/studio/utils/service-api.js +15 -12
- package/dist/studio-app/assets/{feltdb_wasm-DksXDnLa.js → feltdb_wasm-CfNb3IoF.js} +1 -1
- package/dist/studio-app/assets/feltdb_wasm_bg-D9d3gY-E.wasm +0 -0
- package/dist/studio-app/assets/index-SDXdROi1.js +30 -0
- package/dist/studio-app/feltdb-studio.json +6 -0
- package/dist/studio-app/index.html +1 -1
- package/dist/transaction.d.ts +9 -1
- package/dist/transaction.d.ts.map +1 -1
- package/dist/transaction.js +6 -2
- package/dist/wasm/feltdb_wasm_bg.wasm +0 -0
- package/dist/workspace/local-development-authority.d.ts +8 -0
- package/dist/workspace/local-development-authority.d.ts.map +1 -1
- package/dist/workspace/local-development-authority.js +136 -1
- package/package.json +2 -2
- package/dist/studio/control-plane-D6TT2fCQ.js +0 -3064
- package/dist/studio-app/assets/feltdb_wasm_bg-Yy4QRHJT.wasm +0 -0
- package/dist/studio-app/assets/index-CZ55nLgp.js +0 -30
|
@@ -2191,7 +2191,7 @@ fn execute_transaction_with_policies(
|
|
|
2191
2191
|
!= Some(payload_hash.as_str())
|
|
2192
2192
|
{
|
|
2193
2193
|
return Err(StateFailure::new(
|
|
2194
|
-
"
|
|
2194
|
+
"IDEMPOTENCY_CONFLICT",
|
|
2195
2195
|
"transaction ID was already committed with a different canonical payload",
|
|
2196
2196
|
));
|
|
2197
2197
|
}
|
|
@@ -2227,12 +2227,14 @@ fn execute_transaction_with_policies(
|
|
|
2227
2227
|
audit,
|
|
2228
2228
|
});
|
|
2229
2229
|
}
|
|
2230
|
-
let snapshot = db.state_rows().map_err(StateFailure::storage)?;
|
|
2231
2230
|
let namespace = request
|
|
2232
2231
|
.state_namespace
|
|
2233
2232
|
.as_deref()
|
|
2234
2233
|
.unwrap_or(&request.application_id)
|
|
2235
2234
|
.to_string();
|
|
2235
|
+
let snapshot = db
|
|
2236
|
+
.state_rows_for_namespace(&namespace)
|
|
2237
|
+
.map_err(StateFailure::storage)?;
|
|
2236
2238
|
// Record preconditions are collected here and evaluated by the store,
|
|
2237
2239
|
// inside the same lock as the writes. Evaluating them against `snapshot`
|
|
2238
2240
|
// alongside the counters below would reintroduce exactly the gap they
|
|
@@ -2592,6 +2594,16 @@ fn execute_transaction_with_policies(
|
|
|
2592
2594
|
}
|
|
2593
2595
|
return failure;
|
|
2594
2596
|
}
|
|
2597
|
+
if let FlowError::RevisionConflict { expected, actual } = &error {
|
|
2598
|
+
let mut failure =
|
|
2599
|
+
StateFailure::new("PRECONDITION_FAILED", &error.to_string());
|
|
2600
|
+
failure.transaction = Some(transaction_id.clone());
|
|
2601
|
+
failure.causal_position = db.sequence().ok();
|
|
2602
|
+
failure.resource = Some("authority_revision".into());
|
|
2603
|
+
failure.expected = Some(Value::from(*expected));
|
|
2604
|
+
failure.actual = Some(Value::from(*actual));
|
|
2605
|
+
return failure;
|
|
2606
|
+
}
|
|
2595
2607
|
let text = error.to_string();
|
|
2596
2608
|
if text.contains("PRECONDITION_FAILED") {
|
|
2597
2609
|
let mut failure = StateFailure::new("PRECONDITION_FAILED", &text);
|
|
@@ -3270,6 +3282,39 @@ mod tests {
|
|
|
3270
3282
|
assert_eq!(failure.actual, Some(Value::from(1)));
|
|
3271
3283
|
}
|
|
3272
3284
|
#[test]
|
|
3285
|
+
fn stale_authority_revision_is_a_structured_precondition_failure() {
|
|
3286
|
+
let db = db("authority-revision-precondition");
|
|
3287
|
+
let schema = schema();
|
|
3288
|
+
let mut request = TransactionRequest {
|
|
3289
|
+
transaction_id: Some("initial".into()),
|
|
3290
|
+
tenant_id: "tenant".into(),
|
|
3291
|
+
application_id: "app".into(),
|
|
3292
|
+
revision_id: "rev".into(),
|
|
3293
|
+
schema_version: 1,
|
|
3294
|
+
state_namespace: None,
|
|
3295
|
+
causal_parent: None,
|
|
3296
|
+
authorization: auth(),
|
|
3297
|
+
preconditions: vec![],
|
|
3298
|
+
operations: vec![TransactionOperation {
|
|
3299
|
+
kind: TransactionOperationKind::Insert,
|
|
3300
|
+
collection: "incidents".into(),
|
|
3301
|
+
id: "one".into(),
|
|
3302
|
+
value: serde_json::json!({"title":"First"}),
|
|
3303
|
+
if_version: None,
|
|
3304
|
+
}],
|
|
3305
|
+
};
|
|
3306
|
+
execute_transaction(&db, &schema, &request, None).unwrap();
|
|
3307
|
+
request.transaction_id = Some("stale-parent".into());
|
|
3308
|
+
request.causal_parent = Some(0);
|
|
3309
|
+
request.operations[0].id = "two".into();
|
|
3310
|
+
|
|
3311
|
+
let failure = execute_transaction(&db, &schema, &request, None).unwrap_err();
|
|
3312
|
+
assert_eq!(failure.code, "PRECONDITION_FAILED");
|
|
3313
|
+
assert_eq!(failure.resource.as_deref(), Some("authority_revision"));
|
|
3314
|
+
assert_eq!(failure.expected, Some(Value::from(0)));
|
|
3315
|
+
assert_eq!(failure.actual, Some(Value::from(1)));
|
|
3316
|
+
}
|
|
3317
|
+
#[test]
|
|
3273
3318
|
fn explicit_transaction_id_is_bound_to_canonical_payload_across_restart() {
|
|
3274
3319
|
let path = std::env::temp_dir().join(format!(
|
|
3275
3320
|
"feltdb-content-id-{}-{}.log",
|
|
@@ -3317,7 +3362,7 @@ mod tests {
|
|
|
3317
3362
|
let mut changed = request.clone();
|
|
3318
3363
|
changed.operations[0].value = serde_json::json!({"title":"Changed"});
|
|
3319
3364
|
let failure = execute_transaction(&reopened, &schema, &changed, None).unwrap_err();
|
|
3320
|
-
assert_eq!(failure.code, "
|
|
3365
|
+
assert_eq!(failure.code, "IDEMPOTENCY_CONFLICT");
|
|
3321
3366
|
assert!(failure.message.contains("different canonical payload"));
|
|
3322
3367
|
std::fs::remove_file(path).ok();
|
|
3323
3368
|
}
|