run402 1.63.0 → 1.65.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.
Files changed (42) hide show
  1. package/README.md +6 -1
  2. package/lib/allowance.mjs +20 -25
  3. package/lib/auth.mjs +7 -16
  4. package/lib/billing.mjs +12 -10
  5. package/lib/blob.mjs +30 -54
  6. package/lib/contracts.mjs +11 -19
  7. package/lib/deploy-v2.mjs +4 -1
  8. package/lib/functions.mjs +65 -17
  9. package/lib/init.mjs +12 -19
  10. package/lib/projects.mjs +157 -48
  11. package/lib/status.mjs +8 -15
  12. package/package.json +1 -1
  13. package/sdk/dist/kernel.d.ts +6 -0
  14. package/sdk/dist/kernel.d.ts.map +1 -1
  15. package/sdk/dist/kernel.js +5 -1
  16. package/sdk/dist/kernel.js.map +1 -1
  17. package/sdk/dist/namespaces/billing.d.ts +10 -5
  18. package/sdk/dist/namespaces/billing.d.ts.map +1 -1
  19. package/sdk/dist/namespaces/billing.js +23 -9
  20. package/sdk/dist/namespaces/billing.js.map +1 -1
  21. package/sdk/dist/namespaces/blobs.d.ts +16 -1
  22. package/sdk/dist/namespaces/blobs.d.ts.map +1 -1
  23. package/sdk/dist/namespaces/blobs.js +61 -25
  24. package/sdk/dist/namespaces/blobs.js.map +1 -1
  25. package/sdk/dist/namespaces/blobs.types.d.ts +41 -0
  26. package/sdk/dist/namespaces/blobs.types.d.ts.map +1 -1
  27. package/sdk/dist/namespaces/functions.d.ts +2 -1
  28. package/sdk/dist/namespaces/functions.d.ts.map +1 -1
  29. package/sdk/dist/namespaces/functions.js +19 -7
  30. package/sdk/dist/namespaces/functions.js.map +1 -1
  31. package/sdk/dist/namespaces/functions.types.d.ts +12 -2
  32. package/sdk/dist/namespaces/functions.types.d.ts.map +1 -1
  33. package/sdk/dist/namespaces/projects.d.ts +14 -3
  34. package/sdk/dist/namespaces/projects.d.ts.map +1 -1
  35. package/sdk/dist/namespaces/projects.js +95 -5
  36. package/sdk/dist/namespaces/projects.js.map +1 -1
  37. package/sdk/dist/namespaces/projects.types.d.ts +39 -0
  38. package/sdk/dist/namespaces/projects.types.d.ts.map +1 -1
  39. package/sdk/dist/scoped.d.ts +10 -3
  40. package/sdk/dist/scoped.d.ts.map +1 -1
  41. package/sdk/dist/scoped.js +20 -2
  42. package/sdk/dist/scoped.js.map +1 -1
package/lib/projects.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { readFileSync } from "fs";
2
- import { findProject, loadKeyStore, API, allowanceAuthHeaders, resolveProjectId, getActiveProjectId } from "./config.mjs";
2
+ import { loadKeyStore, API, allowanceAuthHeaders, resolveProjectId, getActiveProjectId } from "./config.mjs";
3
3
  import { getSdk } from "./sdk.mjs";
4
4
  import { reportSdkError, fail, parseFlagJson } from "./sdk-errors.mjs";
5
5
  import { assertKnownFlags, failBadProjectId, flagValue, hasHelp, normalizeArgv, positionalArgs, resolvePositionalProject, validateRegularFile } from "./argparse.mjs";
@@ -23,6 +23,8 @@ Subcommands:
23
23
  schema [id] Inspect the database schema
24
24
  apply-expose [id] <manifest_json> Apply a declarative authorization manifest
25
25
  apply-expose [id] --file <path> Apply a manifest from a JSON file
26
+ validate-expose [id] <manifest_json> Validate an authorization manifest without applying it
27
+ validate-expose [id] --file <path> Validate a manifest file without mutating the project
26
28
  get-expose [id] Get the current authorization manifest
27
29
  delete [id] --confirm Immediately and irreversibly delete a project (cascade purge) and remove from local state. Requires --confirm.
28
30
  pin [id] Pin a project (admin only; uses admin allowance wallet)
@@ -43,6 +45,7 @@ Examples:
43
45
  run402 projects usage prj_abc123
44
46
  run402 projects costs prj_abc123 --window 30d
45
47
  run402 projects schema prj_abc123
48
+ run402 projects validate-expose prj_abc123 --file manifest.json
46
49
  run402 projects apply-expose prj_abc123 --file manifest.json
