@opendatalabs/personal-server-ts-core 1.7.0 → 1.9.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/api/index.d.ts +64 -2
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +189 -45
- package/dist/api/index.js.map +1 -1
- package/dist/contracts/data.d.ts +16 -1
- package/dist/contracts/data.d.ts.map +1 -1
- package/dist/contracts/data.js +71 -19
- package/dist/contracts/data.js.map +1 -1
- package/dist/derivatives/api.d.ts +33 -0
- package/dist/derivatives/api.d.ts.map +1 -0
- package/dist/derivatives/api.js +216 -0
- package/dist/derivatives/api.js.map +1 -0
- package/dist/derivatives/compute.d.ts +106 -0
- package/dist/derivatives/compute.d.ts.map +1 -0
- package/dist/derivatives/compute.js +373 -0
- package/dist/derivatives/compute.js.map +1 -0
- package/dist/derivatives/index.d.ts +9 -0
- package/dist/derivatives/index.d.ts.map +1 -0
- package/dist/derivatives/index.js +9 -0
- package/dist/derivatives/index.js.map +1 -0
- package/dist/derivatives/inference.d.ts +102 -0
- package/dist/derivatives/inference.d.ts.map +1 -0
- package/dist/derivatives/inference.js +159 -0
- package/dist/derivatives/inference.js.map +1 -0
- package/dist/derivatives/prompt.d.ts +64 -0
- package/dist/derivatives/prompt.d.ts.map +1 -0
- package/dist/derivatives/prompt.js +186 -0
- package/dist/derivatives/prompt.js.map +1 -0
- package/dist/derivatives/registration.d.ts +53 -0
- package/dist/derivatives/registration.d.ts.map +1 -0
- package/dist/derivatives/registration.js +163 -0
- package/dist/derivatives/registration.js.map +1 -0
- package/dist/derivatives/scheduler.d.ts +56 -0
- package/dist/derivatives/scheduler.d.ts.map +1 -0
- package/dist/derivatives/scheduler.js +151 -0
- package/dist/derivatives/scheduler.js.map +1 -0
- package/dist/derivatives/store.d.ts +14 -0
- package/dist/derivatives/store.d.ts.map +1 -0
- package/dist/derivatives/store.js +75 -0
- package/dist/derivatives/store.js.map +1 -0
- package/dist/derivatives/types.d.ts +72 -0
- package/dist/derivatives/types.d.ts.map +1 -0
- package/dist/derivatives/types.js +25 -0
- package/dist/derivatives/types.js.map +1 -0
- package/dist/errors/catalog.d.ts +26 -0
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/catalog.js +39 -1
- package/dist/errors/catalog.js.map +1 -1
- package/dist/logging/access-log.d.ts +7 -1
- package/dist/logging/access-log.d.ts.map +1 -1
- package/dist/mcp/read-client.d.ts.map +1 -1
- package/dist/mcp/read-client.js +25 -1
- package/dist/mcp/read-client.js.map +1 -1
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +10 -1
- package/dist/mcp/session.js.map +1 -1
- package/dist/ports/index.d.ts +125 -0
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js.map +1 -1
- package/dist/schemas/server-config.d.ts +12 -0
- package/dist/schemas/server-config.d.ts.map +1 -1
- package/dist/schemas/server-config.js +29 -0
- package/dist/schemas/server-config.js.map +1 -1
- package/dist/storage/adapters/index.d.ts +1 -1
- package/dist/storage/adapters/index.d.ts.map +1 -1
- package/dist/storage/adapters/index.js +1 -1
- package/dist/storage/adapters/index.js.map +1 -1
- package/dist/storage/adapters/vana.d.ts +2 -0
- package/dist/storage/adapters/vana.d.ts.map +1 -1
- package/dist/storage/adapters/vana.js +5 -1
- package/dist/storage/adapters/vana.js.map +1 -1
- package/dist/storage/index/types.d.ts +1 -0
- package/dist/storage/index/types.d.ts.map +1 -1
- package/dist/sync/data-point-feed.d.ts +35 -0
- package/dist/sync/data-point-feed.d.ts.map +1 -0
- package/dist/sync/data-point-feed.js +122 -0
- package/dist/sync/data-point-feed.js.map +1 -0
- package/dist/sync/delete-data-port.d.ts +50 -0
- package/dist/sync/delete-data-port.d.ts.map +1 -0
- package/dist/sync/delete-data-port.js +244 -0
- package/dist/sync/delete-data-port.js.map +1 -0
- package/dist/sync/engine/sync-manager.d.ts +14 -4
- package/dist/sync/engine/sync-manager.d.ts.map +1 -1
- package/dist/sync/engine/sync-manager.js +53 -8
- package/dist/sync/engine/sync-manager.js.map +1 -1
- package/dist/sync/index.d.ts +7 -0
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +7 -0
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/pending-blob-deletions.d.ts +29 -0
- package/dist/sync/pending-blob-deletions.d.ts.map +1 -0
- package/dist/sync/pending-blob-deletions.js +116 -0
- package/dist/sync/pending-blob-deletions.js.map +1 -0
- package/dist/sync/scope-deletions.d.ts +155 -0
- package/dist/sync/scope-deletions.d.ts.map +1 -0
- package/dist/sync/scope-deletions.js +225 -0
- package/dist/sync/scope-deletions.js.map +1 -0
- package/dist/sync/tombstone.d.ts +27 -0
- package/dist/sync/tombstone.d.ts.map +1 -0
- package/dist/sync/tombstone.js +28 -0
- package/dist/sync/tombstone.js.map +1 -0
- package/dist/sync/workers/delete.d.ts +152 -31
- package/dist/sync/workers/delete.d.ts.map +1 -1
- package/dist/sync/workers/delete.js +461 -27
- package/dist/sync/workers/delete.js.map +1 -1
- package/dist/sync/workers/download.d.ts +52 -1
- package/dist/sync/workers/download.d.ts.map +1 -1
- package/dist/sync/workers/download.js +129 -2
- package/dist/sync/workers/download.js.map +1 -1
- package/dist/sync/workers/upload.d.ts +31 -1
- package/dist/sync/workers/upload.d.ts.map +1 -1
- package/dist/sync/workers/upload.js +108 -4
- package/dist/sync/workers/upload.js.map +1 -1
- package/dist/test-utils/index.d.ts +1 -0
- package/dist/test-utils/index.d.ts.map +1 -1
- package/dist/test-utils/index.js +1 -0
- package/dist/test-utils/index.js.map +1 -1
- package/dist/test-utils/memory-storage.d.ts +12 -0
- package/dist/test-utils/memory-storage.d.ts.map +1 -0
- package/dist/test-utils/memory-storage.js +146 -0
- package/dist/test-utils/memory-storage.js.map +1 -0
- package/package.json +5 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { keccak256, stringToHex } from "viem";
|
|
2
|
+
/**
|
|
3
|
+
* Durable-deletion tombstone commitments.
|
|
4
|
+
*
|
|
5
|
+
* A deletion is an owner-signed DPv2 AddData for version `current + 1` whose
|
|
6
|
+
* dataHash / metadataHash are these well-known constants. The gateway, the
|
|
7
|
+
* SDK and every personal server derive the SAME bytes from the same UTF-8
|
|
8
|
+
* labels, so a tombstone is recognisable on-chain and in every feed without
|
|
9
|
+
* any out-of-band flag. Do not change the labels: they are the cross-repo
|
|
10
|
+
* contract.
|
|
11
|
+
*
|
|
12
|
+
* TODO(vana-sdk > 3.14.0): the SDK now exports TOMBSTONE_DATA_HASH,
|
|
13
|
+
* TOMBSTONE_METADATA_HASH, isTombstoneHashes(), isDataPointTombstone() and
|
|
14
|
+
* deriveDataPointId() with these exact values. Switch to those exports and
|
|
15
|
+
* drop the local copies once the PS pins a release that ships them.
|
|
16
|
+
*/
|
|
17
|
+
export const TOMBSTONE_DATA_HASH_LABEL = "vana.data-point.tombstone.v1";
|
|
18
|
+
export const TOMBSTONE_METADATA_HASH_LABEL = "vana.data-point.tombstone.metadata.v1";
|
|
19
|
+
/** keccak256(utf8("vana.data-point.tombstone.v1")) */
|
|
20
|
+
export const TOMBSTONE_DATA_HASH = keccak256(stringToHex(TOMBSTONE_DATA_HASH_LABEL));
|
|
21
|
+
/** keccak256(utf8("vana.data-point.tombstone.metadata.v1")) */
|
|
22
|
+
export const TOMBSTONE_METADATA_HASH = keccak256(stringToHex(TOMBSTONE_METADATA_HASH_LABEL));
|
|
23
|
+
/** True when a data-point record's commitments are the tombstone constants. */
|
|
24
|
+
export function isTombstoneRecord(record) {
|
|
25
|
+
return (record.dataHash.toLowerCase() === TOMBSTONE_DATA_HASH &&
|
|
26
|
+
record.metadataHash.toLowerCase() === TOMBSTONE_METADATA_HASH);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=tombstone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tombstone.js","sourceRoot":"","sources":["../../src/sync/tombstone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAE9C;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,8BAA8B,CAAC;AACxE,MAAM,CAAC,MAAM,6BAA6B,GACxC,uCAAuC,CAAC;AAE1C,sDAAsD;AACtD,MAAM,CAAC,MAAM,mBAAmB,GAAkB,SAAS,CACzD,WAAW,CAAC,yBAAyB,CAAC,CACvC,CAAC;AAEF,+DAA+D;AAC/D,MAAM,CAAC,MAAM,uBAAuB,GAAkB,SAAS,CAC7D,WAAW,CAAC,6BAA6B,CAAC,CAC3C,CAAC;AAEF,+EAA+E;AAC/E,MAAM,UAAU,iBAAiB,CAAC,MAGjC;IACC,OAAO,CACL,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,mBAAmB;QACrD,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,uBAAuB,CAC9D,CAAC;AACJ,CAAC"}
|
|
@@ -1,42 +1,163 @@
|
|
|
1
|
-
import type { StorageAdapter } from "../../storage/adapters/interface.js";
|
|
2
|
-
import type { GatewayClient } from "@opendatalabs/vana-sdk/browser";
|
|
3
|
-
import type { ServerSigner } from "../../signing/signer.js";
|
|
4
1
|
import type { Logger } from "../../logger/index.js";
|
|
5
|
-
import type { DataStoragePort } from "../../ports/index.js";
|
|
6
|
-
|
|
2
|
+
import type { DataPointFeedPort, DataStoragePort, DeleteDataPort, PendingBlobDeletion, PendingBlobDeletionStore } from "../../ports/index.js";
|
|
3
|
+
import { type ScopeDeletionTracker } from "../scope-deletions.js";
|
|
4
|
+
/**
|
|
5
|
+
* Exact blob deletes sent per pass. vana-storage allows 30 DELETE requests
|
|
6
|
+
* per owner per 60 seconds. A DELETE request's own pass and the next sync
|
|
7
|
+
* cycle's retry pass can land inside one window, so each pass sends at most
|
|
8
|
+
* half the budget; whatever does not fit is queued and drained on later
|
|
9
|
+
* cycles, and a 429 simply re-queues its key.
|
|
10
|
+
*/
|
|
11
|
+
export declare const BLOB_DELETE_BATCH_SIZE = 15;
|
|
12
|
+
export interface DeleteScopeDeps {
|
|
7
13
|
storage: DataStoragePort;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
14
|
+
/** Data owner; absent only on an unconfigured host (no key material). */
|
|
15
|
+
serverOwner?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Remote deletion (gateway tombstone + storage blobs). Absent when the host
|
|
18
|
+
* runs without sync (no owner key material): deletion is then local-only
|
|
19
|
+
* and reported as such, never silently "durable".
|
|
20
|
+
*/
|
|
21
|
+
deleteData?: DeleteDataPort | null;
|
|
22
|
+
/** Exact-key retry markers for blob deletes that did not finish. */
|
|
23
|
+
pendingBlobDeletions?: PendingBlobDeletionStore;
|
|
24
|
+
/**
|
|
25
|
+
* Read-side deletion memory. A landed tombstone is recorded here so this
|
|
26
|
+
* replica's reads answer 410 immediately, before any sync cycle.
|
|
27
|
+
*/
|
|
28
|
+
scopeDeletions?: ScopeDeletionTracker;
|
|
29
|
+
/**
|
|
30
|
+
* Deletion-aware registry lookup, re-read right after the tombstone attempt
|
|
31
|
+
* (a registration racing a "not-registered" answer) and by the retry to
|
|
32
|
+
* expand a marker whose tombstone version was not known.
|
|
33
|
+
*/
|
|
34
|
+
dataPointFeed?: DataPointFeedPort;
|
|
12
35
|
logger: Logger;
|
|
36
|
+
now?: () => Date;
|
|
37
|
+
}
|
|
38
|
+
export type DeleteStepStatus = "ok" | "skipped" | "failed" | "deferred";
|
|
39
|
+
export interface DeleteScopeStep {
|
|
40
|
+
status: DeleteStepStatus;
|
|
41
|
+
/** Why the step was skipped (e.g. "not-registered", "sync-disabled"). */
|
|
42
|
+
reason?: string;
|
|
43
|
+
/** Error message when status is "failed". */
|
|
44
|
+
error?: string;
|
|
13
45
|
}
|
|
14
|
-
export interface
|
|
46
|
+
export interface DeleteScopeResult {
|
|
15
47
|
scope: string;
|
|
16
|
-
/**
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
48
|
+
/** DPv2 identity: keccak256(abi.encode(owner, scope)); null without an owner. */
|
|
49
|
+
dataPointId: string | null;
|
|
50
|
+
/**
|
|
51
|
+
* True once the gateway holds the tombstone (or never held the point at
|
|
52
|
+
* all): sync can no longer resurrect the scope on any replica. False when
|
|
53
|
+
* only the local copy was removed.
|
|
54
|
+
*/
|
|
55
|
+
durable: boolean;
|
|
56
|
+
steps: {
|
|
57
|
+
gateway: DeleteScopeStep & {
|
|
58
|
+
/** Tombstone version at the gateway; null when it did not report one. */
|
|
59
|
+
version?: string | null;
|
|
60
|
+
deletedAt?: string | null;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Storage step. "ok": every blob key the tombstone covers is gone.
|
|
64
|
+
* "deferred": some keys are queued for later passes (rate-limit batch,
|
|
65
|
+
* or a tombstone version the gateway did not report). "failed": at
|
|
66
|
+
* least one delete errored; the failed keys are queued too.
|
|
67
|
+
*/
|
|
68
|
+
storage: DeleteScopeStep & {
|
|
69
|
+
blobsDeleted?: number;
|
|
70
|
+
blobsMissing?: number;
|
|
71
|
+
blobsPending?: number;
|
|
72
|
+
};
|
|
73
|
+
local: DeleteScopeStep & {
|
|
74
|
+
deletedCount?: number;
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* True when the tombstone landed but blob deletion did not finish: exact
|
|
79
|
+
* retry markers were recorded and later sync cycles finish them.
|
|
80
|
+
*/
|
|
81
|
+
pendingBlobDeletion: boolean;
|
|
82
|
+
}
|
|
83
|
+
export interface BlobDeletionPlan {
|
|
84
|
+
/**
|
|
85
|
+
* Exact keys of covered local entries that lie outside the registry range:
|
|
86
|
+
* an upload that landed under a key the registry never saw (crashed before
|
|
87
|
+
* registering, or rebased later) is still deleted data. Bounded by the
|
|
88
|
+
* local index size.
|
|
89
|
+
*/
|
|
90
|
+
keys: string[];
|
|
91
|
+
/**
|
|
92
|
+
* Every registry version up to and including the tombstone's, as inclusive
|
|
93
|
+
* bounds. Versions are a dense, strictly increasing integer sequence per
|
|
94
|
+
* scope and an absent key answers 404, so the range is exact and complete
|
|
95
|
+
* across replicas without listing storage. Kept as bounds, never
|
|
96
|
+
* materialised: a large tombstone version costs nothing until its keys are
|
|
97
|
+
* actually sent, a batch at a time. Null without a tombstone version.
|
|
98
|
+
*/
|
|
99
|
+
range: {
|
|
100
|
+
from: string;
|
|
101
|
+
to: string;
|
|
102
|
+
} | null;
|
|
24
103
|
}
|
|
25
104
|
/**
|
|
26
|
-
*
|
|
105
|
+
* The storage keys a tombstone covers for `scope`. A re-add registered after
|
|
106
|
+
* the tombstone lives under a higher version key, so it is never in this set
|
|
107
|
+
* and survives by construction. With no tombstone version (never registered,
|
|
108
|
+
* or the gateway did not report one) only the local entries' keys can be
|
|
109
|
+
* enumerated.
|
|
110
|
+
*/
|
|
111
|
+
export declare function planBlobDeletions(storage: Pick<DataStoragePort, "listVersions">, scope: string, tombstoneVersionValue: string | null): BlobDeletionPlan;
|
|
112
|
+
/**
|
|
113
|
+
* Durable scope deletion, in the only order that cannot resurrect data:
|
|
114
|
+
*
|
|
115
|
+
* 1. gateway tombstone (owner-signed AddData at current + 1; the fact)
|
|
116
|
+
* 2. storage blobs (exact keys of every version the tombstone covers)
|
|
117
|
+
* 3. local copy (index rows + files + sidecars)
|
|
27
118
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
119
|
+
* The local delete never runs before the gateway has acknowledged: until the
|
|
120
|
+
* registry says "deleted", the next sync cycle would re-pull the point from
|
|
121
|
+
* the still-live row. Step 2 deletes exact per-version keys, never the scope
|
|
122
|
+
* prefix, so a re-add another replica lands at any time keeps its ciphertext
|
|
123
|
+
* (it is registered above the tombstone version and stored under that key).
|
|
124
|
+
* Keys that could not be deleted in this pass are queued as exact retry
|
|
125
|
+
* markers; step 3 does not wait for them because the tombstone already makes
|
|
126
|
+
* the deletion stick.
|
|
33
127
|
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
|
|
128
|
+
* Not serialised here: the sync manager runs this under the same lock as its
|
|
129
|
+
* upload/download cycles so a delete cannot interleave with an upload of the
|
|
130
|
+
* same scope on this replica (see engine/sync-manager.ts). Uploads racing on
|
|
131
|
+
* another replica are handled by the upload worker's deletion guard and the
|
|
132
|
+
* download worker's reconcile.
|
|
133
|
+
*/
|
|
134
|
+
export declare function deleteScope(deps: DeleteScopeDeps, scope: string): Promise<DeleteScopeResult>;
|
|
135
|
+
export interface RetryPendingBlobDeletionsResult {
|
|
136
|
+
/** Exact keys finished this pass (deleted, or already absent). */
|
|
137
|
+
completed: PendingBlobDeletion[];
|
|
138
|
+
/** Unexpanded markers dropped because the scope is live again. */
|
|
139
|
+
superseded: string[];
|
|
140
|
+
failed: Array<{
|
|
141
|
+
scope: string;
|
|
142
|
+
version: string | null;
|
|
143
|
+
error: string;
|
|
144
|
+
}>;
|
|
145
|
+
/** Markers still queued after this pass (a range counts once). */
|
|
146
|
+
remaining: number;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Finish blob deletions whose tombstone landed but whose storage deletes did
|
|
150
|
+
* not: one batch of exact keys per sync cycle, taken from exact-key markers
|
|
151
|
+
* first and then from the head of range markers (which advance in place),
|
|
152
|
+
* each key retried until storage acknowledges (2xx or 404). Unexpanded
|
|
153
|
+
* markers (the gateway did not report a tombstone version at delete time)
|
|
154
|
+
* are expanded from the registry first; if the registry shows the scope live
|
|
155
|
+
* again the old tombstone's version is unknowable, so the marker is dropped
|
|
156
|
+
* and the pre-tombstone ciphertext stays (owner-decryptable only) until the
|
|
157
|
+
* next delete of that scope.
|
|
40
158
|
*/
|
|
41
|
-
export declare function
|
|
159
|
+
export declare function retryPendingBlobDeletions(deps: Pick<DeleteScopeDeps, "deleteData" | "pendingBlobDeletions" | "dataPointFeed" | "serverOwner" | "logger"> & {
|
|
160
|
+
/** Local index, for expanding unexpanded markers into exact keys. */
|
|
161
|
+
storage?: Pick<DataStoragePort, "listVersions">;
|
|
162
|
+
}): Promise<RetryPendingBlobDeletionsResult>;
|
|
42
163
|
//# sourceMappingURL=delete.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/sync/workers/delete.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/sync/workers/delete.ts"],"names":[],"mappings":"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"}
|