@opendatalabs/personal-server-ts-server 1.35.4 → 1.36.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-operations.d.ts","sourceRoot":"","sources":["../../src/storage/import-operations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAGV,aAAa,EACb,mBAAmB,EACpB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qDAAqD,CAAC;AACxF,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,yDAAyD,CAAC;AAajE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6CAA6C,CAAC;AAmBhF,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,uBAAuB;
|
|
1
|
+
{"version":3,"file":"import-operations.d.ts","sourceRoot":"","sources":["../../src/storage/import-operations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAGV,aAAa,EACb,mBAAmB,EACpB,MAAM,6CAA6C,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qDAAqD,CAAC;AACxF,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,yDAAyD,CAAC;AAajE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6CAA6C,CAAC;AAmBhF,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,uBAAuB;6BAyJrB,aAAa,KACrB,OAAO,CAAC,mBAAmB,CAAC;uBA8IV,MAAM,GAAG,MAAM;IAqClC;;;;;;OAMG;+BAEM,MAAM,eACA,MAAM,SACZ,YAAY,GAClB,OAAO;IAkBV;;;;;OAKG;wCAEM,MAAM,eACA,MAAM,SACZ,YAAY,GAClB,OAAO;yBAyBD,MAAM,eACA,MAAM,gBACL,MAAM,GACnB,OAAO;4BAqBc,MAAM,GAAG,OAAO;EAS3C"}
|
|
@@ -3,7 +3,7 @@ import { buildDataFilePath, } from "@opendatalabs/personal-server-ts-core/storag
|
|
|
3
3
|
import { ProtocolError } from "@opendatalabs/personal-server-ts-core/errors";
|
|
4
4
|
import { IngestPersistedError } from "@opendatalabs/personal-server-ts-core/contracts";
|
|
5
5
|
import { deleteDataFileSync, deleteFirstSeenLedgerSync, deleteScopeFilesSync, publishDataFile, PublishedDataFileError, snapshotScopeFiles, } from "./hierarchy.js";
|
|
6
|
-
import { relative } from "node:path";
|
|
6
|
+
import { relative, resolve } from "node:path";
|
|
7
7
|
const keyWhere = "authority = @authority AND owner = @owner AND scope = @scope AND operation = @operation";
|
|
8
8
|
export function createImportOperations(db, index, options) {
|
|
9
9
|
const immediate = (run) => db.transaction(run).immediate();
|
|
@@ -27,51 +27,66 @@ export function createImportOperations(db, index, options) {
|
|
|
27
27
|
: undefined);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
function recover() {
|
|
30
|
+
function recover(own, replicaPath) {
|
|
31
31
|
const rows = db
|
|
32
32
|
.prepare("SELECT * FROM owner_import_operations WHERE state = 'prepared' OR (state IN ('deleted', 'cancelled') AND metadata_json IS NOT NULL) ORDER BY rowid")
|
|
33
33
|
.all();
|
|
34
34
|
for (const row of rows) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
index.deleteByPath(row.path);
|
|
38
|
-
db.prepare(`UPDATE owner_import_operations SET envelope_bytes = NULL, metadata_json = NULL WHERE ${keyWhere}`).run(row);
|
|
39
|
-
continue;
|
|
35
|
+
try {
|
|
36
|
+
recoverRow(row);
|
|
40
37
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
schemaId: null,
|
|
50
|
-
path: row.path,
|
|
51
|
-
scope: row.scope,
|
|
52
|
-
collectedAt: row.collected_at,
|
|
53
|
-
sizeBytes: metadata.sizeBytes ?? written.sizeBytes,
|
|
54
|
-
afterTombstoneVersion: metadata.afterTombstoneVersion ?? null,
|
|
55
|
-
});
|
|
56
|
-
if (!inserted.ok) {
|
|
57
|
-
// The index closed this scope for writes (history unknown). Fail
|
|
58
|
-
// closed like an ordinary write: drop the unacknowledged operation
|
|
59
|
-
// so the caller can retry once the scope is repaired.
|
|
60
|
-
deleteDataFileSync(options, row.scope, row.collected_at, row.operation);
|
|
61
|
-
db.prepare(`DELETE FROM owner_import_operations WHERE ${keyWhere}`).run(row);
|
|
62
|
-
continue;
|
|
38
|
+
catch (error) {
|
|
39
|
+
if (row.path === replicaPath ||
|
|
40
|
+
(own &&
|
|
41
|
+
row.scope === own.scope &&
|
|
42
|
+
row.authority === own.authority &&
|
|
43
|
+
row.owner === own.owner &&
|
|
44
|
+
row.operation === own.operation)) {
|
|
45
|
+
throw error;
|
|
63
46
|
}
|
|
64
|
-
entry = inserted.entry;
|
|
65
47
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function recoverRow(row) {
|
|
51
|
+
if (row.state !== "prepared") {
|
|
52
|
+
deleteDataFileSync(options, row.scope, row.collected_at, row.operation);
|
|
53
|
+
index.deleteByPath(row.path);
|
|
54
|
+
db.prepare(`UPDATE owner_import_operations SET envelope_bytes = NULL, metadata_json = NULL WHERE ${keyWhere}`).run(row);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const bytes = row.envelope_bytes;
|
|
58
|
+
const envelope = JSON.parse(bytes.toString("utf8"));
|
|
59
|
+
const metadata = JSON.parse(row.metadata_json);
|
|
60
|
+
const written = publishDataFile(options, envelope, bytes, row.operation);
|
|
61
|
+
let entry = index.findByPath(row.path);
|
|
62
|
+
if (!entry) {
|
|
63
|
+
const inserted = index.insertIfCurrent({
|
|
64
|
+
fileId: null,
|
|
65
|
+
schemaId: null,
|
|
66
|
+
path: row.path,
|
|
69
67
|
scope: row.scope,
|
|
70
|
-
collectedAt:
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
68
|
+
collectedAt: row.collected_at,
|
|
69
|
+
sizeBytes: metadata.sizeBytes ?? written.sizeBytes,
|
|
70
|
+
afterTombstoneVersion: metadata.afterTombstoneVersion ?? null,
|
|
71
|
+
});
|
|
72
|
+
if (!inserted.ok) {
|
|
73
|
+
// The index closed this scope for writes (history unknown). Fail
|
|
74
|
+
// closed like an ordinary write: drop the unacknowledged operation
|
|
75
|
+
// so the caller can retry once the scope is repaired.
|
|
76
|
+
deleteDataFileSync(options, row.scope, row.collected_at, row.operation);
|
|
77
|
+
db.prepare(`DELETE FROM owner_import_operations WHERE ${keyWhere}`).run(row);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
entry = inserted.entry;
|
|
74
81
|
}
|
|
82
|
+
const receipt = {
|
|
83
|
+
operation: row.operation,
|
|
84
|
+
bodySha256: row.body_sha256,
|
|
85
|
+
scope: row.scope,
|
|
86
|
+
collectedAt: entry.collectedAt,
|
|
87
|
+
acceptedAt: new Date().toISOString(),
|
|
88
|
+
};
|
|
89
|
+
db.prepare(`UPDATE owner_import_operations SET state = 'accepted', receipt_json = @receipt, envelope_bytes = NULL, metadata_json = NULL WHERE ${keyWhere}`).run({ ...row, receipt: JSON.stringify(receipt) });
|
|
75
90
|
}
|
|
76
91
|
function reserve(envelope) {
|
|
77
92
|
// Ordinary writes keep a scope's collectedAt strictly increasing (see
|
|
@@ -102,7 +117,7 @@ export function createImportOperations(db, index, options) {
|
|
|
102
117
|
const admitted = immediate(() => {
|
|
103
118
|
const prior = find(command.envelope.scope, intent);
|
|
104
119
|
check(prior, intent);
|
|
105
|
-
recover();
|
|
120
|
+
recover(key(command.envelope.scope, intent));
|
|
106
121
|
if (prior)
|
|
107
122
|
return false;
|
|
108
123
|
const envelope = reserve(command.envelope);
|
|
@@ -119,7 +134,7 @@ export function createImportOperations(db, index, options) {
|
|
|
119
134
|
return true;
|
|
120
135
|
});
|
|
121
136
|
const published = immediate(() => {
|
|
122
|
-
recover();
|
|
137
|
+
recover(key(command.envelope.scope, intent));
|
|
123
138
|
const row = find(command.envelope.scope, intent);
|
|
124
139
|
// recover() dropped the operation: the scope is closed for writes.
|
|
125
140
|
// Report it after the drop commits; a throw here would roll it back.
|
|
@@ -154,7 +169,10 @@ export function createImportOperations(db, index, options) {
|
|
|
154
169
|
let publishedPath;
|
|
155
170
|
try {
|
|
156
171
|
return immediate(() => {
|
|
157
|
-
|
|
172
|
+
// A replica cannot reuse a path still owned by failed import cleanup.
|
|
173
|
+
recover(undefined, command.kind === "replica"
|
|
174
|
+
? relative(options.dataDir, buildDataFilePath(options.dataDir, command.envelope.scope, command.envelope.collectedAt))
|
|
175
|
+
: undefined);
|
|
158
176
|
const envelope = command.kind === "append"
|
|
159
177
|
? reserve(command.envelope)
|
|
160
178
|
: command.envelope;
|
|
@@ -219,7 +237,17 @@ export function createImportOperations(db, index, options) {
|
|
|
219
237
|
});
|
|
220
238
|
return immediate(() => {
|
|
221
239
|
recover();
|
|
222
|
-
|
|
240
|
+
// A replica can reuse a captured path between these transactions.
|
|
241
|
+
const captured = new Set(snapshot.entries.map(({ id }) => id));
|
|
242
|
+
const later = new Set(db
|
|
243
|
+
.prepare("SELECT id, path FROM data_files WHERE scope = ?")
|
|
244
|
+
.all(scope)
|
|
245
|
+
.filter(({ id }) => !captured.has(id))
|
|
246
|
+
.map(({ path }) => resolve(options.dataDir, path)));
|
|
247
|
+
deleteScopeFilesSync({
|
|
248
|
+
...snapshot.files,
|
|
249
|
+
files: snapshot.files.files.filter((file) => !later.has(file)),
|
|
250
|
+
});
|
|
223
251
|
const remove = db.prepare("DELETE FROM data_files WHERE id = @id AND path = @path");
|
|
224
252
|
for (const entry of snapshot.entries)
|
|
225
253
|
remove.run(entry);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-operations.js","sourceRoot":"","sources":["../../src/storage/import-operations.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"import-operations.js","sourceRoot":"","sources":["../../src/storage/import-operations.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/ps-lite-debug.js
CHANGED
|
@@ -123780,14 +123780,14 @@ function parsePayload(value) {
|
|
|
123780
123780
|
grantId: payload["grantId"]
|
|
123781
123781
|
};
|
|
123782
123782
|
}
|
|
123783
|
-
function parseWeb3SignedHeader(
|
|
123784
|
-
if (!
|
|
123783
|
+
function parseWeb3SignedHeader(headerValue2) {
|
|
123784
|
+
if (!headerValue2) {
|
|
123785
123785
|
throw new MissingAuthError();
|
|
123786
123786
|
}
|
|
123787
|
-
if (!
|
|
123787
|
+
if (!headerValue2.startsWith(WEB3_SIGNED_PREFIX)) {
|
|
123788
123788
|
throw new InvalidSignatureError2({ reason: "Missing Web3Signed prefix" });
|
|
123789
123789
|
}
|
|
123790
|
-
const value =
|
|
123790
|
+
const value = headerValue2.slice(WEB3_SIGNED_PREFIX.length);
|
|
123791
123791
|
const dotIndex = value.indexOf(".");
|
|
123792
123792
|
if (dotIndex === -1 || dotIndex === 0 || dotIndex === value.length - 1) {
|
|
123793
123793
|
throw new InvalidSignatureError2({ reason: "Invalid header format" });
|
|
@@ -146023,8 +146023,8 @@ function canonicalJsonBytes(value) {
|
|
|
146023
146023
|
// ../core/dist/auth/proof-id.js
|
|
146024
146024
|
var MAX_PROOF_LIFETIME_SEC = 15 * 60;
|
|
146025
146025
|
var PROOF_CLOCK_SKEW_SEC = 60;
|
|
146026
|
-
async function web3SignedProofId(
|
|
146027
|
-
const { payloadBase64 } = parseWeb3SignedHeader(
|
|
146026
|
+
async function web3SignedProofId(headerValue2, signer) {
|
|
146027
|
+
const { payloadBase64 } = parseWeb3SignedHeader(headerValue2);
|
|
146028
146028
|
const bytes2 = new TextEncoder().encode(`${signer.toLowerCase()}
|
|
146029
146029
|
${payloadBase64}`);
|
|
146030
146030
|
const digest6 = await crypto.subtle.digest("SHA-256", bytes2);
|
|
@@ -146113,8 +146113,8 @@ async function signedBytesFor(request2, bodyBytes) {
|
|
|
146113
146113
|
});
|
|
146114
146114
|
}
|
|
146115
146115
|
async function verifyWriterAttribution(input) {
|
|
146116
|
-
const
|
|
146117
|
-
if (!
|
|
146116
|
+
const headerValue2 = input.request.headers.get(WRITE_SIGNATURE_HEADER) ?? void 0;
|
|
146117
|
+
if (!headerValue2) {
|
|
146118
146118
|
throw new ProtocolError(401, "WRITE_ATTRIBUTION_REQUIRED", `Session writes must carry a builder-signed payload proof in ${WRITE_SIGNATURE_HEADER}`);
|
|
146119
146119
|
}
|
|
146120
146120
|
const url2 = new URL(input.request.url);
|
|
@@ -146122,7 +146122,7 @@ async function verifyWriterAttribution(input) {
|
|
|
146122
146122
|
const expectedUri = canonicalSignedUri(url2.pathname, url2.search);
|
|
146123
146123
|
let expectedPath = expectedUri;
|
|
146124
146124
|
try {
|
|
146125
|
-
const claimedUri = parseWeb3SignedHeader(
|
|
146125
|
+
const claimedUri = parseWeb3SignedHeader(headerValue2).payload.uri;
|
|
146126
146126
|
if (canonicalizeSignedUri(claimedUri) === expectedUri) {
|
|
146127
146127
|
expectedPath = claimedUri;
|
|
146128
146128
|
}
|
|
@@ -146131,7 +146131,7 @@ async function verifyWriterAttribution(input) {
|
|
|
146131
146131
|
let verified;
|
|
146132
146132
|
try {
|
|
146133
146133
|
verified = await verifyWeb3Signed({
|
|
146134
|
-
headerValue,
|
|
146134
|
+
headerValue: headerValue2,
|
|
146135
146135
|
expectedOrigin: resolveOrigin(input.serverOrigin),
|
|
146136
146136
|
expectedMethod: input.request.method,
|
|
146137
146137
|
expectedPath,
|
|
@@ -146147,7 +146147,7 @@ async function verifyWriterAttribution(input) {
|
|
|
146147
146147
|
throw new ProtocolError(401, "WRITE_ATTRIBUTION_GRANT_MISMATCH", "Payload proof must carry the write session's grantId as a signed claim", { expected: input.grantId, actual: verified.payload.grantId ?? null });
|
|
146148
146148
|
}
|
|
146149
146149
|
const expiresAtMs = boundedProofExpiry(verified.payload, "WRITE_ATTRIBUTION_LIFETIME");
|
|
146150
|
-
const { payloadBase64, signature } = parseWeb3SignedHeader(
|
|
146150
|
+
const { payloadBase64, signature } = parseWeb3SignedHeader(headerValue2);
|
|
146151
146151
|
const nonce = signedNonce(payloadBase64);
|
|
146152
146152
|
if (!isBodylessMethod(input.request.method) && bodyBytes.byteLength > 0 && isJsonContentType(input.request)) {
|
|
146153
146153
|
assertCanonicalJsonBody(bodyBytes);
|
|
@@ -146155,7 +146155,7 @@ async function verifyWriterAttribution(input) {
|
|
|
146155
146155
|
let releaseProof;
|
|
146156
146156
|
if (input.replayStore) {
|
|
146157
146157
|
const store = input.replayStore;
|
|
146158
|
-
const proofId = nonce === void 0 ? await web3SignedProofId(
|
|
146158
|
+
const proofId = nonce === void 0 ? await web3SignedProofId(headerValue2, verified.signer) : await hashConnectionToken(`nonce:${input.builderAddress.toLowerCase()}:${nonce}`);
|
|
146159
146159
|
const replayed = await store.consume(proofId, expiresAtMs);
|
|
146160
146160
|
if (replayed) {
|
|
146161
146161
|
throw new ProtocolError(401, "WRITE_ATTRIBUTION_REPLAY", nonce === void 0 ? "Payload proof already used; sign a fresh proof for each call (or add a unique nonce claim so repeated reads stay distinct)" : "Payload proof nonce already used; each nonce is single use");
|
|
@@ -147395,10 +147395,10 @@ function decodeBase64(input) {
|
|
|
147395
147395
|
}
|
|
147396
147396
|
throw new Error("Base64 decoding is not available in this runtime");
|
|
147397
147397
|
}
|
|
147398
|
-
function parseOAuthBasicAuth(
|
|
147399
|
-
if (!
|
|
147398
|
+
function parseOAuthBasicAuth(headerValue2) {
|
|
147399
|
+
if (!headerValue2?.startsWith("Basic "))
|
|
147400
147400
|
return null;
|
|
147401
|
-
const decoded = decodeBase64(
|
|
147401
|
+
const decoded = decodeBase64(headerValue2.slice(6));
|
|
147402
147402
|
const separatorIndex = decoded.indexOf(":");
|
|
147403
147403
|
if (separatorIndex === -1)
|
|
147404
147404
|
return null;
|
|
@@ -149826,12 +149826,12 @@ function base64decode(input) {
|
|
|
149826
149826
|
const bytes2 = Uint8Array.from(binString, (c10) => c10.codePointAt(0) ?? 0);
|
|
149827
149827
|
return new TextDecoder().decode(bytes2);
|
|
149828
149828
|
}
|
|
149829
|
-
function parsePaymentHeader(
|
|
149830
|
-
if (!
|
|
149829
|
+
function parsePaymentHeader(headerValue2) {
|
|
149830
|
+
if (!headerValue2)
|
|
149831
149831
|
return null;
|
|
149832
149832
|
let decoded;
|
|
149833
149833
|
try {
|
|
149834
|
-
decoded = base64decode(
|
|
149834
|
+
decoded = base64decode(headerValue2.trim());
|
|
149835
149835
|
} catch {
|
|
149836
149836
|
return null;
|
|
149837
149837
|
}
|
|
@@ -150274,8 +150274,8 @@ async function handleX402Cycle(input) {
|
|
|
150274
150274
|
now: deps.now
|
|
150275
150275
|
});
|
|
150276
150276
|
}
|
|
150277
|
-
const
|
|
150278
|
-
const parsed = parsePaymentHeader(
|
|
150277
|
+
const headerValue2 = input.request.headers.get("x-payment");
|
|
150278
|
+
const parsed = parsePaymentHeader(headerValue2);
|
|
150279
150279
|
if (!parsed) {
|
|
150280
150280
|
return { kind: "challenge", body: await buildFreshChallenge() };
|
|
150281
150281
|
}
|
|
@@ -150792,6 +150792,37 @@ async function handlePersonalServerScopeUploadAppend(request2, deps, batch) {
|
|
|
150792
150792
|
return handleScopeUploadRequest(request2, deps, parts, batch);
|
|
150793
150793
|
});
|
|
150794
150794
|
}
|
|
150795
|
+
var READ_GRANTEE_OBSERVER = /* @__PURE__ */ Symbol.for("@opendatalabs/personal-server-ts-core/read-grantee-observer");
|
|
150796
|
+
function attachPersonalServerReadGranteeObserver(request2, observer) {
|
|
150797
|
+
Object.defineProperty(request2, READ_GRANTEE_OBSERVER, {
|
|
150798
|
+
value: observer,
|
|
150799
|
+
configurable: true
|
|
150800
|
+
});
|
|
150801
|
+
}
|
|
150802
|
+
function readGranteeObserverOf(request2) {
|
|
150803
|
+
const observer = request2[READ_GRANTEE_OBSERVER];
|
|
150804
|
+
return typeof observer === "function" ? observer : void 0;
|
|
150805
|
+
}
|
|
150806
|
+
async function granteeRefFor(authResult) {
|
|
150807
|
+
if (authResult?.grantId === "owner" || authResult?.grantId === "policy-bypass") {
|
|
150808
|
+
return "owner";
|
|
150809
|
+
}
|
|
150810
|
+
const builder = authResult?.builder;
|
|
150811
|
+
if (typeof builder !== "string" || !/^0x[0-9a-fA-F]{40}$/.test(builder)) {
|
|
150812
|
+
return void 0;
|
|
150813
|
+
}
|
|
150814
|
+
const digest6 = await sha256Hex(new TextEncoder().encode(builder.toLowerCase()));
|
|
150815
|
+
return digest6.slice(2, 14);
|
|
150816
|
+
}
|
|
150817
|
+
function notifyReadGrantee(request2, authResult) {
|
|
150818
|
+
const observer = readGranteeObserverOf(request2);
|
|
150819
|
+
if (!observer)
|
|
150820
|
+
return;
|
|
150821
|
+
try {
|
|
150822
|
+
observer(granteeRefFor(authResult).catch(() => void 0));
|
|
150823
|
+
} catch {
|
|
150824
|
+
}
|
|
150825
|
+
}
|
|
150795
150826
|
async function handlePersonalServerDataRequest(request2, deps, options = {}) {
|
|
150796
150827
|
const logContext = {
|
|
150797
150828
|
logger: deps.logger,
|
|
@@ -151029,6 +151060,7 @@ async function handlePersonalServerDataRequest(request2, deps, options = {}) {
|
|
|
151029
151060
|
fileId: fileIdParam ?? selectedEntry?.fileId ?? void 0,
|
|
151030
151061
|
at: atParam
|
|
151031
151062
|
});
|
|
151063
|
+
notifyReadGrantee(request2, authResult);
|
|
151032
151064
|
const latest = fileIdParam === void 0 && atParam === void 0 && view === null ? await deps.legacyScopeView?.readLatest(scopeResult.scope) : void 0;
|
|
151033
151065
|
const canonicalOwned = latest !== void 0 && deletionHistoryOf(latest) === "canonical";
|
|
151034
151066
|
await assertScopeNotDeleted(deps, scopeResult.scope, canonicalOwned ? void 0 : selectedEntry, canonicalOwned ? "canonical" : "file");
|
|
@@ -151808,10 +151840,10 @@ function safeCompare(a10, b10) {
|
|
|
151808
151840
|
}
|
|
151809
151841
|
return diff === 0;
|
|
151810
151842
|
}
|
|
151811
|
-
function getBearerToken(
|
|
151812
|
-
if (!
|
|
151843
|
+
function getBearerToken(headerValue2) {
|
|
151844
|
+
if (!headerValue2?.startsWith("Bearer "))
|
|
151813
151845
|
return null;
|
|
151814
|
-
return
|
|
151846
|
+
return headerValue2.slice(7);
|
|
151815
151847
|
}
|
|
151816
151848
|
async function cacheRequestBodyBytes(request2, maxBytes = DEFAULT_SIGNED_BODY_MAX_BYTES, consumeBody = false) {
|
|
151817
151849
|
if (request2.method === "GET" || request2.method === "HEAD")
|
|
@@ -173915,6 +173947,9 @@ function buildRequest2(origin, bridgeRequest) {
|
|
|
173915
173947
|
}
|
|
173916
173948
|
async function handlePsLiteBridgeRequest(runtime, bridgeRequest, options = {}) {
|
|
173917
173949
|
const request2 = buildRequest2(options.origin ?? "https://ps-lite.local", bridgeRequest);
|
|
173950
|
+
if (options.onReadGrantee) {
|
|
173951
|
+
attachPersonalServerReadGranteeObserver(request2, options.onReadGrantee);
|
|
173952
|
+
}
|
|
173918
173953
|
const response = await runtime.fetch(request2);
|
|
173919
173954
|
const bytes2 = new Uint8Array(await response.arrayBuffer());
|
|
173920
173955
|
return {
|
|
@@ -174562,8 +174597,9 @@ var DEFAULT_PUBLIC_SUFFIX2 = "34.16.49.200.sslip.io";
|
|
|
174562
174597
|
var DEFAULT_ORIGIN = "https://ps-lite.local";
|
|
174563
174598
|
var RELAY_CLOSE_SESSION_REPLACED = 1012;
|
|
174564
174599
|
var HEARTBEAT_LATE_FIRE_FACTOR = 2;
|
|
174565
|
-
function psLiteRelayControlUrl(sessionId, controlUrl = DEFAULT_CONTROL_URL) {
|
|
174566
|
-
|
|
174600
|
+
function psLiteRelayControlUrl(sessionId, controlUrl = DEFAULT_CONTROL_URL, connTag) {
|
|
174601
|
+
const base2 = `${controlUrl.replace(/\/+$/, "")}/browser/${sessionId}`;
|
|
174602
|
+
return connTag ? `${base2}?tag=${encodeURIComponent(connTag)}` : base2;
|
|
174567
174603
|
}
|
|
174568
174604
|
function psLiteRelayPublicUrl(sessionId, publicSuffix = DEFAULT_PUBLIC_SUFFIX2) {
|
|
174569
174605
|
return `https://${sessionId}.${publicSuffix.replace(/^\./, "")}`;
|
|
@@ -174603,7 +174639,146 @@ function startPsLiteRelayClient(options) {
|
|
|
174603
174639
|
let unansweredPingSentAt;
|
|
174604
174640
|
let lastHeartbeatCheckAt = 0;
|
|
174605
174641
|
let heartbeatGraceUsed = false;
|
|
174642
|
+
let connTag = randomConnTag();
|
|
174606
174643
|
const log = (line) => options.logger?.(line);
|
|
174644
|
+
const emitStatus = (status2, detail) => options.onStatus?.(status2, { ...detail, connTag });
|
|
174645
|
+
const logHookError = (error51) => log(`relay read event hook failed: ${error51 instanceof Error ? error51.message : String(error51)}`);
|
|
174646
|
+
const readQueue = [];
|
|
174647
|
+
let readFlushTimer;
|
|
174648
|
+
let droppedReadEvents = 0;
|
|
174649
|
+
const flushReadEvents = () => {
|
|
174650
|
+
readFlushTimer = void 0;
|
|
174651
|
+
const batch = readQueue.splice(0);
|
|
174652
|
+
const hook = options.onReadEvent;
|
|
174653
|
+
if (closed || !hook)
|
|
174654
|
+
return;
|
|
174655
|
+
if (droppedReadEvents > 0) {
|
|
174656
|
+
log(`relay read events dropped (queue full): ${droppedReadEvents}`);
|
|
174657
|
+
droppedReadEvents = 0;
|
|
174658
|
+
}
|
|
174659
|
+
for (const produce of batch) {
|
|
174660
|
+
void Promise.resolve().then(produce).then((event) => closed ? void 0 : hook(event)).catch(logHookError);
|
|
174661
|
+
}
|
|
174662
|
+
};
|
|
174663
|
+
const dispatchReadEvent = (produce) => {
|
|
174664
|
+
if (closed || !options.onReadEvent)
|
|
174665
|
+
return;
|
|
174666
|
+
if (readQueue.length >= MAX_QUEUED_READ_EVENTS) {
|
|
174667
|
+
readQueue.shift();
|
|
174668
|
+
droppedReadEvents += 1;
|
|
174669
|
+
}
|
|
174670
|
+
readQueue.push(produce);
|
|
174671
|
+
readFlushTimer ??= setTimeout(flushReadEvents, 0);
|
|
174672
|
+
};
|
|
174673
|
+
const stopReadEvents = () => {
|
|
174674
|
+
readQueue.length = 0;
|
|
174675
|
+
if (readFlushTimer !== void 0) {
|
|
174676
|
+
clearTimeout(readFlushTimer);
|
|
174677
|
+
readFlushTimer = void 0;
|
|
174678
|
+
}
|
|
174679
|
+
};
|
|
174680
|
+
const appVisibility = () => {
|
|
174681
|
+
try {
|
|
174682
|
+
const state = options.appVisibility ? options.appVisibility() : documentVisibility();
|
|
174683
|
+
return state === "visible" || state === "hidden" ? state : "unknown";
|
|
174684
|
+
} catch {
|
|
174685
|
+
return "unknown";
|
|
174686
|
+
}
|
|
174687
|
+
};
|
|
174688
|
+
const sampleHidden = (tracker) => {
|
|
174689
|
+
const visibility = appVisibility();
|
|
174690
|
+
if (visibility === "hidden")
|
|
174691
|
+
tracker.hiddenDuring = true;
|
|
174692
|
+
else if (visibility === "visible")
|
|
174693
|
+
tracker.hiddenDuring ??= false;
|
|
174694
|
+
return visibility;
|
|
174695
|
+
};
|
|
174696
|
+
const beginRead = (stream, request2) => {
|
|
174697
|
+
const seq = stream.requestSeq;
|
|
174698
|
+
stream.requestSeq += 1;
|
|
174699
|
+
const scope = relayReadScope(request2);
|
|
174700
|
+
if (scope === void 0)
|
|
174701
|
+
return void 0;
|
|
174702
|
+
const tracker = {
|
|
174703
|
+
ids: {
|
|
174704
|
+
readRef: `${stream.streamRef ?? crypto.randomUUID()}:${seq}`,
|
|
174705
|
+
...stream.streamRef ? { streamRef: stream.streamRef } : {},
|
|
174706
|
+
connTag: stream.connTag,
|
|
174707
|
+
scope,
|
|
174708
|
+
method: request2.method.toUpperCase()
|
|
174709
|
+
},
|
|
174710
|
+
startedAt: Date.now(),
|
|
174711
|
+
hiddenDuring: void 0,
|
|
174712
|
+
done: false
|
|
174713
|
+
};
|
|
174714
|
+
const visibility = sampleHidden(tracker);
|
|
174715
|
+
stream.activeRead = tracker;
|
|
174716
|
+
const received = {
|
|
174717
|
+
type: "ps_read_received",
|
|
174718
|
+
at: tracker.startedAt,
|
|
174719
|
+
...tracker.ids,
|
|
174720
|
+
appVisibility: visibility
|
|
174721
|
+
};
|
|
174722
|
+
dispatchReadEvent(() => received);
|
|
174723
|
+
return tracker;
|
|
174724
|
+
};
|
|
174725
|
+
const finishRead = (tracker, result) => {
|
|
174726
|
+
if (!tracker || tracker.done)
|
|
174727
|
+
return;
|
|
174728
|
+
tracker.done = true;
|
|
174729
|
+
sampleHidden(tracker);
|
|
174730
|
+
const finishedAt = Date.now();
|
|
174731
|
+
const durationMs = Math.max(0, finishedAt - tracker.startedAt);
|
|
174732
|
+
const hiddenDuring = tracker.hiddenDuring;
|
|
174733
|
+
const emptyCheckBody = result.body && result.body.length <= EMPTY_CHECK_MAX_BYTES ? result.body : void 0;
|
|
174734
|
+
const { status: status2, contentType, granteeRef: granteeRefPromise } = result;
|
|
174735
|
+
const outcomeOrClassify = result.outcome;
|
|
174736
|
+
const bytesOut = result.bytesOut ?? 0;
|
|
174737
|
+
const gzip = result.gzip ?? false;
|
|
174738
|
+
dispatchReadEvent(async () => {
|
|
174739
|
+
const outcome = outcomeOrClassify === "classify" ? classifyReadOutcome(status2 ?? 0, emptyCheckBody, contentType) : outcomeOrClassify;
|
|
174740
|
+
const granteeRef = validGranteeRef(granteeRefPromise ? await withTimeout3(granteeRefPromise, GRANTEE_REF_WAIT_MS) : void 0);
|
|
174741
|
+
return {
|
|
174742
|
+
type: "ps_read_finished",
|
|
174743
|
+
at: finishedAt,
|
|
174744
|
+
...tracker.ids,
|
|
174745
|
+
...granteeRef ? { granteeRef } : {},
|
|
174746
|
+
...status2 !== void 0 ? { status: status2 } : {},
|
|
174747
|
+
outcome,
|
|
174748
|
+
bytesOut,
|
|
174749
|
+
gzip,
|
|
174750
|
+
durationMs,
|
|
174751
|
+
...hiddenDuring !== void 0 ? { hiddenDuring } : {}
|
|
174752
|
+
};
|
|
174753
|
+
});
|
|
174754
|
+
};
|
|
174755
|
+
const visibilityDocument = options.appVisibility ? void 0 : readVisibilityDocument();
|
|
174756
|
+
const onVisibilityChange = () => {
|
|
174757
|
+
if (visibilityDocument?.visibilityState !== "hidden")
|
|
174758
|
+
return;
|
|
174759
|
+
for (const stream of streams.values()) {
|
|
174760
|
+
if (stream.activeRead && !stream.activeRead.done) {
|
|
174761
|
+
stream.activeRead.hiddenDuring = true;
|
|
174762
|
+
}
|
|
174763
|
+
}
|
|
174764
|
+
};
|
|
174765
|
+
let visibilityListening = false;
|
|
174766
|
+
if (visibilityDocument) {
|
|
174767
|
+
try {
|
|
174768
|
+
visibilityDocument.addEventListener("visibilitychange", onVisibilityChange);
|
|
174769
|
+
visibilityListening = true;
|
|
174770
|
+
} catch {
|
|
174771
|
+
}
|
|
174772
|
+
}
|
|
174773
|
+
const stopVisibilityListener = () => {
|
|
174774
|
+
if (!visibilityListening || !visibilityDocument)
|
|
174775
|
+
return;
|
|
174776
|
+
visibilityListening = false;
|
|
174777
|
+
try {
|
|
174778
|
+
visibilityDocument.removeEventListener("visibilitychange", onVisibilityChange);
|
|
174779
|
+
} catch {
|
|
174780
|
+
}
|
|
174781
|
+
};
|
|
174607
174782
|
const isLive = (stream) => !closed && !stream.closed && stream.socket === socket && socket.readyState === socket.OPEN && streams.get(stream.streamId) === stream;
|
|
174608
174783
|
const sendText = (message, target = socket) => {
|
|
174609
174784
|
if (!closed && target === socket && target.readyState === target.OPEN) {
|
|
@@ -174619,6 +174794,7 @@ function startPsLiteRelayClient(options) {
|
|
|
174619
174794
|
if (stream.closed)
|
|
174620
174795
|
return;
|
|
174621
174796
|
stream.closed = true;
|
|
174797
|
+
finishRead(stream.activeRead, { outcome: "stream_closed" });
|
|
174622
174798
|
if (streams.get(stream.streamId) === stream) {
|
|
174623
174799
|
streams.delete(stream.streamId);
|
|
174624
174800
|
pendingStreamData.delete(stream.streamId);
|
|
@@ -174640,17 +174816,17 @@ function startPsLiteRelayClient(options) {
|
|
|
174640
174816
|
};
|
|
174641
174817
|
const writePlaintextResponse = (stream, responseBytes) => {
|
|
174642
174818
|
if (!isLive(stream))
|
|
174643
|
-
return;
|
|
174819
|
+
return false;
|
|
174644
174820
|
if (!stream.tls) {
|
|
174645
174821
|
for (const chunk of chunks(responseBytes, RESPONSE_CHUNK_BYTES)) {
|
|
174646
174822
|
sendData(stream, chunk);
|
|
174647
174823
|
}
|
|
174648
|
-
return;
|
|
174824
|
+
return isLive(stream);
|
|
174649
174825
|
}
|
|
174650
174826
|
const responseChunks = chunks(responseBytes, RESPONSE_CHUNK_BYTES);
|
|
174651
174827
|
for (let index2 = 0; index2 < responseChunks.length; index2 += 1) {
|
|
174652
174828
|
if (!isLive(stream))
|
|
174653
|
-
return;
|
|
174829
|
+
return false;
|
|
174654
174830
|
const step = stream.tls.writePlaintext(responseChunks[index2], index2 === responseChunks.length - 1);
|
|
174655
174831
|
for (const chunk of chunks(step.tls, RESPONSE_CHUNK_BYTES)) {
|
|
174656
174832
|
if (chunk.length > 0) {
|
|
@@ -174658,6 +174834,7 @@ function startPsLiteRelayClient(options) {
|
|
|
174658
174834
|
}
|
|
174659
174835
|
}
|
|
174660
174836
|
}
|
|
174837
|
+
return isLive(stream);
|
|
174661
174838
|
};
|
|
174662
174839
|
const drainHttpRequests = async (stream) => {
|
|
174663
174840
|
while (isLive(stream)) {
|
|
@@ -174666,10 +174843,38 @@ function startPsLiteRelayClient(options) {
|
|
|
174666
174843
|
return;
|
|
174667
174844
|
}
|
|
174668
174845
|
stream.plaintext = stream.plaintext.slice(parsed.consumedBytes);
|
|
174669
|
-
const
|
|
174670
|
-
|
|
174846
|
+
const read = beginRead(stream, parsed.request);
|
|
174847
|
+
let relayed;
|
|
174848
|
+
try {
|
|
174849
|
+
relayed = await handleRelayHttpRequest(options.runtime, parsed.request, origin, Boolean(read));
|
|
174850
|
+
} catch (error51) {
|
|
174851
|
+
finishRead(read, { outcome: "handler_error" });
|
|
174852
|
+
throw error51;
|
|
174853
|
+
}
|
|
174854
|
+
const { response } = relayed;
|
|
174855
|
+
const finish = (outcome) => ({
|
|
174856
|
+
outcome,
|
|
174857
|
+
status: relayed.status,
|
|
174858
|
+
granteeRef: relayed.granteeRef,
|
|
174859
|
+
bytesOut: response.length,
|
|
174860
|
+
gzip: relayed.gzip
|
|
174861
|
+
});
|
|
174862
|
+
if (!isLive(stream)) {
|
|
174863
|
+
finishRead(read, { ...finish("stream_closed"), bytesOut: 0 });
|
|
174671
174864
|
return;
|
|
174672
|
-
|
|
174865
|
+
}
|
|
174866
|
+
let written;
|
|
174867
|
+
try {
|
|
174868
|
+
written = writePlaintextResponse(stream, binaryToBytes(response));
|
|
174869
|
+
} catch (error51) {
|
|
174870
|
+
finishRead(read, { ...finish("tls_error"), bytesOut: 0 });
|
|
174871
|
+
throw error51;
|
|
174872
|
+
}
|
|
174873
|
+
finishRead(read, written ? {
|
|
174874
|
+
...finish("classify"),
|
|
174875
|
+
body: relayed.plainBody,
|
|
174876
|
+
contentType: relayed.contentType
|
|
174877
|
+
} : finish("stream_closed"));
|
|
174673
174878
|
closeStream(stream, "http_response_sent");
|
|
174674
174879
|
return;
|
|
174675
174880
|
}
|
|
@@ -174707,7 +174912,7 @@ function startPsLiteRelayClient(options) {
|
|
|
174707
174912
|
closeStream(stream, "tls_error");
|
|
174708
174913
|
}
|
|
174709
174914
|
};
|
|
174710
|
-
const openStream = async (streamId) => {
|
|
174915
|
+
const openStream = async (streamId, streamRef) => {
|
|
174711
174916
|
const previous = streams.get(streamId);
|
|
174712
174917
|
if (previous)
|
|
174713
174918
|
disposeStream(previous);
|
|
@@ -174717,7 +174922,10 @@ function startPsLiteRelayClient(options) {
|
|
|
174717
174922
|
socket,
|
|
174718
174923
|
closed: false,
|
|
174719
174924
|
ready: !tls,
|
|
174720
|
-
handling: false
|
|
174925
|
+
handling: false,
|
|
174926
|
+
...streamRef ? { streamRef } : {},
|
|
174927
|
+
connTag,
|
|
174928
|
+
requestSeq: 0
|
|
174721
174929
|
};
|
|
174722
174930
|
streams.set(streamId, stream);
|
|
174723
174931
|
try {
|
|
@@ -174750,7 +174958,7 @@ function startPsLiteRelayClient(options) {
|
|
|
174750
174958
|
const handleControl = (message) => {
|
|
174751
174959
|
if (message.type === "session.ready") {
|
|
174752
174960
|
issueToken = message.issueToken;
|
|
174753
|
-
|
|
174961
|
+
emitStatus("connected");
|
|
174754
174962
|
if (tls && tls.prepare) {
|
|
174755
174963
|
void tls.prepare({
|
|
174756
174964
|
sessionId: options.sessionId,
|
|
@@ -174765,7 +174973,7 @@ function startPsLiteRelayClient(options) {
|
|
|
174765
174973
|
return;
|
|
174766
174974
|
}
|
|
174767
174975
|
if (message.type === "stream.open" && typeof message.streamId === "number") {
|
|
174768
|
-
void openStream(message.streamId);
|
|
174976
|
+
void openStream(message.streamId, parseStreamRef(message.streamRef));
|
|
174769
174977
|
return;
|
|
174770
174978
|
}
|
|
174771
174979
|
if (message.type === "stream.close" && typeof message.streamId === "number") {
|
|
@@ -174847,18 +175055,19 @@ function startPsLiteRelayClient(options) {
|
|
|
174847
175055
|
return;
|
|
174848
175056
|
}
|
|
174849
175057
|
issueToken = void 0;
|
|
174850
|
-
|
|
175058
|
+
connTag = randomConnTag();
|
|
175059
|
+
socket = createSocket(options.webSocketFactory, psLiteRelayControlUrl(options.sessionId, baseControlUrl, connTag));
|
|
174851
175060
|
const currentSocket = socket;
|
|
174852
175061
|
const isCurrent = () => !closed && socket === currentSocket;
|
|
174853
175062
|
const acceptsFrames = () => isCurrent() && currentSocket.readyState === currentSocket.OPEN;
|
|
174854
175063
|
socket.binaryType = "arraybuffer";
|
|
174855
|
-
|
|
175064
|
+
emitStatus("connecting");
|
|
174856
175065
|
socket.onopen = () => {
|
|
174857
175066
|
if (!acceptsFrames())
|
|
174858
175067
|
return;
|
|
174859
175068
|
reconnectAttempts = 0;
|
|
174860
175069
|
startHeartbeat();
|
|
174861
|
-
|
|
175070
|
+
emitStatus("connected");
|
|
174862
175071
|
};
|
|
174863
175072
|
socket.onmessage = (event) => {
|
|
174864
175073
|
if (!acceptsFrames())
|
|
@@ -174878,27 +175087,31 @@ function startPsLiteRelayClient(options) {
|
|
|
174878
175087
|
issueToken = void 0;
|
|
174879
175088
|
const detail = { code: event?.code, reason: event?.reason };
|
|
174880
175089
|
if (closed) {
|
|
174881
|
-
|
|
175090
|
+
stopVisibilityListener();
|
|
175091
|
+
stopReadEvents();
|
|
175092
|
+
emitStatus("closed", detail);
|
|
174882
175093
|
return;
|
|
174883
175094
|
}
|
|
174884
175095
|
if (event?.code === RELAY_CLOSE_SESSION_REPLACED) {
|
|
174885
175096
|
closed = true;
|
|
175097
|
+
stopVisibilityListener();
|
|
175098
|
+
stopReadEvents();
|
|
174886
175099
|
if (reconnectTimer !== void 0) {
|
|
174887
175100
|
clearTimeout(reconnectTimer);
|
|
174888
175101
|
reconnectTimer = void 0;
|
|
174889
175102
|
}
|
|
174890
175103
|
log("relay session replaced by another connection \u2014 not reconnecting");
|
|
174891
|
-
|
|
175104
|
+
emitStatus("replaced", detail);
|
|
174892
175105
|
return;
|
|
174893
175106
|
}
|
|
174894
|
-
|
|
175107
|
+
emitStatus("disconnected", detail);
|
|
174895
175108
|
scheduleReconnect();
|
|
174896
175109
|
};
|
|
174897
175110
|
socket.onerror = () => {
|
|
174898
175111
|
if (!isCurrent() || currentSocket.readyState > currentSocket.OPEN) {
|
|
174899
175112
|
return;
|
|
174900
175113
|
}
|
|
174901
|
-
|
|
175114
|
+
emitStatus("error");
|
|
174902
175115
|
};
|
|
174903
175116
|
}
|
|
174904
175117
|
connect();
|
|
@@ -174925,6 +175138,8 @@ function startPsLiteRelayClient(options) {
|
|
|
174925
175138
|
return;
|
|
174926
175139
|
closed = true;
|
|
174927
175140
|
stopHeartbeat();
|
|
175141
|
+
stopVisibilityListener();
|
|
175142
|
+
stopReadEvents();
|
|
174928
175143
|
if (reconnectTimer !== void 0) {
|
|
174929
175144
|
clearTimeout(reconnectTimer);
|
|
174930
175145
|
reconnectTimer = void 0;
|
|
@@ -174934,7 +175149,7 @@ function startPsLiteRelayClient(options) {
|
|
|
174934
175149
|
}
|
|
174935
175150
|
};
|
|
174936
175151
|
}
|
|
174937
|
-
async function handleRelayHttpRequest(runtime, request2, origin) {
|
|
175152
|
+
async function handleRelayHttpRequest(runtime, request2, origin, isRead) {
|
|
174938
175153
|
const bridgeRequest = {
|
|
174939
175154
|
requestId: crypto.randomUUID(),
|
|
174940
175155
|
method: request2.method,
|
|
@@ -174943,20 +175158,164 @@ async function handleRelayHttpRequest(runtime, request2, origin) {
|
|
|
174943
175158
|
headers: request2.headers,
|
|
174944
175159
|
body: encodeBase642(request2.body)
|
|
174945
175160
|
};
|
|
175161
|
+
let granteeRef;
|
|
174946
175162
|
const bridgeResponse = await handlePsLiteBridgeRequest(runtime, bridgeRequest, {
|
|
174947
|
-
origin
|
|
175163
|
+
origin,
|
|
175164
|
+
...isRead ? {
|
|
175165
|
+
onReadGrantee: (ref) => {
|
|
175166
|
+
granteeRef = ref;
|
|
175167
|
+
}
|
|
175168
|
+
} : {}
|
|
174948
175169
|
});
|
|
175170
|
+
const contentType = headerValue(bridgeResponse.headers, "content-type");
|
|
174949
175171
|
const bodyBytes = decodeBase643(bridgeResponse.body);
|
|
174950
175172
|
const acceptsGzip = (request2.headers["accept-encoding"] ?? "").includes("gzip");
|
|
174951
175173
|
const alreadyEncoded = Boolean(bridgeResponse.headers?.["content-encoding"]);
|
|
175174
|
+
const base2 = {
|
|
175175
|
+
status: bridgeResponse.status,
|
|
175176
|
+
plainBody: bodyBytes,
|
|
175177
|
+
...contentType !== void 0 ? { contentType } : {},
|
|
175178
|
+
...granteeRef ? { granteeRef } : {}
|
|
175179
|
+
};
|
|
174952
175180
|
if (acceptsGzip && !alreadyEncoded && bodyBytes.length >= GZIP_MIN_BYTES && typeof CompressionStream !== "undefined") {
|
|
174953
175181
|
const gzipped = await gzipBytes(bodyBytes);
|
|
174954
|
-
return
|
|
174955
|
-
|
|
174956
|
-
|
|
174957
|
-
|
|
175182
|
+
return {
|
|
175183
|
+
...base2,
|
|
175184
|
+
gzip: true,
|
|
175185
|
+
response: buildHttpResponse(bridgeResponse, {
|
|
175186
|
+
bodyOverride: gzipped,
|
|
175187
|
+
contentEncoding: "gzip"
|
|
175188
|
+
})
|
|
175189
|
+
};
|
|
175190
|
+
}
|
|
175191
|
+
return {
|
|
175192
|
+
...base2,
|
|
175193
|
+
gzip: false,
|
|
175194
|
+
response: buildHttpResponse(bridgeResponse, { bodyOverride: bodyBytes })
|
|
175195
|
+
};
|
|
175196
|
+
}
|
|
175197
|
+
function headerValue(headers, name) {
|
|
175198
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
175199
|
+
if (key.toLowerCase() === name)
|
|
175200
|
+
return value;
|
|
175201
|
+
}
|
|
175202
|
+
return void 0;
|
|
175203
|
+
}
|
|
175204
|
+
var DATA_PATH_PREFIX = "/v1/data/";
|
|
175205
|
+
function relayReadScope(request2) {
|
|
175206
|
+
const method = request2.method.toUpperCase();
|
|
175207
|
+
if (method !== "GET")
|
|
175208
|
+
return void 0;
|
|
175209
|
+
if (!request2.path.startsWith(DATA_PATH_PREFIX))
|
|
175210
|
+
return void 0;
|
|
175211
|
+
const rest = request2.path.slice(DATA_PATH_PREFIX.length).split("?")[0];
|
|
175212
|
+
if (!rest || rest.includes("/"))
|
|
175213
|
+
return void 0;
|
|
175214
|
+
const segment = rest;
|
|
175215
|
+
let scope;
|
|
175216
|
+
try {
|
|
175217
|
+
scope = decodeURIComponent(segment);
|
|
175218
|
+
} catch {
|
|
175219
|
+
return INVALID_SCOPE;
|
|
174958
175220
|
}
|
|
174959
|
-
|
|
175221
|
+
if (scope.length > MAX_SCOPE_LENGTH)
|
|
175222
|
+
return INVALID_SCOPE;
|
|
175223
|
+
const parsed = parseDataScopeContract(scope);
|
|
175224
|
+
return parsed.ok ? parsed.scope : INVALID_SCOPE;
|
|
175225
|
+
}
|
|
175226
|
+
var INVALID_SCOPE = "invalid";
|
|
175227
|
+
var MAX_SCOPE_LENGTH = 128;
|
|
175228
|
+
var GRANTEE_REF_WAIT_MS = 1e3;
|
|
175229
|
+
var MAX_QUEUED_READ_EVENTS = 200;
|
|
175230
|
+
function validGranteeRef(value) {
|
|
175231
|
+
return typeof value === "string" && /^(owner|[0-9a-f]{12})$/.test(value) ? value : void 0;
|
|
175232
|
+
}
|
|
175233
|
+
async function withTimeout3(promise2, ms3) {
|
|
175234
|
+
let timer;
|
|
175235
|
+
try {
|
|
175236
|
+
return await Promise.race([
|
|
175237
|
+
promise2.catch(() => void 0),
|
|
175238
|
+
new Promise((resolve) => {
|
|
175239
|
+
timer = setTimeout(() => resolve(void 0), ms3);
|
|
175240
|
+
})
|
|
175241
|
+
]);
|
|
175242
|
+
} finally {
|
|
175243
|
+
if (timer !== void 0)
|
|
175244
|
+
clearTimeout(timer);
|
|
175245
|
+
}
|
|
175246
|
+
}
|
|
175247
|
+
var EMPTY_CHECK_MAX_BYTES = 64 * 1024;
|
|
175248
|
+
function classifyReadOutcome(status2, body, contentType) {
|
|
175249
|
+
if (status2 === 401 || status2 === 403)
|
|
175250
|
+
return "denied";
|
|
175251
|
+
if (status2 === 402)
|
|
175252
|
+
return "payment_required";
|
|
175253
|
+
if (status2 === 404)
|
|
175254
|
+
return "not_found";
|
|
175255
|
+
if (status2 >= 400)
|
|
175256
|
+
return "error";
|
|
175257
|
+
if (status2 < 200 || status2 >= 300)
|
|
175258
|
+
return "ok";
|
|
175259
|
+
return body && isEmptyJsonBody(body, contentType) ? "empty" : "ok";
|
|
175260
|
+
}
|
|
175261
|
+
function isEmptyJsonBody(body, contentType) {
|
|
175262
|
+
if (body.length === 0 || body.length > EMPTY_CHECK_MAX_BYTES)
|
|
175263
|
+
return false;
|
|
175264
|
+
if (contentType !== void 0 && !/json/i.test(contentType))
|
|
175265
|
+
return false;
|
|
175266
|
+
let value;
|
|
175267
|
+
try {
|
|
175268
|
+
value = JSON.parse(new TextDecoder().decode(body));
|
|
175269
|
+
} catch {
|
|
175270
|
+
return false;
|
|
175271
|
+
}
|
|
175272
|
+
if (isEmptyValue(value))
|
|
175273
|
+
return true;
|
|
175274
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
175275
|
+
const record3 = value;
|
|
175276
|
+
if (!("data" in record3))
|
|
175277
|
+
return false;
|
|
175278
|
+
const data = record3.data;
|
|
175279
|
+
if (isEmptyValue(data))
|
|
175280
|
+
return true;
|
|
175281
|
+
if (data && typeof data === "object" && !Array.isArray(data)) {
|
|
175282
|
+
const values = Object.values(data);
|
|
175283
|
+
return values.length > 0 && values.every(isEmptyValue);
|
|
175284
|
+
}
|
|
175285
|
+
}
|
|
175286
|
+
return false;
|
|
175287
|
+
}
|
|
175288
|
+
function isEmptyValue(value) {
|
|
175289
|
+
if (value === null || value === void 0 || value === "")
|
|
175290
|
+
return true;
|
|
175291
|
+
if (Array.isArray(value))
|
|
175292
|
+
return value.length === 0;
|
|
175293
|
+
if (typeof value === "object") {
|
|
175294
|
+
return Object.keys(value).length === 0;
|
|
175295
|
+
}
|
|
175296
|
+
return false;
|
|
175297
|
+
}
|
|
175298
|
+
function parseStreamRef(value) {
|
|
175299
|
+
return typeof value === "string" && /^[A-Za-z0-9-]{1,64}$/.test(value) ? value : void 0;
|
|
175300
|
+
}
|
|
175301
|
+
function randomConnTag() {
|
|
175302
|
+
const bytes2 = new Uint8Array(8);
|
|
175303
|
+
crypto.getRandomValues(bytes2);
|
|
175304
|
+
let hex4 = "";
|
|
175305
|
+
for (const byte of bytes2)
|
|
175306
|
+
hex4 += byte.toString(16).padStart(2, "0");
|
|
175307
|
+
return hex4;
|
|
175308
|
+
}
|
|
175309
|
+
function readVisibilityDocument() {
|
|
175310
|
+
const candidate = globalThis.document;
|
|
175311
|
+
if (!candidate || typeof candidate.addEventListener !== "function" || typeof candidate.removeEventListener !== "function") {
|
|
175312
|
+
return void 0;
|
|
175313
|
+
}
|
|
175314
|
+
return candidate;
|
|
175315
|
+
}
|
|
175316
|
+
function documentVisibility() {
|
|
175317
|
+
const state = globalThis.document?.visibilityState;
|
|
175318
|
+
return state === "visible" || state === "hidden" ? state : "unknown";
|
|
174960
175319
|
}
|
|
174961
175320
|
var GZIP_MIN_BYTES = 1024;
|
|
174962
175321
|
async function gzipBytes(input) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opendatalabs/personal-server-ts-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.36.0",
|
|
4
4
|
"description": "Hono HTTP server for the Vana Personal Server — routes, middleware, composition root",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -55,8 +55,8 @@
|
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"@hono/node-server": "^1.19.17",
|
|
58
|
-
"@opendatalabs/personal-server-ts-core": "1.
|
|
59
|
-
"@opendatalabs/personal-server-ts-lite": "1.
|
|
58
|
+
"@opendatalabs/personal-server-ts-core": "1.36.0",
|
|
59
|
+
"@opendatalabs/personal-server-ts-lite": "1.36.0",
|
|
60
60
|
"@opendatalabs/vana-sdk": "3.23.0-pr.211.36da1d8",
|
|
61
61
|
"ajv": "^8.20.0",
|
|
62
62
|
"better-sqlite3": "^12.11.1",
|