47
50
  run402 projects get-expose prj_abc123
48
51
  run402 projects keys prj_abc123
@@ -68,6 +71,9 @@ Notes:
68
71
  row), public_read_write_UNRESTRICTED (fully open; requires
69
72
  "i_understand_this_is_unrestricted": true on the entry), custom (provide
70
73
  custom_sql with CREATE POLICY statements).
74
+ - 'validate-expose' checks the same auth/expose manifest shape without
75
+ applying it. Optional migration SQL is used only for reference checks; it is
76
+ not executed as a PostgreSQL dry run.
71
77
  `;
72
78
 
73
79
  const SUB_HELP = {
@@ -135,6 +141,35 @@ Examples:
135
141
  run402 projects costs prj_abc123
136
142
  RUN402_ADMIN_COOKIE='run402_admin=...' run402 projects costs prj_abc123
137
143
  RUN402_ADMIN_COOKIE='run402_admin=...' run402 projects costs --window 7d
144
+ `,
145
+ "validate-expose": `run402 projects validate-expose — Validate an authorization manifest without applying it
146
+
147
+ Usage:
148
+ run402 projects validate-expose [id] <manifest_json> [options]
149
+ run402 projects validate-expose [id] --file <path> [options]
150
+ cat manifest.json | run402 projects validate-expose [id] [options]
151
+
152
+ Arguments:
153
+ [id] Optional project ID. When omitted, the active project is
154
+ used if one is set; otherwise validation is projectless.
155
+ <manifest_json> Inline auth/expose manifest JSON.
156
+
157
+ Options:
158
+ --file <path> Read the auth/expose manifest from a JSON file
159
+ --migration-file <path> Read migration SQL for reference checks only
160
+ --migration-sql <sql> Inline migration SQL for reference checks only
161
+
162
+ Notes:
163
+ - This validates the auth/expose manifest used by manifest.json,
164
+ database.expose, and apply-expose. It does not validate deploy manifests.
165
+ - Migration SQL is parsed as context for references; it is not executed.
166
+ - Validation findings are returned in JSON with hasErrors and do not make the
167
+ command fail. Usage, file, auth, and network errors still exit non-zero.
168
+
169
+ Examples:
170
+ run402 projects validate-expose --file manifest.json
171
+ run402 projects validate-expose prj_abc123 --file manifest.json --migration-file setup.sql
172
+ run402 projects validate-expose '{"version":"1","tables":[]}'
138
173
  `,
139
174
  };
140
175
 
@@ -212,7 +247,6 @@ async function applyExpose(projectId, args = []) {
212
247
  else if (!inline && !args[i].startsWith("--")) { inline = args[i]; }
213
248
  }
214
249
  if (file) validateRegularFile(file, "--file");
215
- const p = findProject(projectId);
216
250
  const raw = file ? readFileSync(file, "utf-8") : inline;
