@opendatalabs/personal-server-ts-lite 1.34.1 → 1.35.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/additions-crypto.d.ts +1 -1
- package/dist/additions-crypto.d.ts.map +1 -1
- package/dist/additions-crypto.js +16 -6
- package/dist/additions-crypto.js.map +1 -1
- package/dist/additions-protocol.d.ts +9 -1
- package/dist/additions-protocol.d.ts.map +1 -1
- package/dist/additions-protocol.js.map +1 -1
- package/dist/additions-session.d.ts +2 -0
- package/dist/additions-session.d.ts.map +1 -1
- package/dist/additions-session.js +29 -4
- package/dist/additions-session.js.map +1 -1
- package/dist/additions-transport.d.ts +10 -2
- package/dist/additions-transport.d.ts.map +1 -1
- package/dist/additions-transport.js +143 -48
- package/dist/additions-transport.js.map +1 -1
- package/dist/additions-worker.bundle.js +538 -101
- package/dist/additions-worker.js +45 -24
- package/dist/additions-worker.js.map +1 -1
- package/dist/browser-runtime.d.ts +23 -0
- package/dist/browser-runtime.d.ts.map +1 -1
- package/dist/browser-runtime.js +38 -1
- package/dist/browser-runtime.js.map +1 -1
- package/dist/canonical-persistence.d.ts +53 -0
- package/dist/canonical-persistence.d.ts.map +1 -0
- package/dist/canonical-persistence.js +13 -0
- package/dist/canonical-persistence.js.map +1 -0
- package/dist/canonical-store.d.ts +395 -0
- package/dist/canonical-store.d.ts.map +1 -0
- package/dist/canonical-store.js +1807 -0
- package/dist/canonical-store.js.map +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +154 -1
- package/dist/client.js.map +1 -1
- package/dist/diagnostics.d.ts +3 -0
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/diagnostics.js +9 -1
- package/dist/diagnostics.js.map +1 -1
- package/dist/history-probe-worker.bundle.js +31216 -0
- package/dist/history-probe.worker.d.ts +35 -0
- package/dist/history-probe.worker.d.ts.map +1 -0
- package/dist/history-probe.worker.js +160 -0
- package/dist/history-probe.worker.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp-store.d.ts.map +1 -1
- package/dist/mcp-store.js +109 -19
- package/dist/mcp-store.js.map +1 -1
- package/dist/oura-import.d.ts +2 -0
- package/dist/oura-import.d.ts.map +1 -0
- package/dist/oura-import.js +3 -0
- package/dist/oura-import.js.map +1 -0
- package/dist/replication-coordinator-state.d.ts +19 -0
- package/dist/replication-coordinator-state.d.ts.map +1 -0
- package/dist/replication-coordinator-state.js +20 -0
- package/dist/replication-coordinator-state.js.map +1 -0
- package/dist/replication-door.d.ts +17 -0
- package/dist/replication-door.d.ts.map +1 -0
- package/dist/replication-door.js +23 -0
- package/dist/replication-door.js.map +1 -0
- package/dist/replication-engine.d.ts +49 -0
- package/dist/replication-engine.d.ts.map +1 -0
- package/dist/replication-engine.js +589 -0
- package/dist/replication-engine.js.map +1 -0
- package/dist/replication-host.d.ts +92 -0
- package/dist/replication-host.d.ts.map +1 -0
- package/dist/replication-host.js +135 -0
- package/dist/replication-host.js.map +1 -0
- package/dist/replication-ports.d.ts +194 -0
- package/dist/replication-ports.d.ts.map +1 -0
- package/dist/replication-ports.js +58 -0
- package/dist/replication-ports.js.map +1 -0
- package/dist/replication-runtime.d.ts +64 -0
- package/dist/replication-runtime.d.ts.map +1 -0
- package/dist/replication-runtime.js +79 -0
- package/dist/replication-runtime.js.map +1 -0
- package/dist/replication-storage.d.ts +42 -0
- package/dist/replication-storage.d.ts.map +1 -0
- package/dist/replication-storage.js +173 -0
- package/dist/replication-storage.js.map +1 -0
- package/dist/runtime.d.ts +20 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +80 -1
- package/dist/runtime.js.map +1 -1
- package/dist/state.d.ts +1 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js.map +1 -1
- package/dist/storage.d.ts +17 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +367 -142
- package/dist/storage.js.map +1 -1
- package/dist/sync.d.ts +8 -0
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +25 -7
- package/dist/sync.js.map +1 -1
- package/package.json +8 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replication-engine.js","sourceRoot":"","sources":["../src/replication-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PS-Lite host wiring for record replication: the counterpart of Node's
|
|
3
|
+
* `createNodeReplication` (packages/server/src/storage/pdpp-replication-host.ts).
|
|
4
|
+
*
|
|
5
|
+
* The phone supplies native persistence and native object transfers. The
|
|
6
|
+
* partition, the declaration bindings and the DPv2 network ports come from
|
|
7
|
+
* core (`replication/host-ports.ts`), as on Node, so both hosts derive them
|
|
8
|
+
* the same way. With the door anything but `on`, or the boot config off,
|
|
9
|
+
* nothing here is built: the runtime is inert and says why.
|
|
10
|
+
*/
|
|
11
|
+
import type { DeclarationSnapshot } from "@opendatalabs/personal-server-ts-core/pdpp";
|
|
12
|
+
import type { ReplicationDoorStatus } from "@opendatalabs/personal-server-ts-core/replication/door";
|
|
13
|
+
import type { ReplicaEngineConfig } from "@opendatalabs/personal-server-ts-core/replication/engine";
|
|
14
|
+
import type { ProgressReport } from "@opendatalabs/personal-server-ts-core/replication/coordinator";
|
|
15
|
+
import type { ReplicationTimers } from "@opendatalabs/personal-server-ts-core/replication/host-driver";
|
|
16
|
+
import { type ReplicationNetworkPorts } from "@opendatalabs/personal-server-ts-core/replication/host-ports";
|
|
17
|
+
import type { ReplicaBatchSigner, ReplicaWriterRotation } from "@opendatalabs/personal-server-ts-core/replication/writer-identity";
|
|
18
|
+
import type { ServerAccount } from "@opendatalabs/personal-server-ts-core/keys";
|
|
19
|
+
import type { ServerConfig } from "@opendatalabs/personal-server-ts-core/schemas";
|
|
20
|
+
import { type BoundedStorageAdapter } from "@opendatalabs/personal-server-ts-core/storage/adapters";
|
|
21
|
+
import { createLiteCanonicalStore } from "./canonical-store.js";
|
|
22
|
+
import { type LiteReplicaEngine } from "./replication-engine.js";
|
|
23
|
+
import { liteTargetChunkBytes, type LiteReplicaObjectTransfers, type LiteReplicaPersistence, type ReplicationBootConfig } from "./replication-ports.js";
|
|
24
|
+
import { type LiteReplicationRuntime } from "./replication-runtime.js";
|
|
25
|
+
import { type LiteReplicaUploadHeaders } from "./replication-storage.js";
|
|
26
|
+
export { liteTargetChunkBytes };
|
|
27
|
+
/**
|
|
28
|
+
* Vana storage addressing and upload authorization for one owner's replica
|
|
29
|
+
* objects: the URL layout and Web3Signed claim Node's storage adapter uses,
|
|
30
|
+
* signed by the registered server key.
|
|
31
|
+
*/
|
|
32
|
+
export declare function liteVanaReplicaObjects(input: {
|
|
33
|
+
config: ServerConfig;
|
|
34
|
+
owner: string;
|
|
35
|
+
signer: Pick<ServerAccount, "signMessage">;
|
|
36
|
+
}): LiteReplicationInput["objects"];
|
|
37
|
+
export interface LiteReplicationInput {
|
|
38
|
+
/** This boot's door (`resolveLiteReplication`). */
|
|
39
|
+
door: ReplicationDoorStatus;
|
|
40
|
+
/** The host's boot config (§4.1). Absent means off. */
|
|
41
|
+
config?: ReplicationBootConfig;
|
|
42
|
+
/** Native persistence opened with replica support. */
|
|
43
|
+
persistence: LiteReplicaPersistence;
|
|
44
|
+
/** Storage object I/O over the native `replica.*` bridge. */
|
|
45
|
+
transfers: LiteReplicaObjectTransfers;
|
|
46
|
+
/** The retained declarations the canonical store serves. */
|
|
47
|
+
declarations: readonly DeclarationSnapshot[];
|
|
48
|
+
/** The registered PS server key. Never the owner wallet. */
|
|
49
|
+
serverAccount: ReplicaBatchSigner;
|
|
50
|
+
/** Storage object addressing and upload authorization. */
|
|
51
|
+
objects: {
|
|
52
|
+
urlForKey(key: string): string;
|
|
53
|
+
headers?: LiteReplicaUploadHeaders;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* The network ports over the given storage. Called only when replication
|
|
57
|
+
* runs this boot (core `createReplicationNetworkPorts` in production).
|
|
58
|
+
*/
|
|
59
|
+
network: (owner: `0x${string}`, storage: BoundedStorageAdapter) => ReplicationNetworkPorts;
|
|
60
|
+
/**
|
|
61
|
+
* Rotate the writer identity before this boot steps (host contract
|
|
62
|
+
* §3.2): the host cannot rule out that this database is a copy.
|
|
63
|
+
*/
|
|
64
|
+
rotateWriterIdentity?: boolean;
|
|
65
|
+
timers?: ReplicationTimers;
|
|
66
|
+
onReport?: (report: ProgressReport) => void;
|
|
67
|
+
onError?: (error: unknown) => void;
|
|
68
|
+
/** Engine options for tests (e.g. `now`). */
|
|
69
|
+
engine?: Partial<ReplicaEngineConfig>;
|
|
70
|
+
}
|
|
71
|
+
export type LiteReplication = {
|
|
72
|
+
state: "started";
|
|
73
|
+
runtime: LiteReplicationRuntime;
|
|
74
|
+
engine: LiteReplicaEngine;
|
|
75
|
+
/**
|
|
76
|
+
* The canonical store over the same persistence and bindings: local
|
|
77
|
+
* writes and reads go through it, never through a second context.
|
|
78
|
+
*/
|
|
79
|
+
canonical: ReturnType<typeof createLiteCanonicalStore>;
|
|
80
|
+
/** What this boot did with `rotateWriterIdentity`. */
|
|
81
|
+
rotation: ReplicaWriterRotation;
|
|
82
|
+
} | {
|
|
83
|
+
state: "off" | "blocked";
|
|
84
|
+
runtime: LiteReplicationRuntime;
|
|
85
|
+
reason?: string;
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Build replication for one boot. Does not step: the host resumes the
|
|
89
|
+
* returned runtime when the app is active.
|
|
90
|
+
*/
|
|
91
|
+
export declare function createLiteReplication(input: LiteReplicationInput): Promise<LiteReplication>;
|
|
92
|
+
//# sourceMappingURL=replication-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replication-host.d.ts","sourceRoot":"","sources":["../src/replication-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { planReplicationHost, } from "@opendatalabs/personal-server-ts-core/replication/host-ports";
|
|
2
|
+
import { replicaWriterRotationOutcome } from "@opendatalabs/personal-server-ts-core/replication/writer-identity-store";
|
|
3
|
+
import { resolveVanaStorageEndpoint, vanaBlobRequests, } from "@opendatalabs/personal-server-ts-core/storage/adapters";
|
|
4
|
+
import { createLiteCanonicalStore } from "./canonical-store.js";
|
|
5
|
+
import { createLiteReplicaEngine, } from "./replication-engine.js";
|
|
6
|
+
import { liteTargetChunkBytes, replicationBootConfigProblem, } from "./replication-ports.js";
|
|
7
|
+
import { createLiteReplicationRuntime, } from "./replication-runtime.js";
|
|
8
|
+
import { createLiteReplicaStorage, } from "./replication-storage.js";
|
|
9
|
+
export { liteTargetChunkBytes };
|
|
10
|
+
/**
|
|
11
|
+
* Vana storage addressing and upload authorization for one owner's replica
|
|
12
|
+
* objects: the URL layout and Web3Signed claim Node's storage adapter uses,
|
|
13
|
+
* signed by the registered server key.
|
|
14
|
+
*/
|
|
15
|
+
export function liteVanaReplicaObjects(input) {
|
|
16
|
+
const endpoint = resolveVanaStorageEndpoint(input.config);
|
|
17
|
+
const requests = vanaBlobRequests({
|
|
18
|
+
endpoint,
|
|
19
|
+
audience: endpoint,
|
|
20
|
+
chainId: input.config.gateway.chainId,
|
|
21
|
+
owner: input.owner.toLowerCase(),
|
|
22
|
+
signer: input.signer,
|
|
23
|
+
});
|
|
24
|
+
return {
|
|
25
|
+
urlForKey: requests.urlForKey,
|
|
26
|
+
headers: async ({ method, url, body }) => ({
|
|
27
|
+
authorization: await requests.authorization(method, url, body),
|
|
28
|
+
"content-type": "application/octet-stream",
|
|
29
|
+
}),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Build replication for one boot. Does not step: the host resumes the
|
|
34
|
+
* returned runtime when the app is active.
|
|
35
|
+
*/
|
|
36
|
+
export async function createLiteReplication(input) {
|
|
37
|
+
const { door, config } = input;
|
|
38
|
+
const inert = (state, reason) => ({
|
|
39
|
+
state,
|
|
40
|
+
reason,
|
|
41
|
+
runtime: createLiteReplicationRuntime({ door, config }),
|
|
42
|
+
});
|
|
43
|
+
if (door.state !== "on" || !config?.enabled)
|
|
44
|
+
return inert("off");
|
|
45
|
+
const problem = replicationBootConfigProblem(config);
|
|
46
|
+
if (problem)
|
|
47
|
+
return inert("blocked", problem);
|
|
48
|
+
const plan = planReplicationHost({
|
|
49
|
+
owner: config.owner,
|
|
50
|
+
chainId: config.chainId,
|
|
51
|
+
declarations: input.declarations,
|
|
52
|
+
});
|
|
53
|
+
if (plan.state === "blocked")
|
|
54
|
+
return inert("blocked", plan.reason);
|
|
55
|
+
if (plan.environment !== config.environment)
|
|
56
|
+
return inert("blocked", "environment_mismatch");
|
|
57
|
+
const { owner, context } = plan;
|
|
58
|
+
const inUse = new Set();
|
|
59
|
+
let network;
|
|
60
|
+
try {
|
|
61
|
+
network = input.network(owner, createLiteReplicaStorage({
|
|
62
|
+
persistence: input.persistence,
|
|
63
|
+
transfers: input.transfers,
|
|
64
|
+
urlForKey: input.objects.urlForKey,
|
|
65
|
+
headers: input.objects.headers,
|
|
66
|
+
inUse,
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
return inert("blocked", error instanceof Error ? error.message : String(error));
|
|
71
|
+
}
|
|
72
|
+
// A private capability: only this engine can hand batches to its store.
|
|
73
|
+
const credential = Symbol("lite-replication-engine");
|
|
74
|
+
const trusted = {
|
|
75
|
+
context: () => ({ owner, declarations: context.declarations }),
|
|
76
|
+
authenticateReplica: (presented) => presented === credential ? owner : undefined,
|
|
77
|
+
};
|
|
78
|
+
const engine = createLiteReplicaEngine({
|
|
79
|
+
persistence: input.persistence,
|
|
80
|
+
transientBytesInUse: inUse,
|
|
81
|
+
canonical: trusted,
|
|
82
|
+
engine: {
|
|
83
|
+
enabled: true,
|
|
84
|
+
expected: () => context.expected,
|
|
85
|
+
credential,
|
|
86
|
+
transport: network.transport,
|
|
87
|
+
authority: {
|
|
88
|
+
signer: input.serverAccount,
|
|
89
|
+
roster: network.roster,
|
|
90
|
+
chainId: config.chainId,
|
|
91
|
+
environment: plan.environment,
|
|
92
|
+
},
|
|
93
|
+
targetChunkBytes: liteTargetChunkBytes(config.limits.fragmentBytes),
|
|
94
|
+
...input.engine,
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
const rotation = input.rotateWriterIdentity
|
|
98
|
+
? await rotateAtBoot(engine)
|
|
99
|
+
: "not_requested";
|
|
100
|
+
const runtime = createLiteReplicationRuntime({
|
|
101
|
+
door,
|
|
102
|
+
config,
|
|
103
|
+
engine,
|
|
104
|
+
timers: input.timers,
|
|
105
|
+
onReport: input.onReport,
|
|
106
|
+
onError: input.onError,
|
|
107
|
+
});
|
|
108
|
+
return {
|
|
109
|
+
state: "started",
|
|
110
|
+
engine,
|
|
111
|
+
canonical: createLiteCanonicalStore({
|
|
112
|
+
persistence: input.persistence,
|
|
113
|
+
enabled: true,
|
|
114
|
+
...trusted,
|
|
115
|
+
// A committed own write steps soon, not at the next wake (Node: #517).
|
|
116
|
+
localCommitted: () => runtime.localWrite(),
|
|
117
|
+
}),
|
|
118
|
+
rotation,
|
|
119
|
+
runtime,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/** Node's `rotateReplicaWriterIdentityAtBoot`, on the Lite engine. */
|
|
123
|
+
async function rotateAtBoot(engine) {
|
|
124
|
+
try {
|
|
125
|
+
await engine.rotateWriter();
|
|
126
|
+
return "rotated";
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
const outcome = replicaWriterRotationOutcome(error);
|
|
130
|
+
if (outcome)
|
|
131
|
+
return outcome;
|
|
132
|
+
throw error;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=replication-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replication-host.js","sourceRoot":"","sources":["../src/replication-host.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ports a phone (or other PS-Lite) host implements for record replication
|
|
3
|
+
* (host contract, docs/replication/host-contract.md §4). PS-Lite owns what to
|
|
4
|
+
* replicate and when a step is due; the host owns storage, network I/O and
|
|
5
|
+
* the app lifecycle that triggers steps.
|
|
6
|
+
*
|
|
7
|
+
* - Persistence: `LiteReplicaPersistence`, the canonical native transaction
|
|
8
|
+
* plus fragment-sized byte storage (§4.3).
|
|
9
|
+
* - Transport: `LiteReplicaObjectTransfers`, storage object I/O done natively
|
|
10
|
+
* (unity-surfaces `apps/mobile-shell/lib/replication/native_replica_transport.dart`),
|
|
11
|
+
* plus core's `ReplicaRosterPort` (§4.2).
|
|
12
|
+
* - Trigger/status: `LiteReplicationRuntime` (`replication-runtime.ts`).
|
|
13
|
+
*
|
|
14
|
+
* In-memory reference implementations live in `test-support/replication.ts`.
|
|
15
|
+
*/
|
|
16
|
+
import type { ReplicaRosterPort } from "@opendatalabs/personal-server-ts-core/replication/roster";
|
|
17
|
+
import type { ReplicationStepper } from "@opendatalabs/personal-server-ts-core/replication/host-driver";
|
|
18
|
+
import type { ReplicaEnvironment } from "@opendatalabs/personal-server-ts-core/replication/writer-identity";
|
|
19
|
+
import type { ReplicaSql } from "@opendatalabs/personal-server-ts-core/replication/effects";
|
|
20
|
+
import type { LiteBlobDescriptor, LiteCanonicalPersistence, LiteCanonicalTransaction } from "./canonical-persistence.js";
|
|
21
|
+
/** Passed by the host at PS start (§4.1). Absent means off. */
|
|
22
|
+
export interface ReplicationBootConfig {
|
|
23
|
+
/** The host's opt-in record says "on" (§5). */
|
|
24
|
+
enabled: boolean;
|
|
25
|
+
owner: `0x${string}`;
|
|
26
|
+
environment: ReplicaEnvironment;
|
|
27
|
+
chainId: number;
|
|
28
|
+
limits: ReplicationLimits;
|
|
29
|
+
}
|
|
30
|
+
export interface ReplicationLimits {
|
|
31
|
+
/** Fragment size target. Lite: 1 MiB, the native record limit. */
|
|
32
|
+
fragmentBytes: number;
|
|
33
|
+
/** Work, memory and time per step (§6). */
|
|
34
|
+
step: {
|
|
35
|
+
units: number;
|
|
36
|
+
bytes: number;
|
|
37
|
+
deadlineMs: number;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/** The phone's step bound (§6): 20 units, 8 MiB, 30 s; 1 MiB fragments. */
|
|
41
|
+
export declare const LITE_REPLICATION_LIMITS: ReplicationLimits;
|
|
42
|
+
/** The most a Lite fragment may be: one native record. */
|
|
43
|
+
export declare const LITE_MAX_FRAGMENT_BYTES: number;
|
|
44
|
+
/**
|
|
45
|
+
* The most one `sql` call may carry in its parameters or return in its rows
|
|
46
|
+
* (§4.3): one fragment-sized value plus statement and row overhead. The
|
|
47
|
+
* native side fails a larger call with `too-large`, so replication state
|
|
48
|
+
* that can grow past it is kept in rows below it.
|
|
49
|
+
*/
|
|
50
|
+
export declare const LITE_REPLICA_SQL_BYTES: number;
|
|
51
|
+
/**
|
|
52
|
+
* The plaintext chunk that encrypts to at most `fragmentBytes`. The native
|
|
53
|
+
* store keeps a fragment as one value, so the encrypted size is the bound.
|
|
54
|
+
*/
|
|
55
|
+
export declare function liteTargetChunkBytes(fragmentBytes: number): number;
|
|
56
|
+
/**
|
|
57
|
+
* Why a boot configuration cannot run, or `undefined` when it can. PS refuses
|
|
58
|
+
* an invalid value rather than clamping it.
|
|
59
|
+
*/
|
|
60
|
+
export declare function replicationBootConfigProblem(config: ReplicationBootConfig): "invalid_owner" | "invalid_environment" | "invalid_limits" | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Length and SHA-256 of replica bytes as the native side computes them.
|
|
63
|
+
* `sha256` is 64 lowercase hex characters with no `sha256:` prefix, the native
|
|
64
|
+
* bridge's format.
|
|
65
|
+
*/
|
|
66
|
+
export interface LiteReplicaBytesInfo {
|
|
67
|
+
length: number;
|
|
68
|
+
sha256: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Fragment-sized byte storage beside the canonical rows (§4.3). Canonical
|
|
72
|
+
* values stop at 256 KiB and blob methods take record blob claims, so
|
|
73
|
+
* fragments and manifests use this instead.
|
|
74
|
+
*/
|
|
75
|
+
export interface LiteReplicaBytes {
|
|
76
|
+
/**
|
|
77
|
+
* Stage bytes from frames of at most 128 KiB. The native side computes
|
|
78
|
+
* length and SHA-256 itself; the returned id is invisible to readers until
|
|
79
|
+
* a transaction attaches it.
|
|
80
|
+
*/
|
|
81
|
+
stageBytes(chunks: AsyncIterable<Uint8Array>): Promise<string>;
|
|
82
|
+
/** Attached bytes only, in frames of at most 128 KiB. Missing ids throw. */
|
|
83
|
+
readBytes(id: string): AsyncIterable<Uint8Array>;
|
|
84
|
+
}
|
|
85
|
+
export interface LiteReplicaTransaction extends LiteCanonicalTransaction {
|
|
86
|
+
/**
|
|
87
|
+
* Publish staged bytes under their id in THIS transaction, after checking
|
|
88
|
+
* the native length and SHA-256 against `expected`. Rollback publishes
|
|
89
|
+
* nothing. Attaching the same bytes again is a no-op.
|
|
90
|
+
*/
|
|
91
|
+
attachBytes(stagingId: string, expected: LiteReplicaBytesInfo): Promise<void>;
|
|
92
|
+
/** Drop attached bytes when this transaction commits. Absent ids are a no-op. */
|
|
93
|
+
releaseBytes(id: string): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* Publish attached bytes `bytesId` as the canonical blob `expected` in THIS
|
|
96
|
+
* transaction, as `attachBlob` does for a staged blob: the native side
|
|
97
|
+
* checks length and SHA-256 against the descriptor. The bytes stay
|
|
98
|
+
* attached under `bytesId` until released. A received blob's descriptor
|
|
99
|
+
* is trusted only after its whole payload is verified, which is after its
|
|
100
|
+
* bytes were staged, so received blobs take this path.
|
|
101
|
+
*/
|
|
102
|
+
publishBlob(bytesId: string, expected: LiteBlobDescriptor): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Replication's relational state in THIS transaction (§4.3): the phase
|
|
105
|
+
* engine's `pdpp_transport_*` and `pdpp_replica_*` tables, in the same
|
|
106
|
+
* native SQLite database as the canonical rows. PS sends only its own
|
|
107
|
+
* fixed statements; parameters never carry more than one canonical value.
|
|
108
|
+
*/
|
|
109
|
+
readonly sql: LiteReplicaSql;
|
|
110
|
+
}
|
|
111
|
+
/** `ReplicaSql` answered asynchronously over the bridge. */
|
|
112
|
+
export interface LiteReplicaSql extends ReplicaSql {
|
|
113
|
+
get(sql: string, params: readonly LiteReplicaSqlValue[]): Promise<Record<string, unknown> | undefined>;
|
|
114
|
+
all(sql: string, params: readonly LiteReplicaSqlValue[]): Promise<Record<string, unknown>[]>;
|
|
115
|
+
run(sql: string, params: readonly LiteReplicaSqlValue[]): Promise<{
|
|
116
|
+
changes: number;
|
|
117
|
+
}>;
|
|
118
|
+
exec(sql: string): Promise<void>;
|
|
119
|
+
}
|
|
120
|
+
type LiteReplicaSqlValue = Parameters<ReplicaSql["get"]>[1][number];
|
|
121
|
+
/** The canonical native transaction, widened to replica bytes. */
|
|
122
|
+
export interface LiteReplicaPersistence extends Omit<LiteCanonicalPersistence, "transaction">, LiteReplicaBytes {
|
|
123
|
+
transaction<T>(run: (tx: LiteReplicaTransaction) => Promise<T>): Promise<T>;
|
|
124
|
+
}
|
|
125
|
+
/** Failure codes of a native transfer (`NativeReplicaException.code`). */
|
|
126
|
+
export type LiteReplicaTransferFailure = "invalid-request" | "invalid-url" | "blocked-host" | "too-large" | "timeout" | "cancelled" | "busy" | "http-status" | "not-found" | "too-many-redirects" | "length-mismatch" | "digest-mismatch" | "unavailable" | "quota" | "storage-full";
|
|
127
|
+
/** A native transfer failed. `busy` means the host's fixed capacity is full. */
|
|
128
|
+
export declare class LiteReplicaTransferError extends Error {
|
|
129
|
+
readonly code: LiteReplicaTransferFailure;
|
|
130
|
+
constructor(code: LiteReplicaTransferFailure, message?: string);
|
|
131
|
+
}
|
|
132
|
+
export interface LiteReplicaTransferCall {
|
|
133
|
+
/**
|
|
134
|
+
* Aborting cancels the transfer (the bridge's `replica.cancel`): the host
|
|
135
|
+
* closes its socket, discards what it staged and fails with `cancelled`.
|
|
136
|
+
*/
|
|
137
|
+
signal: AbortSignal;
|
|
138
|
+
/** Deadline for the whole transfer, capacity wait included. */
|
|
139
|
+
deadlineMs: number;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Storage object I/O the phone host runs natively, with fixed capacity: a
|
|
143
|
+
* transfer that does not fit fails `busy` rather than queueing without bound,
|
|
144
|
+
* so the coordinator defers it. The bridge operations are `replica.download`,
|
|
145
|
+
* `replica.probe`, `replica.upload` and `replica.cancel`. Adapters do not
|
|
146
|
+
* retry; the coordinator settles each failure.
|
|
147
|
+
*/
|
|
148
|
+
export interface LiteReplicaObjectTransfers {
|
|
149
|
+
/**
|
|
150
|
+
* Stream `url` into a new byte stage of at most `maxBytes`. With
|
|
151
|
+
* `expected`, a different length or digest fails and the stage is
|
|
152
|
+
* discarded. 404 and 410 fail `not-found`, which is definitive absence.
|
|
153
|
+
* The stage is invisible until a transaction attaches it.
|
|
154
|
+
*/
|
|
155
|
+
download(request: {
|
|
156
|
+
url: string;
|
|
157
|
+
maxBytes: number;
|
|
158
|
+
expected?: LiteReplicaBytesInfo;
|
|
159
|
+
}, call: LiteReplicaTransferCall): Promise<LiteReplicaBytesInfo & {
|
|
160
|
+
stagingId: string;
|
|
161
|
+
}>;
|
|
162
|
+
/** False only on 404 or 410. Reads no body. */
|
|
163
|
+
probe(request: {
|
|
164
|
+
url: string;
|
|
165
|
+
}, call: LiteReplicaTransferCall): Promise<boolean>;
|
|
166
|
+
/**
|
|
167
|
+
* Stream attached bytes `bytesId` to `url`. Redirects are refused; a
|
|
168
|
+
* non-2xx answer fails `http-status`.
|
|
169
|
+
*/
|
|
170
|
+
upload(request: {
|
|
171
|
+
url: string;
|
|
172
|
+
method: "PUT" | "POST";
|
|
173
|
+
headers: Record<string, string>;
|
|
174
|
+
bytesId: string;
|
|
175
|
+
}, call: LiteReplicaTransferCall): Promise<{
|
|
176
|
+
status: number;
|
|
177
|
+
}>;
|
|
178
|
+
}
|
|
179
|
+
/** The network side the host supplies (§4.2). */
|
|
180
|
+
export interface LiteReplicaNetwork {
|
|
181
|
+
transfers: LiteReplicaObjectTransfers;
|
|
182
|
+
roster: ReplicaRosterPort;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* The replication phase engine over the ports above: one finite step of
|
|
186
|
+
* prepare, publish, discover, download, import and reconcile. PS supplies it
|
|
187
|
+
* (`createLiteReplicaEngine`, `replication-engine.ts`), not the host. Without
|
|
188
|
+
* one the runtime reports `blocked: "no_engine"` and never steps.
|
|
189
|
+
*/
|
|
190
|
+
export type LiteReplicationEngine = ReplicationStepper;
|
|
191
|
+
/** What made the host ask for a step now (§4.4). */
|
|
192
|
+
export type LiteReplicationTrigger = "foreground" | "local_write" | "network" | "sync_now";
|
|
193
|
+
export {};
|
|
194
|
+
//# sourceMappingURL=replication-ports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replication-ports.d.ts","sourceRoot":"","sources":["../src/replication-ports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/** The phone's step bound (§6): 20 units, 8 MiB, 30 s; 1 MiB fragments. */
|
|
2
|
+
export const LITE_REPLICATION_LIMITS = {
|
|
3
|
+
fragmentBytes: 1024 * 1024,
|
|
4
|
+
step: { units: 20, bytes: 8 * 1024 * 1024, deadlineMs: 30_000 },
|
|
5
|
+
};
|
|
6
|
+
/** The most a Lite fragment may be: one native record. */
|
|
7
|
+
export const LITE_MAX_FRAGMENT_BYTES = 1024 * 1024;
|
|
8
|
+
/**
|
|
9
|
+
* The most one `sql` call may carry in its parameters or return in its rows
|
|
10
|
+
* (§4.3): one fragment-sized value plus statement and row overhead. The
|
|
11
|
+
* native side fails a larger call with `too-large`, so replication state
|
|
12
|
+
* that can grow past it is kept in rows below it.
|
|
13
|
+
*/
|
|
14
|
+
export const LITE_REPLICA_SQL_BYTES = LITE_MAX_FRAGMENT_BYTES + 64 * 1024;
|
|
15
|
+
/**
|
|
16
|
+
* The fixed bytes an encrypted fragment adds to its plaintext, beyond the
|
|
17
|
+
* base64 growth of 4/3: envelope framing plus encryption overhead.
|
|
18
|
+
*/
|
|
19
|
+
const FRAGMENT_FRAMING_BYTES = 4100;
|
|
20
|
+
/**
|
|
21
|
+
* The plaintext chunk that encrypts to at most `fragmentBytes`. The native
|
|
22
|
+
* store keeps a fragment as one value, so the encrypted size is the bound.
|
|
23
|
+
*/
|
|
24
|
+
export function liteTargetChunkBytes(fragmentBytes) {
|
|
25
|
+
return Math.floor(((fragmentBytes - FRAGMENT_FRAMING_BYTES) * 3) / 4);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Why a boot configuration cannot run, or `undefined` when it can. PS refuses
|
|
29
|
+
* an invalid value rather than clamping it.
|
|
30
|
+
*/
|
|
31
|
+
export function replicationBootConfigProblem(config) {
|
|
32
|
+
if (!/^0x[0-9a-fA-F]{40}$/.test(config.owner))
|
|
33
|
+
return "invalid_owner";
|
|
34
|
+
if (config.environment !== "dev" && config.environment !== "prod")
|
|
35
|
+
return "invalid_environment";
|
|
36
|
+
const { fragmentBytes, step } = config.limits;
|
|
37
|
+
const positive = (value) => Number.isSafeInteger(value) && value > 0;
|
|
38
|
+
if (!positive(config.chainId) ||
|
|
39
|
+
!positive(fragmentBytes) ||
|
|
40
|
+
fragmentBytes > LITE_MAX_FRAGMENT_BYTES ||
|
|
41
|
+
// A fragment must fit its framing and at least one plaintext byte.
|
|
42
|
+
liteTargetChunkBytes(fragmentBytes) < 1 ||
|
|
43
|
+
!positive(step.units) ||
|
|
44
|
+
!positive(step.bytes) ||
|
|
45
|
+
!positive(step.deadlineMs))
|
|
46
|
+
return "invalid_limits";
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
/** A native transfer failed. `busy` means the host's fixed capacity is full. */
|
|
50
|
+
export class LiteReplicaTransferError extends Error {
|
|
51
|
+
code;
|
|
52
|
+
constructor(code, message = code) {
|
|
53
|
+
super(message);
|
|
54
|
+
this.code = code;
|
|
55
|
+
this.name = "LiteReplicaTransferError";
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=replication-ports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replication-ports.js","sourceRoot":"","sources":["../src/replication-ports.ts"],"names":[],"mappings":"AA0CA,2EAA2E;AAC3E,MAAM,CAAC,MAAM,uBAAuB,GAAsB;IACxD,aAAa,EAAE,IAAI,GAAG,IAAI;IAC1B,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;CAChE,CAAC;AAEF,0DAA0D;AAC1D,MAAM,CAAC,MAAM,uBAAuB,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,uBAAuB,GAAG,EAAE,GAAG,IAAI,CAAC;AAE1E;;;GAGG;AACH,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,aAAqB;IACxD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAC1C,MAA6B;IAE7B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,eAAe,CAAC;IACtE,IAAI,MAAM,CAAC,WAAW,KAAK,KAAK,IAAI,MAAM,CAAC,WAAW,KAAK,MAAM;QAC/D,OAAO,qBAAqB,CAAC;IAC/B,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9C,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;IAC7E,IACE,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;QACzB,CAAC,QAAQ,CAAC,aAAa,CAAC;QACxB,aAAa,GAAG,uBAAuB;QACvC,mEAAmE;QACnE,oBAAoB,CAAC,aAAa,CAAC,GAAG,CAAC;QACvC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QACrB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QACrB,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC;QAE1B,OAAO,gBAAgB,CAAC;IAC1B,OAAO,SAAS,CAAC;AACnB,CAAC;AAiGD,gFAAgF;AAChF,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAEtC;IADX,YACW,IAAgC,EACzC,UAAkB,IAAI;QAEtB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,SAAI,GAAJ,IAAI,CAA4B;QAIzC,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PS-Lite's replication runtime (host contract §4.4): the trigger and status
|
|
3
|
+
* surface a phone host drives. It decides nothing about retries or phase
|
|
4
|
+
* order; the engine's coordinator does. It turns the door, the host's boot
|
|
5
|
+
* configuration and the app lifecycle into one driver that steps the engine.
|
|
6
|
+
*
|
|
7
|
+
* Foreground only (§4.4): `resume` on foreground, `pause` on `inactive`,
|
|
8
|
+
* `paused` or `hidden`. A pause aborts the running step and stops scheduling.
|
|
9
|
+
*/
|
|
10
|
+
import type { ReplicationDoorStatus, ReplicationRefusal } from "@opendatalabs/personal-server-ts-core/replication/door";
|
|
11
|
+
import { type ReplicationDriverStatus, type ReplicationTimers } from "@opendatalabs/personal-server-ts-core/replication/host-driver";
|
|
12
|
+
import type { ProgressReport } from "@opendatalabs/personal-server-ts-core/replication/coordinator";
|
|
13
|
+
import { type LiteReplicationEngine, type LiteReplicationTrigger, type ReplicationBootConfig } from "./replication-ports.js";
|
|
14
|
+
/** How long a pause waits for an aborted step before reporting it stuck. */
|
|
15
|
+
export declare const LITE_REPLICATION_PAUSE_GRACE_MS = 2000;
|
|
16
|
+
export type LiteReplicationStatus =
|
|
17
|
+
/** Off by the host's opt-in, or the door was never opened. */
|
|
18
|
+
{
|
|
19
|
+
state: "off";
|
|
20
|
+
}
|
|
21
|
+
/** Turned off once; it stays off on this device (§5.2). */
|
|
22
|
+
| {
|
|
23
|
+
state: "refused";
|
|
24
|
+
refusal: ReplicationRefusal;
|
|
25
|
+
}
|
|
26
|
+
/** On, but this boot cannot run it. */
|
|
27
|
+
| {
|
|
28
|
+
state: "blocked";
|
|
29
|
+
reason: "no_engine" | "invalid_owner" | "invalid_environment" | "invalid_limits";
|
|
30
|
+
} | ({
|
|
31
|
+
state: "on" | "paused";
|
|
32
|
+
} & Omit<ReplicationDriverStatus, "state">);
|
|
33
|
+
export interface LiteReplicationRuntime {
|
|
34
|
+
status(): LiteReplicationStatus;
|
|
35
|
+
/**
|
|
36
|
+
* Ask for a step now. Single-flight; while paused, off or blocked it does
|
|
37
|
+
* nothing and resolves `undefined`.
|
|
38
|
+
*/
|
|
39
|
+
trigger(reason: LiteReplicationTrigger): Promise<ProgressReport | undefined>;
|
|
40
|
+
/** A host-observed dependency change, e.g. `mapping:<connection>`. */
|
|
41
|
+
wake(dependency: string): void;
|
|
42
|
+
/** A local write committed: step within the driver's debounce window. */
|
|
43
|
+
localWrite(): void;
|
|
44
|
+
/** Foreground: start stepping (steps once now). Idempotent. */
|
|
45
|
+
resume(): void;
|
|
46
|
+
/** Background: abort the running step and stop scheduling. */
|
|
47
|
+
pause(): Promise<void>;
|
|
48
|
+
/** Teardown: like `pause`, with the caller's grace. True when settled. */
|
|
49
|
+
stop(graceMs: number): Promise<boolean>;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Build the runtime for one boot. With the door anything but `on`, or no
|
|
53
|
+
* boot config or `enabled: false`, it is inert: no engine runs and `status`
|
|
54
|
+
* says why.
|
|
55
|
+
*/
|
|
56
|
+
export declare function createLiteReplicationRuntime(input: {
|
|
57
|
+
door: ReplicationDoorStatus;
|
|
58
|
+
config?: ReplicationBootConfig;
|
|
59
|
+
engine?: LiteReplicationEngine;
|
|
60
|
+
timers?: ReplicationTimers;
|
|
61
|
+
onReport?: (report: ProgressReport) => void;
|
|
62
|
+
onError?: (error: unknown) => void;
|
|
63
|
+
}): LiteReplicationRuntime;
|
|
64
|
+
//# sourceMappingURL=replication-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replication-runtime.d.ts","sourceRoot":"","sources":["../src/replication-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,wDAAwD,CAAC;AAChE,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACvB,MAAM,+DAA+D,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+DAA+D,CAAC;AACpG,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC3B,MAAM,wBAAwB,CAAC;AAEhC,4EAA4E;AAC5E,eAAO,MAAM,+BAA+B,OAAQ,CAAC;AAErD,MAAM,MAAM,qBAAqB;AAC/B,8DAA8D;AAC5D;IAAE,KAAK,EAAE,KAAK,CAAA;CAAE;AAClB,2DAA2D;GACzD;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,kBAAkB,CAAA;CAAE;AACnD,uCAAuC;GACrC;IACE,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EACF,WAAW,GACX,eAAe,GACf,qBAAqB,GACrB,gBAAgB,CAAC;CACtB,GACD,CAAC;IAAE,KAAK,EAAE,IAAI,GAAG,QAAQ,CAAA;CAAE,GAAG,IAAI,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC,CAAC;AAE1E,MAAM,WAAW,sBAAsB;IACrC,MAAM,IAAI,qBAAqB,CAAC;IAChC;;;OAGG;IACH,OAAO,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;IAC7E,sEAAsE;IACtE,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,yEAAyE;IACzE,UAAU,IAAI,IAAI,CAAC;IACnB,+DAA+D;IAC/D,MAAM,IAAI,IAAI,CAAC;IACf,8DAA8D;IAC9D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,0EAA0E;IAC1E,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACzC;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,IAAI,EAAE,qBAAqB,CAAC;IAC5B,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,GAAG,sBAAsB,CA+DzB"}
|