@opendatalabs/personal-server-ts-core 1.6.0 → 1.8.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 +53 -2
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +300 -25
- package/dist/api/index.js.map +1 -1
- package/dist/contracts/data.d.ts +30 -1
- package/dist/contracts/data.d.ts.map +1 -1
- package/dist/contracts/data.js +126 -33
- package/dist/contracts/data.js.map +1 -1
- package/dist/errors/catalog.d.ts +40 -0
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/catalog.js +53 -0
- package/dist/errors/catalog.js.map +1 -1
- package/dist/lineage/attestation.d.ts +42 -0
- package/dist/lineage/attestation.d.ts.map +1 -0
- package/dist/lineage/attestation.js +25 -0
- package/dist/lineage/attestation.js.map +1 -0
- package/dist/lineage/gateway.d.ts +105 -0
- package/dist/lineage/gateway.d.ts.map +1 -0
- package/dist/lineage/gateway.js +242 -0
- package/dist/lineage/gateway.js.map +1 -0
- package/dist/lineage/index.d.ts +5 -0
- package/dist/lineage/index.d.ts.map +1 -0
- package/dist/lineage/index.js +5 -0
- package/dist/lineage/index.js.map +1 -0
- package/dist/lineage/lineage.d.ts +141 -0
- package/dist/lineage/lineage.d.ts.map +1 -0
- package/dist/lineage/lineage.js +255 -0
- package/dist/lineage/lineage.js.map +1 -0
- 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/signing/request-signer.d.ts +2 -0
- package/dist/signing/request-signer.d.ts.map +1 -1
- package/dist/signing/request-signer.js +1 -0
- package/dist/signing/request-signer.js.map +1 -1
- package/dist/signing/signer.d.ts +8 -0
- package/dist/signing/signer.d.ts.map +1 -1
- package/dist/signing/signer.js +9 -0
- package/dist/signing/signer.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/data-point-id.d.ts +7 -0
- package/dist/sync/data-point-id.d.ts.map +1 -0
- package/dist/sync/data-point-id.js +16 -0
- package/dist/sync/data-point-id.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 +38 -1
- package/dist/sync/workers/download.d.ts.map +1 -1
- package/dist/sync/workers/download.js +106 -2
- package/dist/sync/workers/download.js.map +1 -1
- package/dist/sync/workers/upload.d.ts +41 -7
- package/dist/sync/workers/upload.d.ts.map +1 -1
- package/dist/sync/workers/upload.js +147 -21
- package/dist/sync/workers/upload.js.map +1 -1
- package/dist/write/attribution.d.ts +6 -4
- package/dist/write/attribution.d.ts.map +1 -1
- package/dist/write/attribution.js +51 -3
- package/dist/write/attribution.js.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derivative data: lineage on the write path.
|
|
3
|
+
*
|
|
4
|
+
* A derivative is an ordinary write whose body names the data points it was
|
|
5
|
+
* computed from. The caller's `lineage` field (top level of a JSON body, or
|
|
6
|
+
* inside the `X-Vana-Metadata` object of a binary write) is a list of data
|
|
7
|
+
* point ids, `keccak256(abi.encode(owner, scope))`. The Personal Server
|
|
8
|
+
* validates it against the owner's own data points and mirrors it into the
|
|
9
|
+
* envelope `data` under the reserved `$lineage` key, the same in-`data`
|
|
10
|
+
* marker idiom as `$writtenBy` and `$binary`, so lineage rides the unchanged
|
|
11
|
+
* encrypt / upload / register path and `metadataHash` commits to it.
|
|
12
|
+
*
|
|
13
|
+
* The caller's `lineage` field is left in the record untouched: for session
|
|
14
|
+
* writes it is inside the bytes the builder signed, so the lineage claim is
|
|
15
|
+
* builder-signed and `$lineage` is the server-validated mirror of it.
|
|
16
|
+
*
|
|
17
|
+
* See docs/derivative-data-api.md for the wire contract.
|
|
18
|
+
*/
|
|
19
|
+
import type { DataStoragePort } from "../ports/index.js";
|
|
20
|
+
/** Reserved key inside the envelope `data` record for validated lineage. */
|
|
21
|
+
export declare const LINEAGE_KEY: "$lineage";
|
|
22
|
+
/** The caller-facing field name (JSON body top level / binary metadata). */
|
|
23
|
+
export declare const LINEAGE_FIELD: "lineage";
|
|
24
|
+
/** Upper bound on sources per record; keeps validation and hashing bounded. */
|
|
25
|
+
export declare const MAX_LINEAGE_SOURCES = 256;
|
|
26
|
+
/** Page size of the local index scan the source resolver runs. */
|
|
27
|
+
export declare const LOCAL_SCOPE_SCAN_PAGE = 1000;
|
|
28
|
+
export interface StoredLineage {
|
|
29
|
+
/** Validated, lowercased source data point ids in the order given. */
|
|
30
|
+
sources: `0x${string}`[];
|
|
31
|
+
/** ISO timestamp the Personal Server validated and stamped the lineage. */
|
|
32
|
+
writtenAt: string;
|
|
33
|
+
}
|
|
34
|
+
/** A source as the resolver saw it (local index or gateway). */
|
|
35
|
+
export interface ResolvedLineageSource {
|
|
36
|
+
dataPointId: `0x${string}`;
|
|
37
|
+
scope: string;
|
|
38
|
+
/** Null while the source is only known locally (not registered yet). */
|
|
39
|
+
version: string | null;
|
|
40
|
+
deletedAt: string | null;
|
|
41
|
+
}
|
|
42
|
+
/** The subset of a gateway data-point record the resolver needs. */
|
|
43
|
+
export interface LineageDataPointRecord {
|
|
44
|
+
dataPointId: string;
|
|
45
|
+
ownerAddress: string;
|
|
46
|
+
scope: string;
|
|
47
|
+
version: string;
|
|
48
|
+
deletedAt: string | null;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Gateway lookup for a source that is not in the local index. Must include
|
|
52
|
+
* deleted (tombstoned) data points: a deleted source is still a valid
|
|
53
|
+
* lineage target, it is only reported as deleted when the lineage is walked.
|
|
54
|
+
*/
|
|
55
|
+
export interface LineageSourceLookup {
|
|
56
|
+
getDataPoint(dataPointId: string): Promise<LineageDataPointRecord | null>;
|
|
57
|
+
}
|
|
58
|
+
export declare function hasReservedLineageKey(data: Record<string, unknown>): boolean;
|
|
59
|
+
/** Stamp validated lineage into an envelope `data` record. */
|
|
60
|
+
export declare function stampLineage(data: Record<string, unknown>, lineage: StoredLineage): Record<string, unknown>;
|
|
61
|
+
/**
|
|
62
|
+
* The stored `$lineage` of a record, or null for a root record. Tolerates
|
|
63
|
+
* hand-crafted envelopes: anything that is not the exact stamped shape is
|
|
64
|
+
* treated as no lineage rather than thrown on.
|
|
65
|
+
*/
|
|
66
|
+
export declare class StoredLineageMalformedError extends Error {
|
|
67
|
+
constructor(detail: string);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Absent `$lineage` (or a data object that is not a record) is `null`: no
|
|
71
|
+
* statement. A PRESENT but malformed `$lineage` throws: a corrupted or
|
|
72
|
+
* hand-crafted derivative must fail closed, never fall through the root
|
|
73
|
+
* path and get registered as if it made no lineage statement.
|
|
74
|
+
*/
|
|
75
|
+
export declare function readStoredLineage(data: Record<string, unknown> | undefined): StoredLineage | null;
|
|
76
|
+
/**
|
|
77
|
+
* The caller's `lineage` field from a JSON body or a binary write's parsed
|
|
78
|
+
* metadata. `undefined` when the container is not an object or carries no
|
|
79
|
+
* such field, so a bare-string metadata header or a lineage-less body is a
|
|
80
|
+
* root record.
|
|
81
|
+
*/
|
|
82
|
+
export declare function extractLineageField(container: unknown): unknown;
|
|
83
|
+
/**
|
|
84
|
+
* Parse the caller's `lineage` value: an array of distinct 0x-prefixed
|
|
85
|
+
* 32-byte hex strings, at most MAX_LINEAGE_SOURCES long. Ids are lowercased
|
|
86
|
+
* so equal ids compare equal wherever they are stored. Throws
|
|
87
|
+
* LineageInvalidError (400).
|
|
88
|
+
*/
|
|
89
|
+
export declare function parseLineageSources(value: unknown): `0x${string}`[];
|
|
90
|
+
/** First dot-segment of a scope (`chatgpt` for `chatgpt.conversations`). */
|
|
91
|
+
export declare function scopeNamespace(scope: string): string;
|
|
92
|
+
/**
|
|
93
|
+
* The naming rule. Grant patterns are exact, `prefix.*` or `*`; `prefix.*`
|
|
94
|
+
* covers every scope that starts with `prefix.`. A derived scope and a
|
|
95
|
+
* source scope are both covered by the same non-universal pattern exactly
|
|
96
|
+
* when they share their first segment, and that is the one way the current
|
|
97
|
+
* grammar can leak across a lineage edge (a grant on `chatgpt.*` would read
|
|
98
|
+
* both `chatgpt.conversations` and a derivative named `chatgpt.summary`).
|
|
99
|
+
* `*` reads everything by definition and is not a lineage leak.
|
|
100
|
+
*/
|
|
101
|
+
export declare function derivedScopeViolatesNaming(derivedScope: string, sourceScope: string): boolean;
|
|
102
|
+
export declare function assertDerivedScopeNaming(derivedScope: string, sourceScopes: readonly string[]): void;
|
|
103
|
+
export interface ResolveLineageSourcesInput {
|
|
104
|
+
/** The derived record's scope. */
|
|
105
|
+
scope: string;
|
|
106
|
+
sources: readonly `0x${string}`[];
|
|
107
|
+
serverOwner: `0x${string}`;
|
|
108
|
+
storage: Pick<DataStoragePort, "listScopes">;
|
|
109
|
+
/** Absent = sources must be in the local index. */
|
|
110
|
+
gateway?: LineageSourceLookup;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Resolve every source id to a data point of this owner. The local index is
|
|
114
|
+
* consulted first (`keccak256(owner, scope)` over the server's own scopes,
|
|
115
|
+
* so an unsynced local scope is a valid source), then the gateway with
|
|
116
|
+
* deleted points included. An id that resolves to nothing, or to another
|
|
117
|
+
* owner's data point, fails the whole write with 422
|
|
118
|
+
* LINEAGE_SOURCE_UNKNOWN listing every offending id; a gateway that cannot
|
|
119
|
+
* be reached fails with 502 so the builder retries instead of being told
|
|
120
|
+
* its source does not exist.
|
|
121
|
+
*/
|
|
122
|
+
export declare function resolveLineageSources(input: ResolveLineageSourcesInput): Promise<ResolvedLineageSource[]>;
|
|
123
|
+
export interface PrepareLineageInput {
|
|
124
|
+
scope: string;
|
|
125
|
+
/** The raw caller value (`body.lineage` / `metadata.lineage`). */
|
|
126
|
+
field: unknown;
|
|
127
|
+
serverOwner: `0x${string}` | undefined;
|
|
128
|
+
storage: Pick<DataStoragePort, "listScopes">;
|
|
129
|
+
gateway?: LineageSourceLookup;
|
|
130
|
+
now: () => Date;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Validate a write's lineage end to end (shape, sources, naming rule) and
|
|
134
|
+
* produce the `$lineage` record to stamp. An empty list is an EXPLICIT root
|
|
135
|
+
* statement: it is stamped (`sources: []`) and registered as an attested
|
|
136
|
+
* root, distinct from an absent field, which makes no lineage statement.
|
|
137
|
+
* Throws ProtocolErrors; callers on the write path let them propagate
|
|
138
|
+
* before anything is stored.
|
|
139
|
+
*/
|
|
140
|
+
export declare function prepareLineage(input: PrepareLineageInput): Promise<StoredLineage>;
|
|
141
|
+
//# sourceMappingURL=lineage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineage.d.ts","sourceRoot":"","sources":["../../src/lineage/lineage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derivative data: lineage on the write path.
|
|
3
|
+
*
|
|
4
|
+
* A derivative is an ordinary write whose body names the data points it was
|
|
5
|
+
* computed from. The caller's `lineage` field (top level of a JSON body, or
|
|
6
|
+
* inside the `X-Vana-Metadata` object of a binary write) is a list of data
|
|
7
|
+
* point ids, `keccak256(abi.encode(owner, scope))`. The Personal Server
|
|
8
|
+
* validates it against the owner's own data points and mirrors it into the
|
|
9
|
+
* envelope `data` under the reserved `$lineage` key, the same in-`data`
|
|
10
|
+
* marker idiom as `$writtenBy` and `$binary`, so lineage rides the unchanged
|
|
11
|
+
* encrypt / upload / register path and `metadataHash` commits to it.
|
|
12
|
+
*
|
|
13
|
+
* The caller's `lineage` field is left in the record untouched: for session
|
|
14
|
+
* writes it is inside the bytes the builder signed, so the lineage claim is
|
|
15
|
+
* builder-signed and `$lineage` is the server-validated mirror of it.
|
|
16
|
+
*
|
|
17
|
+
* See docs/derivative-data-api.md for the wire contract.
|
|
18
|
+
*/
|
|
19
|
+
import { LineageInvalidError, LineageScopeUnderSourcePrefixError, LineageSourceLookupFailedError, LineageSourceUnknownError, ServerNotConfiguredError, } from "../errors/catalog.js";
|
|
20
|
+
import { computeDataPointId } from "../sync/data-point-id.js";
|
|
21
|
+
/** Reserved key inside the envelope `data` record for validated lineage. */
|
|
22
|
+
export const LINEAGE_KEY = "$lineage";
|
|
23
|
+
/** The caller-facing field name (JSON body top level / binary metadata). */
|
|
24
|
+
export const LINEAGE_FIELD = "lineage";
|
|
25
|
+
/** Upper bound on sources per record; keeps validation and hashing bounded. */
|
|
26
|
+
export const MAX_LINEAGE_SOURCES = 256;
|
|
27
|
+
/** Page size of the local index scan the source resolver runs. */
|
|
28
|
+
export const LOCAL_SCOPE_SCAN_PAGE = 1000;
|
|
29
|
+
const BYTES32_HEX = /^0x[0-9a-fA-F]{64}$/;
|
|
30
|
+
function isRecord(value) {
|
|
31
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
32
|
+
}
|
|
33
|
+
export function hasReservedLineageKey(data) {
|
|
34
|
+
return Object.prototype.hasOwnProperty.call(data, LINEAGE_KEY);
|
|
35
|
+
}
|
|
36
|
+
/** Stamp validated lineage into an envelope `data` record. */
|
|
37
|
+
export function stampLineage(data, lineage) {
|
|
38
|
+
return { ...data, [LINEAGE_KEY]: lineage };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The stored `$lineage` of a record, or null for a root record. Tolerates
|
|
42
|
+
* hand-crafted envelopes: anything that is not the exact stamped shape is
|
|
43
|
+
* treated as no lineage rather than thrown on.
|
|
44
|
+
*/
|
|
45
|
+
export class StoredLineageMalformedError extends Error {
|
|
46
|
+
constructor(detail) {
|
|
47
|
+
super(`Stored $lineage is malformed: ${detail}`);
|
|
48
|
+
this.name = "StoredLineageMalformedError";
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Absent `$lineage` (or a data object that is not a record) is `null`: no
|
|
53
|
+
* statement. A PRESENT but malformed `$lineage` throws: a corrupted or
|
|
54
|
+
* hand-crafted derivative must fail closed, never fall through the root
|
|
55
|
+
* path and get registered as if it made no lineage statement.
|
|
56
|
+
*/
|
|
57
|
+
export function readStoredLineage(data) {
|
|
58
|
+
if (!isRecord(data) || !(LINEAGE_KEY in data))
|
|
59
|
+
return null;
|
|
60
|
+
const value = data[LINEAGE_KEY];
|
|
61
|
+
if (!isRecord(value)) {
|
|
62
|
+
throw new StoredLineageMalformedError("not an object");
|
|
63
|
+
}
|
|
64
|
+
const sources = value.sources;
|
|
65
|
+
if (!Array.isArray(sources) ||
|
|
66
|
+
!sources.every((id) => typeof id === "string" && BYTES32_HEX.test(id))) {
|
|
67
|
+
throw new StoredLineageMalformedError("sources is not a list of bytes32 ids");
|
|
68
|
+
}
|
|
69
|
+
if (typeof value.writtenAt !== "string") {
|
|
70
|
+
throw new StoredLineageMalformedError("writtenAt is not a string");
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
sources: sources.map((id) => id.toLowerCase()),
|
|
74
|
+
writtenAt: value.writtenAt,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* The caller's `lineage` field from a JSON body or a binary write's parsed
|
|
79
|
+
* metadata. `undefined` when the container is not an object or carries no
|
|
80
|
+
* such field, so a bare-string metadata header or a lineage-less body is a
|
|
81
|
+
* root record.
|
|
82
|
+
*/
|
|
83
|
+
export function extractLineageField(container) {
|
|
84
|
+
if (!isRecord(container))
|
|
85
|
+
return undefined;
|
|
86
|
+
return container[LINEAGE_FIELD];
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Parse the caller's `lineage` value: an array of distinct 0x-prefixed
|
|
90
|
+
* 32-byte hex strings, at most MAX_LINEAGE_SOURCES long. Ids are lowercased
|
|
91
|
+
* so equal ids compare equal wherever they are stored. Throws
|
|
92
|
+
* LineageInvalidError (400).
|
|
93
|
+
*/
|
|
94
|
+
export function parseLineageSources(value) {
|
|
95
|
+
if (!Array.isArray(value)) {
|
|
96
|
+
throw new LineageInvalidError(`${LINEAGE_FIELD} must be an array of data point ids (0x-prefixed 32-byte hex)`);
|
|
97
|
+
}
|
|
98
|
+
if (value.length > MAX_LINEAGE_SOURCES) {
|
|
99
|
+
throw new LineageInvalidError(`${LINEAGE_FIELD} lists ${value.length} sources; the maximum is ${MAX_LINEAGE_SOURCES}`, { max: MAX_LINEAGE_SOURCES, count: value.length });
|
|
100
|
+
}
|
|
101
|
+
const seen = new Set();
|
|
102
|
+
const sources = [];
|
|
103
|
+
for (const entry of value) {
|
|
104
|
+
if (typeof entry !== "string" || !BYTES32_HEX.test(entry)) {
|
|
105
|
+
throw new LineageInvalidError(`${LINEAGE_FIELD} entries must be 0x-prefixed 32-byte hex data point ids`, { entry: typeof entry === "string" ? entry : typeof entry });
|
|
106
|
+
}
|
|
107
|
+
const id = entry.toLowerCase();
|
|
108
|
+
if (seen.has(id)) {
|
|
109
|
+
throw new LineageInvalidError(`${LINEAGE_FIELD} lists the same source twice`, { duplicate: id });
|
|
110
|
+
}
|
|
111
|
+
seen.add(id);
|
|
112
|
+
sources.push(id);
|
|
113
|
+
}
|
|
114
|
+
return sources;
|
|
115
|
+
}
|
|
116
|
+
/** First dot-segment of a scope (`chatgpt` for `chatgpt.conversations`). */
|
|
117
|
+
export function scopeNamespace(scope) {
|
|
118
|
+
const dot = scope.indexOf(".");
|
|
119
|
+
return dot === -1 ? scope : scope.slice(0, dot);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* The naming rule. Grant patterns are exact, `prefix.*` or `*`; `prefix.*`
|
|
123
|
+
* covers every scope that starts with `prefix.`. A derived scope and a
|
|
124
|
+
* source scope are both covered by the same non-universal pattern exactly
|
|
125
|
+
* when they share their first segment, and that is the one way the current
|
|
126
|
+
* grammar can leak across a lineage edge (a grant on `chatgpt.*` would read
|
|
127
|
+
* both `chatgpt.conversations` and a derivative named `chatgpt.summary`).
|
|
128
|
+
* `*` reads everything by definition and is not a lineage leak.
|
|
129
|
+
*/
|
|
130
|
+
export function derivedScopeViolatesNaming(derivedScope, sourceScope) {
|
|
131
|
+
return scopeNamespace(derivedScope) === scopeNamespace(sourceScope);
|
|
132
|
+
}
|
|
133
|
+
export function assertDerivedScopeNaming(derivedScope, sourceScopes) {
|
|
134
|
+
for (const sourceScope of sourceScopes) {
|
|
135
|
+
if (derivedScopeViolatesNaming(derivedScope, sourceScope)) {
|
|
136
|
+
throw new LineageScopeUnderSourcePrefixError({
|
|
137
|
+
scope: derivedScope,
|
|
138
|
+
sourceScope,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Resolve every source id to a data point of this owner. The local index is
|
|
145
|
+
* consulted first (`keccak256(owner, scope)` over the server's own scopes,
|
|
146
|
+
* so an unsynced local scope is a valid source), then the gateway with
|
|
147
|
+
* deleted points included. An id that resolves to nothing, or to another
|
|
148
|
+
* owner's data point, fails the whole write with 422
|
|
149
|
+
* LINEAGE_SOURCE_UNKNOWN listing every offending id; a gateway that cannot
|
|
150
|
+
* be reached fails with 502 so the builder retries instead of being told
|
|
151
|
+
* its source does not exist.
|
|
152
|
+
*/
|
|
153
|
+
export async function resolveLineageSources(input) {
|
|
154
|
+
const ownId = computeDataPointId(input.serverOwner, input.scope);
|
|
155
|
+
const self = input.sources.find((id) => id === ownId);
|
|
156
|
+
if (self) {
|
|
157
|
+
throw new LineageInvalidError("A record cannot list its own data point as a lineage source", { dataPointId: self });
|
|
158
|
+
}
|
|
159
|
+
const local = localScopesById(input.storage, input.serverOwner, new Set(input.sources));
|
|
160
|
+
const resolved = [];
|
|
161
|
+
const unknown = [];
|
|
162
|
+
for (const dataPointId of input.sources) {
|
|
163
|
+
const localScope = local.get(dataPointId);
|
|
164
|
+
if (localScope !== undefined) {
|
|
165
|
+
resolved.push({
|
|
166
|
+
dataPointId,
|
|
167
|
+
scope: localScope,
|
|
168
|
+
version: null,
|
|
169
|
+
deletedAt: null,
|
|
170
|
+
});
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
if (!input.gateway) {
|
|
174
|
+
unknown.push(dataPointId);
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
let record;
|
|
178
|
+
try {
|
|
179
|
+
record = await input.gateway.getDataPoint(dataPointId);
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
throw new LineageSourceLookupFailedError({
|
|
183
|
+
dataPointId,
|
|
184
|
+
error: err instanceof Error ? err.message : String(err),
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
if (!record ||
|
|
188
|
+
record.ownerAddress.toLowerCase() !== input.serverOwner.toLowerCase()) {
|
|
189
|
+
unknown.push(dataPointId);
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
resolved.push({
|
|
193
|
+
dataPointId,
|
|
194
|
+
scope: record.scope,
|
|
195
|
+
version: record.version,
|
|
196
|
+
deletedAt: record.deletedAt,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
if (unknown.length > 0) {
|
|
200
|
+
throw new LineageSourceUnknownError({ unknown });
|
|
201
|
+
}
|
|
202
|
+
return resolved;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* `dataPointId -> scope` for the server's own scopes that appear in
|
|
206
|
+
* `wanted`. Pages through the whole local index (an unsynced scope is a
|
|
207
|
+
* valid source wherever it sorts), stopping early once every wanted id has
|
|
208
|
+
* been found.
|
|
209
|
+
*/
|
|
210
|
+
function localScopesById(storage, serverOwner, wanted) {
|
|
211
|
+
const byId = new Map();
|
|
212
|
+
for (let offset = 0;; offset += LOCAL_SCOPE_SCAN_PAGE) {
|
|
213
|
+
const { scopes, total } = storage.listScopes({
|
|
214
|
+
limit: LOCAL_SCOPE_SCAN_PAGE,
|
|
215
|
+
offset,
|
|
216
|
+
});
|
|
217
|
+
for (const summary of scopes) {
|
|
218
|
+
const id = computeDataPointId(serverOwner, summary.scope);
|
|
219
|
+
if (wanted.has(id))
|
|
220
|
+
byId.set(id, summary.scope);
|
|
221
|
+
}
|
|
222
|
+
if (byId.size === wanted.size ||
|
|
223
|
+
scopes.length === 0 ||
|
|
224
|
+
offset + scopes.length >= total) {
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return byId;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Validate a write's lineage end to end (shape, sources, naming rule) and
|
|
232
|
+
* produce the `$lineage` record to stamp. An empty list is an EXPLICIT root
|
|
233
|
+
* statement: it is stamped (`sources: []`) and registered as an attested
|
|
234
|
+
* root, distinct from an absent field, which makes no lineage statement.
|
|
235
|
+
* Throws ProtocolErrors; callers on the write path let them propagate
|
|
236
|
+
* before anything is stored.
|
|
237
|
+
*/
|
|
238
|
+
export async function prepareLineage(input) {
|
|
239
|
+
const sources = parseLineageSources(input.field);
|
|
240
|
+
if (!input.serverOwner) {
|
|
241
|
+
throw new ServerNotConfiguredError({
|
|
242
|
+
reason: "serverOwner is required to validate lineage sources",
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
const resolved = await resolveLineageSources({
|
|
246
|
+
scope: input.scope,
|
|
247
|
+
sources,
|
|
248
|
+
serverOwner: input.serverOwner,
|
|
249
|
+
storage: input.storage,
|
|
250
|
+
gateway: input.gateway,
|
|
251
|
+
});
|
|
252
|
+
assertDerivedScopeNaming(input.scope, resolved.map((source) => source.scope));
|
|
253
|
+
return { sources, writtenAt: input.now().toISOString() };
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=lineage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineage.js","sourceRoot":"","sources":["../../src/lineage/lineage.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,13 @@ export interface AccessLogEntry {
|
|
|
2
2
|
logId: string;
|
|
3
3
|
grantId: string;
|
|
4
4
|
builder: string;
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* "read" - a builder read served under a grant.
|
|
7
|
+
* "write" - a builder write served under a write grant.
|
|
8
|
+
* "delete" - the owner durably deleted a scope (grantId "owner", builder =
|
|
9
|
+
* owner address).
|
|
10
|
+
*/
|
|
11
|
+
action: "read" | "write" | "delete";
|
|
6
12
|
scope: string;
|
|
7
13
|
timestamp: string;
|
|
8
14
|
ipAddress: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-log.d.ts","sourceRoot":"","sources":["../../src/logging/access-log.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"access-log.d.ts","sourceRoot":"","sources":["../../src/logging/access-log.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-client.d.ts","sourceRoot":"","sources":["../../src/mcp/read-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EACV,iBAAiB,EACjB,uBAAuB,EACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAInD,OAAO,
|
|
1
|
+
{"version":3,"file":"read-client.d.ts","sourceRoot":"","sources":["../../src/mcp/read-client.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/read-client.js
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
import { decodeDataBlockCursor } from "../storage/blocks/index.js";
|
|
21
21
|
import { bytesToBase64, parseMetadataHeader } from "../contracts/binary.js";
|
|
22
22
|
import { signMcpGranteeRequest } from "./grantee.js";
|
|
23
|
-
import { handlePersonalServerDataRequest, reportPersonalServerReadFulfillment, } from "../api/index.js";
|
|
23
|
+
import { assertScopeNotDeleted, handlePersonalServerDataRequest, reportPersonalServerReadFulfillment, resolveReadDeletion, } from "../api/index.js";
|
|
24
24
|
import { ProtocolError } from "../errors/catalog.js";
|
|
25
25
|
export class McpDataReadError extends Error {
|
|
26
26
|
status;
|
|
@@ -36,6 +36,21 @@ export class McpDataReadError extends Error {
|
|
|
36
36
|
}
|
|
37
37
|
export function createMcpDataReadClient(options) {
|
|
38
38
|
const basePath = options.basePath ?? "/v1/data";
|
|
39
|
+
/**
|
|
40
|
+
* Same deletion gate as GET /v1/data/:scope, surfaced as the MCP error
|
|
41
|
+
* shape. Runs before `authorizeScopeRead`, which may settle payment.
|
|
42
|
+
*/
|
|
43
|
+
async function assertScopeReadable(scope, entry) {
|
|
44
|
+
try {
|
|
45
|
+
await assertScopeNotDeleted(options.dataApiDeps, scope, entry);
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
if (err instanceof ProtocolError) {
|
|
49
|
+
throw new McpDataReadError(err.code, err.toJSON());
|
|
50
|
+
}
|
|
51
|
+
throw err;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
39
54
|
/**
|
|
40
55
|
* Sign a grantee request for `scope` and run the same policy check
|
|
41
56
|
* `/v1/data/:scope` runs. Shared by every grant-gated read below so none of
|
|
@@ -131,6 +146,11 @@ export function createMcpDataReadClient(options) {
|
|
|
131
146
|
const entry = storage.findEntry({ scope });
|
|
132
147
|
if (!entry)
|
|
133
148
|
return null;
|
|
149
|
+
// A tombstoned scope is absent for discovery purposes, exactly like a
|
|
150
|
+
// scope with no local copy; the same gate the HTTP read applies.
|
|
151
|
+
if (await resolveReadDeletion(options.dataApiDeps, scope, entry)) {
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
134
154
|
const hasBlocks = typeof storage.hasScopeBlocks === "function"
|
|
135
155
|
? await storage.hasScopeBlocks(scope, entry.collectedAt)
|
|
136
156
|
: false;
|
|
@@ -161,6 +181,9 @@ export function createMcpDataReadClient(options) {
|
|
|
161
181
|
message: `No data found for scope "${scope}"`,
|
|
162
182
|
});
|
|
163
183
|
}
|
|
184
|
+
// Before authorizeScopeRead: a payment-enforcing auth port settles
|
|
185
|
+
// x402 there, and deleted data must never be charged for.
|
|
186
|
+
await assertScopeReadable(scope, selectedEntry);
|
|
164
187
|
const { request, authResult } = await authorizeScopeRead({
|
|
165
188
|
scope,
|
|
166
189
|
grantId,
|
|
@@ -230,6 +253,7 @@ export function createMcpDataReadClient(options) {
|
|
|
230
253
|
message: `No data found for scope "${scope}"`,
|
|
231
254
|
});
|
|
232
255
|
}
|
|
256
|
+
await assertScopeReadable(scope, selectedEntry);
|
|
233
257
|
const { request, authResult } = await authorizeScopeRead({
|
|
234
258
|
scope,
|
|
235
259
|
grantId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-client.js","sourceRoot":"","sources":["../../src/mcp/read-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EACL,+BAA+B,EAC/B,mCAAmC,GAEpC,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAsIrD,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAEhC;IACA;IAFT,YACS,MAAc,EACd,IAAa;QAEpB,KAAK,CACH,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,IAAI;YAC1D,CAAC,CAAC,MAAM,CACH,IAAyC,CAAC,KAAK,EAAE,OAAO;gBACvD,gCAAgC,MAAM,GAAG,CAC5C;YACH,CAAC,CAAC,gCAAgC,MAAM,GAAG,CAC9C,CAAC;QAVK,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAS;IAUtB,CAAC;CACF;AAkCD,MAAM,UAAU,uBAAuB,CACrC,OAAuC;IAEvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC;IAEhD;;;;OAIG;IACH,KAAK,UAAU,kBAAkB,CAAC,MAgBjC;QACC,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC9C,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC;YAChD,OAAO,EAAE,OAAO,CAAC,cAAc;YAC/B,GAAG,EAAE,OAAO,CAAC,YAAY;YACzB,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,UAAU;YACf,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;YAC/B,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,aAAa;gBAC5B,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC3D;SACF,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC;gBACrE,OAAO;gBACP,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxC,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;gBACjC,MAAM,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED,KAAK,UAAU,kBAAkB,CAC/B,OAAgB,EAChB,MAIC;QAOD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACzE,MAAM,SAAS,GAAG,CAChB,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAC9C,EAAE,CAAC,WAAW,EAAE,CAAC;QAClB,MAAM,SAAS,GACb,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACtC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;YAChC,SAAS,CAAC;QACZ,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC;QACjE,MAAM,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC;YAC9C,KAAK;YACL,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,IAAI,MAAM,CAAC,OAAO;YACrD,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC,OAAO;YACrE,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS;YACT,SAAS;YACT,SAAS;SACV,CAAC,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;IACpD,CAAC;IAED,OAAO;QACL,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,KAAK;QACjD,KAAK,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE;YAClD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YACrC,IAAI,WAAW;gBAAE,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;YACxD,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5D,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAChC,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;YAEhE,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC;gBAChD,OAAO,EAAE,OAAO,CAAC,cAAc;gBAC/B,GAAG,EAAE,OAAO,CAAC,YAAY;gBACzB,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,QAAQ;gBACb,OAAO,EAAE,UAAU;aACpB,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YACpE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;gBAC/B,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE;aAC1C,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,MAAM,+BAA+B,CACpD,OAAO,EACP,OAAO,CAAC,WAAW,EACnB,EAAE,QAAQ,EAAE,CACb,CAAC;YAEF,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;YAE7C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACpD,CAAC;YAED,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,GAAG,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1E,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,KAAa;YAClC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;YAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,MAAM,SAAS,GACb,OAAO,OAAO,CAAC,cAAc,KAAK,UAAU;gBAC1C,CAAC,CAAC,MAAM,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC;gBACxD,CAAC,CAAC,KAAK,CAAC;YACZ,OAAO;gBACL,KAAK;gBACL,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,SAAS;aACV,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,EACpB,KAAK,EACL,OAAO,EACP,MAAM,EACN,QAAQ,EACR,OAAO,EACP,QAAQ,GACT;YACC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;gBAC7B,MAAM,IAAI,gBAAgB,CAAC,GAAG,EAAE;oBAC9B,KAAK,EAAE,0BAA0B;oBACjC,OAAO,EACL,2FAA2F;oBAC7F,KAAK;iBACN,CAAC,CAAC;YACL,CAAC;YAED,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC/D,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;gBACtC,KAAK;gBACL,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxD,CAAC,CAAC;YACH,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,gBAAgB,CAAC,GAAG,EAAE;oBAC9B,KAAK,EAAE,WAAW;oBAClB,OAAO,EAAE,4BAA4B,KAAK,GAAG;iBAC9C,CAAC,CAAC;YACL,CAAC;YAED,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,kBAAkB,CAAC;gBACvD,KAAK;gBACL,OAAO;gBACP,MAAM,EAAE,aAAa,CAAC,MAAM,IAAI,SAAS;gBACzC,iEAAiE;gBACjE,iEAAiE;gBACjE,EAAE,EAAE,aAAa,CAAC,WAAW;gBAC7B,OAAO;aACR,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,CAC1C,KAAK,EACL,aAAa,CAAC,WAAW,EACzB;oBACE,MAAM;oBACN,QAAQ,EAAE,QAAQ,IAAI,MAAM;oBAC5B,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC1C,CACF,CAAC;gBACF,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,GAC9C,MAAM,kBAAkB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;gBACpE,kEAAkE;gBAClE,sEAAsE;gBACtE,4DAA4D;gBAC5D,IACE,UAAU,EAAE,OAAO;oBACnB,UAAU,CAAC,OAAO;oBAClB,CAAC,MAAM;oBACP,CAAC,QAAQ,EAAE,MAAM;oBACjB,CAAC,MAAM,CAAC,UAAU,EAClB,CAAC;oBACD,mCAAmC,CAAC,OAAO,CAAC,WAAW,EAAE;wBACvD,OAAO,EAAE,UAAU,CAAC,OAAO;wBAC3B,MAAM,EAAE,aAAa,CAAC,MAAM,IAAI,SAAS;wBACzC,OAAO,EAAE,UAAU,CAAC,OAAO;wBAC3B,SAAS;wBACT,KAAK;wBACL,KAAK;wBACL,QAAQ,EAAE,SAAS;wBACnB,SAAS;qBACV,CAAC,CAAC;gBACL,CAAC;gBACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;YACpC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;oBACjC,MAAM,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBACrD,CAAC;gBACD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;oBACzB,MAAM,IAAI,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC;oBAC5C,MAAM,MAAM,GAAG,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;oBACrD,MAAM,IAAI,gBAAgB,CAAC,MAAM,EAAE;wBACjC,KAAK,EACH,IAAI,KAAK,gBAAgB;4BACvB,CAAC,CAAC,gBAAgB;4BAClB,CAAC,CAAC,0BAA0B;wBAChC,OAAO,EACL,IAAI,KAAK,gBAAgB;4BACvB,CAAC,CAAC,oDAAoD;4BACtD,CAAC,CAAC,2FAA2F;wBACjG,KAAK;wBACL,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAClC,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAED,KAAK,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE;YACxC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,iBAAiB;gBAAE,OAAO,IAAI,CAAC;YAE5C,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,gBAAgB,CAAC,GAAG,EAAE;oBAC9B,KAAK,EAAE,WAAW;oBAClB,OAAO,EAAE,4BAA4B,KAAK,GAAG;iBAC9C,CAAC,CAAC;YACL,CAAC;YAED,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,kBAAkB,CAAC;gBACvD,KAAK;gBACL,OAAO;gBACP,MAAM,EAAE,aAAa,CAAC,MAAM,IAAI,SAAS;aAC1C,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAC9C,KAAK,EACL,aAAa,CAAC,WAAW,CAC1B,CAAC;YACF,uEAAuE;YACvE,4DAA4D;YAC5D,MAAM,kBAAkB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YAClE,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;YAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;YAC5C,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;gBACtC,KAAK;gBACL,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7B,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACtB,CAAC,CAAC;YACH,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,gBAAgB,CAAC,GAAG,EAAE;oBAC9B,KAAK,EAAE,WAAW;oBAClB,OAAO,EAAE,4BAA4B,KAAK,GAAG;iBAC9C,CAAC,CAAC;YACL,CAAC;YAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,GAAG,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACtD,IAAI,MAAM;gBAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACxC,IAAI,EAAE;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC5B,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAE9B,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAC;gBAChD,OAAO,EAAE,OAAO,CAAC,cAAc;gBAC/B,GAAG,EAAE,OAAO,CAAC,YAAY;gBACzB,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,UAAU;gBACf,OAAO;aACR,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,GAAG,UAAU,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,EACnC,OAAO,CAAC,YAAY,CACrB,CAAC,QAAQ,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;gBAC/B,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,aAAa,EAAE,aAAa;oBAC5B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC7C;aACF,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,MAAM,+BAA+B,CACpD,OAAO,EACP,OAAO,CAAC,WAAW,EACnB,EAAE,QAAQ,EAAE,CACb,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,gBAAgB,CACxB,QAAQ,CAAC,MAAM,EACf,MAAM,eAAe,CAAC,QAAQ,CAAC,CAChC,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GACZ,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,0BAA0B,CAAC;YACrE,IAAI,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAC1C,MAAM,IAAI,gBAAgB,CAAC,GAAG,EAAE;oBAC9B,KAAK,EAAE,kBAAkB;oBACzB,OAAO,EAAE,UAAU,KAAK,uCAAuC;iBAChE,CAAC,CAAC;YACL,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;YAC3D,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACvE,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YAC/D,OAAO;gBACL,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,KAAK;gBACL,WAAW,EAAE,aAAa,CAAC,WAAW;gBACtC,MAAM,EAAE,aAAa,CAAC,MAAM,IAAI,SAAS;gBACzC,QAAQ;gBACR,QAAQ,EAAE,8BAA8B,CAAC,kBAAkB,CAAC;gBAC5D,SAAS,EAAE,KAAK,CAAC,UAAU;gBAC3B,aAAa,EAAE,aAAa,CAAC,KAAK,CAAC;gBACnC,QAAQ,EAAE,mBAAmB,CAAC,cAAc,CAAC;aAC9C,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAkB;IAC/C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,8BAA8B,CACrC,KAAoB;IAEpB,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GACT,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAa,EACb,MAA0B;IAE1B,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IACpE,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;AACpC,CAAC;AAED,SAAS,yBAAyB,CAAC,GAAU;IAC3C,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,IAAI,GAAI,GAA0B,CAAC,IAAI,CAAC;IAC9C,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAED,SAAS,0BAA0B,CACjC,IAAa;IAEb,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;IACD,MAAM,OAAO,GAAG,IAKf,CAAC;IACF,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;QAC1C,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;QACvC,CAAC,CAAC,EAAE,CAAC;IACP,OAAO;QACL,MAAM;QACN,KAAK,EAAE,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;QACxE,KAAK,EAAE,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM;QACxE,MAAM,EAAE,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAChE,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,OAAO,GAAG,KAIf,CAAC;IACF,OAAO,CACL,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;QACjC,OAAO,OAAO,CAAC,iBAAiB,KAAK,QAAQ;QAC7C,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,CACzC,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"read-client.js","sourceRoot":"","sources":["../../src/mcp/read-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/session.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import { generateMcpGrantee } from "./grantee.js";
|
|
16
16
|
import { hashConnectionToken } from "./connection-api.js";
|
|
17
17
|
import { verifyDataReadPolicy } from "../policy/data-read.js";
|
|
18
|
-
import { handleX402Cycle } from "../api/index.js";
|
|
18
|
+
import { assertScopeNotDeleted, handleX402Cycle } from "../api/index.js";
|
|
19
19
|
import { GrantOwnerMismatchError, GrantRequiredError, GrantRevokedError, InvalidSignatureError, ProtocolError, UnregisteredBuilderError, } from "../errors/catalog.js";
|
|
20
20
|
/**
|
|
21
21
|
* KNOWN LIMITATION: in-memory only. A process restart (or a second instance)
|
|
@@ -179,6 +179,15 @@ export function createMcpSessionAuthPort(params) {
|
|
|
179
179
|
// Paid session: enforce x402 per read (reuses the exact HTTP cycle). The
|
|
180
180
|
// read client forwards the app's `X-PAYMENT` proof on `input.request`.
|
|
181
181
|
if (params.payment) {
|
|
182
|
+
// Settlement happens here, ahead of the HTTP handler's own deletion
|
|
183
|
+
// gate, so the gate must run here too: never challenge or settle a
|
|
184
|
+
// read of a scope the owner deleted.
|
|
185
|
+
const deps = params.payment.dataApiDeps;
|
|
186
|
+
await assertScopeNotDeleted(deps, input.scope, deps.storage.findEntry({
|
|
187
|
+
scope: input.scope,
|
|
188
|
+
fileId: input.fileId,
|
|
189
|
+
at: input.at,
|
|
190
|
+
}));
|
|
182
191
|
const cycle = await handleX402Cycle({
|
|
183
192
|
deps: params.payment.dataApiDeps,
|
|
184
193
|
request: input.request,
|