217
251
  if (!raw) {
218
252
  fail({
@@ -230,24 +264,101 @@ async function applyExpose(projectId, args = []) {
230
264
  details: { parse_error: err.message },
231
265
  });
232
266
  }
233
- const res = await fetch(`${API}/projects/v1/admin/${projectId}/expose`, {
234
- method: "POST",
235
- headers: { "Authorization": `Bearer ${p.service_key}`, "Content-Type": "application/json" },
236
- body: JSON.stringify(manifest),
237
- });
238
- const data = await res.json();
239
- if (!res.ok) { console.error(JSON.stringify({ status: "error", http: res.status, ...data })); process.exit(1); }
240
- console.log(JSON.stringify(data, null, 2));
267
+ try {
268
+ const data = await getSdk().projects.applyExpose(projectId, manifest);
269
+ console.log(JSON.stringify(data, null, 2));
270
+ } catch (err) {
271
+ reportSdkError(err);
272
+ }
273
+ }
274
+
275
+ async function validateExpose(args = []) {
276
+ let projectId = null;
277
+ let file = null;
278
+ let inline = null;
279
+ let migrationFile = null;
280
+ let migrationSql = null;
281
+ for (let i = 0; i < args.length; i++) {
282
+ const arg = args[i];
283
+ if (arg === "--file") {
284
+ if (args[i + 1] === undefined) {
285
+ fail({ code: "BAD_FLAG", message: "--file requires a value", details: { flag: "--file" } });
286
+ }
287
+ file = args[++i];
288
+ }
289
+ else if (arg === "--migration-file") {
290
+ if (args[i + 1] === undefined) {
291
+ fail({ code: "BAD_FLAG", message: "--migration-file requires a value", details: { flag: "--migration-file" } });
292
+ }
293
+ migrationFile = args[++i];
294
+ }
295
+ else if (arg === "--migration-sql") {
296
+ if (args[i + 1] === undefined) {
297
+ fail({ code: "BAD_FLAG", message: "--migration-sql requires a value", details: { flag: "--migration-sql" } });
298
+ }
299
+ migrationSql = args[++i];
300
+ }
301
+ else if (!projectId && typeof arg === "string" && arg.startsWith("prj_")) { projectId = arg; }
302
+ else if (!inline && typeof arg === "string" && !arg.startsWith("--")) { inline = arg; }
303
+ else if (typeof arg === "string" && !arg.startsWith("--")) {
304
+ fail({
305
+ code: "BAD_USAGE",
306
+ message: `Unexpected extra argument: ${arg}`,
307
+ hint: "run402 projects validate-expose [id] <manifest_json>",
308
+ });
309
+ }
310
+ }
311
+ if (file && inline) {
312
+ fail({
313
+ code: "BAD_USAGE",
314
+ message: "Provide either inline manifest JSON or --file <path>, not both.",
315
+ hint: "run402 projects validate-expose [id] --file manifest.json",
316
+ });
317
+ }
318
+ if (migrationFile && migrationSql !== null) {
319
+ fail({
320
+ code: "BAD_USAGE",
321
+ message: "Provide either --migration-file or --migration-sql, not both.",
322
+ });
323
+ }
324
+ if (file) validateRegularFile(file, "--file");
325
+ if (migrationFile) validateRegularFile(migrationFile, "--migration-file");
326
+
327
+ let raw = file ? readFileSync(file, "utf-8") : inline;
328
+ if (!raw && process.stdin && process.stdin.isTTY === false) {
329
+ raw = readFileSync(0, "utf-8");
330
+ }
331
+ if (!raw) {
332
+ fail({
333
+ code: "BAD_USAGE",
334
+ message: "Missing manifest.",
335
+ hint: "Provide inline JSON, pipe JSON to stdin, or use --file <path>",
336
+ });
337
+ }
338
+
339
+ const activeProjectId = getActiveProjectId();
340
+ const project = projectId || activeProjectId || undefined;
341
+ if (!project) allowanceAuthHeaders("/projects/v1/expose/validate");
342
+ const migration = migrationFile ? readFileSync(migrationFile, "utf-8") : migrationSql;
343
+
344
+ try {
345
+ const data = await getSdk().projects.validateExpose(raw, {
346
+ ...(project ? { project } : {}),
347
+ ...(migration !== null && migration !== undefined ? { migrationSql: migration } : {}),
348
+ });
349
+ console.log(JSON.stringify({ status: "ok", ...data }, null, 2));
350
+ } catch (err) {
351
+ reportSdkError(err);
352
+ }
241
353
  }
242
354
 
243
355
  async function getExpose(projectId) {
244
- const p = findProject(projectId);
245
- const res = await fetch(`${API}/projects/v1/admin/${projectId}/expose`, {
246
- headers: { "Authorization": `Bearer ${p.service_key}` },
247
- });
248
- const data = await res.json();
249
- if (!res.ok) { console.error(JSON.stringify({ status: "error", http: res.status, ...data })); process.exit(1); }
250
- console.log(JSON.stringify(data, null, 2));
356
+ try {
357
+ const data = await getSdk().projects.getExpose(projectId);
358
+ console.log(JSON.stringify(data, null, 2));
359
+ } catch (err) {
360
+ reportSdkError(err);
361
+ }
251
362
  }
252
363
 
253
364
  async function list() {
@@ -292,7 +403,6 @@ async function sqlCmd(projectId, args = []) {
292
403
  else if (!query && !args[i].startsWith("--")) { query = args[i]; }
293
404
  }
294
405
  if (file) validateRegularFile(file, "--file");
295
- const p = findProject(projectId);
296
406
  const sql = file ? readFileSync(file, "utf-8") : query;
297
407
  if (!sql) {
298
408
  fail({
@@ -311,13 +421,12 @@ async function sqlCmd(projectId, args = []) {
311
421
  });
312
422
  }
313
423
  }
314
- const useParams = params && params.length > 0;
315
- const headers = { "Authorization": `Bearer ${p.service_key}`, "Content-Type": useParams ? "application/json" : "text/plain" };
316
- const body = useParams ? JSON.stringify({ sql, params }) : sql;
317
- const res = await fetch(`${API}/projects/v1/admin/${projectId}/sql`, { method: "POST", headers, body });
318
- const data = await res.json();
319
- if (!res.ok) { console.error(JSON.stringify({ status: "error", http: res.status, ...data })); process.exit(1); }
320
- console.log(JSON.stringify(data, null, 2));
424
+ try {
425
+ const data = await getSdk().projects.sql(projectId, sql, params);
426
+ console.log(JSON.stringify(data, null, 2));
427
+ } catch (err) {
428
+ reportSdkError(err);
429
+ }
321
430
  }
