@opendatalabs/personal-server-ts-server 1.34.2 → 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/api-auth.d.ts +1 -0
- package/dist/api-auth.d.ts.map +1 -1
- package/dist/api-auth.js.map +1 -1
- package/dist/api.d.ts +3 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +3 -0
- package/dist/api.js.map +1 -1
- package/dist/app.d.ts +14 -2
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +64 -8
- package/dist/app.js.map +1 -1
- package/dist/bootstrap.d.ts +19 -0
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +87 -4
- package/dist/bootstrap.js.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +7 -0
- package/dist/client.js.map +1 -1
- package/dist/enclave-main.d.ts.map +1 -1
- package/dist/enclave-main.js +0 -2
- package/dist/enclave-main.js.map +1 -1
- package/dist/mcp/durable-state.d.ts +2 -1
- package/dist/mcp/durable-state.d.ts.map +1 -1
- package/dist/mcp/durable-state.js +35 -1
- package/dist/mcp/durable-state.js.map +1 -1
- package/dist/pdpp/bootstrap.d.ts.map +1 -1
- package/dist/pdpp/bootstrap.js +1 -0
- package/dist/pdpp/bootstrap.js.map +1 -1
- package/dist/pdpp/records-bootstrap.d.ts +47 -1
- package/dist/pdpp/records-bootstrap.d.ts.map +1 -1
- package/dist/pdpp/records-bootstrap.js +78 -2
- package/dist/pdpp/records-bootstrap.js.map +1 -1
- package/dist/pdpp/replica-authorization.d.ts +35 -0
- package/dist/pdpp/replica-authorization.d.ts.map +1 -0
- package/dist/pdpp/replica-authorization.js +234 -0
- package/dist/pdpp/replica-authorization.js.map +1 -0
- package/dist/pending-blob-deletions.d.ts +1 -0
- package/dist/pending-blob-deletions.d.ts.map +1 -1
- package/dist/pending-blob-deletions.js +8 -4
- package/dist/pending-blob-deletions.js.map +1 -1
- package/dist/routes/mcp.d.ts +18 -2
- package/dist/routes/mcp.d.ts.map +1 -1
- package/dist/routes/mcp.js +111 -11
- package/dist/routes/mcp.js.map +1 -1
- package/dist/routes/oura.d.ts +6 -0
- package/dist/routes/oura.d.ts.map +1 -0
- package/dist/routes/oura.js +272 -0
- package/dist/routes/oura.js.map +1 -0
- package/dist/routes/pdpp-auth-query-keys.d.ts +7 -0
- package/dist/routes/pdpp-auth-query-keys.d.ts.map +1 -0
- package/dist/routes/pdpp-auth-query-keys.js +25 -0
- package/dist/routes/pdpp-auth-query-keys.js.map +1 -0
- package/dist/routes/pdpp-auth.d.ts +3 -1
- package/dist/routes/pdpp-auth.d.ts.map +1 -1
- package/dist/routes/pdpp-auth.js +126 -45
- package/dist/routes/pdpp-auth.js.map +1 -1
- package/dist/routes/pdpp-blobs.d.ts +13 -1
- package/dist/routes/pdpp-blobs.d.ts.map +1 -1
- package/dist/routes/pdpp-blobs.js +100 -65
- package/dist/routes/pdpp-blobs.js.map +1 -1
- package/dist/routes/pdpp-connections.d.ts.map +1 -1
- package/dist/routes/pdpp-connections.js +24 -1
- package/dist/routes/pdpp-connections.js.map +1 -1
- package/dist/routes/pdpp-instance-bindings.d.ts +3 -0
- package/dist/routes/pdpp-instance-bindings.d.ts.map +1 -1
- package/dist/routes/pdpp-instance-bindings.js +63 -0
- package/dist/routes/pdpp-instance-bindings.js.map +1 -1
- package/dist/routes/pdpp-record-query.d.ts +19 -0
- package/dist/routes/pdpp-record-query.d.ts.map +1 -0
- package/dist/routes/pdpp-record-query.js +51 -0
- package/dist/routes/pdpp-record-query.js.map +1 -0
- package/dist/routes/pdpp-records.d.ts +12 -1
- package/dist/routes/pdpp-records.d.ts.map +1 -1
- package/dist/routes/pdpp-records.js +120 -233
- package/dist/routes/pdpp-records.js.map +1 -1
- package/dist/routes/pdpp-replica-quarantine-fixture.d.ts +65 -0
- package/dist/routes/pdpp-replica-quarantine-fixture.d.ts.map +1 -0
- package/dist/routes/pdpp-replica-quarantine-fixture.js +389 -0
- package/dist/routes/pdpp-replica-quarantine-fixture.js.map +1 -0
- package/dist/storage/claude-method-transition.d.ts +12 -0
- package/dist/storage/claude-method-transition.d.ts.map +1 -0
- package/dist/storage/claude-method-transition.js +139 -0
- package/dist/storage/claude-method-transition.js.map +1 -0
- package/dist/storage/import-operations.d.ts +16 -0
- package/dist/storage/import-operations.d.ts.map +1 -1
- package/dist/storage/import-operations.js +54 -1
- package/dist/storage/import-operations.js.map +1 -1
- package/dist/storage/index-schema.d.ts +1 -1
- package/dist/storage/index-schema.d.ts.map +1 -1
- package/dist/storage/index-schema.js +22 -5
- package/dist/storage/index-schema.js.map +1 -1
- package/dist/storage/legacy-scope-authority.d.ts.map +1 -1
- package/dist/storage/legacy-scope-authority.js +83 -11
- package/dist/storage/legacy-scope-authority.js.map +1 -1
- package/dist/storage/node-data-storage.d.ts.map +1 -1
- package/dist/storage/node-data-storage.js +58 -2
- package/dist/storage/node-data-storage.js.map +1 -1
- package/dist/storage/pdpp-binary-chunks.d.ts +120 -0
- package/dist/storage/pdpp-binary-chunks.d.ts.map +1 -0
- package/dist/storage/pdpp-binary-chunks.js +480 -0
- package/dist/storage/pdpp-binary-chunks.js.map +1 -0
- package/dist/storage/pdpp-records-sqlite-store.d.ts +96 -15
- package/dist/storage/pdpp-records-sqlite-store.d.ts.map +1 -1
- package/dist/storage/pdpp-records-sqlite-store.js +616 -211
- package/dist/storage/pdpp-records-sqlite-store.js.map +1 -1
- package/dist/storage/pdpp-replica-canonical-port.d.ts +202 -0
- package/dist/storage/pdpp-replica-canonical-port.d.ts.map +1 -0
- package/dist/storage/pdpp-replica-canonical-port.js +451 -0
- package/dist/storage/pdpp-replica-canonical-port.js.map +1 -0
- package/dist/storage/pdpp-replica-coordinator-state.d.ts +16 -0
- package/dist/storage/pdpp-replica-coordinator-state.d.ts.map +1 -0
- package/dist/storage/pdpp-replica-coordinator-state.js +25 -0
- package/dist/storage/pdpp-replica-coordinator-state.js.map +1 -0
- package/dist/storage/pdpp-replica-copies.d.ts +81 -0
- package/dist/storage/pdpp-replica-copies.d.ts.map +1 -0
- package/dist/storage/pdpp-replica-copies.js +59 -0
- package/dist/storage/pdpp-replica-copies.js.map +1 -0
- package/dist/storage/pdpp-replica-reconciler.d.ts +96 -0
- package/dist/storage/pdpp-replica-reconciler.d.ts.map +1 -0
- package/dist/storage/pdpp-replica-reconciler.js +710 -0
- package/dist/storage/pdpp-replica-reconciler.js.map +1 -0
- package/dist/storage/pdpp-replica-sql.d.ts +13 -0
- package/dist/storage/pdpp-replica-sql.d.ts.map +1 -0
- package/dist/storage/pdpp-replica-sql.js +43 -0
- package/dist/storage/pdpp-replica-sql.js.map +1 -0
- package/dist/storage/pdpp-replica-staging.d.ts +36 -0
- package/dist/storage/pdpp-replica-staging.d.ts.map +1 -0
- package/dist/storage/pdpp-replica-staging.js +202 -0
- package/dist/storage/pdpp-replica-staging.js.map +1 -0
- package/dist/storage/pdpp-replica-visibility-view.d.ts +64 -0
- package/dist/storage/pdpp-replica-visibility-view.d.ts.map +1 -0
- package/dist/storage/pdpp-replica-visibility-view.js +1397 -0
- package/dist/storage/pdpp-replica-visibility-view.js.map +1 -0
- package/dist/storage/pdpp-replica-writer-identity.d.ts +64 -0
- package/dist/storage/pdpp-replica-writer-identity.d.ts.map +1 -0
- package/dist/storage/pdpp-replica-writer-identity.js +81 -0
- package/dist/storage/pdpp-replica-writer-identity.js.map +1 -0
- package/dist/storage/pdpp-replication-door.d.ts +60 -0
- package/dist/storage/pdpp-replication-door.d.ts.map +1 -0
- package/dist/storage/pdpp-replication-door.js +203 -0
- package/dist/storage/pdpp-replication-door.js.map +1 -0
- package/dist/storage/pdpp-replication-host.d.ts +67 -0
- package/dist/storage/pdpp-replication-host.d.ts.map +1 -0
- package/dist/storage/pdpp-replication-host.js +159 -0
- package/dist/storage/pdpp-replication-host.js.map +1 -0
- package/dist/storage/pdpp-replication-memory.fixture.d.ts +2 -0
- package/dist/storage/pdpp-replication-memory.fixture.d.ts.map +1 -0
- package/dist/storage/pdpp-replication-memory.fixture.js +267 -0
- package/dist/storage/pdpp-replication-memory.fixture.js.map +1 -0
- package/dist/storage/pdpp-replication-preparation.d.ts +3 -0
- package/dist/storage/pdpp-replication-preparation.d.ts.map +1 -0
- package/dist/storage/pdpp-replication-preparation.js +3 -0
- package/dist/storage/pdpp-replication-preparation.js.map +1 -0
- package/dist/storage/pdpp-replication-promotion-memory.fixture.d.ts +2 -0
- package/dist/storage/pdpp-replication-promotion-memory.fixture.d.ts.map +1 -0
- package/dist/storage/pdpp-replication-promotion-memory.fixture.js +65 -0
- package/dist/storage/pdpp-replication-promotion-memory.fixture.js.map +1 -0
- package/dist/storage/pdpp-replication-receiver.d.ts +230 -0
- package/dist/storage/pdpp-replication-receiver.d.ts.map +1 -0
- package/dist/storage/pdpp-replication-receiver.js +950 -0
- package/dist/storage/pdpp-replication-receiver.js.map +1 -0
- package/dist/storage/pdpp-replication-sqlite.d.ts +95 -0
- package/dist/storage/pdpp-replication-sqlite.d.ts.map +1 -0
- package/dist/storage/pdpp-replication-sqlite.js +615 -0
- package/dist/storage/pdpp-replication-sqlite.js.map +1 -0
- package/dist/storage/pdpp-replication-transport.d.ts +39 -0
- package/dist/storage/pdpp-replication-transport.d.ts.map +1 -0
- package/dist/storage/pdpp-replication-transport.js +196 -0
- package/dist/storage/pdpp-replication-transport.js.map +1 -0
- package/dist/storage/schema-versions.d.ts +5 -0
- package/dist/storage/schema-versions.d.ts.map +1 -0
- package/dist/storage/schema-versions.js +26 -0
- package/dist/storage/schema-versions.js.map +1 -0
- package/dist/storage/strava-method-transition.d.ts +18 -0
- package/dist/storage/strava-method-transition.d.ts.map +1 -0
- package/dist/storage/strava-method-transition.js +209 -0
- package/dist/storage/strava-method-transition.js.map +1 -0
- package/dist/ui/ps-lite-debug.js +154938 -124896
- package/package.json +3 -3
|
@@ -2,6 +2,7 @@ import { Hono } from "hono";
|
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import { PdppError } from "@opendatalabs/personal-server-ts-core/errors/pdpp";
|
|
4
4
|
import { PDPP_VERSION } from "@opendatalabs/personal-server-ts-core/pdpp-version";
|
|
5
|
+
import { PdppAuthorizationUnavailableError } from "@opendatalabs/personal-server-ts-core/ports/pdpp-auth";
|
|
5
6
|
import { resourceMetadataUrlFor } from "./pdpp-records.js";
|
|
6
7
|
import { recordKeyWithinGrantResources, recordWithinGrantTimeConstraint, resolveReadScope, } from "@opendatalabs/personal-server-ts-core/storage/pdpp-records";
|
|
7
8
|
function requestId() {
|
|
@@ -19,10 +20,14 @@ function jsonError(c, err, reqId, extraHeaders) {
|
|
|
19
20
|
}),
|
|
20
21
|
...extraHeaders,
|
|
21
22
|
};
|
|
23
|
+
if (err instanceof PdppAuthorizationUnavailableError) {
|
|
24
|
+
headers["Retry-After"] = String(err.retryAfterSeconds);
|
|
25
|
+
}
|
|
22
26
|
return c.json(err.toJSON(reqId), err.status, headers);
|
|
23
27
|
}
|
|
24
28
|
export function pdppBlobsRoutes(deps) {
|
|
25
29
|
const app = new Hono();
|
|
30
|
+
const readsFor = deps.reads ?? (() => deps.store);
|
|
26
31
|
/**
|
|
27
32
|
* Authorizes a blob fetch through the same path a record read uses (spec §8): finds every
|
|
28
33
|
* record referencing this blob_id, then grants access if ANY one passes instance scope,
|
|
@@ -44,7 +49,15 @@ export function pdppBlobsRoutes(deps) {
|
|
|
44
49
|
}),
|
|
45
50
|
};
|
|
46
51
|
}
|
|
47
|
-
|
|
52
|
+
let context;
|
|
53
|
+
try {
|
|
54
|
+
context = await deps.auth.resolveToken(token);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
if (!(error instanceof PdppAuthorizationUnavailableError))
|
|
58
|
+
throw error;
|
|
59
|
+
return { error: jsonError(c, error, reqId) };
|
|
60
|
+
}
|
|
48
61
|
if (!context.active) {
|
|
49
62
|
const err = new PdppError("authentication_error", "Invalid access token");
|
|
50
63
|
return { error: jsonError(c, err, reqId) };
|
|
@@ -58,69 +71,74 @@ export function pdppBlobsRoutes(deps) {
|
|
|
58
71
|
return { error: jsonError(c, err, reqId) };
|
|
59
72
|
}
|
|
60
73
|
}
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
const currentInstances = deps.instancesForSubject?.(context.subjectId);
|
|
84
|
-
const sourceInstances = context.sourceId
|
|
85
|
-
? (deps.instancesForSource?.(context.subjectId, context.sourceId) ?? [])
|
|
86
|
-
: (currentInstances ?? []);
|
|
87
|
-
const ownedInstances = context.instanceIds
|
|
88
|
-
? context.instanceIds.filter((instance) => sourceInstances.includes(instance))
|
|
89
|
-
: context.sourceId
|
|
90
|
-
? sourceInstances
|
|
91
|
-
: [];
|
|
92
|
-
const visible = references.some((reference) => ownedInstances.includes(reference.instance));
|
|
93
|
-
if (!visible)
|
|
94
|
-
return { error: notFound() };
|
|
95
|
-
return { ok: true };
|
|
96
|
-
}
|
|
97
|
-
// Client token: the blob must be referenced by a record this exact
|
|
98
|
-
// grant can see — instance scope, resources allowlist, time_constraint,
|
|
99
|
-
// and blob_ref must be in the granted fields for that record's stream.
|
|
100
|
-
for (const reference of references) {
|
|
101
|
-
const declaration = deps.declarations.forInstance(reference.instance, reference.stream);
|
|
102
|
-
let scope;
|
|
103
|
-
try {
|
|
104
|
-
scope = resolveReadScope(context, reference.stream, declaration);
|
|
105
|
-
}
|
|
106
|
-
catch {
|
|
107
|
-
continue;
|
|
74
|
+
const store = readsFor(context.tokenKind === "owner" ? "owner" : "grant");
|
|
75
|
+
const authorizedMeta = () => {
|
|
76
|
+
const meta = store.getBlobMeta(blobId);
|
|
77
|
+
if (!meta)
|
|
78
|
+
return undefined;
|
|
79
|
+
const references = store.findBlobReferences(blobId);
|
|
80
|
+
if (context.tokenKind === "owner") {
|
|
81
|
+
if (!context.subjectId)
|
|
82
|
+
return undefined;
|
|
83
|
+
const currentInstances = deps.instancesForSubject?.(context.subjectId);
|
|
84
|
+
const sourceInstances = context.sourceId
|
|
85
|
+
? (deps.instancesForSource?.(context.subjectId, context.sourceId) ??
|
|
86
|
+
[])
|
|
87
|
+
: (currentInstances ?? []);
|
|
88
|
+
const ownedInstances = context.instanceIds
|
|
89
|
+
? context.instanceIds.filter((instance) => sourceInstances.includes(instance))
|
|
90
|
+
: context.sourceId
|
|
91
|
+
? sourceInstances
|
|
92
|
+
: [];
|
|
93
|
+
return references.some((reference) => ownedInstances.includes(reference.instance))
|
|
94
|
+
? meta
|
|
95
|
+
: undefined;
|
|
108
96
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
97
|
+
for (const reference of references) {
|
|
98
|
+
const declaration = deps.declarations.forInstance(reference.instance, reference.stream);
|
|
99
|
+
let scope;
|
|
100
|
+
try {
|
|
101
|
+
scope = resolveReadScope(context, reference.stream, declaration);
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
if (!scope.instanceIds.includes(reference.instance))
|
|
107
|
+
continue;
|
|
108
|
+
if (!recordKeyWithinGrantResources(reference.recordKey, scope.streamGrant))
|
|
109
|
+
continue;
|
|
110
|
+
if (!scope.fields?.includes("blob_ref"))
|
|
111
|
+
continue;
|
|
112
|
+
const record = store.getRecord(reference.instance, reference.stream, reference.recordKey);
|
|
113
|
+
if (!record ||
|
|
114
|
+
record.deleted ||
|
|
115
|
+
!recordWithinGrantTimeConstraint(record.data, scope.streamGrant))
|
|
116
|
+
continue;
|
|
117
|
+
return meta;
|
|
113
118
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
119
|
+
return undefined;
|
|
120
|
+
};
|
|
121
|
+
const inSnapshot = (read) => store.withReadSnapshot ? store.withReadSnapshot(read) : read();
|
|
122
|
+
const meta = inSnapshot(authorizedMeta);
|
|
123
|
+
const notFound = () => jsonError(c, new PdppError("blob_not_found", "blob_id is unknown or stale"), reqId);
|
|
124
|
+
if (!meta)
|
|
125
|
+
return { error: notFound() };
|
|
126
|
+
return {
|
|
127
|
+
ok: true,
|
|
128
|
+
store,
|
|
129
|
+
meta,
|
|
130
|
+
runIfReadable: (read) => inSnapshot(() => {
|
|
131
|
+
if (!authorizedMeta())
|
|
132
|
+
return false;
|
|
133
|
+
read();
|
|
134
|
+
return true;
|
|
135
|
+
}),
|
|
136
|
+
readBytes: () => {
|
|
137
|
+
if (!deps.reads && deps.readBlobBytes)
|
|
138
|
+
return authorizedMeta() ? deps.readBlobBytes(blobId) : undefined;
|
|
139
|
+
return inSnapshot(() => authorizedMeta() ? store.getBlobBytes(blobId) : undefined);
|
|
140
|
+
},
|
|
141
|
+
};
|
|
124
142
|
}
|
|
125
143
|
// Hono dispatches HEAD via the GET handler and discards the body, so no separate HEAD handler is
|
|
126
144
|
// needed. Content-Length always comes from blob metadata, not the actual byte read.
|
|
@@ -129,7 +147,7 @@ export function pdppBlobsRoutes(deps) {
|
|
|
129
147
|
const authz = await authorizeBlobAccess(c, blobId);
|
|
130
148
|
if ("error" in authz)
|
|
131
149
|
return authz.error;
|
|
132
|
-
const meta =
|
|
150
|
+
const meta = authz.meta;
|
|
133
151
|
const reqId = requestId();
|
|
134
152
|
const headers = {
|
|
135
153
|
"Request-Id": reqId,
|
|
@@ -143,7 +161,7 @@ export function pdppBlobsRoutes(deps) {
|
|
|
143
161
|
}
|
|
144
162
|
let bytes;
|
|
145
163
|
try {
|
|
146
|
-
bytes = await
|
|
164
|
+
bytes = await authz.readBytes();
|
|
147
165
|
}
|
|
148
166
|
catch {
|
|
149
167
|
// A throwing reader must not leak past this route to app.ts's generic
|
|
@@ -162,7 +180,24 @@ export function pdppBlobsRoutes(deps) {
|
|
|
162
180
|
// sizeBytes lie to the client about how much data follows.
|
|
163
181
|
return jsonError(c, new PdppError("api_error", "Stored blob size does not match metadata"), reqId);
|
|
164
182
|
}
|
|
165
|
-
|
|
183
|
+
const chunkSize = 64 * 1024;
|
|
184
|
+
let offset = 0;
|
|
185
|
+
const body = new ReadableStream({
|
|
186
|
+
pull(controller) {
|
|
187
|
+
if (offset >= bytes.byteLength) {
|
|
188
|
+
controller.close();
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const end = Math.min(offset + chunkSize, bytes.byteLength);
|
|
192
|
+
const chunk = bytes.subarray(offset, end);
|
|
193
|
+
if (!authz.runIfReadable(() => controller.enqueue(chunk))) {
|
|
194
|
+
controller.error(new Error("blob visibility changed during read"));
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
offset = end;
|
|
198
|
+
},
|
|
199
|
+
}, { highWaterMark: 0 });
|
|
200
|
+
return c.body(body, 200, headers);
|
|
166
201
|
});
|
|
167
202
|
return app;
|
|
168
203
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdpp-blobs.js","sourceRoot":"","sources":["../../src/routes/pdpp-blobs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pdpp-blobs.js","sourceRoot":"","sources":["../../src/routes/pdpp-blobs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdpp-connections.d.ts","sourceRoot":"","sources":["../../src/routes/pdpp-connections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uDAAuD,CAAC;AACtG,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,yCAAyC,CAAC;AAGjD,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACzD,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC1D,kBAAkB,CAAC,KAAK,EAAE;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,mBAAmB,CAAC;IACxB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAAC;CACzD;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,IAAI,EAAE,wBAAwB,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,wEAAwE;IACxE,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,6CAA6C;IAC7C,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"pdpp-connections.d.ts","sourceRoot":"","sources":["../../src/routes/pdpp-connections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uDAAuD,CAAC;AACtG,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,yCAAyC,CAAC;AAGjD,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAAC;IACzD,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC1D,kBAAkB,CAAC,KAAK,EAAE;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,mBAAmB,CAAC;IACxB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAAC;CACzD;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,IAAI,EAAE,wBAAwB,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,wEAAwE;IACxE,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,6CAA6C;IAC7C,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxB;AA4CD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAuLxE"}
|
|
@@ -11,6 +11,14 @@ function isConnectionId(id, owner, sourceId) {
|
|
|
11
11
|
id ===
|
|
12
12
|
`${sourceId.split("/").filter(Boolean).pop() ?? sourceId}:${owner.toLowerCase()}`));
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Whether an owner token may see or act on one connection instance. An absent
|
|
16
|
+
* instance list is source-wide; a present one is the whole universe, so an
|
|
17
|
+
* empty list covers no connection.
|
|
18
|
+
*/
|
|
19
|
+
function coversInstance(scope, instance) {
|
|
20
|
+
return (scope.instanceIds === undefined || scope.instanceIds.includes(instance));
|
|
21
|
+
}
|
|
14
22
|
function connectionJson(binding, sourceId = binding.sourceId) {
|
|
15
23
|
return {
|
|
16
24
|
connection_id: binding.instance,
|
|
@@ -35,7 +43,11 @@ export function pdppConnectionRoutes(deps) {
|
|
|
35
43
|
context.subjectId.toLowerCase() !== deps.ownerSubjectId.toLowerCase()) {
|
|
36
44
|
return jsonError("authentication_error", "Owner token required", 401);
|
|
37
45
|
}
|
|
38
|
-
return {
|
|
46
|
+
return {
|
|
47
|
+
subjectId: context.subjectId,
|
|
48
|
+
sourceId: context.sourceId,
|
|
49
|
+
...(context.instanceIds && { instanceIds: context.instanceIds }),
|
|
50
|
+
};
|
|
39
51
|
}
|
|
40
52
|
app.get("/pdpp/capabilities", (c) => c.json({ capabilities: ["connections_v1"] }));
|
|
41
53
|
app.get("/pdpp/connections", async (c) => {
|
|
@@ -55,6 +67,7 @@ export function pdppConnectionRoutes(deps) {
|
|
|
55
67
|
return c.json({
|
|
56
68
|
connections: deps.store
|
|
57
69
|
.listConnections(sourceId)
|
|
70
|
+
.filter((connection) => coversInstance(ownerScope, connection.instance))
|
|
58
71
|
.map((connection) => connectionJson(connection, requestedSourceId)),
|
|
59
72
|
});
|
|
60
73
|
});
|
|
@@ -86,6 +99,11 @@ export function pdppConnectionRoutes(deps) {
|
|
|
86
99
|
if (ownerScope.sourceId !== sourceId) {
|
|
87
100
|
return jsonError("access_denied", "Owner token has a different source scope", 403);
|
|
88
101
|
}
|
|
102
|
+
// Checked before any write, and before any lookup, so a connection outside
|
|
103
|
+
// the token's instances is refused the same way whether or not it exists.
|
|
104
|
+
if (!coversInstance(ownerScope, connectionId)) {
|
|
105
|
+
return jsonError("access_denied", "Owner token is not scoped to this connection", 403);
|
|
106
|
+
}
|
|
89
107
|
if (!isConnectionId(connectionId, ownerScope.subjectId, sourceId)) {
|
|
90
108
|
return jsonError("connection_id_invalid", "Connection id is invalid", 400);
|
|
91
109
|
}
|
|
@@ -118,6 +136,11 @@ export function pdppConnectionRoutes(deps) {
|
|
|
118
136
|
const ownerScope = await owner(c.req.raw);
|
|
119
137
|
if (ownerScope instanceof Response)
|
|
120
138
|
return ownerScope;
|
|
139
|
+
// Refused before the binding is read or anything is deleted, and the same
|
|
140
|
+
// whether or not the connection exists.
|
|
141
|
+
if (!coversInstance(ownerScope, connectionId)) {
|
|
142
|
+
return jsonError("access_denied", "Owner token is not scoped to this connection", 403);
|
|
143
|
+
}
|
|
121
144
|
const current = deps.store.getInstanceBinding(connectionId);
|
|
122
145
|
if (!current.sourceId ||
|
|
123
146
|
!deps.sourceIds.has(current.sourceId) ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdpp-connections.js","sourceRoot":"","sources":["../../src/routes/pdpp-connections.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EACL,gBAAgB,GAEjB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AA2BtE,SAAS,SAAS,CAAC,IAAY,EAAE,OAAe,EAAE,MAAc;IAC9D,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,aAAa,GACjB,4EAA4E,CAAC;AAE/E,SAAS,cAAc,CAAC,EAAU,EAAE,KAAa,EAAE,QAAiB;IAClE,OAAO,CACL,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,CAAC,QAAQ,KAAK,SAAS;YACrB,EAAE;gBACA,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,QAAQ,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CACvF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CACrB,OAA4B,EAC5B,QAAQ,GAAG,OAAO,CAAC,QAAQ;IAE3B,OAAO;QACL,aAAa,EAAE,OAAO,CAAC,QAAQ;QAC/B,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,OAAO,CAAC,MAAM;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAA6B;IAChE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,KAAK,UAAU,KAAK,CAClB,OAAgB;
|
|
1
|
+
{"version":3,"file":"pdpp-connections.js","sourceRoot":"","sources":["../../src/routes/pdpp-connections.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,9 @@ export interface PdppInstanceBindingRouteDeps {
|
|
|
20
20
|
instancesForSubject(subjectId: string): string[];
|
|
21
21
|
instancesForSource?(subjectId: string, sourceId: string): string[];
|
|
22
22
|
configuredMethods: Map<string, string[]>;
|
|
23
|
+
transitionClaude?(instance: string, generation: number): Promise<PdppInstanceBinding>;
|
|
24
|
+
transitionStrava?(instance: string, generation: number): Promise<PdppInstanceBinding>;
|
|
25
|
+
stravaTransitionStatus?(instance: string): Promise<string>;
|
|
23
26
|
}
|
|
24
27
|
export declare function pdppInstanceBindingRoutes(deps: PdppInstanceBindingRouteDeps): Hono;
|
|
25
28
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdpp-instance-bindings.d.ts","sourceRoot":"","sources":["../../src/routes/pdpp-instance-bindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uDAAuD,CAAC;AACtG,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,yCAAyC,CAAC;AAEjD,UAAU,oBAAoB;IAC5B,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC1D,oBAAoB,CAAC,KAAK,EAAE;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,GAAG;QAAE,OAAO,EAAE,mBAAmB,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;CAC7D;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,oBAAoB,CAAC;IAC5B,IAAI,EAAE,wBAAwB,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjD,kBAAkB,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACnE,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"pdpp-instance-bindings.d.ts","sourceRoot":"","sources":["../../src/routes/pdpp-instance-bindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uDAAuD,CAAC;AACtG,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,yCAAyC,CAAC;AAEjD,UAAU,oBAAoB;IAC5B,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAAC;IAC1D,oBAAoB,CAAC,KAAK,EAAE;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,kBAAkB,EAAE,MAAM,CAAC;QAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,GAAG;QAAE,OAAO,EAAE,mBAAmB,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC;CAC7D;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,oBAAoB,CAAC;IAC5B,IAAI,EAAE,wBAAwB,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjD,kBAAkB,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACnE,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,gBAAgB,CAAC,CACf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAChC,gBAAgB,CAAC,CACf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAChC,sBAAsB,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D;AAeD,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,4BAA4B,GACjC,IAAI,CAiRN"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Hono } from "hono";
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import { PdppBindingError, } from "../storage/pdpp-records-sqlite-store.js";
|
|
4
|
+
const STRAVA_METHODS = ["strava", "strava-browser"];
|
|
4
5
|
function errorResponse(code, message, status) {
|
|
5
6
|
return Response.json({ error: { code, message }, request_id: `req_${randomUUID()}` }, { status });
|
|
6
7
|
}
|
|
@@ -64,6 +65,68 @@ export function pdppInstanceBindingRoutes(deps) {
|
|
|
64
65
|
configured_active_method: configuredActiveMethod(instance),
|
|
65
66
|
});
|
|
66
67
|
});
|
|
68
|
+
app.post("/pdpp/instances/:instance/transition-claude-live", async (c) => {
|
|
69
|
+
const owner = await ownerContext(c.req.raw);
|
|
70
|
+
if ("error" in owner)
|
|
71
|
+
return owner.error;
|
|
72
|
+
const instance = c.req.param("instance");
|
|
73
|
+
if (!canAccessInstance(instance, owner))
|
|
74
|
+
return errorResponse("authentication_error", "Instance is not owned", 401);
|
|
75
|
+
if (!deps.transitionClaude ||
|
|
76
|
+
!["anthropic", "anthropic-live"].includes(configuredActiveMethod(instance) ?? ""))
|
|
77
|
+
return errorResponse("transition_unavailable", "Claude transition is not configured", 409);
|
|
78
|
+
const body = await c.req.json().catch(() => null);
|
|
79
|
+
if (!body ||
|
|
80
|
+
!Number.isSafeInteger(body.expected_generation) ||
|
|
81
|
+
body.expected_generation < 1)
|
|
82
|
+
return errorResponse("invalid_request", "expected_generation is required", 400);
|
|
83
|
+
try {
|
|
84
|
+
const binding = await deps.transitionClaude(instance, body.expected_generation);
|
|
85
|
+
return c.json({ method: binding.method, generation: binding.generation });
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
if (error instanceof PdppBindingError)
|
|
89
|
+
return errorResponse(error.reason, "Claude transition could not preserve the current connection", 409);
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
// Strava export → browser: same owner contract as the Claude transition.
|
|
94
|
+
app.post("/pdpp/instances/:instance/transition-strava-browser", async (c) => {
|
|
95
|
+
const owner = await ownerContext(c.req.raw);
|
|
96
|
+
if ("error" in owner)
|
|
97
|
+
return owner.error;
|
|
98
|
+
const instance = c.req.param("instance");
|
|
99
|
+
if (!canAccessInstance(instance, owner))
|
|
100
|
+
return errorResponse("authentication_error", "Instance is not owned", 401);
|
|
101
|
+
if (!deps.transitionStrava ||
|
|
102
|
+
!STRAVA_METHODS.includes(configuredActiveMethod(instance) ?? ""))
|
|
103
|
+
return errorResponse("transition_unavailable", "Strava transition is not configured", 409);
|
|
104
|
+
const body = await c.req.json().catch(() => null);
|
|
105
|
+
if (!body ||
|
|
106
|
+
!Number.isSafeInteger(body.expected_generation) ||
|
|
107
|
+
body.expected_generation < 1)
|
|
108
|
+
return errorResponse("invalid_request", "expected_generation is required", 400);
|
|
109
|
+
try {
|
|
110
|
+
const binding = await deps.transitionStrava(instance, body.expected_generation);
|
|
111
|
+
return c.json({ method: binding.method, generation: binding.generation });
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
if (error instanceof PdppBindingError)
|
|
115
|
+
return errorResponse(error.reason, "Strava transition could not preserve the current connection", 409);
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
app.get("/pdpp/instances/:instance/strava-browser-transition", async (c) => {
|
|
120
|
+
const owner = await ownerContext(c.req.raw);
|
|
121
|
+
if ("error" in owner)
|
|
122
|
+
return owner.error;
|
|
123
|
+
const instance = c.req.param("instance");
|
|
124
|
+
if (!canAccessInstance(instance, owner))
|
|
125
|
+
return errorResponse("authentication_error", "Instance is not owned", 401);
|
|
126
|
+
if (!deps.stravaTransitionStatus)
|
|
127
|
+
return errorResponse("transition_unavailable", "Strava transition is not configured", 409);
|
|
128
|
+
return c.json({ status: await deps.stravaTransitionStatus(instance) });
|
|
129
|
+
});
|
|
67
130
|
app.post("/pdpp/instances/:instance/reset", async (c) => {
|
|
68
131
|
const owner = await ownerContext(c.req.raw);
|
|
69
132
|
if ("error" in owner)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdpp-instance-bindings.js","sourceRoot":"","sources":["../../src/routes/pdpp-instance-bindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EACL,gBAAgB,GAEjB,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"pdpp-instance-bindings.js","sourceRoot":"","sources":["../../src/routes/pdpp-instance-bindings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
declare const PARAMETERS: {
|
|
2
|
+
listStreams: never[];
|
|
3
|
+
streamMetadata: never[];
|
|
4
|
+
listRecords: string[];
|
|
5
|
+
getRecord: string[];
|
|
6
|
+
deleteRecord: never[];
|
|
7
|
+
};
|
|
8
|
+
type Endpoint = keyof typeof PARAMETERS;
|
|
9
|
+
/** The sole parsing boundary for canonical record read queries. */
|
|
10
|
+
export declare function parseRecordQuery(url: string, endpoint: Endpoint, tokenKind?: "owner" | "client"): {
|
|
11
|
+
limit: number;
|
|
12
|
+
clamped: boolean;
|
|
13
|
+
order: "asc" | "desc";
|
|
14
|
+
fields: string[] | undefined;
|
|
15
|
+
cursor: string | undefined;
|
|
16
|
+
changesSince: string | undefined;
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=pdpp-record-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdpp-record-query.d.ts","sourceRoot":"","sources":["../../src/routes/pdpp-record-query.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,UAAU;;;;;;CAMoB,CAAC;AAErC,KAAK,QAAQ,GAAG,MAAM,OAAO,UAAU,CAAC;AAExC,mEAAmE;AACnE,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,EAClB,SAAS,CAAC,EAAE,OAAO,GAAG,QAAQ;;;WAgDZ,KAAK,GAAG,MAAM;;;;EAQjC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { PdppError } from "@opendatalabs/personal-server-ts-core/errors/pdpp";
|
|
2
|
+
const PARAMETERS = {
|
|
3
|
+
listStreams: [],
|
|
4
|
+
streamMetadata: [],
|
|
5
|
+
listRecords: ["limit", "order", "cursor", "fields", "changes_since"],
|
|
6
|
+
getRecord: ["fields"],
|
|
7
|
+
deleteRecord: [],
|
|
8
|
+
};
|
|
9
|
+
/** The sole parsing boundary for canonical record read queries. */
|
|
10
|
+
export function parseRecordQuery(url, endpoint, tokenKind) {
|
|
11
|
+
const params = new URL(url).searchParams;
|
|
12
|
+
const allowed = PARAMETERS[endpoint];
|
|
13
|
+
for (const key of params.keys()) {
|
|
14
|
+
if (!allowed.includes(key)) {
|
|
15
|
+
const base = key.replace(/\[.*$/, "");
|
|
16
|
+
const ownerExpand = tokenKind === "owner" &&
|
|
17
|
+
(endpoint === "listRecords" || endpoint === "getRecord") &&
|
|
18
|
+
(base === "expand" || base === "expand_limit");
|
|
19
|
+
throw new PdppError(ownerExpand ? "invalid_expand" : "invalid_request", ownerExpand
|
|
20
|
+
? "No expandable relation is declared"
|
|
21
|
+
: `Unsupported query parameter '${key}'`, { param: key });
|
|
22
|
+
}
|
|
23
|
+
if (params.getAll(key).length !== 1) {
|
|
24
|
+
throw new PdppError("invalid_request", `Parameter '${key}' must occur once`, { param: key });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const rawLimit = params.get("limit");
|
|
28
|
+
const limit = rawLimit === null ? 25 : Number(rawLimit);
|
|
29
|
+
if (rawLimit !== null &&
|
|
30
|
+
(!/^[0-9]+$/.test(rawLimit) || !Number.isSafeInteger(limit) || limit <= 0)) {
|
|
31
|
+
throw new PdppError("invalid_request", "limit must be a positive safe integer", { param: "limit" });
|
|
32
|
+
}
|
|
33
|
+
const order = params.get("order") ?? "desc";
|
|
34
|
+
if (order !== "asc" && order !== "desc") {
|
|
35
|
+
throw new PdppError("invalid_request", "order must be 'asc' or 'desc'", {
|
|
36
|
+
param: "order",
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
limit: Math.min(limit, 100),
|
|
41
|
+
clamped: limit > 100,
|
|
42
|
+
order: order,
|
|
43
|
+
fields: params
|
|
44
|
+
.get("fields")
|
|
45
|
+
?.split(",")
|
|
46
|
+
.map((f) => f.trim()),
|
|
47
|
+
cursor: params.get("cursor") ?? undefined,
|
|
48
|
+
changesSince: params.get("changes_since") ?? undefined,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=pdpp-record-query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdpp-record-query.js","sourceRoot":"","sources":["../../src/routes/pdpp-record-query.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,24 @@
|
|
|
1
|
+
import type { ReplicaReader } from "@opendatalabs/personal-server-ts-core/replication/visibility-policy";
|
|
1
2
|
import { Hono, type Context } from "hono";
|
|
2
3
|
import { type createSqliteRecordStore } from "../storage/pdpp-records-sqlite-store.js";
|
|
3
4
|
import type { PdppAuthorizationService } from "@opendatalabs/personal-server-ts-core/ports/pdpp-auth";
|
|
4
|
-
import { type PdppRecordStore, type StreamDeclarationRegistry } from "@opendatalabs/personal-server-ts-core/storage/pdpp-records";
|
|
5
|
+
import { type PdppRecordStore, type PdppReplicaReadStore, type StreamDeclarationRegistry } from "@opendatalabs/personal-server-ts-core/storage/pdpp-records";
|
|
5
6
|
export declare const MAX_BLOB_UPLOAD_BYTES: number;
|
|
6
7
|
/** 512 MiB — max body size for PDPP record ingest and replace routes. */
|
|
7
8
|
export declare const MAX_INGEST_BODY_BYTES: number;
|
|
8
9
|
/** 64 KiB of UTF-8 — max body size for the completion metadata route. */
|
|
9
10
|
export declare const MAX_COMPLETION_BODY_BYTES: number;
|
|
11
|
+
/** The record routes read everything a reader serves except completion receipts. */
|
|
12
|
+
type RouteReadStore = Omit<PdppReplicaReadStore, "listStreamCompletions">;
|
|
10
13
|
export interface PdppRecordsRouteDeps {
|
|
14
|
+
/** Writes and write-side lookups. Reads go through `reads`. */
|
|
11
15
|
store: PdppRecordStore;
|
|
16
|
+
/**
|
|
17
|
+
* Reader capability for every read. The app host (`createApp`) always
|
|
18
|
+
* supplies it. Absent only when the route runs without a host, in tests:
|
|
19
|
+
* then every token class reads `store`.
|
|
20
|
+
*/
|
|
21
|
+
reads?: (reader: ReplicaReader) => RouteReadStore;
|
|
12
22
|
bindingStore?: {
|
|
13
23
|
getInstanceBinding(instance: string): {
|
|
14
24
|
sourceId: string | null;
|
|
@@ -155,4 +165,5 @@ export interface PdppAccessLogPort {
|
|
|
155
165
|
*/
|
|
156
166
|
export declare function resourceMetadataUrlFor(c: Context): string;
|
|
157
167
|
export declare function pdppRecordsRoutes(deps: PdppRecordsRouteDeps): Hono;
|
|
168
|
+
export {};
|
|
158
169
|
//# sourceMappingURL=pdpp-records.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdpp-records.d.ts","sourceRoot":"","sources":["../../src/routes/pdpp-records.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pdpp-records.d.ts","sourceRoot":"","sources":["../../src/routes/pdpp-records.ts"],"names":[],"mappings":"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"}
|