@feltdb/core 0.8.3 → 0.8.5
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 +4 -1
- package/dist/cli/provisioning-neutrality.js +79 -0
- package/dist/collection.d.ts +43 -1
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +192 -22
- package/dist/create/create.js +25 -21
- package/dist/create/managed-account.js +11 -0
- package/dist/create/package-versions.js +1 -1
- package/dist/create/server-source/Cargo.lock +165 -0
- package/dist/create/server-source/Cargo.toml +9 -0
- package/dist/create/server-source/crates/feltdb/Cargo.toml +3 -0
- package/dist/create/server-source/crates/feltdb/benches/gate13_baseline.rs +44 -44
- package/dist/create/server-source/crates/feltdb/benches/gate13_phase_7_1_release_economics.rs +12 -24
- package/dist/create/server-source/crates/feltdb/benches/gate_13_redux.rs +7 -13
- package/dist/create/server-source/crates/feltdb/benches/gate_13_regression_runner.rs +13 -10
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_concurrent_writer_scaling.rs +12 -9
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_production_admission_revalidation.rs +78 -25
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_rc2_admission_contract.rs +16 -13
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_rc_root_cause.rs +13 -5
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_sync1_queued_prototype.rs +41 -22
- package/dist/create/server-source/crates/feltdb/benches/gate_14a_sync_economics.rs +33 -15
- package/dist/create/server-source/crates/feltdb/benches/gate_14b_causal_backlog_scaling.rs +100 -33
- package/dist/create/server-source/crates/feltdb/benches/gate_14c_replication_contract_test.rs +56 -20
- package/dist/create/server-source/crates/feltdb/benches/gate_14c_replication_scaling.rs +116 -41
- package/dist/create/server-source/crates/feltdb/benches/gate_14d_combined_dimension_scaling.rs +186 -55
- package/dist/create/server-source/crates/feltdb/benches/phase_7_1_2_optimization_benchmark.rs +64 -26
- package/dist/create/server-source/crates/feltdb/benches/phase_7_1_3_crossover_analysis.rs +46 -15
- package/dist/create/server-source/crates/feltdb/src/admission.rs +8 -15
- package/dist/create/server-source/crates/feltdb/src/admission_contract_tests.rs +43 -13
- package/dist/create/server-source/crates/feltdb/src/adversarial_transport.rs +15 -42
- package/dist/create/server-source/crates/feltdb/src/analytics.rs +65 -19
- package/dist/create/server-source/crates/feltdb/src/application.rs +113 -30
- package/dist/create/server-source/crates/feltdb/src/authorization_security_tests.rs +475 -140
- package/dist/create/server-source/crates/feltdb/src/cardinality_diagnostics.rs +17 -15
- package/dist/create/server-source/crates/feltdb/src/cardinality_endpoint.rs +0 -1
- package/dist/create/server-source/crates/feltdb/src/causal_backlog_bound.rs +59 -15
- package/dist/create/server-source/crates/feltdb/src/causal_dependency_barrier.rs +266 -114
- package/dist/create/server-source/crates/feltdb/src/causal_dependency_barrier_phase_7_1.rs +25 -7
- package/dist/create/server-source/crates/feltdb/src/concurrency_fuzzing.rs +10 -15
- package/dist/create/server-source/crates/feltdb/src/consistency_contract.rs +3 -11
- package/dist/create/server-source/crates/feltdb/src/crash_atomic_boundary.rs +14 -5
- package/dist/create/server-source/crates/feltdb/src/crash_injection.rs +21 -25
- package/dist/create/server-source/crates/feltdb/src/crash_recovery_tests.rs +14 -11
- package/dist/create/server-source/crates/feltdb/src/dedup_bound_investigation.rs +103 -22
- package/dist/create/server-source/crates/feltdb/src/distributed_indexing.rs +18 -15
- package/dist/create/server-source/crates/feltdb/src/durability_guarantees.rs +12 -8
- package/dist/create/server-source/crates/feltdb/src/durable_dedup_set.rs +1 -5
- package/dist/create/server-source/crates/feltdb/src/durable_operation_identity.rs +87 -23
- package/dist/create/server-source/crates/feltdb/src/durable_operation_log.rs +3 -7
- package/dist/create/server-source/crates/feltdb/src/durable_sync.rs +10 -9
- package/dist/create/server-source/crates/feltdb/src/equality_index.rs +595 -0
- package/dist/create/server-source/crates/feltdb/src/in_process_transport.rs +1 -6
- package/dist/create/server-source/crates/feltdb/src/indexing.rs +35 -38
- package/dist/create/server-source/crates/feltdb/src/lib.rs +1050 -117
- package/dist/create/server-source/crates/feltdb/src/managed_cas_tests.rs +4 -1
- package/dist/create/server-source/crates/feltdb/src/metrics.rs +0 -1
- package/dist/create/server-source/crates/feltdb/src/multi_node_convergence.rs +1 -2
- package/dist/create/server-source/crates/feltdb/src/multi_operation_transaction.rs +107 -30
- package/dist/create/server-source/crates/feltdb/src/observability.rs +19 -6
- package/dist/create/server-source/crates/feltdb/src/operation_algebra.rs +12 -11
- package/dist/create/server-source/crates/feltdb/src/operation_log.rs +9 -4
- package/dist/create/server-source/crates/feltdb/src/p1_application_atomicity.rs +65 -18
- package/dist/create/server-source/crates/feltdb/src/p1_atomicity_acceptance.rs +193 -57
- package/dist/create/server-source/crates/feltdb/src/partition_reconciliation.rs +37 -27
- package/dist/create/server-source/crates/feltdb/src/permutation_scheduler.rs +38 -10
- package/dist/create/server-source/crates/feltdb/src/persistence_reality.rs +20 -14
- package/dist/create/server-source/crates/feltdb/src/phase1b_acceptance.rs +394 -229
- package/dist/create/server-source/crates/feltdb/src/phase1c1_acceptance.rs +8 -6
- package/dist/create/server-source/crates/feltdb/src/phase1c2_acceptance.rs +11 -13
- package/dist/create/server-source/crates/feltdb/src/phase1c3_acceptance.rs +90 -72
- package/dist/create/server-source/crates/feltdb/src/phase1c_atomicity_proof.rs +3 -3
- package/dist/create/server-source/crates/feltdb/src/phase5_integration.rs +33 -11
- package/dist/create/server-source/crates/feltdb/src/phase5_scenarios.rs +6 -6
- package/dist/create/server-source/crates/feltdb/src/phase6_adversarial_scenarios.rs +14 -56
- package/dist/create/server-source/crates/feltdb/src/phase6_convergence_validator.rs +29 -27
- package/dist/create/server-source/crates/feltdb/src/phase6_persistence.rs +35 -17
- package/dist/create/server-source/crates/feltdb/src/phase_1c_real_tcp.rs +8 -2
- package/dist/create/server-source/crates/feltdb/src/phase_2a_failures.rs +59 -15
- package/dist/create/server-source/crates/feltdb/src/phase_2b_network.rs +70 -17
- package/dist/create/server-source/crates/feltdb/src/phase_2c_cascading.rs +23 -6
- package/dist/create/server-source/crates/feltdb/src/phase_3_durability.rs +12 -3
- package/dist/create/server-source/crates/feltdb/src/phase_4_baseline.rs +41 -11
- package/dist/create/server-source/crates/feltdb/src/phase_5_soak.rs +56 -25
- package/dist/create/server-source/crates/feltdb/src/policy_evaluation.rs +701 -245
- package/dist/create/server-source/crates/feltdb/src/production_api.rs +31 -13
- package/dist/create/server-source/crates/feltdb/src/query_execution_diagnostics.rs +126 -0
- package/dist/create/server-source/crates/feltdb/src/query_performance.rs +6 -8
- package/dist/create/server-source/crates/feltdb/src/replay_fuzzing.rs +5 -5
- package/dist/create/server-source/crates/feltdb/src/replica_acknowledgements.rs +48 -18
- package/dist/create/server-source/crates/feltdb/src/replica_membership.rs +30 -11
- package/dist/create/server-source/crates/feltdb/src/replication_manager.rs +6 -3
- package/dist/create/server-source/crates/feltdb/src/replication_protocol.rs +4 -3
- package/dist/create/server-source/crates/feltdb/src/sharding.rs +36 -10
- package/dist/create/server-source/crates/feltdb/src/state_conflict_contract.rs +516 -0
- package/dist/create/server-source/crates/feltdb/src/state_contract.rs +305 -6
- package/dist/create/server-source/crates/feltdb/src/state_diff_contract.rs +222 -0
- package/dist/create/server-source/crates/feltdb/src/state_facade.rs +82 -54
- package/dist/create/server-source/crates/feltdb/src/state_hash.rs +2 -2
- package/dist/create/server-source/crates/feltdb/src/state_model.rs +1514 -537
- package/dist/create/server-source/crates/feltdb/src/state_transition_store.rs +6 -3
- package/dist/create/server-source/crates/feltdb/src/state_trigger.rs +672 -0
- package/dist/create/server-source/crates/feltdb/src/submission.rs +5 -11
- package/dist/create/server-source/crates/feltdb/src/sync.rs +12 -0
- package/dist/create/server-source/crates/feltdb/src/tcp_transport.rs +6 -8
- package/dist/create/server-source/crates/feltdb/src/transaction_api.rs +24 -35
- package/dist/create/server-source/crates/feltdb/src/transaction_invariants.rs +24 -8
- package/dist/create/server-source/crates/feltdb/src/transaction_preconditions.rs +248 -59
- package/dist/create/server-source/crates/feltdb/src/transactions.rs +17 -20
- package/dist/create/server-source/crates/feltdb/src/trigger_contract.rs +749 -0
- package/dist/create/server-source/crates/feltdb/src/worker_mesh.rs +1 -0
- package/dist/create/server-source/crates/feltdb/src/workload.rs +512 -4
- package/dist/create/server-source/crates/feltdb/src/workload_diagnostics.rs +442 -0
- package/dist/create/server-source/crates/feltdb/tests/branching_evidence.rs +299 -0
- package/dist/create/server-source/crates/feltdb/tests/current_revision_authority_evidence.rs +288 -0
- package/dist/create/server-source/crates/feltdb/tests/durable_format_compatibility.rs +392 -0
- package/dist/create/server-source/crates/feltdb/tests/feltdb_state_boundary_tests.rs +436 -220
- package/dist/create/server-source/crates/feltdb/tests/fixtures/state_conflict_contract_corpus.json +1916 -0
- package/dist/create/server-source/crates/feltdb/tests/fixtures/state_diff_contract_corpus.json +1878 -0
- package/dist/create/server-source/crates/feltdb/tests/fixtures/trigger_contract_corpus.json +1862 -0
- package/dist/create/server-source/crates/feltdb/tests/pr34_query_collection.rs +234 -0
- package/dist/create/server-source/crates/feltdb/tests/pr35_equality_index.rs +947 -0
- package/dist/create/server-source/crates/feltdb/tests/pr7_self_authorization_proof.rs +5 -8
- package/dist/create/server-source/crates/feltdb/tests/pr8_vocabulary_assessment.rs +52 -44
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase2_boundary_tests.rs +33 -16
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3a_path_a_tests.rs +22 -7
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_authorized_mutations.rs +41 -22
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_role_based_authorization.rs +25 -8
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_simple_auth_delete.rs +9 -6
- package/dist/create/server-source/crates/feltdb/tests/pr9_phase3c_team_delete_role_authorization.rs +120 -69
- package/dist/create/server-source/crates/feltdb/tests/pr9_teams_role_based_access.rs +21 -10
- package/dist/create/server-source/crates/feltdb/tests/production_readiness_contract.rs +1032 -0
- package/dist/create/server-source/crates/feltdb/tests/reconciliation_application.rs +868 -0
- package/dist/create/server-source/crates/feltdb/tests/reconciliation_wire_format_evidence.rs +221 -0
- package/dist/create/server-source/crates/feltdb/tests/resource_scoped_revisions.rs +338 -0
- package/dist/create/server-source/crates/feltdb/tests/revision_identity_contract.rs +1039 -0
- package/dist/create/server-source/crates/feltdb/tests/revision_model_decision.rs +739 -0
- package/dist/create/server-source/crates/feltdb/tests/revision_retention_boundary_evidence.rs +427 -0
- package/dist/create/server-source/crates/feltdb/tests/saas_authorization_integration.rs +3 -3
- package/dist/create/server-source/crates/feltdb/tests/saas_invitation_lifecycle.rs +25 -22
- package/dist/create/server-source/crates/feltdb/tests/state_conflict_contract_conformance.rs +1799 -0
- package/dist/create/server-source/crates/feltdb/tests/state_diff_contract_conformance.rs +1316 -0
- package/dist/create/server-source/crates/feltdb/tests/state_model_integration.rs +53 -61
- package/dist/create/server-source/crates/feltdb/tests/state_persistence_integration.rs +156 -61
- package/dist/create/server-source/crates/feltdb/tests/state_store_boundary_evidence.rs +299 -0
- package/dist/create/server-source/crates/feltdb/tests/sync_divergence_evidence.rs +255 -0
- package/dist/create/server-source/crates/feltdb/tests/three_way_input_boundary_evidence.rs +249 -0
- package/dist/create/server-source/crates/feltdb/tests/trigger_contract_conformance.rs +994 -0
- package/dist/create/server-source/crates/feltdb-server/src/app_state.rs +2 -1
- package/dist/create/server-source/crates/feltdb-server/src/audit.rs +1137 -29
- package/dist/create/server-source/crates/feltdb-server/src/auth.rs +164 -13
- package/dist/create/server-source/crates/feltdb-server/src/main.rs +800 -34
- package/dist/db.d.ts +33 -34
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +74 -20
- package/dist/deployment.d.ts +30 -0
- package/dist/deployment.d.ts.map +1 -0
- package/dist/deployment.js +130 -0
- package/dist/embedded-transaction.d.ts +22 -4
- package/dist/embedded-transaction.d.ts.map +1 -1
- package/dist/embedded-transaction.js +51 -5
- package/dist/feltdb.d.ts +14 -2
- package/dist/feltdb.d.ts.map +1 -1
- package/dist/file-db.js +1 -1
- package/dist/http-client.d.ts +14 -0
- package/dist/http-client.d.ts.map +1 -1
- package/dist/http-client.js +23 -5
- package/dist/http-db.d.ts +119 -1
- package/dist/http-db.d.ts.map +1 -1
- package/dist/http-db.js +346 -31
- package/dist/index-core.d.ts +2 -0
- package/dist/index-core.d.ts.map +1 -1
- package/dist/index-core.js +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/indexeddb-db.d.ts.map +1 -1
- package/dist/indexeddb-db.js +35 -21
- package/dist/managed-recovery.d.ts +192 -0
- package/dist/managed-recovery.d.ts.map +1 -0
- package/dist/managed-recovery.js +242 -0
- package/dist/memory-db.js +1 -1
- package/dist/studio-app/assets/{feltdb_wasm-DB8cX151.js → feltdb_wasm-DaNwCLRX.js} +1 -1
- package/dist/studio-app/assets/feltdb_wasm_bg-DnsHNv6g.wasm +0 -0
- package/dist/studio-app/assets/index-j8IlhNqJ.js +29 -0
- package/dist/studio-app/index.html +1 -1
- package/dist/transaction.d.ts +30 -0
- package/dist/transaction.d.ts.map +1 -1
- package/dist/transaction.js +41 -0
- package/dist/wasm/feltdb_wasm_bg.wasm +0 -0
- package/dist/workload.d.ts +2 -1
- package/dist/workload.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/studio-app/assets/feltdb_wasm_bg-ClhDHp0S.wasm +0 -0
- package/dist/studio-app/assets/index-B0k4UAlI.js +0 -29
|
@@ -96,12 +96,20 @@ export function decideTransaction(request, state) {
|
|
|
96
96
|
const current = state.read(key);
|
|
97
97
|
if (guard.requireAbsent) {
|
|
98
98
|
if (current !== undefined) {
|
|
99
|
-
return {
|
|
99
|
+
return {
|
|
100
|
+
kind: 'reject',
|
|
101
|
+
reason: `PRECONDITION_FAILED:${key}:record already exists`,
|
|
102
|
+
failure: { predicate: 'present', collection: guard.collection, key },
|
|
103
|
+
};
|
|
100
104
|
}
|
|
101
105
|
continue;
|
|
102
106
|
}
|
|
103
107
|
if (current === undefined) {
|
|
104
|
-
return {
|
|
108
|
+
return {
|
|
109
|
+
kind: 'reject',
|
|
110
|
+
reason: `PRECONDITION_FAILED:${key}:record does not exist`,
|
|
111
|
+
failure: { predicate: 'missing', collection: guard.collection, key },
|
|
112
|
+
};
|
|
105
113
|
}
|
|
106
114
|
if (guard.expectedVersion !== undefined) {
|
|
107
115
|
const actual = typeof current.__version === 'number' ? current.__version : 1;
|
|
@@ -109,6 +117,13 @@ export function decideTransaction(request, state) {
|
|
|
109
117
|
return {
|
|
110
118
|
kind: 'reject',
|
|
111
119
|
reason: `PRECONDITION_FAILED:${key}:version ${actual}, expected ${guard.expectedVersion}`,
|
|
120
|
+
failure: {
|
|
121
|
+
predicate: 'version',
|
|
122
|
+
collection: guard.collection,
|
|
123
|
+
key,
|
|
124
|
+
expected: guard.expectedVersion,
|
|
125
|
+
actual,
|
|
126
|
+
},
|
|
112
127
|
};
|
|
113
128
|
}
|
|
114
129
|
}
|
|
@@ -119,6 +134,13 @@ export function decideTransaction(request, state) {
|
|
|
119
134
|
return {
|
|
120
135
|
kind: 'reject',
|
|
121
136
|
reason: `PRECONDITION_FAILED:${key}:epoch ${actual}, expected ${guard.expectedEpoch}`,
|
|
137
|
+
failure: {
|
|
138
|
+
predicate: 'epoch',
|
|
139
|
+
collection: guard.collection,
|
|
140
|
+
key,
|
|
141
|
+
expected: guard.expectedEpoch,
|
|
142
|
+
actual,
|
|
143
|
+
},
|
|
122
144
|
};
|
|
123
145
|
}
|
|
124
146
|
}
|
|
@@ -130,6 +152,13 @@ export function decideTransaction(request, state) {
|
|
|
130
152
|
return {
|
|
131
153
|
kind: 'reject',
|
|
132
154
|
reason: `PRECONDITION_FAILED:${key}:lease ${held ?? 'none'}, expected ${guard.expectedLeaseId}`,
|
|
155
|
+
failure: {
|
|
156
|
+
predicate: 'lease',
|
|
157
|
+
collection: guard.collection,
|
|
158
|
+
key,
|
|
159
|
+
expected: guard.expectedLeaseId,
|
|
160
|
+
actual: held ?? null,
|
|
161
|
+
},
|
|
133
162
|
};
|
|
134
163
|
}
|
|
135
164
|
}
|
|
@@ -149,7 +178,11 @@ export function decideTransaction(request, state) {
|
|
|
149
178
|
}
|
|
150
179
|
seen.add(key);
|
|
151
180
|
if (operation.requireAbsent && state.exists(key)) {
|
|
152
|
-
return {
|
|
181
|
+
return {
|
|
182
|
+
kind: 'reject',
|
|
183
|
+
reason: `PRECONDITION_FAILED:${key}:record already exists`,
|
|
184
|
+
failure: { predicate: 'present', collection: operation.collection, key },
|
|
185
|
+
};
|
|
153
186
|
}
|
|
154
187
|
// A requireAbsent create begins the authority-owned version lifecycle at
|
|
155
188
|
// 1. A write fenced by expectedVersion is validated at N and written at
|
|
@@ -191,10 +224,23 @@ export function embeddedResult(request, duplicate, stateBefore, stateAfter) {
|
|
|
191
224
|
stateAfter,
|
|
192
225
|
};
|
|
193
226
|
}
|
|
194
|
-
/**
|
|
227
|
+
/**
|
|
228
|
+
* Raised when a transaction is refused. Nothing was written.
|
|
229
|
+
*
|
|
230
|
+
* A refusal that is a lost race carries `feltdbCode` and `feltdbConflict`,
|
|
231
|
+
* spelled exactly as the authority's HTTP refusal carries them. That is what
|
|
232
|
+
* makes a conflict against an embedded runtime the same event as a conflict
|
|
233
|
+
* against a managed one, rather than a message a caller has to parse.
|
|
234
|
+
*/
|
|
195
235
|
export class EmbeddedTransactionRejected extends Error {
|
|
196
|
-
|
|
236
|
+
feltdbCode;
|
|
237
|
+
feltdbConflict;
|
|
238
|
+
constructor(reason, failure) {
|
|
197
239
|
super(reason);
|
|
198
240
|
this.name = 'EmbeddedTransactionRejected';
|
|
241
|
+
if (failure) {
|
|
242
|
+
this.feltdbCode = 'PRECONDITION_FAILED';
|
|
243
|
+
this.feltdbConflict = failure;
|
|
244
|
+
}
|
|
199
245
|
}
|
|
200
246
|
}
|
package/dist/feltdb.d.ts
CHANGED
|
@@ -99,12 +99,24 @@ export interface JsDb {
|
|
|
99
99
|
/** Export and merge portable embedded-runtime operations. */
|
|
100
100
|
export_operations?(since_sequence: number): any | Promise<any>;
|
|
101
101
|
apply_remote_operations?(operations: any[]): any | Promise<any>;
|
|
102
|
-
/**
|
|
102
|
+
/**
|
|
103
|
+
* Atomic conditional create: insert only if key does not exist.
|
|
104
|
+
*
|
|
105
|
+
* Optional because a runtime may express the same condition through
|
|
106
|
+
* `commit_transaction` instead. A caller should not branch on which one a
|
|
107
|
+
* runtime provides -- `Collection.putIfAbsent` already routes between them.
|
|
108
|
+
*/
|
|
103
109
|
putIfAbsent?(key: string, value: string): Promise<{
|
|
104
110
|
inserted: boolean;
|
|
105
111
|
value: string;
|
|
106
112
|
}>;
|
|
107
|
-
/**
|
|
113
|
+
/**
|
|
114
|
+
* Compare-and-set: atomically update only if version and epoch match.
|
|
115
|
+
*
|
|
116
|
+
* Optional for the same reason as `putIfAbsent`: a runtime may carry the
|
|
117
|
+
* fence through `commit_transaction` instead, and
|
|
118
|
+
* `Collection.updateIfVersion` routes between them.
|
|
119
|
+
*/
|
|
108
120
|
cas?(params: {
|
|
109
121
|
key: string;
|
|
110
122
|
expectedVersion: number;
|
package/dist/feltdb.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feltdb.d.ts","sourceRoot":"","sources":["../src/feltdb.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,GAAG,GAAG,GAAG,CAAC;IAEhC;;OAEG;IACH,SAAS,IAAI,GAAG,CAAC;IAEjB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC;IAE/B;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC;IAEpC;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC;IAEvC;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,GAAG,CAAC;IAEnE;;OAEG;IACH,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC;IAEpE;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAEzC,oFAAoF;IACpF,eAAe,CAAC,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnD;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAErC;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAEvD,6DAA6D;IAC7D,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAExD,qDAAqD;IACrD,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAEzC,2EAA2E;IAC3E,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IAC5F,KAAK,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/B;;OAEG;IACH,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,CAAC;IAEhD;;OAEG;IACH,WAAW,IAAI,MAAM,CAAC;IAEtB;;;;;;;;;OASG;IACH,YAAY,IAAI,MAAM,CAAC;IAEvB;;;;;;;OAOG;IACH,SAAS,CAAC,IAAI,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEjE;;;;;;;OAOG;IACH,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE/B,0EAA0E;IAC1E,YAAY,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAEpC,6DAA6D;IAC7D,iBAAiB,CAAC,CAAC,cAAc,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/D,uBAAuB,CAAC,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAEhE
|
|
1
|
+
{"version":3,"file":"feltdb.d.ts","sourceRoot":"","sources":["../src/feltdb.ts"],"names":[],"mappings":"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"}
|
package/dist/file-db.js
CHANGED
|
@@ -330,7 +330,7 @@ export class FileJsDb {
|
|
|
330
330
|
if (plan.kind === 'duplicate')
|
|
331
331
|
return embeddedResult(request, true, before, this.state.sequence);
|
|
332
332
|
if (plan.kind === 'reject')
|
|
333
|
-
throw new EmbeddedTransactionRejected(plan.reason);
|
|
333
|
+
throw new EmbeddedTransactionRejected(plan.reason, plan.failure);
|
|
334
334
|
// Build the post-transaction state without touching the live one.
|
|
335
335
|
const rows = { ...this.state.rows };
|
|
336
336
|
const events = [...this.state.events];
|
package/dist/http-client.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ import type { ApplicationUnderstanding } from './application-understanding.js';
|
|
|
9
9
|
import type { ConvergenceResult } from './convergence.js';
|
|
10
10
|
import type { ImplementationPlan, Intent, IntentEvent, IntentExecutionResult } from './intent.js';
|
|
11
11
|
import type { CanonicalQuery, QueryResult, TransactionResult } from './state-contract.js';
|
|
12
|
+
import { type DiscoveryState } from './managed-recovery.js';
|
|
12
13
|
export interface ClientOptions {
|
|
13
14
|
url: string;
|
|
14
15
|
token: string;
|
|
@@ -77,12 +78,25 @@ export declare class FeltDBClient {
|
|
|
77
78
|
private readonly environment;
|
|
78
79
|
private readonly fetcher;
|
|
79
80
|
private revisionId?;
|
|
81
|
+
private readonly revisionCache;
|
|
80
82
|
constructor(options: ClientOptions);
|
|
81
83
|
private headers;
|
|
82
84
|
private request;
|
|
83
85
|
private scoped;
|
|
84
86
|
private scopeBody;
|
|
87
|
+
/**
|
|
88
|
+
* The canonical revision for this client's application.
|
|
89
|
+
*
|
|
90
|
+
* Shared with `HttpJsDb` in shape and in reason. This one never poisoned
|
|
91
|
+
* itself — it only assigned on success — but it did issue one
|
|
92
|
+
* `GET /v1/application` per concurrent caller, so ten simultaneous queries
|
|
93
|
+
* meant ten discovery requests against the authority. Sharing the in-flight
|
|
94
|
+
* lookup fixes that, and using the same primitive means the two clients
|
|
95
|
+
* cannot drift apart on the semantics that matter.
|
|
96
|
+
*/
|
|
85
97
|
private activeRevision;
|
|
98
|
+
/** Discovery state, for diagnostics. */
|
|
99
|
+
revisionState(): DiscoveryState;
|
|
86
100
|
/** Canonical application Contract Snapshot and schema inspection. */
|
|
87
101
|
readonly application: {
|
|
88
102
|
get: () => Promise<ApplicationInspection>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACjJ,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../src/http-client.ts"],"names":[],"mappings":"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"}
|
package/dist/http-client.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Provides a simple interface for connecting to and querying remote FeltDB instances.
|
|
5
5
|
* For applications that only need HTTP access without the full core framework.
|
|
6
6
|
*/
|
|
7
|
+
import { SingleFlightValue } from './managed-recovery.js';
|
|
7
8
|
export class FeltDBServiceApiError extends Error {
|
|
8
9
|
code;
|
|
9
10
|
status;
|
|
@@ -22,6 +23,7 @@ export class FeltDBClient {
|
|
|
22
23
|
environment;
|
|
23
24
|
fetcher;
|
|
24
25
|
revisionId;
|
|
26
|
+
revisionCache = new SingleFlightValue();
|
|
25
27
|
constructor(options) {
|
|
26
28
|
if (!options.url || !options.token)
|
|
27
29
|
throw new Error('FeltDBClient requires url and token');
|
|
@@ -31,6 +33,8 @@ export class FeltDBClient {
|
|
|
31
33
|
this.environment = options.environment || 'production';
|
|
32
34
|
this.fetcher = options.fetch ?? globalThis.fetch.bind(globalThis);
|
|
33
35
|
this.revisionId = options.revisionId;
|
|
36
|
+
if (options.revisionId)
|
|
37
|
+
this.revisionCache.seed(options.revisionId);
|
|
34
38
|
}
|
|
35
39
|
headers(json = false) {
|
|
36
40
|
return {
|
|
@@ -72,12 +76,26 @@ export class FeltDBClient {
|
|
|
72
76
|
throw new Error('This Service API operation requires createClient({ applicationId })');
|
|
73
77
|
return { application_id: this.applicationId, environment: this.environment, ...value };
|
|
74
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* The canonical revision for this client's application.
|
|
81
|
+
*
|
|
82
|
+
* Shared with `HttpJsDb` in shape and in reason. This one never poisoned
|
|
83
|
+
* itself — it only assigned on success — but it did issue one
|
|
84
|
+
* `GET /v1/application` per concurrent caller, so ten simultaneous queries
|
|
85
|
+
* meant ten discovery requests against the authority. Sharing the in-flight
|
|
86
|
+
* lookup fixes that, and using the same primitive means the two clients
|
|
87
|
+
* cannot drift apart on the semantics that matter.
|
|
88
|
+
*/
|
|
75
89
|
async activeRevision() {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
90
|
+
return this.revisionCache.get(async () => {
|
|
91
|
+
const application = await this.application.get();
|
|
92
|
+
this.revisionId = application.revision_id;
|
|
93
|
+
return application.revision_id;
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
/** Discovery state, for diagnostics. */
|
|
97
|
+
revisionState() {
|
|
98
|
+
return this.revisionCache.state;
|
|
81
99
|
}
|
|
82
100
|
/** Canonical application Contract Snapshot and schema inspection. */
|
|
83
101
|
application = {
|
package/dist/http-db.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { JsDb } from './feltdb.js';
|
|
2
2
|
import type { FreshnessCapability, Revision } from './freshness.js';
|
|
3
|
+
import { type ManagedClientHealth } from './managed-recovery.js';
|
|
3
4
|
interface JsResult {
|
|
4
5
|
success: boolean;
|
|
5
6
|
data?: string;
|
|
@@ -10,6 +11,26 @@ interface HttpRuntimeOptions {
|
|
|
10
11
|
token?: string;
|
|
11
12
|
applicationId?: string;
|
|
12
13
|
environment?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Event-stream reconnection bounds. Tests pin them; applications should not
|
|
16
|
+
* need to, which is why they are optional and undocumented in the README.
|
|
17
|
+
*/
|
|
18
|
+
reconnect?: {
|
|
19
|
+
base?: number;
|
|
20
|
+
max?: number;
|
|
21
|
+
factor?: number;
|
|
22
|
+
random?: () => number;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* How long a canonical application request may take before it is abandoned.
|
|
26
|
+
*
|
|
27
|
+
* Thirty seconds remains the default, unchanged. It is settable because a
|
|
28
|
+
* hard-coded timeout with no override is its own resilience problem: a
|
|
29
|
+
* caller with a tighter latency budget than the transport's had no way to
|
|
30
|
+
* express it, and a test that needs to reproduce a real timeout had no way
|
|
31
|
+
* to do it in less than half a minute.
|
|
32
|
+
*/
|
|
33
|
+
requestTimeoutMs?: number;
|
|
13
34
|
}
|
|
14
35
|
export interface AuthorityQueryRequest {
|
|
15
36
|
collection: string;
|
|
@@ -40,9 +61,38 @@ export declare class HttpJsDb implements JsDb {
|
|
|
40
61
|
private token;
|
|
41
62
|
private readonly applicationId?;
|
|
42
63
|
private readonly environment;
|
|
43
|
-
private activeRevision?;
|
|
44
64
|
private readonly authWaiters;
|
|
65
|
+
/**
|
|
66
|
+
* Canonical revision discovery.
|
|
67
|
+
*
|
|
68
|
+
* This used to be `private activeRevision?: Promise<string>` assigned with
|
|
69
|
+
* `??=`, which cached the rejected promise a single timeout produced and
|
|
70
|
+
* poisoned the client for its whole life. It is a state machine now, and the
|
|
71
|
+
* state it refuses to keep is a failure.
|
|
72
|
+
*/
|
|
73
|
+
private readonly revisionCache;
|
|
74
|
+
private readonly backoff;
|
|
75
|
+
private readonly requestTimeoutMs;
|
|
76
|
+
private connectionState;
|
|
77
|
+
private availabilityState;
|
|
78
|
+
private lastError?;
|
|
79
|
+
private lastSuccessAt?;
|
|
80
|
+
private nextRetryAt?;
|
|
81
|
+
private streamFailures;
|
|
82
|
+
private authorityFailures;
|
|
45
83
|
constructor(options: HttpRuntimeOptions);
|
|
84
|
+
/**
|
|
85
|
+
* The operational view: connected, recovering, or unable to proceed.
|
|
86
|
+
*
|
|
87
|
+
* This does not replace the typed error a caller already receives. An
|
|
88
|
+
* application handles `FeltDBServiceError`; an operator reads this. Before
|
|
89
|
+
* PR39 the only signal for a swallowed failure was a `console.error` in the
|
|
90
|
+
* collection refresh path, which no program can act on.
|
|
91
|
+
*/
|
|
92
|
+
health(): ManagedClientHealth;
|
|
93
|
+
/** Record a failure for the operational surface, without swallowing it. */
|
|
94
|
+
private recordFailure;
|
|
95
|
+
private recordSuccess;
|
|
46
96
|
private headers;
|
|
47
97
|
private updateToken;
|
|
48
98
|
private waitForAuthChange;
|
|
@@ -50,7 +100,25 @@ export declare class HttpJsDb implements JsDb {
|
|
|
50
100
|
access_token?: string;
|
|
51
101
|
}>(operation: 'signup' | 'signin' | 'signout' | 'session', body?: unknown): Promise<T>;
|
|
52
102
|
private splitKey;
|
|
103
|
+
/**
|
|
104
|
+
* The canonical revision for this application and environment.
|
|
105
|
+
*
|
|
106
|
+
* A success is cached for the life of the client, because a revision pointer
|
|
107
|
+
* the authority has already resolved does not change under a running client.
|
|
108
|
+
* Concurrent callers share one lookup. A failure is delivered to everyone
|
|
109
|
+
* waiting and cached by nobody, so the next operation tries again against
|
|
110
|
+
* whatever the authority has become.
|
|
111
|
+
*
|
|
112
|
+
* Nothing here retries on its own. That is the design, not an omission: the
|
|
113
|
+
* only automatic retry loop in this client is the event stream, and it is
|
|
114
|
+
* bounded and jittered. A revision lookup is re-attempted exactly when the
|
|
115
|
+
* application performs another operation, so a permanently misconfigured
|
|
116
|
+
* application produces the application's own call rate against the
|
|
117
|
+
* authority, never a client-generated storm on top of it.
|
|
118
|
+
*/
|
|
53
119
|
private revisionId;
|
|
120
|
+
/** Discovery state for tests and diagnostics; never used to make decisions. */
|
|
121
|
+
revisionState(): ManagedClientHealth['revision_state'];
|
|
54
122
|
private canonical;
|
|
55
123
|
private transactionDocument;
|
|
56
124
|
private canonicalTransaction;
|
|
@@ -94,6 +162,46 @@ export declare class HttpJsDb implements JsDb {
|
|
|
94
162
|
stateBefore: number;
|
|
95
163
|
stateAfter: number;
|
|
96
164
|
}>;
|
|
165
|
+
/**
|
|
166
|
+
* Atomically create a record only if the key is free.
|
|
167
|
+
*
|
|
168
|
+
* Routed through the authority's own transaction, not emulated with a read
|
|
169
|
+
* followed by a write: between a read and a write another writer commits,
|
|
170
|
+
* and the whole point of this call is that exactly one caller wins.
|
|
171
|
+
*
|
|
172
|
+
* A lost race is a value, not an exception -- `{ inserted: false }` with the
|
|
173
|
+
* record the winner wrote. Every other failure (authentication, schema,
|
|
174
|
+
* transport, a server error) is raised, because reporting one of those as
|
|
175
|
+
* "someone else got there first" would let a caller skip work it must do.
|
|
176
|
+
*
|
|
177
|
+
* One difference from the embedded runtimes is worth stating rather than
|
|
178
|
+
* discovering: the authority owns `__version` on a conditional create and
|
|
179
|
+
* stores 1, where an embedded runtime stores the caller's object verbatim.
|
|
180
|
+
* `Collection.putIfAbsent` supplies version 1 either way, so a collection
|
|
181
|
+
* caller sees no difference; a caller of this raw key/value surface does.
|
|
182
|
+
*/
|
|
183
|
+
putIfAbsent(key: string, value: string): Promise<{
|
|
184
|
+
inserted: boolean;
|
|
185
|
+
value: string;
|
|
186
|
+
}>;
|
|
187
|
+
/**
|
|
188
|
+
* Compare-and-set through the managed authority's transaction surface.
|
|
189
|
+
*
|
|
190
|
+
* The managed runtime serves the canonical application contract and not the
|
|
191
|
+
* single-record `/cas` endpoint, so a conditional update reaches it as a
|
|
192
|
+
* one-operation transaction fenced on the record's `__version`. It is the
|
|
193
|
+
* same predicate, evaluated by the same authority, inside the same lock.
|
|
194
|
+
*/
|
|
195
|
+
private managedCas;
|
|
196
|
+
/**
|
|
197
|
+
* What the authority actually holds after it refused a conditional update.
|
|
198
|
+
*
|
|
199
|
+
* The refusal usually names it, and that is the answer worth having because
|
|
200
|
+
* it was read inside the commit lock. When the failure does not carry a
|
|
201
|
+
* version -- the record was deleted, or an epoch or lease predicate failed --
|
|
202
|
+
* the record is re-read, which is what the caller would have to do anyway.
|
|
203
|
+
*/
|
|
204
|
+
private observedConflict;
|
|
97
205
|
cas(params: {
|
|
98
206
|
key: string;
|
|
99
207
|
expectedVersion: number;
|
|
@@ -106,6 +214,7 @@ export declare class HttpJsDb implements JsDb {
|
|
|
106
214
|
currentVersion: number;
|
|
107
215
|
currentEpoch?: number;
|
|
108
216
|
conflictCode?: string;
|
|
217
|
+
item?: any;
|
|
109
218
|
}>;
|
|
110
219
|
delete(key: string): Promise<JsResult>;
|
|
111
220
|
/** Acquire a reference through the server's causal peer fabric. */
|
|
@@ -121,6 +230,15 @@ export declare class HttpJsDb implements JsDb {
|
|
|
121
230
|
acquireContent(hash: string): Promise<Uint8Array | null>;
|
|
122
231
|
command(path: string, body: unknown): Promise<any>;
|
|
123
232
|
application_request<T>(path: string, init?: RequestInit): Promise<T>;
|
|
233
|
+
/**
|
|
234
|
+
* Subscribe to change notifications.
|
|
235
|
+
*
|
|
236
|
+
* The returned function is the only cancellation surface, and it has to do
|
|
237
|
+
* two things rather than one: abort the connection that may be open, and
|
|
238
|
+
* cancel the reconnect that may be pending. Cancelling only the first leaves
|
|
239
|
+
* a timer that wakes up after the caller has unsubscribed and opens a new
|
|
240
|
+
* connection to an authority nobody is listening to.
|
|
241
|
+
*/
|
|
124
242
|
subscribe_changes(callback: (collection: string) => void): () => void;
|
|
125
243
|
private consumeEvents;
|
|
126
244
|
private failure;
|
package/dist/http-db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-db.d.ts","sourceRoot":"","sources":["../src/http-db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGpE,UAAU,QAAQ;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,kBAAkB;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"http-db.d.ts","sourceRoot":"","sources":["../src/http-db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGpE,OAAO,EAEkD,KAAK,mBAAmB,EAChF,MAAM,uBAAuB,CAAC;AAE/B,UAAU,QAAQ;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,kBAAkB;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,MAAM,CAAA;KAAE,CAAC;IACpF;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAGD,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACxH,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7D,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAiBD,iFAAiF;AACjF,qBAAa,QAAS,YAAW,IAAI;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyB;IAErD;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmC;IAEjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,iBAAiB,CAAyC;IAClE,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,iBAAiB,CAAK;gBAElB,OAAO,EAAE,kBAAkB;IASvC;;;;;;;OAOG;IACH,MAAM,IAAI,mBAAmB;IA2B7B,2EAA2E;IAC3E,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,iBAAiB;IAUnB,YAAY,CAAC,CAAC,SAAS;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,SAAS,EAAE,QAAQ,GAAC,QAAQ,GAAC,SAAS,GAAC,SAAS,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAarI,OAAO,CAAC,QAAQ;IAQhB;;;;;;;;;;;;;;;OAeG;YACW,UAAU;IAgBxB,+EAA+E;IAC/E,aAAa,IAAI,mBAAmB,CAAC,gBAAgB,CAAC;YAIxC,SAAS;IAMvB,OAAO,CAAC,mBAAmB;YAIb,oBAAoB;IAK5B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmBnC,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiB5C,eAAe,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IA4B1G,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAoBrD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAmB3D;;;;;OAKG;IACG,kBAAkB,CAAC,OAAO,EAAE;QAChC,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,KAAK,CAAC;YAChB,UAAU,EAAE,MAAM,CAAC;YACnB,EAAE,EAAE,MAAM,CAAC;YACX,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAChC,aAAa,CAAC,EAAE,OAAO,CAAC;YACxB,eAAe,CAAC,EAAE,MAAM,CAAC;YACzB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,eAAe,CAAC,EAAE,MAAM,CAAC;SAC1B,CAAC,CAAC;QACH,aAAa,CAAC,EAAE,KAAK,CAAC;YACpB,UAAU,EAAE,MAAM,CAAC;YACnB,EAAE,EAAE,MAAM,CAAC;YACX,aAAa,CAAC,EAAE,OAAO,CAAC;YACxB,eAAe,CAAC,EAAE,MAAM,CAAC;YACzB,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,eAAe,CAAC,EAAE,MAAM,CAAC;SAC1B,CAAC,CAAC;KACJ,GAAG,OAAO,CAAC;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE,WAAW,CAAC;QACpB,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAmEF;;;;;;;;;;;;;;;;;OAiBG;IACG,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IA8B5F;;;;;;;OAOG;YACW,UAAU;IAqCxB;;;;;;;OAOG;YACW,gBAAgB;IAqBxB,GAAG,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IA+CnQ,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAiB5C,mEAAmE;IAC7D,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAOtE,qEAAqE;IAC/D,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAQzE,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAMxD,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAMxF,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAOxD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAQlD,mBAAmB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;IAgC9E;;;;;;;;OAQG;IACH,iBAAiB,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI;YAavD,aAAa;YAsFb,OAAO;IASrB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC7D,UAAU,IAAI,QAAQ;IACtB,SAAS,IAAI,QAAQ;IACrB,QAAQ,IAAI,QAAQ;IACpB,aAAa,IAAI,QAAQ;IACzB,gBAAgB,IAAI,QAAQ;IAC5B,oBAAoB,IAAI,QAAQ;IAChC,2BAA2B,IAAI,QAAQ;IACvC,WAAW,IAAI,MAAM;IAErB;;;;;;;;OAQG;IACH,YAAY,IAAI,MAAM;IAEtB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,eAAe,CAAC,CAAS;IAE3B,SAAS,IAAI,OAAO,CAAC,mBAAmB,CAAC;IA0BzC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;YAKrB,IAAI;IAOlB,OAAO,CAAC,MAAM;CAIf"}
|