@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/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", null, true);
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
- "operation",
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 ${environmentId} now uses a different data area; create a new deployment plan and redeploy that environment. Repeating this request will not update this deployment's binding`);
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
- if (status === 503 && code === "storage_gateway_unavailable") {
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() {
@@ -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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amerged/ohmyhost-runtime",
3
- "version": "0.1.36",
3
+ "version": "0.1.38",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=22"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ohmyhost/customer-runtime",
3
- "version": "0.1.36",
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) => env.OHMYHOST_MAIL_GATEWAY.fetch(request) or env.OHMYHOST_STORAGE_GATEWAY.fetch(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(value: unknown, keys: readonly string[]): Record<string, unknown> {
116
- if (typeof value !== "object" || value === null || Array.isArray(value)) invalidResponse();
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", null, false);
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
- const bytes = new Uint8Array(await response.arrayBuffer());
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
  }
@@ -4,4 +4,3 @@ export * from "./mail.js";
4
4
  export * from "./storage.js";
5
5
  export type { GatewayConnection } from "./http.js";
6
6
  export * from "./mail-webhook.js";
7
- export * from "./mail-attachments.js";
@@ -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)) invalidResponse();
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