@opendatalabs/personal-server-ts-server 1.33.7 → 1.34.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/__fixtures__/bound-record-store.d.ts +19 -0
- package/dist/__fixtures__/bound-record-store.d.ts.map +1 -0
- package/dist/__fixtures__/bound-record-store.js +60 -0
- package/dist/__fixtures__/bound-record-store.js.map +1 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-authorization-strategy.d.ts +41 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-authorization-strategy.d.ts.map +1 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-authorization-strategy.js +34 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-authorization-strategy.js.map +1 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-context-client.d.ts +112 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-context-client.d.ts.map +1 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-context-client.js +226 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-context-client.js.map +1 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-types.d.ts +135 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-types.d.ts.map +1 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-types.js +21 -0
- package/dist/__fixtures__/cg-pdpp-client/pdpp-types.js.map +1 -0
- package/dist/api-auth.d.ts +18 -2
- package/dist/api-auth.d.ts.map +1 -1
- package/dist/api-auth.js +114 -22
- package/dist/api-auth.js.map +1 -1
- package/dist/app.d.ts +60 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +139 -1
- package/dist/app.js.map +1 -1
- package/dist/bootstrap.d.ts +10 -0
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +358 -7
- package/dist/bootstrap.js.map +1 -1
- package/dist/enclave-main.d.ts +4 -0
- package/dist/enclave-main.d.ts.map +1 -1
- package/dist/enclave-main.js +152 -1
- package/dist/enclave-main.js.map +1 -1
- package/dist/middleware/body-limit.d.ts +1 -1
- package/dist/middleware/body-limit.d.ts.map +1 -1
- package/dist/middleware/body-limit.js +8 -3
- package/dist/middleware/body-limit.js.map +1 -1
- package/dist/middleware/cors.d.ts.map +1 -1
- package/dist/middleware/cors.js +1 -0
- package/dist/middleware/cors.js.map +1 -1
- package/dist/package.json +9 -1
- package/dist/pdpp/bootstrap.d.ts +72 -0
- package/dist/pdpp/bootstrap.d.ts.map +1 -0
- package/dist/pdpp/bootstrap.js +270 -0
- package/dist/pdpp/bootstrap.js.map +1 -0
- package/dist/pdpp/chain-enforcement.d.ts +95 -0
- package/dist/pdpp/chain-enforcement.d.ts.map +1 -0
- package/dist/pdpp/chain-enforcement.js +145 -0
- package/dist/pdpp/chain-enforcement.js.map +1 -0
- package/dist/pdpp/client-document-fetch.d.ts +63 -0
- package/dist/pdpp/client-document-fetch.d.ts.map +1 -0
- package/dist/pdpp/client-document-fetch.js +254 -0
- package/dist/pdpp/client-document-fetch.js.map +1 -0
- package/dist/pdpp/declaration-registry.d.ts +83 -0
- package/dist/pdpp/declaration-registry.d.ts.map +1 -0
- package/dist/pdpp/declaration-registry.js +251 -0
- package/dist/pdpp/declaration-registry.js.map +1 -0
- package/dist/pdpp/deployment.d.ts +70 -0
- package/dist/pdpp/deployment.d.ts.map +1 -0
- package/dist/pdpp/deployment.js +104 -0
- package/dist/pdpp/deployment.js.map +1 -0
- package/dist/pdpp/record-schema.d.ts +2 -0
- package/dist/pdpp/record-schema.d.ts.map +1 -0
- package/dist/pdpp/record-schema.js +2 -0
- package/dist/pdpp/record-schema.js.map +1 -0
- package/dist/pdpp/records-bootstrap.d.ts +111 -0
- package/dist/pdpp/records-bootstrap.d.ts.map +1 -0
- package/dist/pdpp/records-bootstrap.js +353 -0
- package/dist/pdpp/records-bootstrap.js.map +1 -0
- package/dist/pdpp/source-id-compat.d.ts +5 -0
- package/dist/pdpp/source-id-compat.d.ts.map +1 -0
- package/dist/pdpp/source-id-compat.js +16 -0
- package/dist/pdpp/source-id-compat.js.map +1 -0
- package/dist/pdpp/test-connections.d.ts +6 -0
- package/dist/pdpp/test-connections.d.ts.map +1 -0
- package/dist/pdpp/test-connections.js +37 -0
- package/dist/pdpp/test-connections.js.map +1 -0
- package/dist/routes/auth-device.d.ts.map +1 -1
- package/dist/routes/auth-device.js +3 -0
- package/dist/routes/auth-device.js.map +1 -1
- package/dist/routes/chunked-scope-import.d.ts +41 -0
- package/dist/routes/chunked-scope-import.d.ts.map +1 -0
- package/dist/routes/chunked-scope-import.js +901 -0
- package/dist/routes/chunked-scope-import.js.map +1 -0
- package/dist/routes/data.d.ts +23 -1
- package/dist/routes/data.d.ts.map +1 -1
- package/dist/routes/data.js +112 -1
- package/dist/routes/data.js.map +1 -1
- package/dist/routes/grants.d.ts.map +1 -1
- package/dist/routes/grants.js +2 -0
- package/dist/routes/grants.js.map +1 -1
- package/dist/routes/mcp.d.ts.map +1 -1
- package/dist/routes/mcp.js +21 -12
- package/dist/routes/mcp.js.map +1 -1
- package/dist/routes/pdpp-auth.d.ts +157 -0
- package/dist/routes/pdpp-auth.d.ts.map +1 -0
- package/dist/routes/pdpp-auth.js +953 -0
- package/dist/routes/pdpp-auth.js.map +1 -0
- package/dist/routes/pdpp-blobs.d.ts +26 -0
- package/dist/routes/pdpp-blobs.d.ts.map +1 -0
- package/dist/routes/pdpp-blobs.js +179 -0
- package/dist/routes/pdpp-blobs.js.map +1 -0
- package/dist/routes/pdpp-connections.d.ts +28 -0
- package/dist/routes/pdpp-connections.d.ts.map +1 -0
- package/dist/routes/pdpp-connections.js +144 -0
- package/dist/routes/pdpp-connections.js.map +1 -0
- package/dist/routes/pdpp-declarations.d.ts +58 -0
- package/dist/routes/pdpp-declarations.d.ts.map +1 -0
- package/dist/routes/pdpp-declarations.js +94 -0
- package/dist/routes/pdpp-declarations.js.map +1 -0
- package/dist/routes/pdpp-instance-bindings.d.ts +26 -0
- package/dist/routes/pdpp-instance-bindings.d.ts.map +1 -0
- package/dist/routes/pdpp-instance-bindings.js +124 -0
- package/dist/routes/pdpp-instance-bindings.js.map +1 -0
- package/dist/routes/pdpp-records.d.ts +158 -0
- package/dist/routes/pdpp-records.d.ts.map +1 -0
- package/dist/routes/pdpp-records.js +1537 -0
- package/dist/routes/pdpp-records.js.map +1 -0
- package/dist/routes/pdpp-well-known.d.ts +13 -0
- package/dist/routes/pdpp-well-known.d.ts.map +1 -0
- package/dist/routes/pdpp-well-known.js +20 -0
- package/dist/routes/pdpp-well-known.js.map +1 -0
- package/dist/storage/declaration-witness.d.ts +56 -0
- package/dist/storage/declaration-witness.d.ts.map +1 -0
- package/dist/storage/declaration-witness.js +273 -0
- package/dist/storage/declaration-witness.js.map +1 -0
- package/dist/storage/hierarchy.d.ts +25 -1
- package/dist/storage/hierarchy.d.ts.map +1 -1
- package/dist/storage/hierarchy.js +210 -16
- package/dist/storage/hierarchy.js.map +1 -1
- package/dist/storage/import-operations.d.ts +11 -0
- package/dist/storage/import-operations.d.ts.map +1 -0
- package/dist/storage/import-operations.js +261 -0
- package/dist/storage/import-operations.js.map +1 -0
- package/dist/storage/index-manager.d.ts +24 -2
- package/dist/storage/index-manager.d.ts.map +1 -1
- package/dist/storage/index-manager.js +279 -30
- package/dist/storage/index-manager.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 +189 -8
- package/dist/storage/index-schema.js.map +1 -1
- package/dist/storage/legacy-scope-authority.d.ts +14 -0
- package/dist/storage/legacy-scope-authority.d.ts.map +1 -0
- package/dist/storage/legacy-scope-authority.js +298 -0
- package/dist/storage/legacy-scope-authority.js.map +1 -0
- package/dist/storage/node-data-storage.d.ts +6 -0
- package/dist/storage/node-data-storage.d.ts.map +1 -1
- package/dist/storage/node-data-storage.js +161 -2
- package/dist/storage/node-data-storage.js.map +1 -1
- package/dist/storage/pdpp-grant-binding-sqlite-store.d.ts +17 -0
- package/dist/storage/pdpp-grant-binding-sqlite-store.d.ts.map +1 -0
- package/dist/storage/pdpp-grant-binding-sqlite-store.js +159 -0
- package/dist/storage/pdpp-grant-binding-sqlite-store.js.map +1 -0
- package/dist/storage/pdpp-records-sqlite-store.d.ts +112 -0
- package/dist/storage/pdpp-records-sqlite-store.d.ts.map +1 -0
- package/dist/storage/pdpp-records-sqlite-store.js +1440 -0
- package/dist/storage/pdpp-records-sqlite-store.js.map +1 -0
- package/dist/storage/pdpp-stream-completion.d.ts +5 -0
- package/dist/storage/pdpp-stream-completion.d.ts.map +1 -0
- package/dist/storage/pdpp-stream-completion.js +10 -0
- package/dist/storage/pdpp-stream-completion.js.map +1 -0
- package/dist/storage/scope-deletion-history.d.ts +8 -0
- package/dist/storage/scope-deletion-history.d.ts.map +1 -0
- package/dist/storage/scope-deletion-history.js +40 -0
- package/dist/storage/scope-deletion-history.js.map +1 -0
- package/dist/ui/ps-lite-debug.js +3697 -876
- package/package.json +12 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdpp-auth.js","sourceRoot":"","sources":["../../src/routes/pdpp-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
import type { PdppAuthorizationService } from "@opendatalabs/personal-server-ts-core/ports/pdpp-auth";
|
|
3
|
+
import { type PdppRecordStore, type StreamDeclarationRegistry } from "@opendatalabs/personal-server-ts-core/storage/pdpp-records";
|
|
4
|
+
export interface PdppBlobsRouteDeps {
|
|
5
|
+
store: PdppRecordStore;
|
|
6
|
+
auth: PdppAuthorizationService;
|
|
7
|
+
declarations: StreamDeclarationRegistry;
|
|
8
|
+
instancesForSubject?: (subjectId: string) => string[];
|
|
9
|
+
instancesForSource?: (subjectId: string, sourceId: string) => string[];
|
|
10
|
+
isConnectionAvailable?: (instance: string) => boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Loads raw blob bytes for a blob_id, or undefined if not locally stored.
|
|
13
|
+
* Optional: when absent or throwing, GET fails closed with `api_error` (500) instead of a fabricated 200.
|
|
14
|
+
*/
|
|
15
|
+
readBlobBytes?: (blobId: string) => Promise<Uint8Array<ArrayBuffer> | undefined>;
|
|
16
|
+
}
|
|
17
|
+
export declare function pdppBlobsRoutes(deps: PdppBlobsRouteDeps): Hono;
|
|
18
|
+
/**
|
|
19
|
+
* Placeholder for the 302-signed-URL blob response variant. NOT a real
|
|
20
|
+
* signed-URL service — per Architecture §8, blob distribution via signed URL
|
|
21
|
+
* is gateway-native and out of this lane's scope. This function exists only
|
|
22
|
+
* to document the shape a real implementation would need; it is not wired
|
|
23
|
+
* into any route above.
|
|
24
|
+
*/
|
|
25
|
+
export declare function placeholderSignedBlobRedirectTarget(blobId: string): string;
|
|
26
|
+
//# sourceMappingURL=pdpp-blobs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdpp-blobs.d.ts","sourceRoot":"","sources":["../../src/routes/pdpp-blobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAI1C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uDAAuD,CAAC;AAEtG,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC/B,MAAM,4DAA4D,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,eAAe,CAAC;IACvB,IAAI,EAAE,wBAAwB,CAAC;IAC/B,YAAY,EAAE,yBAAyB,CAAC;IACxC,mBAAmB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACtD,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACvE,qBAAqB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IACtD;;;OAGG;IACH,aAAa,CAAC,EAAE,CACd,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,CAAC;CACnD;AA0BD,wBAAgB,eAAe,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CA0M9D;AAED;;;;;;GAMG;AACH,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1E"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { PdppError } from "@opendatalabs/personal-server-ts-core/errors/pdpp";
|
|
4
|
+
import { PDPP_VERSION } from "@opendatalabs/personal-server-ts-core/pdpp-version";
|
|
5
|
+
import { resourceMetadataUrlFor } from "./pdpp-records.js";
|
|
6
|
+
import { recordKeyWithinGrantResources, recordWithinGrantTimeConstraint, resolveReadScope, } from "@opendatalabs/personal-server-ts-core/storage/pdpp-records";
|
|
7
|
+
function requestId() {
|
|
8
|
+
return `req_${randomUUID()}`;
|
|
9
|
+
}
|
|
10
|
+
function jsonError(c, err, reqId, extraHeaders) {
|
|
11
|
+
// Every 401 carries the challenge, not just the missing-token branch: a
|
|
12
|
+
// client holding a STALE token is exactly who needs the pointer back to the
|
|
13
|
+
// metadata document in order to re-authorize.
|
|
14
|
+
const headers = {
|
|
15
|
+
"Request-Id": reqId,
|
|
16
|
+
"PDPP-Version": PDPP_VERSION,
|
|
17
|
+
...(err.status === 401 && {
|
|
18
|
+
"WWW-Authenticate": `Bearer error="invalid_token", resource_metadata="${resourceMetadataUrlFor(c)}"`,
|
|
19
|
+
}),
|
|
20
|
+
...extraHeaders,
|
|
21
|
+
};
|
|
22
|
+
return c.json(err.toJSON(reqId), err.status, headers);
|
|
23
|
+
}
|
|
24
|
+
export function pdppBlobsRoutes(deps) {
|
|
25
|
+
const app = new Hono();
|
|
26
|
+
/**
|
|
27
|
+
* Authorizes a blob fetch through the same path a record read uses (spec §8): finds every
|
|
28
|
+
* record referencing this blob_id, then grants access if ANY one passes instance scope,
|
|
29
|
+
* resources, time_constraint, and has blob_ref in its record's specific granted field
|
|
30
|
+
* projection. Identical bytes can be referenced by more than one record, so an inaccessible
|
|
31
|
+
* reference must not hide an accessible one.
|
|
32
|
+
*/
|
|
33
|
+
async function authorizeBlobAccess(c, blobId) {
|
|
34
|
+
const reqId = requestId();
|
|
35
|
+
const header = c.req.header("Authorization");
|
|
36
|
+
const token = header?.match(/^Bearer\s+(.+)$/i)?.[1];
|
|
37
|
+
if (!token) {
|
|
38
|
+
const err = new PdppError("authentication_error", "Missing or invalid access token");
|
|
39
|
+
return {
|
|
40
|
+
error: jsonError(c, err, reqId, {
|
|
41
|
+
// Absolute, derived from this request's origin (RFC 9728 §5.1) --
|
|
42
|
+
// shares the records route's helper so the two cannot drift.
|
|
43
|
+
"WWW-Authenticate": `Bearer error="invalid_token", resource_metadata="${resourceMetadataUrlFor(c)}"`,
|
|
44
|
+
}),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const context = await deps.auth.resolveToken(token);
|
|
48
|
+
if (!context.active) {
|
|
49
|
+
const err = new PdppError("authentication_error", "Invalid access token");
|
|
50
|
+
return { error: jsonError(c, err, reqId) };
|
|
51
|
+
}
|
|
52
|
+
// DELETE removes the grant's record references and claim rows. Check its
|
|
53
|
+
// connection before blob metadata so callers still get the K7 refusal.
|
|
54
|
+
if (context.tokenKind !== "owner") {
|
|
55
|
+
const grantInstances = (context.grant?.streams ?? []).flatMap((stream) => stream.instance_ids);
|
|
56
|
+
if (grantInstances.some((instance) => deps.isConnectionAvailable?.(instance) === false)) {
|
|
57
|
+
const err = new PdppError("instance_unavailable", "The connection for this grant is unavailable");
|
|
58
|
+
return { error: jsonError(c, err, reqId) };
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const meta = deps.store.getBlobMeta(blobId);
|
|
62
|
+
if (!meta) {
|
|
63
|
+
const err = new PdppError("blob_not_found", "blob_id is unknown or stale");
|
|
64
|
+
return { error: jsonError(c, err, reqId) };
|
|
65
|
+
}
|
|
66
|
+
const notFound = () => jsonError(c, new PdppError("blob_not_found", "blob_id is unknown or stale"), reqId);
|
|
67
|
+
// Identical blob bytes can legitimately be referenced by more than one
|
|
68
|
+
// record or instance (e.g. re-ingested via a different stream). Access
|
|
69
|
+
// is granted if ANY visible reference passes its authorization check —
|
|
70
|
+
// an inaccessible reference must never hide an accessible one.
|
|
71
|
+
const references = deps.store.findBlobReferences(blobId);
|
|
72
|
+
if (references.length === 0)
|
|
73
|
+
return { error: notFound() };
|
|
74
|
+
if (context.tokenKind === "owner") {
|
|
75
|
+
// Owner tokens carry no grant: current-capability read, scoped to the
|
|
76
|
+
// owner's selected live instances when the token has an instance list.
|
|
77
|
+
// A source scope must not widen that explicit selection.
|
|
78
|
+
// Fail closed: a missing resolver, a missing subjectId, or an empty
|
|
79
|
+
// owned list must all deny rather than fall back to "visible to
|
|
80
|
+
// everyone" — mirrors the record routes' `?? []` default.
|
|
81
|
+
if (!context.subjectId)
|
|
82
|
+
return { error: notFound() };
|
|
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;
|
|
108
|
+
}
|
|
109
|
+
if (!scope.instanceIds.includes(reference.instance))
|
|
110
|
+
continue;
|
|
111
|
+
if (!recordKeyWithinGrantResources(reference.recordKey, scope.streamGrant)) {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (!scope.fields?.includes("blob_ref"))
|
|
115
|
+
continue;
|
|
116
|
+
const record = deps.store.getRecord(reference.instance, reference.stream, reference.recordKey);
|
|
117
|
+
if (!record ||
|
|
118
|
+
!recordWithinGrantTimeConstraint(record.data, scope.streamGrant)) {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
return { ok: true };
|
|
122
|
+
}
|
|
123
|
+
return { error: notFound() };
|
|
124
|
+
}
|
|
125
|
+
// Hono dispatches HEAD via the GET handler and discards the body, so no separate HEAD handler is
|
|
126
|
+
// needed. Content-Length always comes from blob metadata, not the actual byte read.
|
|
127
|
+
app.get("/:blobId", async (c) => {
|
|
128
|
+
const blobId = c.req.param("blobId");
|
|
129
|
+
const authz = await authorizeBlobAccess(c, blobId);
|
|
130
|
+
if ("error" in authz)
|
|
131
|
+
return authz.error;
|
|
132
|
+
const meta = deps.store.getBlobMeta(blobId);
|
|
133
|
+
const reqId = requestId();
|
|
134
|
+
const headers = {
|
|
135
|
+
"Request-Id": reqId,
|
|
136
|
+
"PDPP-Version": PDPP_VERSION,
|
|
137
|
+
"Content-Type": meta.mimeType,
|
|
138
|
+
"Content-Length": String(meta.sizeBytes),
|
|
139
|
+
"Cache-Control": "private, no-store",
|
|
140
|
+
};
|
|
141
|
+
if (c.req.method === "HEAD") {
|
|
142
|
+
return c.body(null, 200, headers);
|
|
143
|
+
}
|
|
144
|
+
let bytes;
|
|
145
|
+
try {
|
|
146
|
+
bytes = await deps.readBlobBytes?.(blobId);
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
// A throwing reader must not leak past this route to app.ts's generic
|
|
150
|
+
// handler, which returns a different (legacy) error shape. Map it to
|
|
151
|
+
// the same fail-closed api_error without exposing the reader's detail.
|
|
152
|
+
return jsonError(c, new PdppError("api_error", "Blob bytes are not available"), reqId);
|
|
153
|
+
}
|
|
154
|
+
if (bytes === undefined) {
|
|
155
|
+
// No byte source wired up, or the store lost the bytes for an
|
|
156
|
+
// otherwise-known blob -- distinct from a genuine zero-byte blob.
|
|
157
|
+
return jsonError(c, new PdppError("api_error", "Blob bytes are not available"), reqId);
|
|
158
|
+
}
|
|
159
|
+
if (bytes.byteLength !== meta.sizeBytes) {
|
|
160
|
+
// The declared Content-Length must never silently misrepresent the
|
|
161
|
+
// returned body. Fail closed rather than let a stale/corrupt
|
|
162
|
+
// sizeBytes lie to the client about how much data follows.
|
|
163
|
+
return jsonError(c, new PdppError("api_error", "Stored blob size does not match metadata"), reqId);
|
|
164
|
+
}
|
|
165
|
+
return c.body(bytes, 200, headers);
|
|
166
|
+
});
|
|
167
|
+
return app;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Placeholder for the 302-signed-URL blob response variant. NOT a real
|
|
171
|
+
* signed-URL service — per Architecture §8, blob distribution via signed URL
|
|
172
|
+
* is gateway-native and out of this lane's scope. This function exists only
|
|
173
|
+
* to document the shape a real implementation would need; it is not wired
|
|
174
|
+
* into any route above.
|
|
175
|
+
*/
|
|
176
|
+
export function placeholderSignedBlobRedirectTarget(blobId) {
|
|
177
|
+
return `https://gateway.invalid/blobs/${encodeURIComponent(blobId)}?signature=not-implemented`;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=pdpp-blobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdpp-blobs.js","sourceRoot":"","sources":["../../src/routes/pdpp-blobs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
import type { PdppAuthorizationService } from "@opendatalabs/personal-server-ts-core/ports/pdpp-auth";
|
|
3
|
+
import { type PdppInstanceBinding } from "../storage/pdpp-records-sqlite-store.js";
|
|
4
|
+
export interface PdppConnectionStore {
|
|
5
|
+
listConnections(sourceId: string): PdppInstanceBinding[];
|
|
6
|
+
getInstanceBinding(instance: string): PdppInstanceBinding;
|
|
7
|
+
registerConnection(input: {
|
|
8
|
+
instance: string;
|
|
9
|
+
sourceId: string;
|
|
10
|
+
method: string;
|
|
11
|
+
label: string;
|
|
12
|
+
}): PdppInstanceBinding;
|
|
13
|
+
deleteConnection(instance: string): PdppInstanceBinding;
|
|
14
|
+
}
|
|
15
|
+
export interface PdppConnectionRouteDeps {
|
|
16
|
+
store: PdppConnectionStore;
|
|
17
|
+
auth: PdppAuthorizationService;
|
|
18
|
+
ownerSubjectId: string;
|
|
19
|
+
/** Known method ids keyed by source id. */
|
|
20
|
+
connectionMethods: Map<string, string[]>;
|
|
21
|
+
/** Active per-instance writer methods for canonical-enabled sources. */
|
|
22
|
+
configuredMethods: Map<string, string[]>;
|
|
23
|
+
canonicalSourceIds: Set<string>;
|
|
24
|
+
/** Source ids in the connection registry. */
|
|
25
|
+
sourceIds: Set<string>;
|
|
26
|
+
}
|
|
27
|
+
export declare function pdppConnectionRoutes(deps: PdppConnectionRouteDeps): Hono;
|
|
28
|
+
//# sourceMappingURL=pdpp-connections.d.ts.map
|
|
@@ -0,0 +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;AA8BD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,uBAAuB,GAAG,IAAI,CA8JxE"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
import { PdppBindingError, } from "../storage/pdpp-records-sqlite-store.js";
|
|
3
|
+
import { resolveRetainedSourceId } from "../pdpp/source-id-compat.js";
|
|
4
|
+
function jsonError(code, message, status) {
|
|
5
|
+
return Response.json({ error: { code, message } }, { status });
|
|
6
|
+
}
|
|
7
|
+
const CONNECTION_ID = /^conn_[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;
|
|
8
|
+
function isConnectionId(id, owner, sourceId) {
|
|
9
|
+
return (CONNECTION_ID.test(id) ||
|
|
10
|
+
(sourceId !== undefined &&
|
|
11
|
+
id ===
|
|
12
|
+
`${sourceId.split("/").filter(Boolean).pop() ?? sourceId}:${owner.toLowerCase()}`));
|
|
13
|
+
}
|
|
14
|
+
function connectionJson(binding, sourceId = binding.sourceId) {
|
|
15
|
+
return {
|
|
16
|
+
connection_id: binding.instance,
|
|
17
|
+
source_id: sourceId,
|
|
18
|
+
method_id: binding.method,
|
|
19
|
+
label: binding.label,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function pdppConnectionRoutes(deps) {
|
|
23
|
+
const app = new Hono();
|
|
24
|
+
async function owner(request) {
|
|
25
|
+
const token = request.headers
|
|
26
|
+
.get("authorization")
|
|
27
|
+
?.match(/^Bearer\s+(.+)$/i)?.[1];
|
|
28
|
+
if (!token)
|
|
29
|
+
return jsonError("authentication_error", "Owner token required", 401);
|
|
30
|
+
const context = await deps.auth.resolveToken(token);
|
|
31
|
+
if (!context.active ||
|
|
32
|
+
context.tokenKind !== "owner" ||
|
|
33
|
+
!context.subjectId ||
|
|
34
|
+
!context.sourceId ||
|
|
35
|
+
context.subjectId.toLowerCase() !== deps.ownerSubjectId.toLowerCase()) {
|
|
36
|
+
return jsonError("authentication_error", "Owner token required", 401);
|
|
37
|
+
}
|
|
38
|
+
return { subjectId: context.subjectId, sourceId: context.sourceId };
|
|
39
|
+
}
|
|
40
|
+
app.get("/pdpp/capabilities", (c) => c.json({ capabilities: ["connections_v1"] }));
|
|
41
|
+
app.get("/pdpp/connections", async (c) => {
|
|
42
|
+
const requestedSourceId = c.req.query("source_id");
|
|
43
|
+
const sourceId = requestedSourceId
|
|
44
|
+
? resolveRetainedSourceId(requestedSourceId, deps.sourceIds)
|
|
45
|
+
: undefined;
|
|
46
|
+
if (!requestedSourceId || !sourceId) {
|
|
47
|
+
return jsonError("not_found", "Source declaration not found", 404);
|
|
48
|
+
}
|
|
49
|
+
const ownerScope = await owner(c.req.raw);
|
|
50
|
+
if (ownerScope instanceof Response)
|
|
51
|
+
return ownerScope;
|
|
52
|
+
if (ownerScope.sourceId !== sourceId) {
|
|
53
|
+
return jsonError("access_denied", "Owner token has a different source scope", 403);
|
|
54
|
+
}
|
|
55
|
+
return c.json({
|
|
56
|
+
connections: deps.store
|
|
57
|
+
.listConnections(sourceId)
|
|
58
|
+
.map((connection) => connectionJson(connection, requestedSourceId)),
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
app.put("/pdpp/connections/:connectionId", async (c) => {
|
|
62
|
+
const connectionId = c.req.param("connectionId");
|
|
63
|
+
let body;
|
|
64
|
+
try {
|
|
65
|
+
body = await c.req.json();
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return jsonError("invalid_request", "Body must be JSON", 400);
|
|
69
|
+
}
|
|
70
|
+
if (!body || typeof body !== "object" || Array.isArray(body)) {
|
|
71
|
+
return jsonError("invalid_request", "Body must be an object", 400);
|
|
72
|
+
}
|
|
73
|
+
const input = body;
|
|
74
|
+
const requestedSourceId = input.source_id;
|
|
75
|
+
const sourceId = typeof requestedSourceId === "string"
|
|
76
|
+
? resolveRetainedSourceId(requestedSourceId, deps.sourceIds)
|
|
77
|
+
: undefined;
|
|
78
|
+
if (!sourceId ||
|
|
79
|
+
typeof input.method_id !== "string" ||
|
|
80
|
+
typeof input.label !== "string") {
|
|
81
|
+
return jsonError("invalid_request", "source_id, method_id and label are required", 400);
|
|
82
|
+
}
|
|
83
|
+
const ownerScope = await owner(c.req.raw);
|
|
84
|
+
if (ownerScope instanceof Response)
|
|
85
|
+
return ownerScope;
|
|
86
|
+
if (ownerScope.sourceId !== sourceId) {
|
|
87
|
+
return jsonError("access_denied", "Owner token has a different source scope", 403);
|
|
88
|
+
}
|
|
89
|
+
if (!isConnectionId(connectionId, ownerScope.subjectId, sourceId)) {
|
|
90
|
+
return jsonError("connection_id_invalid", "Connection id is invalid", 400);
|
|
91
|
+
}
|
|
92
|
+
const configured = deps.connectionMethods.get(sourceId) ?? [];
|
|
93
|
+
if (configured.length !== 1 || configured[0] !== input.method_id) {
|
|
94
|
+
return jsonError("method_inactive", "Method is not active for this source", 409);
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
const binding = deps.store.registerConnection({
|
|
98
|
+
instance: connectionId,
|
|
99
|
+
sourceId,
|
|
100
|
+
method: input.method_id,
|
|
101
|
+
label: input.label,
|
|
102
|
+
});
|
|
103
|
+
if (deps.canonicalSourceIds.has(sourceId)) {
|
|
104
|
+
deps.configuredMethods.set(connectionId, [input.method_id]);
|
|
105
|
+
}
|
|
106
|
+
return c.json(connectionJson(binding), 200);
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
if (error instanceof PdppBindingError) {
|
|
110
|
+
const status = error.reason === "connection_id_invalid" ? 400 : 409;
|
|
111
|
+
return jsonError(error.reason, error.reason, status);
|
|
112
|
+
}
|
|
113
|
+
throw error;
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
app.delete("/pdpp/connections/:connectionId", async (c) => {
|
|
117
|
+
const connectionId = c.req.param("connectionId");
|
|
118
|
+
const ownerScope = await owner(c.req.raw);
|
|
119
|
+
if (ownerScope instanceof Response)
|
|
120
|
+
return ownerScope;
|
|
121
|
+
const current = deps.store.getInstanceBinding(connectionId);
|
|
122
|
+
if (!current.sourceId ||
|
|
123
|
+
!deps.sourceIds.has(current.sourceId) ||
|
|
124
|
+
!isConnectionId(connectionId, ownerScope.subjectId, current.sourceId)) {
|
|
125
|
+
return jsonError("not_found", "Connection not found", 404);
|
|
126
|
+
}
|
|
127
|
+
if (ownerScope.sourceId !== current.sourceId) {
|
|
128
|
+
return jsonError("access_denied", "Owner token has a different source scope", 403);
|
|
129
|
+
}
|
|
130
|
+
if (current.deletedAt !== null)
|
|
131
|
+
return c.json(connectionJson(current), 200);
|
|
132
|
+
try {
|
|
133
|
+
return c.json(connectionJson(deps.store.deleteConnection(connectionId)), 200);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
if (error instanceof PdppBindingError) {
|
|
137
|
+
return jsonError(error.reason, error.reason, 409);
|
|
138
|
+
}
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
return app;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=pdpp-connections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdpp-connections.js","sourceRoot":"","sources":["../../src/routes/pdpp-connections.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Declaration submission (§5 declaration acceptance).
|
|
3
|
+
*
|
|
4
|
+
* `POST /pdpp/declarations` — offer a SourceDeclaration and get an accept or a
|
|
5
|
+
* refusal, in this server lifetime.
|
|
6
|
+
*
|
|
7
|
+
* ## Why this route exists
|
|
8
|
+
*
|
|
9
|
+
* The AS already had a real validator (`parseDeclaration`) and a real trust
|
|
10
|
+
* policy (the connector gate), but both ran only at construction: declarations
|
|
11
|
+
* came from `config.pdpp.declarationPaths`, were parsed once, and were pinned.
|
|
12
|
+
* Asking "would you accept this document?" therefore meant editing config and
|
|
13
|
+
* restarting the process. That is not merely inconvenient — it makes the
|
|
14
|
+
* question unanswerable. A restart-per-submission puts a control and its
|
|
15
|
+
* negative case in two different server lifetimes, so what gets measured is
|
|
16
|
+
* what survives a reboot, not what the AS refuses at an acceptance surface.
|
|
17
|
+
*
|
|
18
|
+
* ## Why it is operator-authenticated and NOT client-reachable
|
|
19
|
+
*
|
|
20
|
+
* A declaration asserts authority over a source: which streams exist, which
|
|
21
|
+
* fields they have, what an owner is consenting to when they approve a grant
|
|
22
|
+
* against it. A client that can submit its own declaration can declare itself
|
|
23
|
+
* authority over any source and then request a grant against the shape it
|
|
24
|
+
* just invented, which defeats the entire §5 trust model. So the credential
|
|
25
|
+
* here is the operator's — the same authority that may edit
|
|
26
|
+
* `declarationPaths` — and never a client token. Absent a configured operator
|
|
27
|
+
* credential the route refuses everything, because a submission surface that
|
|
28
|
+
* fails open is worse than no submission surface.
|
|
29
|
+
*
|
|
30
|
+
* ## The response contract
|
|
31
|
+
*
|
|
32
|
+
* Acceptance is `200` with the snapshot now retained for the key, so a caller
|
|
33
|
+
* can see what is actually held rather than inferring it from a bare 204.
|
|
34
|
+
* Refusal is `400` with `{ error, error_description }`, where `error` is the
|
|
35
|
+
* `DeclarationFailureCode` the validator produced. Acceptance is idempotent
|
|
36
|
+
* for an identical resubmission: a positive control has to be runnable twice.
|
|
37
|
+
*/
|
|
38
|
+
import { Hono } from "hono";
|
|
39
|
+
import type { Logger } from "pino";
|
|
40
|
+
import type { MutableDeclarationRegistry } from "../pdpp/declaration-registry.js";
|
|
41
|
+
export interface PdppDeclarationRouteDeps {
|
|
42
|
+
logger: Logger;
|
|
43
|
+
registry: MutableDeclarationRegistry;
|
|
44
|
+
/**
|
|
45
|
+
* The connector inventory, for the response's benefit only — the registry
|
|
46
|
+
* applies the gate itself. Kept in the deps so a caller can see the two are
|
|
47
|
+
* meant to agree.
|
|
48
|
+
*/
|
|
49
|
+
supportedConnectors: string[];
|
|
50
|
+
/**
|
|
51
|
+
* The operator credential. Undefined disables the route entirely (every
|
|
52
|
+
* request is refused), which is the safe reading of "no credential
|
|
53
|
+
* configured" for a surface that decides what this server trusts.
|
|
54
|
+
*/
|
|
55
|
+
operatorToken?: string;
|
|
56
|
+
}
|
|
57
|
+
export declare function pdppDeclarationRoutes(deps: PdppDeclarationRouteDeps): Hono;
|
|
58
|
+
//# sourceMappingURL=pdpp-declarations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdpp-declarations.d.ts","sourceRoot":"","sources":["../../src/routes/pdpp-declarations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAElF,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,0BAA0B,CAAC;IACrC;;;;OAIG;IACH,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,wBAAwB,GAAG,IAAI,CA+D1E"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Declaration submission (§5 declaration acceptance).
|
|
3
|
+
*
|
|
4
|
+
* `POST /pdpp/declarations` — offer a SourceDeclaration and get an accept or a
|
|
5
|
+
* refusal, in this server lifetime.
|
|
6
|
+
*
|
|
7
|
+
* ## Why this route exists
|
|
8
|
+
*
|
|
9
|
+
* The AS already had a real validator (`parseDeclaration`) and a real trust
|
|
10
|
+
* policy (the connector gate), but both ran only at construction: declarations
|
|
11
|
+
* came from `config.pdpp.declarationPaths`, were parsed once, and were pinned.
|
|
12
|
+
* Asking "would you accept this document?" therefore meant editing config and
|
|
13
|
+
* restarting the process. That is not merely inconvenient — it makes the
|
|
14
|
+
* question unanswerable. A restart-per-submission puts a control and its
|
|
15
|
+
* negative case in two different server lifetimes, so what gets measured is
|
|
16
|
+
* what survives a reboot, not what the AS refuses at an acceptance surface.
|
|
17
|
+
*
|
|
18
|
+
* ## Why it is operator-authenticated and NOT client-reachable
|
|
19
|
+
*
|
|
20
|
+
* A declaration asserts authority over a source: which streams exist, which
|
|
21
|
+
* fields they have, what an owner is consenting to when they approve a grant
|
|
22
|
+
* against it. A client that can submit its own declaration can declare itself
|
|
23
|
+
* authority over any source and then request a grant against the shape it
|
|
24
|
+
* just invented, which defeats the entire §5 trust model. So the credential
|
|
25
|
+
* here is the operator's — the same authority that may edit
|
|
26
|
+
* `declarationPaths` — and never a client token. Absent a configured operator
|
|
27
|
+
* credential the route refuses everything, because a submission surface that
|
|
28
|
+
* fails open is worse than no submission surface.
|
|
29
|
+
*
|
|
30
|
+
* ## The response contract
|
|
31
|
+
*
|
|
32
|
+
* Acceptance is `200` with the snapshot now retained for the key, so a caller
|
|
33
|
+
* can see what is actually held rather than inferring it from a bare 204.
|
|
34
|
+
* Refusal is `400` with `{ error, error_description }`, where `error` is the
|
|
35
|
+
* `DeclarationFailureCode` the validator produced. Acceptance is idempotent
|
|
36
|
+
* for an identical resubmission: a positive control has to be runnable twice.
|
|
37
|
+
*/
|
|
38
|
+
import { Hono } from "hono";
|
|
39
|
+
import { timingSafeEqual } from "node:crypto";
|
|
40
|
+
export function pdppDeclarationRoutes(deps) {
|
|
41
|
+
const app = new Hono();
|
|
42
|
+
app.post("/declarations", async (c) => {
|
|
43
|
+
if (!authorized(c.req.header("authorization"), deps.operatorToken)) {
|
|
44
|
+
return c.json({
|
|
45
|
+
error: "unauthorized",
|
|
46
|
+
error_description: "Declaration submission requires the operator credential",
|
|
47
|
+
}, 401, { "Cache-Control": "no-store" });
|
|
48
|
+
}
|
|
49
|
+
// Read the raw bytes, not a parsed body. The digest a producer's envelope
|
|
50
|
+
// is later checked against is taken over exactly what was submitted, so
|
|
51
|
+
// re-serializing a parsed object here would change the digest for
|
|
52
|
+
// formatting alone and quietly break verification.
|
|
53
|
+
const document = await c.req.text();
|
|
54
|
+
const result = deps.registry.submit(document);
|
|
55
|
+
if (!result.ok) {
|
|
56
|
+
deps.logger.warn({ code: result.failure.code, reason: result.failure.message }, "PDPP declaration refused");
|
|
57
|
+
return c.json({
|
|
58
|
+
error: result.failure.code,
|
|
59
|
+
error_description: result.failure.message,
|
|
60
|
+
}, 400, { "Cache-Control": "no-store" });
|
|
61
|
+
}
|
|
62
|
+
deps.logger.info({
|
|
63
|
+
sourceId: result.snapshot.source_id,
|
|
64
|
+
version: result.snapshot.version,
|
|
65
|
+
digest: result.snapshot.digest.slice(0, 12),
|
|
66
|
+
}, "PDPP declaration retained");
|
|
67
|
+
// What is retained for this key after the call — clause 5.8-4's retention
|
|
68
|
+
// half stays observable without a second request.
|
|
69
|
+
return c.json({
|
|
70
|
+
source_id: result.snapshot.source_id,
|
|
71
|
+
source_kind: result.snapshot.source_kind,
|
|
72
|
+
version: result.snapshot.version,
|
|
73
|
+
digest: result.snapshot.digest,
|
|
74
|
+
streams: result.snapshot.streams.map((s) => s.name),
|
|
75
|
+
}, 200, { "Cache-Control": "no-store" });
|
|
76
|
+
});
|
|
77
|
+
return app;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Constant-time bearer comparison. A submission surface that decides what the
|
|
81
|
+
* server trusts is worth not leaking its credential a byte at a time.
|
|
82
|
+
*/
|
|
83
|
+
function authorized(header, expected) {
|
|
84
|
+
if (!expected)
|
|
85
|
+
return false;
|
|
86
|
+
if (!header?.toLowerCase().startsWith("bearer "))
|
|
87
|
+
return false;
|
|
88
|
+
const presented = Buffer.from(header.slice(7).trim());
|
|
89
|
+
const secret = Buffer.from(expected);
|
|
90
|
+
if (presented.length !== secret.length)
|
|
91
|
+
return false;
|
|
92
|
+
return timingSafeEqual(presented, secret);
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=pdpp-declarations.js.map
|