@feltdb/core 0.12.1 → 0.12.2
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/build-identity.json +13 -4
- package/dist/cli/commands.js +88 -43
- package/dist/collection.d.ts +41 -4
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +116 -47
- package/dist/composition.d.ts.map +1 -1
- package/dist/composition.js +11 -1
- package/dist/create/build-identity.json +13 -4
- package/dist/create/cli.js +3 -3
- package/dist/create/create.js +17 -19
- package/dist/create/package-versions.js +1 -1
- package/dist/create/server-source/Cargo.lock +18 -3
- package/dist/create/server-source/Cargo.toml +4 -2
- package/dist/create/server-source/crates/feltdb/Cargo.toml +20 -0
- package/dist/create/server-source/crates/feltdb/LICENSE +21 -0
- package/dist/create/server-source/crates/feltdb/README.md +75 -0
- package/dist/create/server-source/crates/feltdb/src/agent_state.rs +320 -0
- package/dist/create/server-source/crates/feltdb/src/agent_transition_contract.rs +1545 -0
- package/dist/create/server-source/crates/feltdb/src/authority.rs +145 -15
- package/dist/create/server-source/crates/feltdb/src/lib.rs +227 -23
- package/dist/create/server-source/crates/feltdb/src/state_model.rs +1 -5
- package/dist/create/server-source/crates/feltdb/tests/agent_state_native.rs +1188 -0
- package/dist/create/server-source/crates/feltdb/tests/agent_transition_contract_conformance.rs +2884 -0
- package/dist/create/server-source/crates/feltdb/tests/authority_transaction_identity.rs +534 -0
- package/dist/create/server-source/crates/feltdb/tests/fixtures/agent_transition_corpus.json +23340 -0
- package/dist/create/server-source/crates/feltdb-client/Cargo.toml +29 -0
- package/dist/create/server-source/crates/feltdb-client/LICENSE +21 -0
- package/dist/create/server-source/crates/feltdb-client/README.md +70 -0
- package/dist/create/server-source/crates/feltdb-client/src/application.rs +527 -0
- package/dist/create/server-source/crates/feltdb-client/src/authority.rs +679 -0
- package/dist/create/server-source/crates/feltdb-client/src/control.rs +292 -0
- package/dist/create/server-source/crates/feltdb-client/src/error.rs +227 -0
- package/dist/create/server-source/crates/feltdb-client/src/events.rs +146 -0
- package/dist/create/server-source/crates/feltdb-client/src/lib.rs +466 -0
- package/dist/create/server-source/crates/feltdb-client/tests/fixtures/README.md +4 -0
- package/dist/create/server-source/crates/feltdb-client/tests/fixtures/private-ca.pem +20 -0
- package/dist/create/server-source/crates/feltdb-client/tests/fixtures/server-key.pem +28 -0
- package/dist/create/server-source/crates/feltdb-client/tests/fixtures/server.pem +20 -0
- package/dist/create/server-source/crates/feltdb-client/tests/private_ca.rs +95 -0
- package/dist/create/server-source/crates/feltdb-server/Cargo.toml +20 -1
- package/dist/create/server-source/crates/feltdb-server/LICENSE +21 -0
- package/dist/create/server-source/crates/feltdb-server/README.md +12 -1
- package/dist/create/server-source/crates/feltdb-server/src/backup.rs +6 -2
- package/dist/create/server-source/crates/feltdb-server/src/lib.rs +20 -0
- package/dist/create/server-source/crates/feltdb-server/src/main.rs +1 -3
- package/dist/create/server-source/crates/feltdb-server/tests/rust_client.rs +683 -0
- package/dist/create/server-source/crates/feltdb-wasm/Cargo.toml +3 -1
- package/dist/create/template/default-project/README.md +12 -7
- package/dist/create/template/default-project/src/pages/Dashboard.tsx +1 -1
- package/dist/create/template/dot-feltdb-README.md +3 -3
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +43 -17
- package/dist/development-runtime-bridge.d.ts.map +1 -1
- package/dist/development-runtime-bridge.js +22 -1
- package/dist/embedded-transaction.d.ts +75 -8
- package/dist/embedded-transaction.d.ts.map +1 -1
- package/dist/embedded-transaction.js +124 -18
- package/dist/error-codes.d.ts +2 -0
- package/dist/error-codes.d.ts.map +1 -1
- package/dist/error-codes.js +2 -0
- package/dist/feltdb.d.ts +1 -11
- package/dist/feltdb.d.ts.map +1 -1
- package/dist/file-db.d.ts +6 -0
- package/dist/file-db.d.ts.map +1 -1
- package/dist/file-db.js +43 -11
- package/dist/indexeddb-db.d.ts.map +1 -1
- package/dist/indexeddb-db.js +65 -41
- package/dist/memory-db.d.ts.map +1 -1
- package/dist/memory-db.js +29 -8
- package/dist/studio/{KeyManagementPanel-DZuSeWBK.js → KeyManagementPanel-D5FMvvU9.js} +1 -0
- package/dist/studio/app.d.ts.map +1 -1
- package/dist/studio/components/KeyManagementPanel.d.ts.map +1 -1
- package/dist/studio/components/KeyManagementPanel.js +1 -1
- package/dist/studio/components/RouteErrorBoundary.d.ts +5 -0
- package/dist/studio/components/RouteErrorBoundary.d.ts.map +1 -0
- package/dist/studio/components/index.js +2 -2
- package/dist/studio/{components-Bivm2lX6.js → components-B4eKIUN5.js} +1 -1
- package/dist/studio/control-plane/Agents.d.ts.map +1 -1
- package/dist/studio/control-plane/Data.d.ts.map +1 -1
- package/dist/studio/control-plane/Instance.d.ts.map +1 -1
- package/dist/studio/control-plane/Overview.d.ts.map +1 -1
- package/dist/studio/control-plane/Schema.d.ts.map +1 -1
- package/dist/studio/control-plane/context.d.ts +4 -1
- package/dist/studio/control-plane/context.d.ts.map +1 -1
- package/dist/studio/control-plane/index.js +2 -2
- package/dist/studio/control-plane/primitives.d.ts +8 -0
- package/dist/studio/control-plane/primitives.d.ts.map +1 -1
- package/dist/studio/{control-plane-CLm69XwX.js → control-plane-fxMcJn74.js} +1371 -1319
- package/dist/studio/index.js +146 -105
- package/dist/studio/utils/control-plane-api.d.ts.map +1 -1
- package/dist/studio/utils/control-plane-api.js +4 -3
- package/dist/studio/utils/service-api.d.ts.map +1 -1
- package/dist/studio/utils/service-api.js +5 -4
- package/dist/studio-app/assets/{feltdb_wasm-DACcD-zs.js → feltdb_wasm-BatwwogY.js} +1 -1
- package/dist/studio-app/assets/feltdb_wasm_bg-BX0newOr.wasm +0 -0
- package/dist/studio-app/assets/index-DoVvbIay.js +30 -0
- package/dist/studio-app/index.html +1 -1
- package/dist/telemetry.d.ts +1 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +4 -3
- package/dist/transaction-identity.d.ts +62 -0
- package/dist/transaction-identity.d.ts.map +1 -0
- package/dist/transaction-identity.js +138 -0
- package/dist/transaction.d.ts +50 -5
- package/dist/transaction.d.ts.map +1 -1
- package/dist/transaction.js +28 -0
- package/dist/wasm/feltdb_wasm_bg.wasm +0 -0
- package/dist/wasm/package.json +1 -1
- package/package.json +1 -1
- package/dist/create/server-source/crates/feltdb-wasm/test.db +0 -0
- package/dist/studio-app/assets/feltdb_wasm_bg-BejThWID.wasm +0 -0
- package/dist/studio-app/assets/index-CoZaxnlm.js +0 -30
package/dist/build-identity.json
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
{
|
|
2
|
-
"schema": "feltdb.
|
|
2
|
+
"schema": "feltdb.build-identity.v2",
|
|
3
3
|
"package": "@feltdb/core",
|
|
4
|
-
"version": "0.12.
|
|
5
|
-
"
|
|
4
|
+
"version": "0.12.2",
|
|
5
|
+
"git": {
|
|
6
|
+
"sha1": "7a632f5b3e79d800ff27359f7f1a7c081dc7cb69",
|
|
7
|
+
"dirty": false
|
|
8
|
+
},
|
|
9
|
+
"path_in_vcs": "packages/core",
|
|
10
|
+
"source_digest": "sha256:9db516ed9702dde647cd8d9723e1d997be999a39ddebfcb337dc0c1d721c8110",
|
|
6
11
|
"inputs": [
|
|
7
12
|
"Cargo.lock",
|
|
8
13
|
"Cargo.toml",
|
|
@@ -15,5 +20,9 @@
|
|
|
15
20
|
"tools/cli",
|
|
16
21
|
"tools/create-feltdb"
|
|
17
22
|
],
|
|
18
|
-
"files":
|
|
23
|
+
"files": 770,
|
|
24
|
+
"build": {
|
|
25
|
+
"command": "npm run build",
|
|
26
|
+
"node": "v24.9.0"
|
|
27
|
+
}
|
|
19
28
|
}
|
package/dist/cli/commands.js
CHANGED
|
@@ -13,7 +13,7 @@ import { createFeltDB, diffFlowSpec, emptyFlowSpec, formatFlowSpec, Investigatio
|
|
|
13
13
|
import { collectApplicationUnderstanding } from '@feltdb/core';
|
|
14
14
|
import { collectRepositoryEvidence } from './repository-evidence.js';
|
|
15
15
|
import { discoverWorkspace, ensureWorkspaceGitIgnored, generatePairingToken, persistPairingToken, displayWorkspaceStatus, initializeWorkspace, startPairingDiscoveryServer } from './workspace-integration.js';
|
|
16
|
-
import { applicationUrlCandidate, detectApplication, discoverApplicationUrl } from './application.js';
|
|
16
|
+
import { applicationIsRunning, applicationUrlCandidate, detectApplication, discoverApplicationUrl } from './application.js';
|
|
17
17
|
import { resolveApplicationLifecycle, startManagedApplication, waitForManagedApplication } from './application-lifecycle.js';
|
|
18
18
|
import { createDevelopmentSession, developmentSessionEnvironment, developmentSessionSummary, developmentStudioArguments, transitionDevelopmentSession } from './development-session.js';
|
|
19
19
|
import { openApplication, openStudio } from './browser-opening.js';
|
|
@@ -1066,11 +1066,13 @@ async function handleStatus() {
|
|
|
1066
1066
|
const connFile = path.join(configDir, 'connection.json');
|
|
1067
1067
|
if (!fs.existsSync(connFile)) {
|
|
1068
1068
|
console.log('Local Mode (No server connection)\n');
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
console.log(
|
|
1069
|
+
// Report what the project is configured as. Fixed strings here used to claim OPFS storage
|
|
1070
|
+
// and a passing health check for every project, whatever feltdb.config.json said.
|
|
1071
|
+
const configPath = path.join(process.cwd(), 'feltdb.config.json');
|
|
1072
|
+
const configured = fs.existsSync(configPath) ? JSON.parse(fs.readFileSync(configPath, 'utf8')) : {};
|
|
1073
|
+
console.log(`Runtime: ${configured.runtime ?? 'not configured'}`);
|
|
1074
|
+
console.log(`Storage: ${configured.storage ?? 'not configured'}`);
|
|
1075
|
+
console.log('Health: not checked (run `feltdb workspace status` to see whether `feltdb dev` is running)\n');
|
|
1074
1076
|
await displayContractStatus();
|
|
1075
1077
|
return;
|
|
1076
1078
|
}
|
|
@@ -1410,6 +1412,13 @@ async function handleDev(args) {
|
|
|
1410
1412
|
const applicationTimeoutMs = timeoutArgument === undefined ? 15000 : Number(timeoutArgument);
|
|
1411
1413
|
if (!Number.isFinite(applicationTimeoutMs) || applicationTimeoutMs <= 0)
|
|
1412
1414
|
throw new Error('--application-timeout must be a positive number of milliseconds');
|
|
1415
|
+
// A managed session owns its application. Something already answering at the
|
|
1416
|
+
// expected URL is another process, and it would satisfy the readiness probe while
|
|
1417
|
+
// the child we are about to start falls back to a different port — reporting
|
|
1418
|
+
// "ready" for an application this session does not run.
|
|
1419
|
+
if (await applicationIsRunning(appUrl)) {
|
|
1420
|
+
throw new Error(`Managed application cannot start: ${appUrl} is already answering, so another process owns that address (workspace: ${workspace.workspaceId}; project: ${projectDir}). Stop that process, choose a different port with --app-url, or set application.lifecycle to "attached" in feltdb.config.json to use the running application.`);
|
|
1421
|
+
}
|
|
1413
1422
|
managedApplication = startManagedApplication({
|
|
1414
1423
|
projectDir,
|
|
1415
1424
|
project: detectedApplication,
|
|
@@ -1654,7 +1663,8 @@ function inspectCapabilities(config) {
|
|
|
1654
1663
|
}
|
|
1655
1664
|
else {
|
|
1656
1665
|
for (const [capName, capInfo] of Object.entries(capabilities)) {
|
|
1657
|
-
|
|
1666
|
+
// Config toggles are booleans (`"search": false`); a declared capability is an object (`enabled: false`).
|
|
1667
|
+
const enabled = capInfo === false || capInfo?.enabled === false ? '✗' : '✓';
|
|
1658
1668
|
console.log(` ${enabled} ${capName}`);
|
|
1659
1669
|
}
|
|
1660
1670
|
console.log('');
|
|
@@ -1720,47 +1730,82 @@ function inspectProvenance(config, flowRef) {
|
|
|
1720
1730
|
}
|
|
1721
1731
|
async function handleDoctor() {
|
|
1722
1732
|
console.log('🏥 FeltDB Doctor\n');
|
|
1733
|
+
const findings = [];
|
|
1734
|
+
const record = (area, label, status, detail) => { findings.push({ area, label, status, detail }); };
|
|
1723
1735
|
const configPath = path.join(process.cwd(), 'feltdb.config.json');
|
|
1724
|
-
let config
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
distributed: true,
|
|
1728
|
-
capabilities: {},
|
|
1729
|
-
peers: {},
|
|
1730
|
-
};
|
|
1731
|
-
if (fs.existsSync(configPath)) {
|
|
1732
|
-
config = { ...config, ...JSON.parse(fs.readFileSync(configPath, 'utf-8')) };
|
|
1736
|
+
let config;
|
|
1737
|
+
if (!fs.existsSync(configPath)) {
|
|
1738
|
+
record('Project', 'feltdb.config.json', 'fail', 'not found in this directory; run doctor from the project root');
|
|
1733
1739
|
}
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
if (peers.length === 0) {
|
|
1758
|
-
console.log(' ℹ No connected peers');
|
|
1740
|
+
else {
|
|
1741
|
+
try {
|
|
1742
|
+
config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
1743
|
+
record('Project', 'feltdb.config.json', 'ok', `namespace ${config.namespace ?? '(unset)'}`);
|
|
1744
|
+
}
|
|
1745
|
+
catch (error) {
|
|
1746
|
+
record('Project', 'feltdb.config.json', 'fail', `not valid JSON: ${error instanceof Error ? error.message : String(error)}`);
|
|
1747
|
+
}
|
|
1748
|
+
}
|
|
1749
|
+
const workspacePath = path.join(process.cwd(), '.feltdb', 'workspace.json');
|
|
1750
|
+
try {
|
|
1751
|
+
const workspace = JSON.parse(fs.readFileSync(workspacePath, 'utf-8'));
|
|
1752
|
+
if (typeof workspace.workspaceId === 'string' && workspace.workspaceId)
|
|
1753
|
+
record('Project', 'workspace identity', 'ok', workspace.workspaceId);
|
|
1754
|
+
else
|
|
1755
|
+
record('Project', 'workspace identity', 'fail', '.feltdb/workspace.json has no workspaceId');
|
|
1756
|
+
}
|
|
1757
|
+
catch {
|
|
1758
|
+
record('Project', 'workspace identity', 'fail', '.feltdb/workspace.json is missing or unreadable; run `feltdb dev` once to create it');
|
|
1759
|
+
}
|
|
1760
|
+
const flowPath = path.join(process.cwd(), 'feltdb.flow');
|
|
1761
|
+
if (!fs.existsSync(flowPath)) {
|
|
1762
|
+
record('Contract', 'feltdb.flow', 'fail', 'not found');
|
|
1759
1763
|
}
|
|
1760
1764
|
else {
|
|
1761
|
-
|
|
1765
|
+
try {
|
|
1766
|
+
const spec = parseFlowSpec(fs.readFileSync(flowPath, 'utf-8'));
|
|
1767
|
+
const count = (value) => Array.isArray(value) ? value.length : value && typeof value === 'object' ? Object.keys(value).length : 0;
|
|
1768
|
+
record('Contract', 'feltdb.flow', 'ok', `${count(spec.collections)} collections, ${count(spec.workflows)} workflows, ${count(spec.agents)} agents`);
|
|
1769
|
+
}
|
|
1770
|
+
catch (error) {
|
|
1771
|
+
record('Contract', 'feltdb.flow', 'fail', `does not parse: ${error instanceof Error ? error.message : String(error)}`);
|
|
1772
|
+
}
|
|
1773
|
+
}
|
|
1774
|
+
try {
|
|
1775
|
+
const resolved = createRequire(path.join(process.cwd(), 'package.json')).resolve('@feltdb/core/package.json');
|
|
1776
|
+
record('Runtime', '@feltdb/core', 'ok', `${JSON.parse(fs.readFileSync(resolved, 'utf-8')).version} at ${path.dirname(resolved)}`);
|
|
1777
|
+
}
|
|
1778
|
+
catch {
|
|
1779
|
+
record('Runtime', '@feltdb/core', 'fail', 'cannot be resolved from this project; run npm install');
|
|
1780
|
+
}
|
|
1781
|
+
if (config) {
|
|
1782
|
+
const expectedStorage = { browser: ['indexeddb'], node: ['durable', 'file'], managed: ['managed'] };
|
|
1783
|
+
const allowed = expectedStorage[config.runtime];
|
|
1784
|
+
if (!config.runtime)
|
|
1785
|
+
record('Runtime', 'runtime', 'fail', 'feltdb.config.json sets no runtime');
|
|
1786
|
+
else if (allowed && config.storage && !allowed.includes(config.storage))
|
|
1787
|
+
record('Runtime', `runtime ${config.runtime}`, 'fail', `storage "${config.storage}" does not match (expected ${allowed.join(' or ')})`);
|
|
1788
|
+
else
|
|
1789
|
+
record('Runtime', `runtime ${config.runtime}`, 'ok', `storage ${config.storage ?? '(default)'}`);
|
|
1790
|
+
}
|
|
1791
|
+
record('Session', 'feltdb dev', 'info', 'not probed; run `feltdb workspace status` to see whether the development session is running');
|
|
1792
|
+
let area = '';
|
|
1793
|
+
for (const finding of findings) {
|
|
1794
|
+
if (finding.area !== area) {
|
|
1795
|
+
area = finding.area;
|
|
1796
|
+
console.log(`${area}`);
|
|
1797
|
+
}
|
|
1798
|
+
const mark = finding.status === 'ok' ? '✓' : finding.status === 'fail' ? '✗' : 'ℹ';
|
|
1799
|
+
console.log(` ${mark} ${finding.label}${finding.detail ? ` — ${finding.detail}` : ''}`);
|
|
1800
|
+
}
|
|
1801
|
+
console.log('');
|
|
1802
|
+
const failures = findings.filter(finding => finding.status === 'fail').length;
|
|
1803
|
+
if (failures > 0) {
|
|
1804
|
+
console.log(`${failures} check${failures === 1 ? '' : 's'} failed\n`);
|
|
1805
|
+
process.exitCode = 1;
|
|
1806
|
+
return;
|
|
1762
1807
|
}
|
|
1763
|
-
console.log('
|
|
1808
|
+
console.log('All checks passed\n');
|
|
1764
1809
|
}
|
|
1765
1810
|
async function handleStudio(args, onReady) {
|
|
1766
1811
|
loadProjectEnvironment();
|
package/dist/collection.d.ts
CHANGED
|
@@ -10,6 +10,16 @@
|
|
|
10
10
|
import type { JsDb } from './feltdb.js';
|
|
11
11
|
import { type FreshnessCapability, type Revision } from './freshness.js';
|
|
12
12
|
import type { IndexConfig, CollectionQueryPlan } from './index-types.js';
|
|
13
|
+
/** Options for {@link Collection.insert}. */
|
|
14
|
+
export interface InsertOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Create the record only if `id` is not already in use. Without it, inserting
|
|
17
|
+
* over an existing `id` replaces that record and advances its `__version`.
|
|
18
|
+
* With it, an existing record is never touched and the call fails with
|
|
19
|
+
* `PRECONDITION_FAILED`. Requires an explicit `id`.
|
|
20
|
+
*/
|
|
21
|
+
requireAbsent?: boolean;
|
|
22
|
+
}
|
|
13
23
|
export type Predicate<T> = (item: T) => boolean;
|
|
14
24
|
export type Subscriber<T> = (items: T[]) => void;
|
|
15
25
|
export interface CollectionFindOptions {
|
|
@@ -181,16 +191,43 @@ export declare class Collection<T> {
|
|
|
181
191
|
*/
|
|
182
192
|
where(predicate: Predicate<T>): Collection<T>;
|
|
183
193
|
/**
|
|
184
|
-
* Insert a
|
|
185
|
-
*
|
|
194
|
+
* Insert a record into this collection.
|
|
195
|
+
*
|
|
196
|
+
* Without an `id` a unique one is generated and the record is created.
|
|
197
|
+
* With an `id`:
|
|
198
|
+
* - `{ requireAbsent: true }` creates the record or fails with
|
|
199
|
+
* `PRECONDITION_FAILED` if the `id` is taken (the existing record is left
|
|
200
|
+
* untouched). This is the same predicate a transaction's `insert` accepts.
|
|
201
|
+
* - Otherwise a record already stored under `id` is replaced, and its
|
|
202
|
+
* `__version` advances; versions never move backwards, so a writer holding
|
|
203
|
+
* an older version cannot pass a later `updateIfVersion`.
|
|
204
|
+
*
|
|
205
|
+
* A new record starts at `__version: 1`.
|
|
206
|
+
*
|
|
207
|
+
* @throws FeltDBServiceError `INVALID_REQUEST` when `data` is not an object or `id` is empty
|
|
186
208
|
*/
|
|
187
|
-
insert(data: Partial<T>, id?: string | number): Promise<string>;
|
|
209
|
+
insert(data: Partial<T>, id?: string | number, options?: InsertOptions): Promise<string>;
|
|
188
210
|
/** Put a record through the canonical application collection API. */
|
|
189
211
|
put(data: Partial<T>, id?: string | number): Promise<string>;
|
|
190
212
|
/**
|
|
191
|
-
*
|
|
213
|
+
* Merge `changes` into an existing record.
|
|
214
|
+
*
|
|
215
|
+
* Fields not named in `changes` keep their values; the record's `__version`
|
|
216
|
+
* advances by one. The read and the write are fenced on the version that was
|
|
217
|
+
* read, so concurrent `update` calls on one record each take effect instead
|
|
218
|
+
* of the last writer silently discarding the others. Use `updateIfVersion`
|
|
219
|
+
* when the decision to write depends on what was read.
|
|
220
|
+
*
|
|
221
|
+
* @throws FeltDBServiceError `NOT_FOUND` if the record does not exist;
|
|
222
|
+
* `VERSION_CONFLICT` if it kept changing for every attempt
|
|
192
223
|
*/
|
|
193
224
|
update(id: string | number, changes: Partial<T>): Promise<void>;
|
|
225
|
+
/** Create `data` under `id` if it is free; otherwise report what holds it. */
|
|
226
|
+
private createIfAbsent;
|
|
227
|
+
/** Replace a whole record if it is still at `expectedVersion`; the runtime assigns the next version. */
|
|
228
|
+
private replaceIfVersion;
|
|
229
|
+
/** Keep the index and the reactive graph in step with a committed write. */
|
|
230
|
+
private publish;
|
|
194
231
|
/**
|
|
195
232
|
* Atomically update a record only if its version matches the expected version.
|
|
196
233
|
*
|
package/dist/collection.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACd,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
|
package/dist/collection.js
CHANGED
|
@@ -10,8 +10,11 @@
|
|
|
10
10
|
import { describeFreshness, isCacheCurrent, readRevision, } from './freshness.js';
|
|
11
11
|
import { getReactiveDependencyGraph } from './reactive-graph.js';
|
|
12
12
|
import { conditionalRefusal } from './transaction.js';
|
|
13
|
+
import { FeltDBErrorCode, FeltDBServiceError } from './error-codes.js';
|
|
13
14
|
import { IndexBackend } from './index-backend.js';
|
|
14
15
|
import { IndexStore } from './index-store.js';
|
|
16
|
+
/** Attempts a read-modify-write helper makes before reporting a version conflict. */
|
|
17
|
+
const MAX_FENCED_ATTEMPTS = 16;
|
|
15
18
|
/**
|
|
16
19
|
* A durable identity for one conditional write attempt.
|
|
17
20
|
*
|
|
@@ -26,6 +29,18 @@ function conditionalTransactionId(purpose) {
|
|
|
26
29
|
: `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
|
|
27
30
|
return `${purpose}-${unique}`;
|
|
28
31
|
}
|
|
32
|
+
function assertRecordId(collection, operation, id) {
|
|
33
|
+
const ok = (typeof id === 'string' && id.trim() !== '') || (typeof id === 'number' && Number.isFinite(id));
|
|
34
|
+
if (!ok) {
|
|
35
|
+
throw new FeltDBServiceError(`${operation} on ${collection}: id must be a non-empty string or a finite number, received ${JSON.stringify(id)}`, FeltDBErrorCode.INVALID_REQUEST);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function assertRecordValue(collection, operation, value) {
|
|
39
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
40
|
+
throw new FeltDBServiceError(`${operation} on ${collection}: a record must be an object; received ${Array.isArray(value) ? 'an array' : value === null ? 'null' : typeof value}. `
|
|
41
|
+
+ `The id goes second: insert(record, id).`, FeltDBErrorCode.INVALID_REQUEST);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
29
44
|
/**
|
|
30
45
|
* A live collection that automatically updates when underlying data changes.
|
|
31
46
|
* Represents application state, not a one-time query result.
|
|
@@ -378,64 +393,115 @@ export class Collection {
|
|
|
378
393
|
}, this.parent || this);
|
|
379
394
|
}
|
|
380
395
|
/**
|
|
381
|
-
* Insert a
|
|
382
|
-
*
|
|
396
|
+
* Insert a record into this collection.
|
|
397
|
+
*
|
|
398
|
+
* Without an `id` a unique one is generated and the record is created.
|
|
399
|
+
* With an `id`:
|
|
400
|
+
* - `{ requireAbsent: true }` creates the record or fails with
|
|
401
|
+
* `PRECONDITION_FAILED` if the `id` is taken (the existing record is left
|
|
402
|
+
* untouched). This is the same predicate a transaction's `insert` accepts.
|
|
403
|
+
* - Otherwise a record already stored under `id` is replaced, and its
|
|
404
|
+
* `__version` advances; versions never move backwards, so a writer holding
|
|
405
|
+
* an older version cannot pass a later `updateIfVersion`.
|
|
406
|
+
*
|
|
407
|
+
* A new record starts at `__version: 1`.
|
|
408
|
+
*
|
|
409
|
+
* @throws FeltDBServiceError `INVALID_REQUEST` when `data` is not an object or `id` is empty
|
|
383
410
|
*/
|
|
384
|
-
async insert(data, id) {
|
|
411
|
+
async insert(data, id, options = {}) {
|
|
412
|
+
assertRecordValue(this.name, 'insert', data);
|
|
413
|
+
if (id !== undefined)
|
|
414
|
+
assertRecordId(this.name, 'insert', id);
|
|
415
|
+
if (options.requireAbsent && id === undefined) {
|
|
416
|
+
throw new FeltDBServiceError(`insert into ${this.name}: requireAbsent needs an explicit id; a generated id is always new`, FeltDBErrorCode.INVALID_REQUEST);
|
|
417
|
+
}
|
|
385
418
|
const recordId = id ?? `${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
386
419
|
const key = `${this.name}:${recordId}`;
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
420
|
+
if (id === undefined) {
|
|
421
|
+
const stored = { ...data, id: recordId, __version: 1 };
|
|
422
|
+
const result = await this.db.insert(key, JSON.stringify(stored));
|
|
423
|
+
if (!result.success) {
|
|
424
|
+
throw new Error(`Insert failed: ${result.error}`);
|
|
425
|
+
}
|
|
426
|
+
await this.publish('insert', key, String(recordId), null, stored);
|
|
427
|
+
return String(recordId);
|
|
393
428
|
}
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
429
|
+
for (let attempt = 0; attempt < MAX_FENCED_ATTEMPTS; attempt += 1) {
|
|
430
|
+
const created = await this.createIfAbsent(key, recordId, data);
|
|
431
|
+
if (created.inserted) {
|
|
432
|
+
await this.publish('insert', key, String(recordId), null, created.stored);
|
|
433
|
+
return String(recordId);
|
|
434
|
+
}
|
|
435
|
+
if (options.requireAbsent) {
|
|
436
|
+
throw new FeltDBServiceError(`Record ${recordId} already exists in ${this.name}`, FeltDBErrorCode.PRECONDITION_FAILED);
|
|
437
|
+
}
|
|
438
|
+
const existing = created.existing;
|
|
439
|
+
const replacement = { ...data, id: recordId };
|
|
440
|
+
const outcome = await this.replaceIfVersion(key, existing.__version ?? 1, replacement);
|
|
441
|
+
if (outcome.updated) {
|
|
442
|
+
const item = (outcome.item ?? { ...replacement, __version: outcome.currentVersion });
|
|
443
|
+
await this.publish('update', key, String(recordId), existing, item);
|
|
444
|
+
return String(recordId);
|
|
445
|
+
}
|
|
446
|
+
// Another writer changed or removed the record between the read and the
|
|
447
|
+
// write; decide again against what is there now.
|
|
448
|
+
}
|
|
449
|
+
throw new FeltDBServiceError(`insert into ${this.name}: record ${recordId} kept changing; gave up after ${MAX_FENCED_ATTEMPTS} attempts`, FeltDBErrorCode.VERSION_CONFLICT);
|
|
406
450
|
}
|
|
407
451
|
/** Put a record through the canonical application collection API. */
|
|
408
452
|
async put(data, id) {
|
|
409
453
|
return this.insert(data, id);
|
|
410
454
|
}
|
|
411
455
|
/**
|
|
412
|
-
*
|
|
456
|
+
* Merge `changes` into an existing record.
|
|
457
|
+
*
|
|
458
|
+
* Fields not named in `changes` keep their values; the record's `__version`
|
|
459
|
+
* advances by one. The read and the write are fenced on the version that was
|
|
460
|
+
* read, so concurrent `update` calls on one record each take effect instead
|
|
461
|
+
* of the last writer silently discarding the others. Use `updateIfVersion`
|
|
462
|
+
* when the decision to write depends on what was read.
|
|
463
|
+
*
|
|
464
|
+
* @throws FeltDBServiceError `NOT_FOUND` if the record does not exist;
|
|
465
|
+
* `VERSION_CONFLICT` if it kept changing for every attempt
|
|
413
466
|
*/
|
|
414
467
|
async update(id, changes) {
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
468
|
+
assertRecordId(this.name, 'update', id);
|
|
469
|
+
assertRecordValue(this.name, 'update', changes);
|
|
470
|
+
for (let attempt = 0; attempt < MAX_FENCED_ATTEMPTS; attempt += 1) {
|
|
471
|
+
const current = await this.get(id);
|
|
472
|
+
if (!current) {
|
|
473
|
+
throw new FeltDBServiceError(`Record ${id} not found`, FeltDBErrorCode.NOT_FOUND);
|
|
474
|
+
}
|
|
475
|
+
const result = await this.updateIfVersion(id, current.__version ?? 1, changes, undefined, undefined, undefined, current);
|
|
476
|
+
if (result.updated)
|
|
477
|
+
return;
|
|
478
|
+
if (result.conflictCode === 'RECORD_MISSING') {
|
|
479
|
+
throw new FeltDBServiceError(`Record ${id} not found`, FeltDBErrorCode.NOT_FOUND);
|
|
480
|
+
}
|
|
427
481
|
}
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
482
|
+
throw new FeltDBServiceError(`update of ${this.name}:${id} kept conflicting with other writers; gave up after ${MAX_FENCED_ATTEMPTS} attempts`, FeltDBErrorCode.VERSION_CONFLICT);
|
|
483
|
+
}
|
|
484
|
+
/** Create `data` under `id` if it is free; otherwise report what holds it. */
|
|
485
|
+
async createIfAbsent(key, id, data) {
|
|
486
|
+
const stored = { ...data, id, __version: 1 };
|
|
487
|
+
const result = this.db.putIfAbsent
|
|
488
|
+
? await this.db.putIfAbsent(key, JSON.stringify(stored))
|
|
489
|
+
: await this.putIfAbsentThroughTransaction(key, stored);
|
|
490
|
+
return result.inserted
|
|
491
|
+
? { inserted: true, stored }
|
|
492
|
+
: { inserted: false, existing: JSON.parse(result.value) };
|
|
493
|
+
}
|
|
494
|
+
/** Replace a whole record if it is still at `expectedVersion`; the runtime assigns the next version. */
|
|
495
|
+
replaceIfVersion(key, expectedVersion, value) {
|
|
496
|
+
return this.db.cas
|
|
497
|
+
? this.db.cas({ key, expectedVersion, value: JSON.stringify(value) })
|
|
498
|
+
: this.updateIfVersionThroughTransaction(key, { expectedVersion, value });
|
|
499
|
+
}
|
|
500
|
+
/** Keep the index and the reactive graph in step with a committed write. */
|
|
501
|
+
async publish(type, key, id, previous, next) {
|
|
502
|
+
this.indexBackend.updateRecord(id, previous, next);
|
|
503
|
+
const change = { type, key, value: next, timestamp: Date.now() };
|
|
504
|
+
await getReactiveDependencyGraph().emitChange(this.name, change);
|
|
439
505
|
}
|
|
440
506
|
/**
|
|
441
507
|
* Atomically update a record only if its version matches the expected version.
|
|
@@ -473,7 +539,7 @@ export class Collection {
|
|
|
473
539
|
async updateIfVersion(id, expectedVersion, updates, expectedEpoch, expectedLeaseId, rejectIfDiverged, knownCurrent) {
|
|
474
540
|
const current = knownCurrent ?? await this.get(id);
|
|
475
541
|
if (!current) {
|
|
476
|
-
throw new
|
|
542
|
+
throw new FeltDBServiceError(`Record ${id} not found`, FeltDBErrorCode.NOT_FOUND);
|
|
477
543
|
}
|
|
478
544
|
// Prepare updated record (no version increment - backend will handle it)
|
|
479
545
|
// User updates should not include __version
|
|
@@ -547,7 +613,10 @@ export class Collection {
|
|
|
547
613
|
}
|
|
548
614
|
const result = await this.db.delete(key);
|
|
549
615
|
if (!result.success) {
|
|
550
|
-
|
|
616
|
+
const message = `Delete failed: ${result.error}`;
|
|
617
|
+
throw /not found/i.test(String(result.error))
|
|
618
|
+
? new FeltDBServiceError(message, FeltDBErrorCode.NOT_FOUND)
|
|
619
|
+
: new Error(message);
|
|
551
620
|
}
|
|
552
621
|
// Update indexes - find and remove the deleted record
|
|
553
622
|
const deleted = await this.get(id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../src/composition.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../src/composition.ts"],"names":[],"mappings":"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"}
|
package/dist/composition.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FeltDBErrorCode, FeltDBServiceError } from './error-codes.js';
|
|
2
|
-
import { AtomicTransactionError, conditionalRefusal } from './transaction.js';
|
|
2
|
+
import { AtomicTransactionError, TransactionIdConflictError, conditionalRefusal } from './transaction.js';
|
|
3
3
|
import { FELTDB_INTENT_COLLECTION, FELTDB_INTENT_EVENT_COLLECTION } from './intent.js';
|
|
4
4
|
import { FELTDB_PROPOSAL_EVENT_COLLECTION, PROPOSAL_TRANSITIONS } from './proposal.js';
|
|
5
5
|
import { FELTDB_COMPOSITION_COLLECTION, FELTDB_COMPOSITION_CONTRACT_COLLECTION, FELTDB_COMPOSITION_TOPOLOGY_COLLECTION, FELTDB_COMPOSITION_VERSION_COLLECTION, FELTDB_STATE_ATTRIBUTION_COLLECTION, FELTDB_STATE_CHANGE_COLLECTION, FELTDB_STATE_DEPENDENCY_COLLECTION, FELTDB_STATE_IMPACT_COLLECTION, FELTDB_STATE_OBSERVATION_COLLECTION, FELTDB_STATE_OWNERSHIP_COLLECTION, FELTDB_STATE_PROPOSAL_COLLECTION, canonicalDigest, changedFields, computeImpactSurface, consumerUri, emptyImpactReads, impactReadSet, impactSurfaceDigest, parseStateUri, recordValue, recordVersion, redactImpactSurface, stateUri, } from './state-impact.js';
|
|
@@ -1181,6 +1181,16 @@ export class CompositionConsumer {
|
|
|
1181
1181
|
});
|
|
1182
1182
|
}
|
|
1183
1183
|
catch (error) {
|
|
1184
|
+
// `apply_<proposal id>` names the application of one proposal. If the
|
|
1185
|
+
// authority already holds that id with different contents, another
|
|
1186
|
+
// attempt applied this proposal first and its recorded facts -- when it
|
|
1187
|
+
// was applied, under which decisions -- are its own. This call applied
|
|
1188
|
+
// nothing, and is not a stale read of state, so no refusal is recorded
|
|
1189
|
+
// against the proposal.
|
|
1190
|
+
if (error instanceof TransactionIdConflictError) {
|
|
1191
|
+
throw fail(`State proposal ${proposalId} was already applied by another attempt (transaction ${transactionId} is committed with different contents). `
|
|
1192
|
+
+ 'Nothing was applied by this call.', FeltDBErrorCode.CONFLICT);
|
|
1193
|
+
}
|
|
1184
1194
|
const refusal = conditionalRefusal(error);
|
|
1185
1195
|
const lostRace = refusal.conflict
|
|
1186
1196
|
|| (error instanceof AtomicTransactionError && /conflict|PRECONDITION_FAILED/i.test(`${error.name} ${error.code ?? ''}`))
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
{
|
|
2
|
-
"schema": "feltdb.
|
|
2
|
+
"schema": "feltdb.build-identity.v2",
|
|
3
3
|
"package": "create-feltdb",
|
|
4
|
-
"version": "0.12.
|
|
5
|
-
"
|
|
4
|
+
"version": "0.12.2",
|
|
5
|
+
"git": {
|
|
6
|
+
"sha1": "7a632f5b3e79d800ff27359f7f1a7c081dc7cb69",
|
|
7
|
+
"dirty": false
|
|
8
|
+
},
|
|
9
|
+
"path_in_vcs": "tools/create-feltdb",
|
|
10
|
+
"source_digest": "sha256:9db516ed9702dde647cd8d9723e1d997be999a39ddebfcb337dc0c1d721c8110",
|
|
6
11
|
"inputs": [
|
|
7
12
|
"Cargo.lock",
|
|
8
13
|
"Cargo.toml",
|
|
@@ -15,5 +20,9 @@
|
|
|
15
20
|
"tools/cli",
|
|
16
21
|
"tools/create-feltdb"
|
|
17
22
|
],
|
|
18
|
-
"files":
|
|
23
|
+
"files": 770,
|
|
24
|
+
"build": {
|
|
25
|
+
"command": "npm run build",
|
|
26
|
+
"node": "v24.9.0"
|
|
27
|
+
}
|
|
19
28
|
}
|