322
431
 
323
432
  async function rest(projectId, table, queryParams) {
@@ -328,11 +437,12 @@ async function rest(projectId, table, queryParams) {
328
437
  hint: "Run 'run402 projects schema <id>' to list tables.",
329
438
  });
330
439
  }
331
- const p = findProject(projectId);
332
- const res = await fetch(`${API}/rest/v1/${table}${queryParams ? '?' + queryParams : ''}`, { headers: { "apikey": p.anon_key } });
333
- const data = await res.json();
334
- if (!res.ok) { console.error(JSON.stringify({ status: "error", http: res.status, ...data })); process.exit(1); }
335
- console.log(JSON.stringify(data, null, 2));
440
+ try {
441
+ const data = await getSdk().projects.rest(projectId, table, queryParams);
442
+ console.log(JSON.stringify(data, null, 2));
443
+ } catch (err) {
444
+ reportSdkError(err);
445
+ }
336
446
  }
337
447
 
338
448
  async function usage(projectId) {
@@ -420,15 +530,12 @@ async function promoteUser(projectId, email) {
420
530
  hint: "run402 projects promote-user <project_id> <email>",
421
531
  });
422
532
  }
423
- const p = findProject(projectId);
424
- const res = await fetch(`${API}/projects/v1/admin/${projectId}/promote-user`, {
425
- method: "POST",
426
- headers: { "Authorization": `Bearer ${p.service_key}`, "Content-Type": "application/json" },
427
- body: JSON.stringify({ email }),
428
- });
429
- const data = await res.json();
430
- if (!res.ok) { console.error(JSON.stringify({ status: "error", http: res.status, ...data })); process.exit(1); }
431
- console.log(JSON.stringify(data, null, 2));
533
+ try {
534
+ await getSdk().projects.promoteUser(projectId, email);
535
+ console.log(JSON.stringify({ status: "ok", email }));
536
+ } catch (err) {
537
+ reportSdkError(err);
538
+ }
432
539
  }
433
540
 
434
541
  async function demoteUser(projectId, email) {
@@ -439,15 +546,12 @@ async function demoteUser(projectId, email) {
439
546
  hint: "run402 projects demote-user <project_id> <email>",
440
547
  });
441
548
  }
442
- const p = findProject(projectId);
443
- const res = await fetch(`${API}/projects/v1/admin/${projectId}/demote-user`, {
444
- method: "POST",
445
- headers: { "Authorization": `Bearer ${p.service_key}`, "Content-Type": "application/json" },
446
- body: JSON.stringify({ email }),
447
- });
448
- const data = await res.json();
449
- if (!res.ok) { console.error(JSON.stringify({ status: "error", http: res.status, ...data })); process.exit(1); }
450
- console.log(JSON.stringify(data, null, 2));
549
+ try {
550
+ await getSdk().projects.demoteUser(projectId, email);
551
+ console.log(JSON.stringify({ status: "ok", email }));
552
+ } catch (err) {
553
+ reportSdkError(err);
554
+ }
451
555
  }
452
556
 
