@amerged/ohmyhost-runtime 0.1.36 → 0.1.38
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/README.md +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/http.d.ts +8 -2
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +39 -11
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/mail.d.ts +1 -0
- package/dist/mail.d.ts.map +1 -1
- package/dist/mail.js +11 -9
- package/dist/mail.js.map +1 -1
- package/dist/storage-batch-stream.d.ts.map +1 -1
- package/dist/storage-batch-stream.js +24 -27
- package/dist/storage-batch-stream.js.map +1 -1
- package/dist/storage.d.ts +2 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +43 -51
- package/dist/storage.js.map +1 -1
- package/package.json +1 -1
- package/src/packages/customer-runtime/package.json +2 -2
- package/src/packages/customer-runtime/src/errors.ts +3 -0
- package/src/packages/customer-runtime/src/http.ts +63 -11
- package/src/packages/customer-runtime/src/index.ts +0 -1
- package/src/packages/customer-runtime/src/mail.ts +12 -6
- package/src/packages/customer-runtime/src/storage-batch-stream.ts +29 -25
- package/src/packages/customer-runtime/src/storage.ts +59 -48
- package/dist/mail-attachments.d.ts +0 -8
- package/dist/mail-attachments.d.ts.map +0 -1
- package/dist/mail-attachments.js +0 -32
- package/dist/mail-attachments.js.map +0 -1
- package/src/packages/customer-runtime/src/mail-attachments.ts +0 -53
package/dist/storage.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { CustomerRuntimeGatewayError } from "./errors.js";
|
|
2
|
-
import { configurationInvalid, exactRecord, fetchWithTimeout, invalidResponse, postGatewayJson, requireConfiguredUlid, validateGatewayConnection, } from "./http.js";
|
|
2
|
+
import { configurationInvalid, exactRecord, fetchWithTimeout, invalidResponse, postGatewayJson, requireConfiguredUlid, validateGatewayConnection, throwGatewayRelayError, } from "./http.js";
|
|
3
3
|
import { decodeStorageBatch, readStorageBatchJson, } from "./storage-batch-stream.js";
|
|
4
|
+
/** Server-only private files; use global fetch for gateway and signed-object transports. */
|
|
4
5
|
export function createPrivateStorageClient(configuration) {
|
|
5
6
|
const connection = validateGatewayConnection(configuration);
|
|
6
7
|
if (typeof configuration.capabilityFetch !== "function") {
|
|
@@ -23,19 +24,19 @@ export function createPrivateStorageClient(configuration) {
|
|
|
23
24
|
throwStorageError(response.status, response.body, environmentId);
|
|
24
25
|
const record = response.body;
|
|
25
26
|
if (record?.["state"] === "completed") {
|
|
26
|
-
const completed = exactRecord(response.body, ["state", "transfer_id"]);
|
|
27
|
+
const completed = exactRecord(response.body, ["state", "transfer_id"], response.status);
|
|
27
28
|
return Object.freeze({
|
|
28
29
|
state: "completed",
|
|
29
|
-
transferId: requireUlid(completed["transfer_id"]),
|
|
30
|
+
transferId: requireUlid(completed["transfer_id"], response.status),
|
|
30
31
|
});
|
|
31
32
|
}
|
|
32
|
-
const ready = exactRecord(response.body, ["state", "transfer_id", "capability"]);
|
|
33
|
+
const ready = exactRecord(response.body, ["state", "transfer_id", "capability"], response.status);
|
|
33
34
|
if (ready["state"] !== "ready")
|
|
34
|
-
invalidResponse();
|
|
35
|
+
invalidResponse(response.status);
|
|
35
36
|
return Object.freeze({
|
|
36
37
|
state: "ready",
|
|
37
|
-
transferId: requireUlid(ready["transfer_id"]),
|
|
38
|
-
capability: parseCapability(ready["capability"], "PUT", input.objectKey),
|
|
38
|
+
transferId: requireUlid(ready["transfer_id"], response.status),
|
|
39
|
+
capability: parseCapability(ready["capability"], "PUT", input.objectKey, response.status),
|
|
39
40
|
});
|
|
40
41
|
}
|
|
41
42
|
async function completeUpload(transferId) {
|
|
@@ -46,12 +47,12 @@ export function createPrivateStorageClient(configuration) {
|
|
|
46
47
|
if (response.status !== 200 && response.status !== 202) {
|
|
47
48
|
throwStorageError(response.status, response.body, environmentId);
|
|
48
49
|
}
|
|
49
|
-
const record = exactRecord(response.body, ["state", "transfer_id"]);
|
|
50
|
+
const record = exactRecord(response.body, ["state", "transfer_id"], response.status);
|
|
50
51
|
if (record["state"] !== "completed" && record["state"] !== "pending")
|
|
51
|
-
invalidResponse();
|
|
52
|
+
invalidResponse(response.status);
|
|
52
53
|
return Object.freeze({
|
|
53
54
|
state: record["state"],
|
|
54
|
-
transferId: requireUlid(record["transfer_id"]),
|
|
55
|
+
transferId: requireUlid(record["transfer_id"], response.status),
|
|
55
56
|
});
|
|
56
57
|
}
|
|
57
58
|
async function createSignedRead(objectKey) {
|
|
@@ -62,22 +63,22 @@ export function createPrivateStorageClient(configuration) {
|
|
|
62
63
|
}, 8 * 1024);
|
|
63
64
|
if (response.status !== 200)
|
|
64
65
|
throwStorageError(response.status, response.body, environmentId);
|
|
65
|
-
const record = exactRecord(response.body, ["state", "capability"]);
|
|
66
|
+
const record = exactRecord(response.body, ["state", "capability"], response.status);
|
|
66
67
|
if (record["state"] !== "ready")
|
|
67
|
-
invalidResponse();
|
|
68
|
-
return parseCapability(record["capability"], "GET", objectKey);
|
|
68
|
+
invalidResponse(response.status);
|
|
69
|
+
return parseCapability(record["capability"], "GET", objectKey, response.status);
|
|
69
70
|
}
|
|
70
71
|
async function deleteObject(input) {
|
|
71
72
|
validateStorageMutation(input.idempotencyKey, input.objectKey);
|
|
72
73
|
const response = await postGatewayJson(connection, "/v1/deletions", { ...authenticatedBody, objectKey: input.objectKey }, 8 * 1024, input.idempotencyKey);
|
|
73
74
|
if (response.status !== 200)
|
|
74
75
|
throwStorageError(response.status, response.body, environmentId);
|
|
75
|
-
const record = exactRecord(response.body, ["state", "deletion_id"]);
|
|
76
|
+
const record = exactRecord(response.body, ["state", "deletion_id"], response.status);
|
|
76
77
|
if (record["state"] !== "completed")
|
|
77
|
-
invalidResponse();
|
|
78
|
+
invalidResponse(response.status);
|
|
78
79
|
return Object.freeze({
|
|
79
80
|
state: "completed",
|
|
80
|
-
deletionId: requireUlid(record["deletion_id"]),
|
|
81
|
+
deletionId: requireUlid(record["deletion_id"], response.status),
|
|
81
82
|
});
|
|
82
83
|
}
|
|
83
84
|
async function upload(input) {
|
|
@@ -155,38 +156,38 @@ export function createPrivateStorageClient(configuration) {
|
|
|
155
156
|
const value = await readStorageBatchJson(response, connection.timeoutMilliseconds, controller.signal);
|
|
156
157
|
if (response.status !== 200)
|
|
157
158
|
throwStorageError(response.status, value, environmentId);
|
|
158
|
-
const record = exactRecord(value, ["state", "results"]);
|
|
159
|
+
const record = exactRecord(value, ["state", "results"], response.status);
|
|
159
160
|
if (!Array.isArray(record["results"]) || record["results"].length !== objects.length)
|
|
160
|
-
invalidResponse();
|
|
161
|
+
invalidResponse(response.status);
|
|
161
162
|
const results = record["results"].map((value, index) => {
|
|
162
163
|
const candidate = value;
|
|
163
164
|
const item = exactRecord(value, candidate?.["state"] === "completed"
|
|
164
165
|
? ["object_key", "state", "deletion_id"]
|
|
165
166
|
: candidate?.["state"] === "pending"
|
|
166
167
|
? ["object_key", "state", "retry_at"]
|
|
167
|
-
: ["object_key", "state", "code", "retryable"]);
|
|
168
|
+
: ["object_key", "state", "code", "retryable"], response.status);
|
|
168
169
|
const requested = objects[index];
|
|
169
170
|
if (requested === undefined || item["object_key"] !== requested.objectKey)
|
|
170
|
-
invalidResponse();
|
|
171
|
+
invalidResponse(response.status);
|
|
171
172
|
const objectKey = requested.objectKey;
|
|
172
173
|
if (item["state"] === "completed")
|
|
173
174
|
return Object.freeze({
|
|
174
175
|
state: "completed",
|
|
175
176
|
objectKey,
|
|
176
|
-
deletionId: requireUlid(item["deletion_id"]),
|
|
177
|
+
deletionId: requireUlid(item["deletion_id"], response.status),
|
|
177
178
|
});
|
|
178
179
|
if (item["state"] === "pending") {
|
|
179
180
|
return Object.freeze({
|
|
180
181
|
state: "pending",
|
|
181
182
|
objectKey,
|
|
182
|
-
retryAt: requireRetryAt(item["retry_at"]),
|
|
183
|
+
retryAt: requireRetryAt(item["retry_at"], response.status),
|
|
183
184
|
});
|
|
184
185
|
}
|
|
185
186
|
if (item["state"] !== "failed" ||
|
|
186
187
|
(item["code"] !== "object_not_found" && item["code"] !== "storage_gateway_unavailable") ||
|
|
187
188
|
typeof item["retryable"] !== "boolean" ||
|
|
188
189
|
(item["code"] === "object_not_found" && item["retryable"] !== false))
|
|
189
|
-
invalidResponse();
|
|
190
|
+
invalidResponse(response.status);
|
|
190
191
|
return Object.freeze({
|
|
191
192
|
state: "failed",
|
|
192
193
|
objectKey,
|
|
@@ -196,10 +197,10 @@ export function createPrivateStorageClient(configuration) {
|
|
|
196
197
|
});
|
|
197
198
|
if (record["state"] !==
|
|
198
199
|
(results.every((item) => item.state === "completed") ? "completed" : "partial"))
|
|
199
|
-
invalidResponse();
|
|
200
|
+
invalidResponse(response.status);
|
|
200
201
|
if (controller.signal.aborted || Date.now() >= deadline) {
|
|
201
202
|
controller.abort();
|
|
202
|
-
throw new CustomerRuntimeGatewayError("gateway_timeout",
|
|
203
|
+
throw new CustomerRuntimeGatewayError("gateway_timeout", response.status, true);
|
|
203
204
|
}
|
|
204
205
|
return Object.freeze(results);
|
|
205
206
|
}
|
|
@@ -230,16 +231,9 @@ function validateBatchKeys(value) {
|
|
|
230
231
|
}
|
|
231
232
|
return Object.freeze(Array.from(value));
|
|
232
233
|
}
|
|
233
|
-
function parseCapability(value, operation, objectKey) {
|
|
234
|
-
const record = exactRecord(value, [
|
|
235
|
-
|
|
236
|
-
"objectKey",
|
|
237
|
-
"url",
|
|
238
|
-
"expiresAt",
|
|
239
|
-
"expectedContentLength",
|
|
240
|
-
"requiredHeaders",
|
|
241
|
-
]);
|
|
242
|
-
const headers = exactHeaders(record["requiredHeaders"]);
|
|
234
|
+
function parseCapability(value, operation, objectKey, status) {
|
|
235
|
+
const record = exactRecord(value, ["operation", "objectKey", "url", "expiresAt", "expectedContentLength", "requiredHeaders"], status);
|
|
236
|
+
const headers = exactHeaders(record["requiredHeaders"], status);
|
|
243
237
|
if (record["operation"] !== operation ||
|
|
244
238
|
record["objectKey"] !== objectKey ||
|
|
245
239
|
typeof record["url"] !== "string" ||
|
|
@@ -250,7 +244,7 @@ function parseCapability(value, operation, objectKey) {
|
|
|
250
244
|
(!Number.isSafeInteger(record["expectedContentLength"]) ||
|
|
251
245
|
Number(record["expectedContentLength"]) < 0 ||
|
|
252
246
|
Number(record["expectedContentLength"]) > 1_073_741_824))) {
|
|
253
|
-
invalidResponse();
|
|
247
|
+
invalidResponse(status);
|
|
254
248
|
}
|
|
255
249
|
return Object.freeze({
|
|
256
250
|
operation,
|
|
@@ -261,9 +255,9 @@ function parseCapability(value, operation, objectKey) {
|
|
|
261
255
|
requiredHeaders: headers,
|
|
262
256
|
});
|
|
263
257
|
}
|
|
264
|
-
function exactHeaders(value) {
|
|
258
|
+
function exactHeaders(value, status) {
|
|
265
259
|
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
266
|
-
invalidResponse();
|
|
260
|
+
invalidResponse(status);
|
|
267
261
|
const entries = Object.entries(value);
|
|
268
262
|
if (entries.length > 16 ||
|
|
269
263
|
entries.some(([name, header]) => !/^[a-z0-9-]{1,64}$/u.test(name) ||
|
|
@@ -271,11 +265,12 @@ function exactHeaders(value) {
|
|
|
271
265
|
typeof header !== "string" ||
|
|
272
266
|
header.length > 1_024 ||
|
|
273
267
|
/[\r\n]/u.test(header))) {
|
|
274
|
-
invalidResponse();
|
|
268
|
+
invalidResponse(status);
|
|
275
269
|
}
|
|
276
270
|
return Object.freeze(Object.fromEntries(entries));
|
|
277
271
|
}
|
|
278
272
|
function throwStorageError(status, body, environmentId) {
|
|
273
|
+
throwGatewayRelayError(status, body);
|
|
279
274
|
const candidate = body;
|
|
280
275
|
const record = exactRecord(body, candidate?.["code"] === "storage_delete_pending"
|
|
281
276
|
? ["code", "retry_at"]
|
|
@@ -284,7 +279,7 @@ function throwStorageError(status, body, environmentId) {
|
|
|
284
279
|
? ["code"]
|
|
285
280
|
: typeof body === "object" && body !== null && "transfer_id" in body
|
|
286
281
|
? ["code", "transfer_id"]
|
|
287
|
-
: ["code"]);
|
|
282
|
+
: ["code"], status);
|
|
288
283
|
const code = record["code"];
|
|
289
284
|
if (status === 401 && code === "unauthorized") {
|
|
290
285
|
throw new CustomerRuntimeGatewayError("unauthorized", status, false);
|
|
@@ -293,17 +288,17 @@ function throwStorageError(status, body, environmentId) {
|
|
|
293
288
|
throw new CustomerRuntimeGatewayError("storage_object_not_found", status, false);
|
|
294
289
|
}
|
|
295
290
|
if (status === 409 && code === "upload_expired") {
|
|
296
|
-
requireUlid(record["transfer_id"]);
|
|
291
|
+
requireUlid(record["transfer_id"], status);
|
|
297
292
|
throw new CustomerRuntimeGatewayError("storage_upload_expired", status, false);
|
|
298
293
|
}
|
|
299
294
|
if (status === 409 && code === "data_change_in_progress") {
|
|
300
295
|
throw new CustomerRuntimeGatewayError("data_change_in_progress", status, true, "a data change is running for this project; wait for that existing operation to finish, then repeat the same storage request with the same idempotency keys");
|
|
301
296
|
}
|
|
302
297
|
if (status === 409 && code === "storage_binding_data_changed") {
|
|
303
|
-
throw new CustomerRuntimeGatewayError("storage_binding_data_changed", status, false, `environment
|
|
298
|
+
throw new CustomerRuntimeGatewayError("storage_binding_data_changed", status, false, `the environment's data area changed while this request ran; read the current state for environment ${environmentId} and issue a new request`);
|
|
304
299
|
}
|
|
305
300
|
if (status === 409 && code === "storage_delete_pending") {
|
|
306
|
-
const retryAt = requireRetryAt(record["retry_at"]);
|
|
301
|
+
const retryAt = requireRetryAt(record["retry_at"], status);
|
|
307
302
|
throw new CustomerRuntimeGatewayError("storage_delete_pending", status, true, `a previously accepted upload or deletion is still settling; wait until ${retryAt}, then repeat deleteObject() with the same objectKey and idempotencyKey`);
|
|
308
303
|
}
|
|
309
304
|
if (status === 409 && typeof code === "string") {
|
|
@@ -312,17 +307,14 @@ function throwStorageError(status, body, environmentId) {
|
|
|
312
307
|
if (status === 413 && typeof code === "string") {
|
|
313
308
|
throw new CustomerRuntimeGatewayError("storage_quota_exceeded", status, false);
|
|
314
309
|
}
|
|
315
|
-
|
|
316
|
-
throw new CustomerRuntimeGatewayError("gateway_unavailable", status, true);
|
|
317
|
-
}
|
|
318
|
-
return invalidResponse();
|
|
310
|
+
return invalidResponse(status);
|
|
319
311
|
}
|
|
320
|
-
function requireRetryAt(value) {
|
|
312
|
+
function requireRetryAt(value, status) {
|
|
321
313
|
if (typeof value !== "string" ||
|
|
322
314
|
!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/u.test(value) ||
|
|
323
315
|
!Number.isFinite(Date.parse(value)) ||
|
|
324
316
|
new Date(value).toISOString() !== value)
|
|
325
|
-
invalidResponse();
|
|
317
|
+
invalidResponse(status);
|
|
326
318
|
return value;
|
|
327
319
|
}
|
|
328
320
|
function validateStorageMutation(idempotencyKey, objectKey) {
|
|
@@ -359,9 +351,9 @@ function validSignedUrl(value) {
|
|
|
359
351
|
return false;
|
|
360
352
|
}
|
|
361
353
|
}
|
|
362
|
-
function requireUlid(value) {
|
|
354
|
+
function requireUlid(value, status = null) {
|
|
363
355
|
if (typeof value !== "string" || !/^[0-9A-HJKMNP-TV-Z]{26}$/u.test(value))
|
|
364
|
-
invalidResponse();
|
|
356
|
+
invalidResponse(status);
|
|
365
357
|
return value;
|
|
366
358
|
}
|
|
367
359
|
function invalidRequest() {
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,yBAAyB,EACzB,sBAAsB,GAEvB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GAGrB,MAAM,2BAA2B,CAAC;AAmBnC,4FAA4F;AAC5F,MAAM,UAAU,0BAA0B,CACxC,aAKC;IAED,MAAM,UAAU,GAAG,yBAAyB,CAAC,aAAa,CAAC,CAAC;IAC5D,IAAI,OAAO,aAAa,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;QACxD,oBAAoB,CAAC,qEAAqE,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,eAAe,GAAG,aAAa,CAAC,eAAe,CAAC;IACtD,MAAM,SAAS,GAAG,qBAAqB,CACrC,aAAa,CAAC,SAAS,EACvB,WAAW,EACX,qBAAqB,CACtB,CAAC;IACF,MAAM,aAAa,GAAG,qBAAqB,CACzC,aAAa,CAAC,aAAa,EAC3B,eAAe,EACf,yBAAyB,CAC1B,CAAC;IACF,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;IAEtE,KAAK,UAAU,aAAa,CAC1B,KAAoE;QAEpE,uBAAuB,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC/D,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC;YAC1C,KAAK,CAAC,aAAa,GAAG,CAAC;YACvB,KAAK,CAAC,aAAa,GAAG,aAAa;YACnC,CAAC,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,EACpC,CAAC;YACD,cAAc,EAAE,CAAC;QACnB,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,eAAe,CACpC,UAAU,EACV,aAAa,EACb,EAAE,GAAG,iBAAiB,EAAE,GAAG,KAAK,EAAE,EAClC,CAAC,GAAG,IAAI,EACR,KAAK,CAAC,cAAc,CACrB,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,iBAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC9F,MAAM,MAAM,GAAG,QAAQ,CAAC,IAA+B,CAAC;QACxD,IAAI,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,WAAW,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YACxF,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,KAAK,EAAE,WAAoB;gBAC3B,UAAU,EAAE,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;aACnE,CAAC,CAAC;QACL,CAAC;QACD,MAAM,KAAK,GAAG,WAAW,CACvB,QAAQ,CAAC,IAAI,EACb,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,CAAC,EACtC,QAAQ,CAAC,MAAM,CAChB,CAAC;QACF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,OAAO;YAAE,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACjE,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,KAAK,EAAE,OAAgB;YACvB,UAAU,EAAE,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;YAC9D,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC;SAC1F,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,cAAc,CAAC,UAAkB;QAC9C,MAAM,QAAQ,GAAG,MAAM,eAAe,CACpC,UAAU,EACV,sBAAsB,EACtB;YACE,GAAG,iBAAiB;YACpB,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC;SACpC,EACD,CAAC,GAAG,IAAI,CACT,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvD,iBAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrF,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,WAAW,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,SAAS;YAClE,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACnC,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;YACtB,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;SAChE,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,gBAAgB,CAAC,SAAiB;QAC/C,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,eAAe,CACpC,UAAU,EACV,eAAe,EACf;YACE,GAAG,iBAAiB;YACpB,SAAS;SACV,EACD,CAAC,GAAG,IAAI,CACT,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,iBAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC9F,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpF,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,OAAO;YAAE,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClE,OAAO,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,UAAU,YAAY,CAAC,KAAoD;QAC9E,uBAAuB,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,MAAM,eAAe,CACpC,UAAU,EACV,eAAe,EACf,EAAE,GAAG,iBAAiB,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,EACpD,CAAC,GAAG,IAAI,EACR,KAAK,CAAC,cAAc,CACrB,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,iBAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC9F,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrF,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,WAAW;YAAE,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtE,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,KAAK,EAAE,WAAoB;YAC3B,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;SAChE,CAAC,CAAC;IACL,CAAC;IAED,KAAK,UAAU,MAAM,CAAC,KAAyB;QAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC;YACtC,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,aAAa,EAAE,KAAK,CAAC,UAAU;SAChC,CAAC,CAAC;QACH,IAAI,WAAW,CAAC,KAAK,KAAK,WAAW;YAAE,OAAO,WAAW,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CACrC,eAAe,EACf,IAAI,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE;YACtC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,eAAe;YAC/C,IAAI,EAAE,KAAK;SACZ,CAAC,EACF,UAAU,CAAC,mBAAmB,CAC/B,CAAC;QACF,2FAA2F;QAC3F,wEAAwE;QACxE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,cAAc,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC3E,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;YACpD,MAAM,IAAI,2BAA2B,CACnC,yBAAyB,EACzB,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EACjD,8BAA8B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,+EAA+E,CACrI,CAAC;QACJ,CAAC;QACD,OAAO,cAAc,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,UAAU,YAAY,CACzB,IAAY,EACZ,IAAuC,EACvC,MAAoB;QAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,iBAAiB,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QACrE,IAAI,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI;YAAE,cAAc,EAAE,CAAC;QACxF,OAAO,gBAAgB,CACrB,UAAU,CAAC,KAAK,EAChB,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE;YAC9C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,UAAU,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC1F,IAAI,EAAE,UAAU;YAChB,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;SAC5C,CAAC,EACF,UAAU,CAAC,mBAAmB,CAC/B,CAAC;IACJ,CAAC;IACD,KAAK,UAAU,QAAQ,CAAC,KAEvB;QACC,IACE,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,YAAY;YAE7C,cAAc,EAAE,CAAC;QACnB,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,qBAAqB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QAC3E,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;YACzB,iBAAiB,CACf,QAAQ,CAAC,MAAM,EACf,MAAM,oBAAoB,CAAC,QAAQ,EAAE,UAAU,CAAC,mBAAmB,CAAC,EACpE,aAAa,CACd,CAAC;QACJ,OAAO,kBAAkB,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAClF,CAAC;IACD,KAAK,UAAU,UAAU,CAAC,KAEzB;QACC,IACE,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS;YAC1C,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;YAC7B,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAC1B,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI;YAE3B,cAAc,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACzC,IACE,OAAO,IAAI,KAAK,QAAQ;gBACxB,IAAI,KAAK,IAAI;gBACb,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,0BAA0B;gBACjE,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;gBAClC,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ;gBAEvC,cAAc,EAAE,CAAC;YACnB,uBAAuB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7D,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5E,CAAC,CAAC,CAAC;QACH,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACzD,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM;YAC7E,cAAc,EAAE,CAAC;QACnB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,mBAAmB,CAAC;QAC7D,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC;QACnF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;YAC3F,MAAM,KAAK,GAAG,MAAM,oBAAoB,CACtC,QAAQ,EACR,UAAU,CAAC,mBAAmB,EAC9B,UAAU,CAAC,MAAM,CAClB,CAAC;YACF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;gBAAE,iBAAiB,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;YACtF,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YACzE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;gBAClF,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAuB,EAAE;gBAC1E,MAAM,SAAS,GAAG,KAAgC,CAAC;gBACnD,MAAM,IAAI,GAAG,WAAW,CACtB,KAAK,EACL,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,WAAW;oBAClC,CAAC,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,aAAa,CAAC;oBACxC,CAAC,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,SAAS;wBAClC,CAAC,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,CAAC;wBACrC,CAAC,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAClD,QAAQ,CAAC,MAAM,CAChB,CAAC;gBACF,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjC,IAAI,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,SAAS,CAAC,SAAS;oBACvE,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACnC,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;gBACtC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,WAAW;oBAC/B,OAAO,MAAM,CAAC,MAAM,CAAC;wBACnB,KAAK,EAAE,WAAW;wBAClB,SAAS;wBACT,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;qBAC9D,CAAC,CAAC;gBACL,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;oBAChC,OAAO,MAAM,CAAC,MAAM,CAAC;wBACnB,KAAK,EAAE,SAAS;wBAChB,SAAS;wBACT,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;qBAC3D,CAAC,CAAC;gBACL,CAAC;gBACD,IACE,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ;oBAC1B,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,6BAA6B,CAAC;oBACvF,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,SAAS;oBACtC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,kBAAkB,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC;oBAEpE,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACnC,OAAO,MAAM,CAAC,MAAM,CAAC;oBACnB,KAAK,EAAE,QAAQ;oBACf,SAAS;oBACT,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;oBAClB,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC;iBAC7B,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IACE,MAAM,CAAC,OAAO,CAAC;gBACf,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;gBAE/E,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;gBACxD,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,MAAM,IAAI,2BAA2B,CAAC,iBAAiB,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClF,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,aAAa;QACb,cAAc;QACd,gBAAgB;QAChB,YAAY;QACZ,MAAM;QACN,QAAQ;QACR,UAAU;KACX,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAwB;IACjD,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,KAAK,CAAC,MAAM,KAAK,CAAC;QAClB,KAAK,CAAC,MAAM,GAAG,IAAI;QACnB,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM;QAEpC,cAAc,EAAE,CAAC;IACnB,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,cAAc,EAAE,CAAC;QAC9C,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,eAAe,CACtB,KAAc,EACd,SAAwB,EACxB,SAAiB,EACjB,MAAc;IAEd,MAAM,MAAM,GAAG,WAAW,CACxB,KAAK,EACL,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,uBAAuB,EAAE,iBAAiB,CAAC,EAC1F,MAAM,CACP,CAAC;IACF,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,CAAC;IAChE,IACE,MAAM,CAAC,WAAW,CAAC,KAAK,SAAS;QACjC,MAAM,CAAC,WAAW,CAAC,KAAK,SAAS;QACjC,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ;QACjC,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,QAAQ;QACvC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;QACjD,CAAC,MAAM,CAAC,uBAAuB,CAAC,KAAK,IAAI;YACvC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;gBACrD,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,GAAG,CAAC;gBAC3C,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EAC7D,CAAC;QACD,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,SAAS;QACT,SAAS;QACT,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;QAC9B,qBAAqB,EACnB,MAAM,CAAC,uBAAuB,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC3F,eAAe,EAAE,OAAO;KACzB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,YAAY,CAAC,KAAc,EAAE,MAAc;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IACjG,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC;IACjE,IACE,OAAO,CAAC,MAAM,GAAG,EAAE;QACnB,OAAO,CAAC,IAAI,CACV,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CACjB,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC,sCAAsC,CAAC,IAAI,CAAC,IAAI,CAAC;YACjD,OAAO,MAAM,KAAK,QAAQ;YAC1B,MAAM,CAAC,MAAM,GAAG,KAAK;YACrB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CACzB,EACD,CAAC;QACD,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAA2B,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc,EAAE,IAAa,EAAE,aAAqB;IAC7E,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,IAA+B,CAAC;IAClD,MAAM,MAAM,GAAG,WAAW,CACxB,IAAI,EACJ,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,wBAAwB;QAC9C,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC;QACtB,CAAC,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,yBAAyB;YAC/C,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,8BAA8B;YACxD,CAAC,CAAC,CAAC,MAAM,CAAC;YACV,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,aAAa,IAAI,IAAI;gBAClE,CAAC,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC;gBACzB,CAAC,CAAC,CAAC,MAAM,CAAC,EAChB,MAAM,CACP,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC9C,MAAM,IAAI,2BAA2B,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAClD,MAAM,IAAI,2BAA2B,CAAC,0BAA0B,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAChD,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,IAAI,2BAA2B,CAAC,wBAAwB,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,yBAAyB,EAAE,CAAC;QACzD,MAAM,IAAI,2BAA2B,CACnC,yBAAyB,EACzB,MAAM,EACN,IAAI,EACJ,4JAA4J,CAC7J,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,8BAA8B,EAAE,CAAC;QAC9D,MAAM,IAAI,2BAA2B,CACnC,8BAA8B,EAC9B,MAAM,EACN,KAAK,EACL,sGAAsG,aAAa,0BAA0B,CAC9I,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,IAAI,IAAI,KAAK,wBAAwB,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,IAAI,2BAA2B,CACnC,wBAAwB,EACxB,MAAM,EACN,IAAI,EACJ,0EAA0E,OAAO,yEAAyE,CAC3J,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/C,MAAM,IAAI,2BAA2B,CAAC,kBAAkB,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/C,MAAM,IAAI,2BAA2B,CAAC,wBAAwB,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,MAAc;IACpD,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,gDAAgD,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7D,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK;QAEvC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,uBAAuB,CAAC,cAAsB,EAAE,SAAiB;IACxE,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,cAAc,CAAC;QAAE,cAAc,EAAE,CAAC;IACxE,iBAAiB,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC;IACzD,IACE,KAAK,GAAG,CAAC;QACT,KAAK,GAAG,GAAG;QACX,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QACrB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QACnB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpB,CAAC,KAAK;aACH,KAAK,CAAC,GAAG,CAAC;aACV,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,qDAAqD,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAC1F,CAAC;QACD,cAAc,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,qEAAqE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3F,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,CACL,GAAG,CAAC,QAAQ,KAAK,QAAQ;YACzB,GAAG,CAAC,QAAQ,KAAK,EAAE;YACnB,GAAG,CAAC,QAAQ,KAAK,EAAE;YACnB,GAAG,CAAC,IAAI,KAAK,EAAE;YACf,KAAK,CAAC,MAAM,IAAI,KAAK,CACtB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,SAAwB,IAAI;IAC/D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC;QACvE,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,IAAI,2BAA2B,CAAC,yBAAyB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAChF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ohmyhost/customer-runtime",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.38",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"build": "tsc --project tsconfig.build.json",
|
|
41
41
|
"coverage": "vitest run --root ../.. packages/customer-runtime/src --coverage --coverage.include='packages/customer-runtime/src/**/*.ts' --coverage.reporter=text --coverage.reporter=json-summary",
|
|
42
42
|
"test": "vitest run --root ../.. packages/customer-runtime/src",
|
|
43
|
-
"typecheck": "tsc --project tsconfig.json --noEmit"
|
|
43
|
+
"typecheck": "tsc --project tsconfig.json --noEmit --incremental --tsBuildInfoFile typecheck.tsbuildinfo"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
46
|
"kysely": "0.29.5"
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export type CustomerRuntimeGatewayErrorCode =
|
|
2
2
|
| "gateway_configuration_invalid"
|
|
3
3
|
| "gateway_request_invalid"
|
|
4
|
+
| "gateway_not_enabled"
|
|
5
|
+
| "gateway_route_denied"
|
|
6
|
+
| "gateway_rate_limited"
|
|
4
7
|
| "gateway_response_invalid"
|
|
5
8
|
| "gateway_timeout"
|
|
6
9
|
| "gateway_unavailable"
|
|
@@ -4,9 +4,13 @@ const MAX_RESPONSE_BYTES = 32 * 1024;
|
|
|
4
4
|
const DEFAULT_TIMEOUT_MILLISECONDS = 10_000;
|
|
5
5
|
|
|
6
6
|
export interface GatewayConnection {
|
|
7
|
+
/** Injected gateway origin for server code; never expose the runtime key to a browser. */
|
|
7
8
|
readonly endpoint: string;
|
|
9
|
+
/** Environment capability key from OHMYHOST_MAIL_KEY or OHMYHOST_STORAGE_KEY. */
|
|
8
10
|
readonly key: string;
|
|
11
|
+
/** Use (request) => fetch(request); an explicit transport remains available for tests. */
|
|
9
12
|
readonly fetch: (request: Request) => Promise<Response>;
|
|
13
|
+
/** Gateway header timeout: 100–30000 ms, default 10000 ms. */
|
|
10
14
|
readonly timeoutMilliseconds?: number;
|
|
11
15
|
}
|
|
12
16
|
|
|
@@ -45,7 +49,7 @@ export function validateGatewayConnection(value: GatewayConnection): ValidatedGa
|
|
|
45
49
|
}
|
|
46
50
|
if (typeof value.fetch !== "function") {
|
|
47
51
|
configurationInvalid(
|
|
48
|
-
"fetch is not a function; pass (request) =>
|
|
52
|
+
"fetch is not a function; pass (request) => fetch(request) in server code",
|
|
49
53
|
);
|
|
50
54
|
}
|
|
51
55
|
const timeoutMilliseconds = value.timeoutMilliseconds ?? DEFAULT_TIMEOUT_MILLISECONDS;
|
|
@@ -112,19 +116,23 @@ export async function fetchWithTimeout(
|
|
|
112
116
|
}
|
|
113
117
|
}
|
|
114
118
|
|
|
115
|
-
export function exactRecord(
|
|
116
|
-
|
|
119
|
+
export function exactRecord(
|
|
120
|
+
value: unknown,
|
|
121
|
+
keys: readonly string[],
|
|
122
|
+
status: number | null = null,
|
|
123
|
+
): Record<string, unknown> {
|
|
124
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) invalidResponse(status);
|
|
117
125
|
const record = value as Record<string, unknown>;
|
|
118
126
|
const actual = Object.keys(record).sort();
|
|
119
127
|
const expected = [...keys].sort();
|
|
120
128
|
if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index])) {
|
|
121
|
-
invalidResponse();
|
|
129
|
+
invalidResponse(status);
|
|
122
130
|
}
|
|
123
131
|
return record;
|
|
124
132
|
}
|
|
125
133
|
|
|
126
|
-
export function invalidResponse(): never {
|
|
127
|
-
throw new CustomerRuntimeGatewayError("gateway_response_invalid",
|
|
134
|
+
export function invalidResponse(status: number | null = null): never {
|
|
135
|
+
throw new CustomerRuntimeGatewayError("gateway_response_invalid", status, false);
|
|
128
136
|
}
|
|
129
137
|
|
|
130
138
|
/** A malformed platform ID is a configuration mistake, not a gateway answer. */
|
|
@@ -152,17 +160,61 @@ function assertServerRuntime(): void {
|
|
|
152
160
|
|
|
153
161
|
async function readBoundedJson(response: Response): Promise<unknown> {
|
|
154
162
|
if (response.headers.get("content-type")?.split(";", 1)[0]?.trim() !== "application/json") {
|
|
155
|
-
invalidResponse();
|
|
163
|
+
invalidResponse(response.status);
|
|
156
164
|
}
|
|
157
165
|
const declared = response.headers.get("content-length");
|
|
158
166
|
if (declared !== null && (!/^[0-9]+$/u.test(declared) || Number(declared) > MAX_RESPONSE_BYTES)) {
|
|
159
|
-
invalidResponse();
|
|
167
|
+
invalidResponse(response.status);
|
|
168
|
+
}
|
|
169
|
+
let bytes: Uint8Array;
|
|
170
|
+
try {
|
|
171
|
+
bytes = new Uint8Array(await response.arrayBuffer());
|
|
172
|
+
} catch {
|
|
173
|
+
throw new CustomerRuntimeGatewayError("gateway_unavailable", response.status, true);
|
|
160
174
|
}
|
|
161
|
-
|
|
162
|
-
if (bytes.byteLength > MAX_RESPONSE_BYTES) invalidResponse();
|
|
175
|
+
if (bytes.byteLength > MAX_RESPONSE_BYTES) invalidResponse(response.status);
|
|
163
176
|
try {
|
|
164
177
|
return JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes));
|
|
165
178
|
} catch {
|
|
166
|
-
return invalidResponse();
|
|
179
|
+
return invalidResponse(response.status);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/** Relay failures share one vocabulary across mail, storage and batch control responses. */
|
|
184
|
+
export function throwGatewayRelayError(status: number, body: unknown): void {
|
|
185
|
+
if (typeof body !== "object" || body === null || Array.isArray(body)) return;
|
|
186
|
+
const code = (body as Record<string, unknown>)["code"];
|
|
187
|
+
if (
|
|
188
|
+
(status === 403 && (code === "gateway_not_enabled" || code === "gateway_route_denied")) ||
|
|
189
|
+
(status === 429 && code === "gateway_rate_limited") ||
|
|
190
|
+
(status === 503 &&
|
|
191
|
+
(code === "mail_gateway_unavailable" || code === "storage_gateway_unavailable"))
|
|
192
|
+
) {
|
|
193
|
+
exactRecord(body, ["code"], status);
|
|
194
|
+
if (code === "gateway_not_enabled") {
|
|
195
|
+
throw new CustomerRuntimeGatewayError(
|
|
196
|
+
code,
|
|
197
|
+
status,
|
|
198
|
+
false,
|
|
199
|
+
"enable the required mail or storage capability in ohmyhost.yaml and redeploy",
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
if (code === "gateway_route_denied") {
|
|
203
|
+
throw new CustomerRuntimeGatewayError(
|
|
204
|
+
code,
|
|
205
|
+
status,
|
|
206
|
+
false,
|
|
207
|
+
"use the current runtime client's supported gateway routes through (request) => fetch(request)",
|
|
208
|
+
);
|
|
209
|
+
}
|
|
210
|
+
if (code === "gateway_rate_limited") {
|
|
211
|
+
throw new CustomerRuntimeGatewayError(
|
|
212
|
+
code,
|
|
213
|
+
status,
|
|
214
|
+
true,
|
|
215
|
+
"wait before repeating this request with the same idempotency keys",
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
throw new CustomerRuntimeGatewayError("gateway_unavailable", status, true);
|
|
167
219
|
}
|
|
168
220
|
}
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
postGatewayJson,
|
|
6
6
|
requireConfiguredUlid,
|
|
7
7
|
validateGatewayConnection,
|
|
8
|
+
throwGatewayRelayError,
|
|
8
9
|
type GatewayConnection,
|
|
9
10
|
} from "./http.js";
|
|
10
11
|
|
|
@@ -38,6 +39,7 @@ export type TransactionalMailResult =
|
|
|
38
39
|
readonly requestId: string;
|
|
39
40
|
};
|
|
40
41
|
|
|
42
|
+
/** Server-only transactional mail over the injected gateway URL and global fetch. */
|
|
41
43
|
export function createTransactionalMailClient(
|
|
42
44
|
configuration: GatewayConnection & { readonly projectId: string },
|
|
43
45
|
) {
|
|
@@ -72,8 +74,9 @@ export function createTransactionalMailClient(
|
|
|
72
74
|
raw?.["state"] === "accepted"
|
|
73
75
|
? ["state", "request_id", "message_id"]
|
|
74
76
|
: ["state", "request_id"],
|
|
77
|
+
response.status,
|
|
75
78
|
);
|
|
76
|
-
const requestId = requireUlid(stateRecord["request_id"]);
|
|
79
|
+
const requestId = requireUlid(stateRecord["request_id"], response.status);
|
|
77
80
|
if (stateRecord["state"] === "uncertain") {
|
|
78
81
|
return Object.freeze({ state: "uncertain" as const, requestId });
|
|
79
82
|
}
|
|
@@ -82,7 +85,7 @@ export function createTransactionalMailClient(
|
|
|
82
85
|
typeof stateRecord["message_id"] !== "string" ||
|
|
83
86
|
!/^[A-Za-z0-9._-]{1,256}$/u.test(stateRecord["message_id"])
|
|
84
87
|
) {
|
|
85
|
-
invalidResponse();
|
|
88
|
+
invalidResponse(response.status);
|
|
86
89
|
}
|
|
87
90
|
return Object.freeze({
|
|
88
91
|
state: "accepted" as const,
|
|
@@ -108,13 +111,15 @@ function validateMailInput(input: TransactionalMailInput): void {
|
|
|
108
111
|
}
|
|
109
112
|
|
|
110
113
|
function throwMailError(status: number, body: unknown): never {
|
|
114
|
+
throwGatewayRelayError(status, body);
|
|
111
115
|
const raw = body as Record<string, unknown>;
|
|
112
116
|
const record = exactRecord(
|
|
113
117
|
body,
|
|
114
118
|
raw?.["request_id"] === undefined ? ["code"] : ["code", "request_id"],
|
|
119
|
+
status,
|
|
115
120
|
);
|
|
116
121
|
const code = record["code"];
|
|
117
|
-
if (record["request_id"] !== undefined) requireUlid(record["request_id"]);
|
|
122
|
+
if (record["request_id"] !== undefined) requireUlid(record["request_id"], status);
|
|
118
123
|
if (status === 400 && code === "invalid_request") {
|
|
119
124
|
throw new CustomerRuntimeGatewayError("gateway_request_invalid", status, false);
|
|
120
125
|
}
|
|
@@ -145,11 +150,12 @@ function throwMailError(status: number, body: unknown): never {
|
|
|
145
150
|
if (status === 503 && typeof code === "string") {
|
|
146
151
|
throw new CustomerRuntimeGatewayError("gateway_unavailable", status, true);
|
|
147
152
|
}
|
|
148
|
-
return invalidResponse();
|
|
153
|
+
return invalidResponse(status);
|
|
149
154
|
}
|
|
150
155
|
|
|
151
|
-
function requireUlid(value: unknown): string {
|
|
152
|
-
if (typeof value !== "string" || !/^[0-9A-HJKMNP-TV-Z]{26}$/u.test(value))
|
|
156
|
+
function requireUlid(value: unknown, status: number | null = null): string {
|
|
157
|
+
if (typeof value !== "string" || !/^[0-9A-HJKMNP-TV-Z]{26}$/u.test(value))
|
|
158
|
+
invalidResponse(status);
|
|
153
159
|
return value;
|
|
154
160
|
}
|
|
155
161
|
|