@tinycloud/cli 1.2.0-beta.7 → 1.2.0-beta.9

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.
@@ -6877,8 +6877,39 @@ function parseStorageQuotaBytes(responseText) {
6877
6877
  limitBytes: parseInt(match[2], 10)
6878
6878
  };
6879
6879
  }
6880
+ function isByteCount2(value) {
6881
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
6882
+ }
6883
+ function byteCountsOf(value) {
6884
+ if (typeof value !== "object" || value === null) return void 0;
6885
+ const { usedBytes, limitBytes } = value;
6886
+ return isByteCount2(usedBytes) && isByteCount2(limitBytes) ? { usedBytes, limitBytes } : void 0;
6887
+ }
6888
+ function parseStorageRejection(responseText) {
6889
+ let body;
6890
+ try {
6891
+ body = JSON.parse(responseText);
6892
+ } catch {
6893
+ return parseStorageQuotaBytes(responseText);
6894
+ }
6895
+ if (typeof body !== "object" || body === null) return void 0;
6896
+ const record2 = body;
6897
+ const message = typeof record2.message === "string" ? record2.message : "";
6898
+ const space = byteCountsOf(record2.space) ?? parseStorageQuotaBytes(message);
6899
+ const isStorageBody = typeof record2.error === "string" && STORAGE_REJECTION_BODY_ERRORS[record2.error] === true;
6900
+ if (!space && !isStorageBody) {
6901
+ return void 0;
6902
+ }
6903
+ const details = { ...space };
6904
+ const account = byteCountsOf(record2.account);
6905
+ if (account) {
6906
+ const plan = record2.account.plan;
6907
+ details.account = typeof plan === "string" && plan !== "" ? { ...account, plan } : account;
6908
+ }
6909
+ return details;
6910
+ }
6880
6911
  function storageRejectionError(service, status, meta, responseText) {
6881
- const quotaMeta = { ...meta, ...parseStorageQuotaBytes(responseText) };
6912
+ const quotaMeta = { ...meta, ...parseStorageRejection(responseText) };
6882
6913
  return status === 402 ? storageQuotaExceededError(service, STORAGE_FULL_MESSAGE, quotaMeta) : storageLimitReachedError(service, STORAGE_WRITE_TOO_LARGE_MESSAGE, quotaMeta);
6883
6914
  }