453
557
  async function deleteProject(projectId, args = []) {
@@ -474,6 +578,10 @@ const FLAGS_BY_SUB = {
474
578
  sql: { known: ["--file", "--params"], values: ["--file", "--params"] },
475
579
  costs: { known: ["--window"], values: ["--window"] },
476
580
  "apply-expose": { known: ["--file"], values: ["--file"] },
581
+ "validate-expose": {
582
+ known: ["--file", "--migration-file", "--migration-sql"],
583
+ values: ["--file", "--migration-file", "--migration-sql"],
584
+ },
477
585
  delete: { known: ["--confirm"], values: [] },
478
586
  };
479
587
 
@@ -506,6 +614,7 @@ export async function run(sub, args) {
506
614
  case "costs": { const { projectId, rest } = resolvePositionalProject(args, { rejectBareFirst: true, valueFlags: FLAGS_BY_SUB.costs.values }); await costs(projectId, rest); break; }
507
615
  case "schema": { const { projectId } = resolvePositionalProject(args, { rejectBareFirst: true }); await schema(projectId); break; }
508
616
  case "apply-expose": { const { projectId, rest } = resolvePositionalProject(args, { maxBarePositionals: 1, valueFlags: FLAGS_BY_SUB["apply-expose"].values, rejectBareFirstWhenFlagPresent: ["--file"] }); await applyExpose(projectId, rest); break; }
617
+ case "validate-expose": await validateExpose(args); break;
509
618
  case "get-expose": { const { projectId } = resolvePositionalProject(args, { rejectBareFirst: true }); await getExpose(projectId); break; }
510
619
  case "delete": { const { projectId, rest } = resolvePositionalProject(args, { rejectBareFirst: true }); await deleteProject(projectId, rest); break; }
511
620
  case "pin": { const { projectId } = resolvePositionalProject(args, { rejectBareFirst: true }); await pin(projectId); break; }
package/lib/status.mjs CHANGED
@@ -1,5 +1,5 @@
1
- import { readAllowance, loadKeyStore, getActiveProjectId, API } from "./config.mjs";
2
- import { getAllowanceAuthHeaders } from "../core-dist/allowance-auth.js";
1
+ import { readAllowance, loadKeyStore, getActiveProjectId } from "./config.mjs";
2
+ import { getSdk } from "./sdk.mjs";
3
3
  import { assertKnownFlags, hasHelp, normalizeArgv } from "./argparse.mjs";
4
4
 
5
5
  const HELP = `run402 status — Show full account state in one shot
@@ -86,23 +86,16 @@ export async function run(args = []) {
86
86
  }
87
87
 
88
88
  const wallet = allowance.address.toLowerCase();
89
- const authHeaders = getAllowanceAuthHeaders("/tiers/v1/status");
90
89
  const rail = allowance.rail || "x402";
91
90
 
92
91
  // Parallel API calls: tier + billing balance + server-side projects + on-chain wallet balance
93
- const [tierRes, balanceRes, projectsRes, walletBalance] = await Promise.all([
94
- authHeaders
95
- ? fetch(`${API}/tiers/v1/status`, { headers: { ...authHeaders } }).catch(() => null)
96
- : null,
97
- fetch(`${API}/billing/v1/accounts/${wallet}`).catch(() => null),
98
- fetch(`${API}/wallets/v1/${wallet}/projects`).catch(() => null),
92
+ const [tier, billing, remote, walletBalance] = await Promise.all([
93
+ getSdk().tier.status().catch(() => null),
94
+ getSdk().billing.checkBalance(wallet).catch(() => null),
95
+ getSdk().projects.list(wallet).catch(() => null),
99
96
  readWalletBalanceUsdMicros(rail, allowance.address),
100
97
  ]);
101
98
 
102
- const tier = tierRes?.ok ? await tierRes.json() : null;
103
- const billing = balanceRes?.ok ? await balanceRes.json() : null;
104
- const remote = projectsRes?.ok ? await projectsRes.json() : null;
105
-
106
99
  // Local keystore
107
100
  const store = loadKeyStore();
108
101
  const activeId = getActiveProjectId();
@@ -125,8 +118,8 @@ export async function run(args = []) {
125
118
  // two unambiguous fields:
126
119
  // - billing: credits held by Run402 (available + held), null if no account
127
120
  // - wallet_balance_usd_micros: on-chain USDC/pathUSD, null if RPC fails
128
- billing: billing && billing.exists
129
- ? { available_usd_micros: billing.available_usd_micros, held_usd_micros: billing.held_usd_micros }
121
+ billing: billing && billing.exists !== false
122
+ ? { available_usd_micros: billing.available_usd_micros, held_usd_micros: billing.held_usd_micros ?? 0 }
130
123
  : null,
131
124
  wallet_balance_usd_micros: walletBalance,
132
125
  projects,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "run402",
3
- "version": "1.63.0",
3
+ "version": "1.65.0",
4
4
  "description": "CLI for Run402 — provision Postgres databases, deploy static sites, generate images, and manage wallets via x402 and MPP micropayments.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -27,11 +27,16 @@ export interface RequestOptions {
27
27
  /** Short verb phrase attached to thrown errors (e.g. "provisioning project"). */
28
28
  context: string;
29
29
  }
30
+ export interface ResponseEnvelope<T = unknown> {
31
+ status: number;
32
+ body: T;
33
+ }
30
34
  /** Internal client surface passed to each namespace. */
31
35
  export interface Client {
32
36
  /** API base URL, e.g. `https://api.run402.com`. Exposed for namespaces that need to compute derived URLs (e.g. REST endpoints). */
33
37
  readonly apiBase: string;
34
38
  request<T>(path: string, opts: RequestOptions): Promise<T>;
39
+ requestWithResponse<T>(path: string, opts: RequestOptions): Promise<ResponseEnvelope<T>>;
35
40
  getProject(id: string): Promise<ProjectKeys | null>;
36
41
  /** The underlying credentials provider. Namespaces use this to access optional methods (saveProject, setActiveProject, ...). */
37
42
  readonly credentials: CredentialsProvider;
@@ -43,5 +48,6 @@ export interface Client {
43
48
  readonly fetch: typeof globalThis.fetch;
44
49
  }
45
50
  export declare function request<T>(kernel: KernelConfig, path: string, opts: RequestOptions): Promise<T>;
51
+ export declare function requestWithResponse<T>(kernel: KernelConfig, path: string, opts: RequestOptions): Promise<ResponseEnvelope<T>>;
46
52
  export declare function buildClient(kernel: KernelConfig): Client;
47
53
  //# sourceMappingURL=kernel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../src/kernel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEzE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC/B,WAAW,EAAE,mBAAmB,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC9B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wDAAwD;AACxD,MAAM,WAAW,MAAM;IACrB,mIAAmI;IACnI,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3D,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACpD,gIAAgI;IAChI,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACzC;AAED,wBAAsB,OAAO,CAAC,CAAC,EAC7B,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,CAAC,CAAC,CA0EZ;AAWD,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAQxD"}
1
+ {"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../src/kernel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEzE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAC/B,WAAW,EAAE,mBAAmB,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC9B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iFAAiF;IACjF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,OAAO;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;CACT;AAED,wDAAwD;AACxD,MAAM,WAAW,MAAM;IACrB,mIAAmI;IACnI,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3D,mBAAmB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACpD,gIAAgI;IAChI,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACzC;AAED,wBAAsB,OAAO,CAAC,CAAC,EAC7B,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CA0E9B;AAWD,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAUxD"}
@@ -12,6 +12,9 @@
12
12
  */
13
13
  import { ApiError, NetworkError, PaymentRequired, Unauthorized, } from "./errors.js";
14
14
  export async function request(kernel, path, opts) {
15
+ return (await requestWithResponse(kernel, path, opts)).body;
16
+ }
17
+ export async function requestWithResponse(kernel, path, opts) {
15
18
  const { apiBase, fetch, credentials } = kernel;
16
19
  const { method = "GET", headers = {}, body, rawBody, withAuth = true, context } = opts;
17
20
  const url = `${apiBase}${path}`;
@@ -55,7 +58,7 @@ export async function request(kernel, path, opts) {
55
58
  resBody = await res.text();
56
59
  }
57
60
  if (res.ok)
58
- return resBody;
61
+ return { status: res.status, body: resBody };
59
62
  if (res.status === 402) {
60
63
  throw new PaymentRequired(`${displayMessage(resBody, "Payment required")} while ${context}`, 402, resBody, context);
61
64
  }
@@ -78,6 +81,7 @@ export function buildClient(kernel) {
78
81
  return {
79
82
  apiBase: kernel.apiBase,
80
83
  request: (path, opts) => request(kernel, path, opts),
84
+ requestWithResponse: (path, opts) => requestWithResponse(kernel, path, opts),
81
85
  getProject: (id) => kernel.credentials.getProject(id),
82
86
  credentials: kernel.credentials,
83
87
  fetch: kernel.fetch,
@@ -1 +1 @@
1
- {"version":3,"file":"kernel.js","sourceRoot":"","sources":["../src/kernel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kernel.js","sourceRoot":"","sources":["../src/kernel.ts"],"names":[],"mappings":"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"}
@@ -45,6 +45,7 @@ export interface AccountIdentifier {
45
45
  email?: string;
46
46
  wallet?: string;
47
47
  }
48
+ export type BillingAccountIdentifier = string;
48
49
  export interface AutoRechargeOptions {
49
50
  billingAccountId: string;
50
51
  enabled: boolean;
@@ -52,14 +53,18 @@ export interface AutoRechargeOptions {
52
53
  }
53
54
  export declare class Billing {
54
55
  private readonly client;
55
- readonly balance: (wallet: string) => Promise<BillingBalance>;
56
+ readonly balance: (identifier: BillingAccountIdentifier) => Promise<BillingBalance>;
56
57
  readonly createEmail: (email: string) => Promise<EmailBillingAccount>;
57
58
  readonly autoRecharge: (opts: AutoRechargeOptions) => Promise<void>;
58
59
  constructor(client: Client);
59
- /** Check a wallet's billing balance (available / held / status). Public, no auth. */
60
- checkBalance(wallet: string): Promise<BillingBalance>;
61
- /** Fetch billing history for a wallet. */
62
- history(wallet: string, limit?: number): Promise<BillingHistoryResult>;
60
+ /** Check a billing account by wallet or email identifier. Public, no auth. */
61
+ checkBalance(identifier: BillingAccountIdentifier): Promise<BillingBalance>;
62
+ /** Check a billing account by wallet or email identifier. Public, no auth. */
63
+ getAccount(identifier: BillingAccountIdentifier): Promise<BillingBalance>;
64
+ /** Fetch billing history by wallet or email identifier. */
65
+ history(identifier: BillingAccountIdentifier, limit?: number): Promise<BillingHistoryResult>;
66
+ /** Fetch billing history by wallet or email identifier. */
67
+ getHistory(identifier: BillingAccountIdentifier, limit?: number): Promise<BillingHistoryResult>;
63
68
  /** Create a Stripe checkout URL to fund a wallet's billing balance. */
64
69
  createCheckout(wallet: string, amountUsdMicros: number): Promise<CreateCheckoutResult>;
65
70
  /** Create an email-only (no-wallet) billing account. Sends a verification email. */
@@ -1 +1 @@
1
- {"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../src/namespaces/billing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"billing.d.ts","sourceRoot":"","sources":["../../src/namespaces/billing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,QAAQ,GAAG,OAAO,CAAC;IACpC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,uBAAuB,EAAE,MAAM,CAAC;IAChC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,QAAQ,GAAG,OAAO,CAAC;IACpC,OAAO,EAAE,mBAAmB,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,uBAAuB,EAAE,MAAM,CAAC;IAChC,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAE9C,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,qBAAa,OAAO;IAKN,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,QAAQ,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,wBAAwB,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACpF,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACtE,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;gBAEvC,MAAM,EAAE,MAAM;IAM3C,8EAA8E;IACxE,YAAY,CAAC,UAAU,EAAE,wBAAwB,GAAG,OAAO,CAAC,cAAc,CAAC;IAIjF,8EAA8E;IACxE,UAAU,CAAC,UAAU,EAAE,wBAAwB,GAAG,OAAO,CAAC,cAAc,CAAC;IAQ/E,2DAA2D;IACrD,OAAO,CAAC,UAAU,EAAE,wBAAwB,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIlG,2DAA2D;IACrD,UAAU,CAAC,UAAU,EAAE,wBAAwB,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAWrG,uEAAuE;IACjE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAS5F,oFAAoF;IAC9E,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IASrE,yFAAyF;IACnF,UAAU,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYzE,wEAAwE;IAClE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAmB9F,2CAA2C;IACrC,YAAY,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAmBhF,+CAA+C;IACzC,eAAe,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CAchE"}
@@ -4,6 +4,12 @@
4
4
  * account by wallet address or email.
5
5
  */
6
6
  import { LocalError } from "../errors.js";
7
+ function encodeBillingIdentifier(identifier) {
8
+ const normalized = /^0x/i.test(identifier)
9
+ ? identifier.toLowerCase()
10
+ : identifier;
11
+ return encodeURIComponent(normalized);
12
+ }
7
13
  export class Billing {
8
14
  client;
9
15
  balance;
@@ -15,20 +21,28 @@ export class Billing {
15
21
  this.createEmail = this.createEmailAccount.bind(this);
16
22
  this.autoRecharge = this.setAutoRecharge.bind(this);
17
23
  }
18
- /** Check a wallet's billing balance (available / held / status). Public, no auth. */
19
- async checkBalance(wallet) {
20
- const w = wallet.toLowerCase();
21
- return this.client.request(`/billing/v1/accounts/${w}`, {
24
+ /** Check a billing account by wallet or email identifier. Public, no auth. */
25
+ async checkBalance(identifier) {
26
+ return this.getAccount(identifier);
27
+ }
28
+ /** Check a billing account by wallet or email identifier. Public, no auth. */
29
+ async getAccount(identifier) {
30
+ const encoded = encodeBillingIdentifier(identifier);
31
+ return this.client.request(`/billing/v1/accounts/${encoded}`, {
22
32
  context: "checking balance",
23
33
  withAuth: false,
24
34
  });
25
35
  }
26
- /** Fetch billing history for a wallet. */
27
- async history(wallet, limit) {
28
- const w = wallet.toLowerCase();
36
+ /** Fetch billing history by wallet or email identifier. */
37
+ async history(identifier, limit) {
38
+ return this.getHistory(identifier, limit);
39
+ }
40
+ /** Fetch billing history by wallet or email identifier. */
41
+ async getHistory(identifier, limit) {
42
+ const encoded = encodeBillingIdentifier(identifier);
29
43
  const path = limit
30
- ? `/billing/v1/accounts/${w}/history?limit=${limit}`
31
- : `/billing/v1/accounts/${w}/history`;
44
+ ? `/billing/v1/accounts/${encoded}/history?limit=${encodeURIComponent(String(limit))}`
45
+ : `/billing/v1/accounts/${encoded}/history`;
32
46
  return this.client.request(path, {
33
47
  context: "fetching billing history",
34
48
  withAuth: false,
@@ -1 +1 @@
1
- {"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/namespaces/billing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"billing.js","sourceRoot":"","sources":["../../src/namespaces/billing.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
  * configured fetch still flows through any wrappers (e.g. test mocks).
8
8
  */
9
9
  import type { Client } from "../kernel.js";
10
- import type { BlobDiagnoseEnvelope, BlobLsOptions, BlobLsResult, BlobPutOptions, BlobPutResult, BlobPutSource, BlobSignOptions, BlobSignResult, BlobWaitFreshOptions, BlobWaitFreshResult } from "./blobs.types.js";
10
+ import type { BlobDiagnoseEnvelope, BlobLsOptions, BlobLsResult, BlobPutOptions, BlobPutResult, BlobPutSource, BlobSignOptions, BlobSignResult, BlobUploadCompleteOptions, BlobUploadCompleteResult, BlobUploadInitOptions, BlobUploadInitResult, BlobUploadStatusResult, BlobWaitFreshOptions, BlobWaitFreshResult } from "./blobs.types.js";
11
11
  export declare class Blobs {
12
12
  private readonly client;
13
13
  constructor(client: Client);
@@ -22,6 +22,21 @@ export declare class Blobs {
22
22
  * @throws {ProjectNotFound} if `projectId` is not in the provider.
23
23
  */
24
24
  put(projectId: string, key: string, source: BlobPutSource, opts?: BlobPutOptions): Promise<BlobPutResult>;
25
+ /**
26
+ * Initialize a low-level upload session. This is the gateway half of
27
+ * `blobs.put`, exposed for CLI-style resumable streaming uploaders that need
28
+ * to manage local files, part concurrency, and cached session state.
29
+ */
30
+ initUploadSession(projectId: string, opts: BlobUploadInitOptions): Promise<BlobUploadInitResult>;
31
+ /** Fetch a low-level upload session's current status for resumable uploads. */
32
+ getUploadSession(projectId: string, uploadId: string): Promise<BlobUploadStatusResult>;
33
+ /**
34
+ * Complete a low-level upload session and return the same AssetRef shape as
35
+ * `blobs.put`. Single PUT sessions may omit `parts`.
36
+ */
37
+ completeUploadSession(projectId: string, uploadId: string, opts?: BlobUploadCompleteOptions, extra?: {
38
+ contentType?: string;
39
+ }): Promise<BlobUploadCompleteResult>;
25
40
  /**
26
41
  * Diagnose a public blob URL. Returns a JSON envelope describing the live
27
42
  * CDN state (expected vs observed SHA, cache headers, recent invalidation
@@ -1 +1 @@
1
- {"version":3,"file":"blobs.d.ts","sourceRoot":"","sources":["../../src/namespaces/blobs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAGV,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAuO1B,qBAAa,KAAK;IACJ,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAE3C;;;;;;;;;OASG;IACG,GAAG,CACP,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,aAAa,EACrB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,aAAa,CAAC;IA8GzB;;;;;;;;;;;;;;;;;;;OAmBG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAchF;;;;;;;;;;;;;;;;;OAiBG;IACG,SAAS,CACb,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,mBAAmB,CAAC;IA2C/B;;;;;;;OAOG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAuB5D,oDAAoD;IAC9C,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAoB5E,+DAA+D;IACzD,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcvD,6FAA6F;IACvF,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;CAoBhG"}
1
+ {"version":3,"file":"blobs.d.ts","sourceRoot":"","sources":["../../src/namespaces/blobs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAGV,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,EACd,yBAAyB,EACzB,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAgO1B,qBAAa,KAAK;IACJ,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAE3C;;;;;;;;;OASG;IACG,GAAG,CACP,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,aAAa,EACrB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,aAAa,CAAC;IAoFzB;;;;OAIG;IACG,iBAAiB,CACrB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,oBAAoB,CAAC;IAsBhC,+EAA+E;IACzE,gBAAgB,CACpB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,sBAAsB,CAAC;IAgBlC;;;OAGG;IACG,qBAAqB,CACzB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,yBAA8B,EACpC,KAAK,GAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO,GACnC,OAAO,CAAC,wBAAwB,CAAC;IAoBpC;;;;;;;;;;;;;;;;;;;OAmBG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAchF;;;;;;;;;;;;;;;;;OAiBG;IACG,SAAS,CACb,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,mBAAmB,CAAC;IA2C/B;;;;;;;OAOG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAuB5D,oDAAoD;IAC9C,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAoB5E,+DAA+D;IACzD,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcvD,6FAA6F;IACvF,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;CAoBhG"}