6884
6915
  function wrapError2(service, error, defaultCode = ErrorCodes.NETWORK_ERROR) {
@@ -8438,7 +8469,7 @@ function encOk(data) {
8438
8469
  function encErr(error) {
8439
8470
  return { ok: false, error };
8440
8471
  }
8441
- var import_decrypt_transport_response_error, ErrorCodes, defaultRetryPolicy, TelemetryEvents, REDACTED, SAFE_NUMBER_FIELDS, SAFE_BOOLEAN_FIELDS, SAFE_REPLICATION_FIELDS, DEBUG_FLAG, MAX_EVENTS, TinyCloudDebugLogger, tinyCloudDebugLogger, ServiceErrorSchema, GenericResultSchema, KVResponseHeadersSchema, GenericKVResponseSchema, KVListResponseSchema, KVListResultSchema, ServiceRequestEventSchema, ServiceResponseEventSchema, ServiceErrorEventSchema, ServiceRetryEventSchema, TelemetrySpanEventSchema, RetryPolicySchema, ServiceSessionSchema, URN_PREFIX, NETWORK_NAME_RE, PKH_EIP155_DID_RE, NetworkIdError, RequestTimeoutError, grantableActions, capabilityServices, MAX_CAUSE_DEPTH2, STORAGE_FULL_MESSAGE, STORAGE_WRITE_TOO_LARGE_MESSAGE, MAX_TIMER_DELAY_MS, BaseService, PrefixedKVService, DEFAULT_SIGNED_READ_URL_EXPIRY_MS, KVAction, MAX_KV_BATCH_READ_ITEMS, pathByteEncoder, REVOKED_BODY, KVService, SQLMigrations, DatabaseHandle, SQLAction, DDL_TOKENS, MIGRATIONS_TABLE, MIGRATIONS_SCHEMA, MIGRATIONS_META_NAMESPACE, MIGRATIONS_META_ID, SQLService, DuckDbDatabaseHandle, DuckDbAction, DuckDbService, AsyncQueue, HOOK_STREAM_RETRY_BASE_DELAY_MS, HOOK_STREAM_RETRY_MAX_DELAY_MS, HOOK_STREAM_HEALTHY_MS, HooksService, SUPERSEDED, STREAM_ERROR_NAMES, STREAM_ERROR_CODES, VaultVersionConfig, CURRENT_VAULT_VERSION, VaultHeaders, DB_NAME, DB_VERSION, STORE_NAME, WRAP_KEY_ID, DataVaultService, SECRET_NAME_RE, SECRET_PREFIX, SCOPED_SECRET_PREFIX, RESERVED_SECRET_SCOPES, TC832_RESERVED_SCOPES, HEX, DEFAULT_ENCRYPTION_ALG, ENVELOPE_VERSION, DEFAULT_KEY_VERSION, DECRYPT_FACT_TYPE, DECRYPT_RESULT_TYPE, EncryptionService;
8472
+ var import_decrypt_transport_response_error, ErrorCodes, defaultRetryPolicy, TelemetryEvents, REDACTED, SAFE_NUMBER_FIELDS, SAFE_BOOLEAN_FIELDS, SAFE_REPLICATION_FIELDS, DEBUG_FLAG, MAX_EVENTS, TinyCloudDebugLogger, tinyCloudDebugLogger, ServiceErrorSchema, GenericResultSchema, KVResponseHeadersSchema, GenericKVResponseSchema, KVListResponseSchema, KVListResultSchema, ServiceRequestEventSchema, ServiceResponseEventSchema, ServiceErrorEventSchema, ServiceRetryEventSchema, TelemetrySpanEventSchema, RetryPolicySchema, ServiceSessionSchema, URN_PREFIX, NETWORK_NAME_RE, PKH_EIP155_DID_RE, NetworkIdError, RequestTimeoutError, grantableActions, capabilityServices, MAX_CAUSE_DEPTH2, STORAGE_FULL_MESSAGE, STORAGE_WRITE_TOO_LARGE_MESSAGE, STORAGE_REJECTION_BODY_ERRORS, MAX_TIMER_DELAY_MS, BaseService, PrefixedKVService, DEFAULT_SIGNED_READ_URL_EXPIRY_MS, KVAction, MAX_KV_BATCH_READ_ITEMS, pathByteEncoder, REVOKED_BODY, KVService, SQLMigrations, DatabaseHandle, SQLAction, DDL_TOKENS, MIGRATIONS_TABLE, MIGRATIONS_SCHEMA, MIGRATIONS_META_NAMESPACE, MIGRATIONS_META_ID, SQLService, DuckDbDatabaseHandle, DuckDbAction, DuckDbService, AsyncQueue, HOOK_STREAM_RETRY_BASE_DELAY_MS, HOOK_STREAM_RETRY_MAX_DELAY_MS, HOOK_STREAM_HEALTHY_MS, HooksService, SUPERSEDED, STREAM_ERROR_NAMES, STREAM_ERROR_CODES, VaultVersionConfig, CURRENT_VAULT_VERSION, VaultHeaders, DB_NAME, DB_VERSION, STORE_NAME, WRAP_KEY_ID, DataVaultService, SECRET_NAME_RE, SECRET_PREFIX, SCOPED_SECRET_PREFIX, RESERVED_SECRET_SCOPES, TC832_RESERVED_SCOPES, HEX, DEFAULT_ENCRYPTION_ALG, ENVELOPE_VERSION, DEFAULT_KEY_VERSION, DECRYPT_FACT_TYPE, DECRYPT_RESULT_TYPE, EncryptionService;
8442
8473
  var init_dist2 = __esm({
8443
8474
  "../sdk-services/dist/index.js"() {
8444
8475
  "use strict";
@@ -8484,6 +8515,8 @@ var init_dist2 = __esm({
8484
8515
  // Storage quota errors
8485
8516
  STORAGE_QUOTA_EXCEEDED: "STORAGE_QUOTA_EXCEEDED",
8486
8517
  STORAGE_LIMIT_REACHED: "STORAGE_LIMIT_REACHED",
8518
+ /** The node answered the usage read without usage numbers (it predates the read). */
8519
+ STORAGE_STATUS_UNAVAILABLE: "STORAGE_STATUS_UNAVAILABLE",
8487
8520
  // DuckDB-specific errors
8488
8521
  DUCKDB_ERROR: "DUCKDB_ERROR",
8489
8522
  DUCKDB_PERMISSION_DENIED: "DUCKDB_PERMISSION_DENIED",
@@ -8513,7 +8546,9 @@ var init_dist2 = __esm({
8513
8546
  REPLICATION_WRITE: "replication.write",
8514
8547
  REPLICATION_SYNC: "replication.sync",
8515
8548
  REPLICATION_STATE: "replication.state",
8516
- REPLICATION_DIVERGENCE: "replication.divergence"
8549
+ REPLICATION_DIVERGENCE: "replication.divergence",
8550
+ /** Emitted once, on the first write rejected because storage is full. */
8551
+ STORAGE_FULL: "storage.full"
8517
8552
  };
8518
8553
  REDACTED = "[REDACTED]";
8519
8554
  SAFE_NUMBER_FIELDS = /* @__PURE__ */ new Set([
@@ -8785,6 +8820,10 @@ var init_dist2 = __esm({
8785
8820
  MAX_CAUSE_DEPTH2 = 8;
8786
8821
  STORAGE_FULL_MESSAGE = "TinyCloud storage is full, so this change was not saved. Reading still works. Free up space or upgrade your plan to save again.";
8787
8822
  STORAGE_WRITE_TOO_LARGE_MESSAGE = "This change is larger than the TinyCloud storage you have left, so it was not saved. Reading still works. Free up space or upgrade your plan to save it.";
8823
+ STORAGE_REJECTION_BODY_ERRORS = {
8824
+ storage_quota_exceeded: true,
8825
+ storage_limit_reached: true
8826
+ };
8788
8827
  MAX_TIMER_DELAY_MS = 2147483647;
8789
8828
  BaseService = class {
8790
8829
  constructor() {
@@ -9241,7 +9280,7 @@ var init_dist2 = __esm({
9241
9280
  if (response.status !== 402 && response.status !== 413) {
9242
9281
  return void 0;
9243
9282
  }
9244
- if (response.status === 413 && !parseStorageQuotaBytes(errorText)) {
9283
+ if (response.status === 413 && !parseStorageRejection(errorText)) {
9245
9284
  return void 0;
9246
9285
  }
9247
9286
  return err(
@@ -11057,6 +11096,9 @@ var init_dist2 = __esm({
11057
11096
  if (response.status === 402) {
11058
11097
  return err(storageRejectionError("sql", 402, meta, errorText));
11059
11098
  }
11099
+ if (response.status === 413 && parseStorageRejection(errorText)) {
11100
+ return err(storageRejectionError("sql", 413, meta, errorText));
11101
+ }
11060
11102
  const errorBody = parseServiceErrorBody(errorText);
11061
11103
  const errorCode2 = this.mapHttpStatusToErrorCode(
11062
11104
  response.status,
@@ -11434,6 +11476,9 @@ var init_dist2 = __esm({
11434
11476
  if (response.status === 402) {
11435
11477
  return err(storageRejectionError("duckdb", 402, meta, errorText));
11436
11478
  }
11479
+ if (response.status === 413 && parseStorageRejection(errorText)) {
11480
+ return err(storageRejectionError("duckdb", 413, meta, errorText));
11481
+ }
11437
11482
  const errorBody = parseServiceErrorBody(errorText);
11438
11483
  const errorCode2 = this.mapHttpStatusToErrorCode(
11439
11484
  response.status,