@vertracloud/blob 0.0.0-stage → 0.1.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../node_modules/@vertracloud/api-types/v1.mjs","../src/errors.ts","../src/source.ts","../src/transport.ts","../src/client.ts","../src/index.ts"],"sourcesContent":["// common/v1.ts\nvar UserPlan = {\n FREE: 1,\n ECONOMY: 2,\n PRO: 3,\n SCALE: 4,\n INTERMEDIARY: 9,\n ENTERPRISE_4: 5,\n ENTERPRISE_6: 19,\n ENTERPRISE_8: 6,\n ENTERPRISE_12: 10,\n ENTERPRISE_14: 11,\n ENTERPRISE_16: 7,\n ENTERPRISE_18: 12,\n ENTERPRISE_20: 13,\n ENTERPRISE_22: 14,\n ENTERPRISE_24: 15,\n ENTERPRISE_26: 16,\n ENTERPRISE_28: 17,\n ENTERPRISE_30: 18,\n ENTERPRISE_32: 8\n};\n\n// payloads/v1/activity.ts\nvar ActivityStatus = {\n Success: \"success\",\n Warning: \"warning\",\n Error: \"error\",\n Info: \"info\"\n};\nvar ActivityTargetType = {\n App: \"app\",\n Database: \"database\",\n Workspace: \"workspace\",\n Audit: \"audit\"\n};\nvar ActivityOrigin = {\n User: \"user\",\n Agent: \"agent\",\n ApiKey: \"api_key\",\n System: \"system\",\n Admin: \"admin\"\n};\n\n// payloads/v1/api-key.ts\nvar APIApiKeyScope = {\n APPS_READ: \"apps:read\",\n APPS_WRITE: \"apps:write\",\n APPS_DELETE: \"apps:delete\",\n APPS_ENVS: \"apps:envs\",\n APPS_FILES: \"apps:files\",\n DATABASES_READ: \"databases:read\",\n DATABASES_WRITE: \"databases:write\",\n DATABASES_DELETE: \"databases:delete\",\n DATABASES_CREDENTIALS: \"databases:credentials\",\n SNAPSHOTS_READ: \"snapshots:read\",\n SNAPSHOTS_WRITE: \"snapshots:write\",\n ACCOUNT_READ: \"account:read\",\n ACCOUNT_WRITE: \"account:write\",\n WORKSPACES_READ: \"workspaces:read\",\n WORKSPACES_WRITE: \"workspaces:write\",\n WORKSPACES_DELETE: \"workspaces:delete\",\n WORKSPACES_INVITES: \"workspaces:invites\",\n BLOB_READ: \"blob:read\",\n BLOB_WRITE: \"blob:write\",\n BILLING_READ: \"billing:read\",\n BILLING_WRITE: \"billing:write\",\n REDEEM_WRITE: \"redeem:write\"\n};\nvar APIApiKeyPreset = { Read: \"read\", Write: \"write\", Full: \"full\" };\nvar API_KEY_SCOPES = {\n \"apps:read\": {\n group: \"apps\",\n routes: [\n { method: \"GET\", path: \"/v1/apps/runtimes\" },\n { method: \"GET\", path: \"/v1/apps/status\" },\n { method: \"GET\", path: \"/v1/apps/:id\" },\n { method: \"GET\", path: \"/v1/apps/:id/status\" },\n { method: \"GET\", path: \"/v1/apps/:id/realtime\" },\n { method: \"GET\", path: \"/v1/apps/:id/metrics\" },\n { method: \"GET\", path: \"/v1/apps/:id/logs\" },\n { method: \"GET\", path: \"/v1/apps/:id/download\" },\n { method: \"GET\", path: \"/v1/apps/:id/deploys\" },\n { method: \"GET\", path: \"/v1/apps/:id/deploys/webhook\" },\n { method: \"GET\", path: \"/v1/apps/:id/releases\" },\n { method: \"GET\", path: \"/v1/apps/:id/releases/:release_id/log\" },\n { method: \"GET\", path: \"/v1/apps/:id/network/custom\" },\n { method: \"GET\", path: \"/v1/apps/:id/network/dns\" }\n ]\n },\n \"apps:write\": {\n group: \"apps\",\n routes: [\n { method: \"POST\", path: \"/v1/apps\" },\n { method: \"POST\", path: \"/v1/apps/:id/start\" },\n { method: \"POST\", path: \"/v1/apps/:id/stop\" },\n { method: \"POST\", path: \"/v1/apps/:id/restart\" },\n { method: \"PATCH\", path: \"/v1/apps/:id/config\" },\n { method: \"POST\", path: \"/v1/apps/:id/deploys/webhook\" },\n { method: \"DELETE\", path: \"/v1/apps/:id/deploys/webhook\" },\n { method: \"POST\", path: \"/v1/apps/:id/network/custom\" },\n { method: \"DELETE\", path: \"/v1/apps/:id/network/custom\" },\n { method: \"POST\", path: \"/v1/apps/:id/network/purge-cache\" },\n { method: \"PATCH\", path: \"/v1/apps/:id/network/subdomain\" },\n { method: \"POST\", path: \"/v1/apps/:id/network/publish\" },\n { method: \"DELETE\", path: \"/v1/apps/:id/network/publish\" },\n { method: \"POST\", path: \"/v1/apps/:id/releases/:release_id/rollback\" }\n ]\n },\n \"apps:delete\": { group: \"apps\", routes: [{ method: \"DELETE\", path: \"/v1/apps/:id\" }] },\n \"apps:envs\": {\n group: \"apps\",\n routes: [\n { method: \"GET\", path: \"/v1/apps/:id/envs\" },\n { method: \"POST\", path: \"/v1/apps/:id/envs\" },\n { method: \"DELETE\", path: \"/v1/apps/:id/envs/:envId\" },\n { method: \"GET\", path: \"/v1/apps/:id/releases/:release_id/rollback\" }\n ]\n },\n \"apps:files\": {\n group: \"apps\",\n routes: [\n { method: \"GET\", path: \"/v1/apps/:id/files\" },\n { method: \"GET\", path: \"/v1/apps/:id/files/tree\" },\n { method: \"GET\", path: \"/v1/apps/:id/files/content\" },\n { method: \"PUT\", path: \"/v1/apps/:id/files\" },\n { method: \"PATCH\", path: \"/v1/apps/:id/files\" },\n { method: \"DELETE\", path: \"/v1/apps/:id/files\" },\n { method: \"POST\", path: \"/v1/apps/:id/files/upload\" }\n ]\n },\n \"databases:read\": {\n group: \"databases\",\n routes: [\n { method: \"GET\", path: \"/v1/databases/status\" },\n { method: \"GET\", path: \"/v1/databases/:id\" },\n { method: \"GET\", path: \"/v1/databases/:id/status\" },\n { method: \"GET\", path: \"/v1/databases/:id/metrics\" }\n ]\n },\n \"databases:write\": {\n group: \"databases\",\n routes: [\n { method: \"POST\", path: \"/v1/databases\" },\n { method: \"PUT\", path: \"/v1/databases/:id\" },\n { method: \"POST\", path: \"/v1/databases/:id/start\" },\n { method: \"POST\", path: \"/v1/databases/:id/stop\" },\n { method: \"POST\", path: \"/v1/databases/:id/reset\" }\n ]\n },\n \"databases:delete\": { group: \"databases\", routes: [{ method: \"DELETE\", path: \"/v1/databases/:id\" }] },\n \"databases:credentials\": {\n group: \"databases\",\n routes: [\n { method: \"GET\", path: \"/v1/databases/:id/credentials/certificate\" },\n { method: \"POST\", path: \"/v1/databases/:id/credentials/certificate/reset\" },\n { method: \"POST\", path: \"/v1/databases/:id/credentials/reset\" }\n ]\n },\n \"snapshots:read\": {\n group: \"snapshots\",\n routes: [\n { method: \"GET\", path: \"/v1/users/snapshots\" },\n { method: \"GET\", path: \"/v1/users/:id/snapshots\" },\n { method: \"GET\", path: \"/v1/users/:id/snapshots/:snapshot_id/download\" }\n ]\n },\n \"snapshots:write\": {\n group: \"snapshots\",\n routes: [\n { method: \"POST\", path: \"/v1/users/:id/snapshots\" },\n { method: \"POST\", path: \"/v1/users/:id/snapshots/:snapshot_id/restore\" }\n ]\n },\n \"account:read\": {\n group: \"account\",\n routes: [\n { method: \"GET\", path: \"/v1/users/me\" },\n { method: \"GET\", path: \"/v1/users/me/sessions\" }\n ]\n },\n \"account:write\": {\n group: \"account\",\n routes: [\n { method: \"PATCH\", path: \"/v1/users/me\" },\n { method: \"POST\", path: \"/v1/users/me/folders\" },\n { method: \"PATCH\", path: \"/v1/users/me/folders/:folder_id\" },\n { method: \"DELETE\", path: \"/v1/users/me/folders/:folder_id\" },\n { method: \"PUT\", path: \"/v1/users/me/folders/:folder_id/resources/:resource_type/:resource_id\" },\n { method: \"DELETE\", path: \"/v1/users/me/folders/:folder_id/resources/:resource_type/:resource_id\" },\n { method: \"PUT\", path: \"/v1/users/me/favorites/:resource_type/:resource_id\" },\n { method: \"DELETE\", path: \"/v1/users/me/favorites/:resource_type/:resource_id\" }\n ]\n },\n \"workspaces:read\": {\n group: \"workspaces\",\n routes: [\n { method: \"GET\", path: \"/v1/workspaces\" },\n { method: \"GET\", path: \"/v1/workspaces/:id\" },\n { method: \"GET\", path: \"/v1/workspaces/:id/members\" },\n { method: \"GET\", path: \"/v1/workspaces/:id/roles\" },\n { method: \"GET\", path: \"/v1/workspaces/:id/action-requests\" }\n ]\n },\n \"workspaces:write\": {\n group: \"workspaces\",\n routes: [\n { method: \"POST\", path: \"/v1/workspaces\" },\n { method: \"PUT\", path: \"/v1/workspaces/:id\" },\n { method: \"PUT\", path: \"/v1/workspaces/:id/members/:user_id\" },\n { method: \"DELETE\", path: \"/v1/workspaces/:id/members/:user_id\" },\n { method: \"POST\", path: \"/v1/workspaces/:id/roles\" },\n { method: \"PUT\", path: \"/v1/workspaces/:id/roles/:role_id\" },\n { method: \"DELETE\", path: \"/v1/workspaces/:id/roles/:role_id\" },\n { method: \"POST\", path: \"/v1/workspaces/:id/apps/:app_id\" },\n { method: \"DELETE\", path: \"/v1/workspaces/:id/apps/:app_id\" },\n { method: \"POST\", path: \"/v1/workspaces/:id/databases/:db_id\" },\n { method: \"DELETE\", path: \"/v1/workspaces/:id/databases/:db_id\" },\n { method: \"POST\", path: \"/v1/workspaces/:id/folders\" },\n { method: \"PATCH\", path: \"/v1/workspaces/:id/folders/:folder_id\" },\n { method: \"DELETE\", path: \"/v1/workspaces/:id/folders/:folder_id\" },\n { method: \"PUT\", path: \"/v1/workspaces/:id/folders/:folder_id/resources/:resource_type/:resource_id\" },\n { method: \"DELETE\", path: \"/v1/workspaces/:id/folders/:folder_id/resources/:resource_type/:resource_id\" },\n { method: \"PUT\", path: \"/v1/workspaces/:id/favorites/:resource_type/:resource_id\" },\n { method: \"DELETE\", path: \"/v1/workspaces/:id/favorites/:resource_type/:resource_id\" },\n { method: \"POST\", path: \"/v1/workspaces/:id/action-requests\" }\n ]\n },\n /**\n * Intentionally left out (dashboard session only): creating invites (a leaked key could grant\n * access that outlives its revocation), transferring ownership, approving/rejecting action\n * requests (approval is a human decision) and exporting activities.\n */\n /** Delete a workspace (soft delete). Only in the `full` preset, like `apps:delete`. */\n \"workspaces:delete\": {\n group: \"workspaces\",\n routes: [{ method: \"DELETE\", path: \"/v1/workspaces/:id\" }]\n },\n /** List and revoke workspace invites; view, accept and decline your own invite by token. Only in the `full` preset. */\n \"workspaces:invites\": {\n group: \"workspaces\",\n routes: [\n { method: \"GET\", path: \"/v1/workspaces/:id/invites\" },\n { method: \"DELETE\", path: \"/v1/workspaces/:id/invites/:invite_id\" },\n { method: \"GET\", path: \"/v1/workspaces/invites/:token\" },\n { method: \"POST\", path: \"/v1/workspaces/invites/:token/accept\" },\n { method: \"POST\", path: \"/v1/workspaces/invites/:token/decline\" }\n ]\n },\n /** Blob Storage (`blob.vertracloud.app`). Upload tokens (`vcup_`) are a separate credential, not a scope. */\n \"blob:read\": {\n group: \"blob\",\n routes: [\n { method: \"GET\", path: \"/v1/blob/objects\" },\n { method: \"GET\", path: \"/v1/blob/objects/:object_id\" },\n { method: \"GET\", path: \"/v1/blob/objects/:object_id/download\" },\n { method: \"GET\", path: \"/v1/blob/shares\" },\n { method: \"GET\", path: \"/v1/blob/rules\" },\n { method: \"GET\", path: \"/v1/blob/stats\" },\n { method: \"GET\", path: \"/v1/blob/s3/credentials\" },\n { method: \"GET\", path: \"/v1/blob/domains\" }\n ]\n },\n \"blob:write\": {\n group: \"blob\",\n routes: [\n { method: \"POST\", path: \"/v1/blob/objects\" },\n { method: \"PATCH\", path: \"/v1/blob/objects\" },\n { method: \"PATCH\", path: \"/v1/blob/objects/:object_id\" },\n { method: \"POST\", path: \"/v1/blob/objects/copy\" },\n { method: \"DELETE\", path: \"/v1/blob/objects\" },\n { method: \"DELETE\", path: \"/v1/blob/objects/:object_id\" },\n { method: \"POST\", path: \"/v1/blob/uploads\" },\n { method: \"GET\", path: \"/v1/blob/uploads\" },\n { method: \"GET\", path: \"/v1/blob/uploads/:upload_id\" },\n { method: \"POST\", path: \"/v1/blob/uploads/:upload_id/parts\" },\n { method: \"POST\", path: \"/v1/blob/uploads/:upload_id/complete\" },\n { method: \"DELETE\", path: \"/v1/blob/uploads/:upload_id\" },\n { method: \"POST\", path: \"/v1/blob/shares\" },\n { method: \"DELETE\", path: \"/v1/blob/shares/:share_id\" },\n { method: \"PUT\", path: \"/v1/blob/rules\" },\n { method: \"PUT\", path: \"/v1/blob/rules/:prefix\" },\n { method: \"DELETE\", path: \"/v1/blob/rules/:prefix\" },\n { method: \"POST\", path: \"/v1/blob/upload-tokens\" },\n { method: \"POST\", path: \"/v1/blob/domains\" },\n { method: \"POST\", path: \"/v1/blob/domains/:domain_id/verify\" },\n { method: \"PATCH\", path: \"/v1/blob/domains/:domain_id\" },\n { method: \"DELETE\", path: \"/v1/blob/domains/:domain_id\" }\n ]\n },\n \"billing:read\": {\n group: \"billing\",\n routes: [\n { method: \"GET\", path: \"/v1/orders\" },\n { method: \"GET\", path: \"/v1/orders/:orderId/status\" },\n { method: \"GET\", path: \"/v1/users/me/billing\" }\n ]\n },\n /**\n * Creates a plan order and generates the PIX charge; the payment itself is made by a person in their banking app.\n * Also saves the billing details (name, address, CPF/CNPJ) an order needs.\n */\n \"billing:write\": {\n group: \"billing\",\n routes: [\n { method: \"POST\", path: \"/v1/orders\" },\n { method: \"POST\", path: \"/v1/orders/:orderId/initiate/pix\" },\n { method: \"PUT\", path: \"/v1/users/me/billing\" }\n ]\n },\n \"redeem:write\": { group: \"billing\", routes: [{ method: \"POST\", path: \"/v1/redeem/:code\" }] }\n};\nvar API_KEY_SCOPE_LIST = Object.keys(API_KEY_SCOPES);\nfunction apiKeyPresetScopes(preset) {\n if (preset === \"full\") return API_KEY_SCOPE_LIST;\n return API_KEY_SCOPE_LIST.filter((s) => s.endsWith(\":read\") || preset === \"write\" && s.endsWith(\":write\"));\n}\nvar API_KEY_MAX_PER_USER = 10;\nvar API_KEY_MAX_ALLOWED_IPS = 20;\nvar API_KEY_NAME_MAX_LENGTH = 40;\n\n// payloads/v1/workspace.ts\nvar WorkspacePermission = {\n APPS_READ: \"apps:read\",\n APPS_MANAGE: \"apps:manage\",\n APPS_LIFECYCLE: \"apps:lifecycle\",\n APPS_ENVS: \"apps:envs\",\n APPS_FILES: \"apps:files\",\n APPS_DELETE: \"apps:delete\",\n DATABASES_READ: \"databases:read\",\n DATABASES_MANAGE: \"databases:manage\",\n DATABASES_LIFECYCLE: \"databases:lifecycle\",\n DATABASES_CREDENTIALS: \"databases:credentials\",\n DATABASES_DATA: \"databases:data\",\n DATABASES_DELETE: \"databases:delete\",\n SNAPSHOTS_READ: \"snapshots:read\",\n SNAPSHOTS_MANAGE: \"snapshots:manage\",\n BLOB_READ: \"blob:read\",\n BLOB_MANAGE: \"blob:manage\",\n MEMBERS_READ: \"members:read\",\n MEMBERS_MANAGE: \"members:manage\",\n ROLES_MANAGE: \"roles:manage\",\n ACTIVITIES_READ: \"activities:read\"\n};\nvar WORKSPACE_PERMISSIONS = {\n \"apps:read\": { group: \"apps\" },\n \"apps:manage\": { group: \"apps\" },\n \"apps:lifecycle\": { group: \"apps\" },\n \"apps:envs\": { group: \"apps\" },\n \"apps:files\": { group: \"apps\" },\n \"apps:delete\": { group: \"apps\" },\n \"databases:read\": { group: \"databases\" },\n \"databases:manage\": { group: \"databases\" },\n \"databases:lifecycle\": { group: \"databases\" },\n \"databases:credentials\": { group: \"databases\" },\n \"databases:data\": { group: \"databases\" },\n \"databases:delete\": { group: \"databases\" },\n \"snapshots:read\": { group: \"snapshots\" },\n \"snapshots:manage\": { group: \"snapshots\" },\n \"blob:read\": { group: \"blob\" },\n \"blob:manage\": { group: \"blob\" },\n \"members:read\": { group: \"members\" },\n \"members:manage\": { group: \"members\" },\n \"roles:manage\": { group: \"roles\" },\n \"activities:read\": { group: \"activities\" }\n};\nvar WORKSPACE_PERMISSION_LIST = Object.keys(WORKSPACE_PERMISSIONS);\nvar WorkspaceRolePreset = {\n Admin: \"admin\",\n Developer: \"developer\",\n Operator: \"operator\",\n Viewer: \"viewer\"\n};\nfunction workspacePresetPermissions(preset) {\n switch (preset) {\n case \"admin\":\n return WORKSPACE_PERMISSION_LIST.filter((p) => p !== \"snapshots:manage\" && p !== \"blob:read\" && p !== \"blob:manage\");\n case \"developer\":\n return [\"apps:read\", \"apps:manage\", \"apps:lifecycle\", \"apps:envs\", \"apps:files\", \"databases:read\", \"databases:manage\", \"databases:lifecycle\", \"databases:credentials\", \"databases:data\", \"snapshots:read\", \"members:read\", \"activities:read\"];\n case \"operator\":\n return [\"apps:read\", \"apps:lifecycle\", \"databases:read\", \"databases:lifecycle\", \"snapshots:read\", \"members:read\", \"activities:read\"];\n case \"viewer\":\n return [\"apps:read\", \"databases:read\", \"snapshots:read\", \"members:read\", \"activities:read\"];\n }\n}\nvar WorkspaceResourceType = { Application: \"application\", Database: \"database\" };\nvar WorkspaceResourceOrganizationScope = { Personal: \"personal\", Workspace: \"workspace\" };\nvar WorkspaceFolderColor = { Neutral: \"neutral\", Red: \"red\", Orange: \"orange\", Yellow: \"yellow\", Green: \"green\", Blue: \"blue\", Purple: \"purple\" };\nvar WORKSPACE_FOLDER_COLORS = Object.values(WorkspaceFolderColor);\nvar WorkspaceInviteKind = { Email: \"email\", Link: \"link\" };\nvar WorkspaceActionRequestAction = {\n AppDelete: \"app_delete\",\n DatabaseDelete: \"database_delete\",\n SnapshotCreate: \"snapshot_create\",\n SnapshotRestore: \"snapshot_restore\"\n};\nvar WorkspaceActionRequestStatus = {\n Pending: \"pending\",\n Approved: \"approved\",\n Rejected: \"rejected\",\n Expired: \"expired\"\n};\nvar WORKSPACE_ERROR_CODES = {\n WORKSPACE_NOT_FOUND: \"WORKSPACE_NOT_FOUND\",\n WORKSPACE_NAME_ALREADY_EXISTS: \"WORKSPACE_NAME_ALREADY_EXISTS\",\n WORKSPACE_MEMBER_LIMIT_REACHED: \"WORKSPACE_MEMBER_LIMIT_REACHED\",\n WORKSPACE_ROLE_LIMIT_REACHED: \"WORKSPACE_ROLE_LIMIT_REACHED\",\n WORKSPACE_ROLE_IN_USE: \"WORKSPACE_ROLE_IN_USE\",\n WORKSPACE_ROLE_NOT_FOUND: \"WORKSPACE_ROLE_NOT_FOUND\",\n WORKSPACE_ROLE_NAME_ALREADY_EXISTS: \"WORKSPACE_ROLE_NAME_ALREADY_EXISTS\",\n WORKSPACE_PERMISSION_DENIED: \"WORKSPACE_PERMISSION_DENIED\",\n WORKSPACE_PERMISSION_ESCALATION: \"WORKSPACE_PERMISSION_ESCALATION\",\n WORKSPACE_INVITE_NOT_FOUND: \"WORKSPACE_INVITE_NOT_FOUND\",\n WORKSPACE_INVITE_EXPIRED: \"WORKSPACE_INVITE_EXPIRED\",\n WORKSPACE_INVITE_EMAIL_MISMATCH: \"WORKSPACE_INVITE_EMAIL_MISMATCH\",\n /** 400 — the invited account turned off workspace invites by email. */\n WORKSPACE_INVITES_DISABLED: \"WORKSPACE_INVITES_DISABLED\",\n /** 409 — the account is already the owner or a member of the workspace. */\n WORKSPACE_ALREADY_MEMBER: \"WORKSPACE_ALREADY_MEMBER\",\n WORKSPACE_OWNER_ONLY: \"WORKSPACE_OWNER_ONLY\",\n WORKSPACE_ACTION_REQUEST_NOT_FOUND: \"WORKSPACE_ACTION_REQUEST_NOT_FOUND\",\n /** 410 — the request expired before anyone decided on it. */\n WORKSPACE_ACTION_REQUEST_EXPIRED: \"WORKSPACE_ACTION_REQUEST_EXPIRED\",\n /** 409 — the request was already approved or rejected. */\n WORKSPACE_ACTION_REQUEST_ALREADY_DECIDED: \"WORKSPACE_ACTION_REQUEST_ALREADY_DECIDED\",\n /** 400 — the requester already has the permission; perform the action directly. */\n WORKSPACE_ACTION_NOT_NEEDED: \"WORKSPACE_ACTION_NOT_NEEDED\",\n /** 400 — the request `params` failed the action's validation (e.g. a snapshot of another resource). */\n WORKSPACE_ACTION_INVALID_PARAMS: \"WORKSPACE_ACTION_INVALID_PARAMS\",\n /** 409 — a pending request already exists for the same action on the same resource. */\n WORKSPACE_ACTION_REQUEST_PENDING: \"WORKSPACE_ACTION_REQUEST_PENDING\",\n WORKSPACE_RESOURCE_FOLDER_NOT_FOUND: \"WORKSPACE_RESOURCE_FOLDER_NOT_FOUND\",\n WORKSPACE_RESOURCE_FOLDER_NAME_CONFLICT: \"WORKSPACE_RESOURCE_FOLDER_NAME_CONFLICT\",\n WORKSPACE_RESOURCE_NOT_FOUND: \"WORKSPACE_RESOURCE_NOT_FOUND\",\n PLAN_RESTRICTED_FEATURE: \"PLAN_RESTRICTED_FEATURE\"\n};\n\n// payloads/v1/api-error.ts\nvar API_ERROR_CODES = {\n ACCESS_DENIED: \"ACCESS_DENIED\",\n API_KEY_INVALID: \"API_KEY_INVALID\",\n // Key management (`/v1/users/me/api-keys`) — dashboard-session routes.\n API_KEY_NOT_FOUND: \"API_KEY_NOT_FOUND\",\n API_KEY_LIMIT_REACHED: \"API_KEY_LIMIT_REACHED\",\n API_KEY_INVALID_NAME: \"API_KEY_INVALID_NAME\",\n API_KEY_INVALID_SCOPES: \"API_KEY_INVALID_SCOPES\",\n API_KEY_INVALID_IPS: \"API_KEY_INVALID_IPS\",\n API_KEY_IP_DENIED: \"API_KEY_IP_DENIED\",\n API_KEY_SCOPE_DENIED: \"API_KEY_SCOPE_DENIED\",\n /** 403 — the route only accepts a dashboard session; API keys are refused. */\n WEBSITE_ONLY: \"WEBSITE_ONLY\",\n AUTH_TOKEN_MISSING: \"AUTH_TOKEN_MISSING\",\n ACCOUNT_BANNED: \"ACCOUNT_BANNED\",\n APP_SHIELD_COOLDOWN: \"APP_SHIELD_COOLDOWN\",\n APP_BANNED: \"APP_BANNED\",\n APP_ALREADY_PUBLISHED: \"APP_ALREADY_PUBLISHED\",\n APP_HAS_NO_SUBDOMAIN: \"APP_HAS_NO_SUBDOMAIN\",\n APP_NOT_FOUND: \"APP_NOT_FOUND\",\n APP_NOT_PUBLISHED: \"APP_NOT_PUBLISHED\",\n APP_ALREADY_IN_WORKSPACE: \"APP_ALREADY_IN_WORKSPACE\",\n APP_NOT_FOUND_IN_WORKSPACE: \"APP_NOT_FOUND_IN_WORKSPACE\",\n /** 404 — the object does not exist or belongs to another account. */\n BLOB_OBJECT_NOT_FOUND: \"BLOB_OBJECT_NOT_FOUND\",\n /** 409 — the path is taken and `overwrite` is not set. */\n BLOB_OBJECT_ALREADY_EXISTS: \"BLOB_OBJECT_ALREADY_EXISTS\",\n /** 404 — the upload does not exist, is not yours, or is already completed or aborted. */\n BLOB_UPLOAD_NOT_FOUND: \"BLOB_UPLOAD_NOT_FOUND\",\n /** 410 — the upload passed its deadline. */\n BLOB_UPLOAD_EXPIRED: \"BLOB_UPLOAD_EXPIRED\",\n /** 409 — parts are missing or the stored size differs from the declared size. */\n BLOB_UPLOAD_INCOMPLETE: \"BLOB_UPLOAD_INCOMPLETE\",\n /** 409 — more uploads open than the plan allows. */\n BLOB_UPLOAD_LIMIT: \"BLOB_UPLOAD_LIMIT\",\n /** 400 — the SHA-256 sent does not match the file. */\n BLOB_CHECKSUM_MISMATCH: \"BLOB_CHECKSUM_MISMATCH\",\n /** 413 — the file exceeds the plan, single-request upload, folder rule or upload token limit. */\n BLOB_FILE_TOO_LARGE: \"BLOB_FILE_TOO_LARGE\",\n /** 403 — Blob Storage is suspended for the account (grace period, abuse or deletion). */\n BLOB_NAMESPACE_SUSPENDED: \"BLOB_NAMESPACE_SUSPENDED\",\n /** 401 — the upload token does not exist, expired or was revoked. */\n BLOB_UPLOAD_TOKEN_INVALID: \"BLOB_UPLOAD_TOKEN_INVALID\",\n /** 401 — the upload token has no uses left. */\n BLOB_UPLOAD_TOKEN_EXHAUSTED: \"BLOB_UPLOAD_TOKEN_EXHAUSTED\",\n /** 403 — upload tokens only work on the upload routes. */\n BLOB_UPLOAD_TOKEN_NOT_ALLOWED: \"BLOB_UPLOAD_TOKEN_NOT_ALLOWED\",\n /** 403 — the path, size or extension is outside what the upload token allows. */\n BLOB_UPLOAD_TOKEN_CONSTRAINT: \"BLOB_UPLOAD_TOKEN_CONSTRAINT\",\n /** 404 — the share does not exist, was revoked or expired. */\n BLOB_SHARE_NOT_FOUND: \"BLOB_SHARE_NOT_FOUND\",\n /** 410 — the share reached its download limit. */\n BLOB_SHARE_EXHAUSTED: \"BLOB_SHARE_EXHAUSTED\",\n /** 401 — wrong share password. */\n BLOB_SHARE_PASSWORD_INVALID: \"BLOB_SHARE_PASSWORD_INVALID\",\n /** 409 — the `If-Match` of the rule list is outdated; read it again. */\n BLOB_RULES_CONFLICT: \"BLOB_RULES_CONFLICT\",\n /** 409 — more folder rules than the plan allows. */\n BLOB_RULE_LIMIT: \"BLOB_RULE_LIMIT\",\n /** 409 — more custom domains than the plan allows. */\n BLOB_CUSTOM_DOMAIN_LIMIT: \"BLOB_CUSTOM_DOMAIN_LIMIT\",\n /** 409 — the hostname is already in use. */\n BLOB_CUSTOM_DOMAIN_TAKEN: \"BLOB_CUSTOM_DOMAIN_TAKEN\",\n /** 404 — the domain does not exist or belongs to another account. */\n BLOB_CUSTOM_DOMAIN_NOT_FOUND: \"BLOB_CUSTOM_DOMAIN_NOT_FOUND\",\n /** 422 — the file extension is blocked, outside the rule or token, or the content is an executable. */\n BLOCKED_FILE_TYPE: \"BLOCKED_FILE_TYPE\",\n /** 403 — the upload would exceed the storage quota. */\n STORAGE_QUOTA_EXCEEDED: \"STORAGE_QUOTA_EXCEEDED\",\n BUILD_FAILED: \"BUILD_FAILED\",\n BUILD_TIMEOUT: \"BUILD_TIMEOUT\",\n /** 400 — the order needs complete billing details for the service invoice (name, address and, in Brazil, CPF/CNPJ). Fill them with `PUT /v1/users/me/billing`. */\n BILLING_DETAILS_INCOMPLETE: \"BILLING_DETAILS_INCOMPLETE\",\n /** 400 — billing details failed validation; the field is in `details.path`. */\n BILLING_DETAILS_INVALID: \"BILLING_DETAILS_INVALID\",\n /** 402 — the bank refused the card charge. */\n CARD_DECLINED: \"CARD_DECLINED\",\n /** 400 — the plan can only be paid by PIX. */\n CARD_NOT_ALLOWED_FOR_PLAN: \"CARD_NOT_ALLOWED_FOR_PLAN\",\n CARD_NOT_FOUND: \"CARD_NOT_FOUND\",\n CERTIFICATE_NOT_FOUND: \"CERTIFICATE_NOT_FOUND\",\n CLEANUP_LANGUAGE_SAME_AS_CURRENT: \"CLEANUP_LANGUAGE_SAME_AS_CURRENT\",\n CONTAINER_ALREADY_RUNNING: \"CONTAINER_ALREADY_RUNNING\",\n /** 400 — no active coupon with this code. */\n COUPON_INVALID: \"COUPON_INVALID\",\n COUPON_INACTIVE: \"COUPON_INACTIVE\",\n COUPON_NOT_STARTED: \"COUPON_NOT_STARTED\",\n COUPON_EXPIRED: \"COUPON_EXPIRED\",\n /** 400 — the coupon reached its total number of uses. */\n COUPON_EXHAUSTED: \"COUPON_EXHAUSTED\",\n /** 400 — the account already used this coupon as many times as allowed. */\n COUPON_USER_LIMIT: \"COUPON_USER_LIMIT\",\n /** 400 — the coupon is not available to this account. */\n COUPON_AUDIENCE: \"COUPON_AUDIENCE\",\n /** 400 — the coupon does not apply to this plan. */\n COUPON_PLAN: \"COUPON_PLAN\",\n /** 400 — the coupon does not apply to this billing period. */\n COUPON_DURATION: \"COUPON_DURATION\",\n COUPON_PAYMENT_METHOD: \"COUPON_PAYMENT_METHOD\",\n CUSTOM_DOMAIN_RECORD_NOT_FOUND: \"CUSTOM_DOMAIN_RECORD_NOT_FOUND\",\n CUSTOM_DOMAIN_REGISTRATION_FAILED: \"CUSTOM_DOMAIN_REGISTRATION_FAILED\",\n DAILY_QUOTA_EXCEEDED: \"DAILY_QUOTA_EXCEEDED\",\n DATABASE_NOT_FOUND: \"DATABASE_NOT_FOUND\",\n DATABASE_NOT_RUNNING: \"DATABASE_NOT_RUNNING\",\n DATABASE_ALREADY_IN_WORKSPACE: \"DATABASE_ALREADY_IN_WORKSPACE\",\n DATABASE_NOT_FOUND_IN_WORKSPACE: \"DATABASE_NOT_FOUND_IN_WORKSPACE\",\n DATABASE_PERSISTENCE_FAILED: \"DATABASE_PERSISTENCE_FAILED\",\n DEPLOY_FAILED: \"DEPLOY_FAILED\",\n DEPLOYMENT_NOT_FOUND: \"DEPLOYMENT_NOT_FOUND\",\n DEPLOY_RATE_LIMITED: \"DEPLOY_RATE_LIMITED\",\n DOMAIN_ALREADY_IN_USE: \"DOMAIN_ALREADY_IN_USE\",\n ENV_LIMIT_EXCEEDED: \"ENV_LIMIT_EXCEEDED\",\n ENV_DUPLICATE_KEY: \"ENV_DUPLICATE_KEY\",\n ENV_NOT_FOUND: \"ENV_NOT_FOUND\",\n FILE_TOO_LARGE: \"FILE_TOO_LARGE\",\n FILE_MODIFIED: \"FILE_MODIFIED\",\n FILE_NOT_FOUND: \"FILE_NOT_FOUND\",\n FILE_OR_FOLDER_NOT_FOUND: \"FILE_OR_FOLDER_NOT_FOUND\",\n FORBIDDEN: \"FORBIDDEN\",\n FORBIDDEN_DOMAIN: \"FORBIDDEN_DOMAIN\",\n FORBIDDEN_PATH: \"FORBIDDEN_PATH\",\n FORBIDDEN_KEY: \"FORBIDDEN_KEY\",\n FORCED_SNAPSHOT_RATE_LIMIT: \"FORCED_SNAPSHOT_RATE_LIMIT\",\n FREE_PLAN_NO_WEB_PUBLISH: \"FREE_PLAN_NO_WEB_PUBLISH\",\n /** 403 — the Free plan can no longer create applications or databases; a paid plan is required. */\n FREE_PLAN_SUSPENDED: \"FREE_PLAN_SUSPENDED\",\n INSTALLATION_NOT_FOUND: \"INSTALLATION_NOT_FOUND\",\n INSTALL_SHIELD_BLOCKED: \"INSTALL_SHIELD_BLOCKED\",\n INSTALL_TIMEOUT: \"INSTALL_TIMEOUT\",\n INSTALL_FAILED: \"INSTALL_FAILED\",\n INSTALL_CANCELLED: \"INSTALL_CANCELLED\",\n INSTALL_OUT_OF_MEMORY: \"INSTALL_OUT_OF_MEMORY\",\n INSTALL_QUEUE_FULL: \"INSTALL_QUEUE_FULL\",\n INSUFFICIENT_MEMORY: \"INSUFFICIENT_MEMORY\",\n INTERNAL_SERVER_ERROR: \"INTERNAL_SERVER_ERROR\",\n INVALID_CONFIG: \"INVALID_CONFIG\",\n INVALID_CUSTOM_DOMAIN_FORMAT: \"INVALID_CUSTOM_DOMAIN_FORMAT\",\n INVALID_HOSTNAME_FOR_APP: \"INVALID_HOSTNAME_FOR_APP\",\n INVALID_LANGUAGE: \"INVALID_LANGUAGE\",\n INVALID_MEMORY_FORMAT: \"INVALID_MEMORY_FORMAT\",\n INVALID_MONTHS: \"INVALID_MONTHS\",\n INVALID_OR_EXPIRED_CODE: \"INVALID_OR_EXPIRED_CODE\",\n INVALID_PARAMS: \"INVALID_PARAMS\",\n INVALID_PAYLOAD: \"INVALID_PAYLOAD\",\n INVALID_PATH: \"INVALID_PATH\",\n INVALID_PLAN: \"INVALID_PLAN\",\n INVALID_PLAN_NAME: \"INVALID_PLAN_NAME\",\n INVALID_RAM_LIMIT: \"INVALID_RAM_LIMIT\",\n INVALID_RANGE: \"INVALID_RANGE\",\n INVALID_SUBDOMAIN_FORMAT: \"INVALID_SUBDOMAIN_FORMAT\",\n INVALID_VERSION: \"INVALID_VERSION\",\n INVALID_ZIP: \"INVALID_ZIP\",\n INVALID_ZIP_STRUCTURE: \"INVALID_ZIP_STRUCTURE\",\n MAIN_FILE_NOT_FOUND: \"MAIN_FILE_NOT_FOUND\",\n MAX_APPS_REACHED: \"MAX_APPS_REACHED\",\n MAX_DATABASES_REACHED: \"MAX_DATABASES_REACHED\",\n MEMORY_BELOW_MINIMUM: \"MEMORY_BELOW_MINIMUM\",\n MEMORY_LIMIT_EXCEEDED: \"MEMORY_LIMIT_EXCEEDED\",\n MEMORY_MUST_BE_INTEGER: \"MEMORY_MUST_BE_INTEGER\",\n MEMORY_REQUIRED: \"MEMORY_REQUIRED\",\n MISSING_HEADERS: \"MISSING_HEADERS\",\n MISSING_PLAN_OR_MONTHS: \"MISSING_PLAN_OR_MONTHS\",\n MISSING_CONTENT: \"MISSING_CONTENT\",\n NOT_AN_UPGRADE: \"NOT_AN_UPGRADE\",\n NO_AUTHORIZED_PATHS: \"NO_AUTHORIZED_PATHS\",\n NO_CHANGES_PROVIDED: \"NO_CHANGES_PROVIDED\",\n NO_CUSTOM_DOMAIN: \"NO_CUSTOM_DOMAIN\",\n NO_FIELDS_TO_UPDATE: \"NO_FIELDS_TO_UPDATE\",\n NO_FILE_UPLOADED: \"NO_FILE_UPLOADED\",\n OPERATION_IN_PROGRESS: \"OPERATION_IN_PROGRESS\",\n ORDER_NOT_FOUND: \"ORDER_NOT_FOUND\",\n ORDER_NOT_PAID: \"ORDER_NOT_PAID\",\n ORDER_NOT_PAYABLE: \"ORDER_NOT_PAYABLE\",\n ORDER_NOT_REFUNDED: \"ORDER_NOT_REFUNDED\",\n /** 404 — the order has no payment receipt (unpaid, redeemed code or paid before receipts existed). */\n ORDER_RECEIPT_UNAVAILABLE: \"ORDER_RECEIPT_UNAVAILABLE\",\n OWNER_APP_WITHOUT_LIMITS: \"OWNER_APP_WITHOUT_LIMITS\",\n PAYLOAD_TOO_LARGE: \"PAYLOAD_TOO_LARGE\",\n /** 409 — a folder in the path is an existing file (writing `app/x.js` when `app` is a file). */\n PATH_IS_FILE: \"PATH_IS_FILE\",\n PENDING_ORDER_LIMIT_REACHED: \"PENDING_ORDER_LIMIT_REACHED\",\n PAYMENT_METHOD_UNAVAILABLE: \"PAYMENT_METHOD_UNAVAILABLE\",\n /** 403 — the plan does not include automatic rollback (`deploy.auto_rollback: true` below Intermediary). */\n PLAN_DOES_NOT_SUPPORT_AUTO_ROLLBACK: \"PLAN_DOES_NOT_SUPPORT_AUTO_ROLLBACK\",\n PLAN_DOES_NOT_SUPPORT_CUSTOM_DOMAIN: \"PLAN_DOES_NOT_SUPPORT_CUSTOM_DOMAIN\",\n PLAN_DOES_NOT_SUPPORT_CUSTOM_SUBDOMAIN: \"PLAN_DOES_NOT_SUPPORT_CUSTOM_SUBDOMAIN\",\n /** 403 — the plan does not include rollback to earlier releases. */\n PLAN_DOES_NOT_SUPPORT_ROLLBACK: \"PLAN_DOES_NOT_SUPPORT_ROLLBACK\",\n PLAN_DOES_NOT_SUPPORT_WEB_PUBLISH: \"PLAN_DOES_NOT_SUPPORT_WEB_PUBLISH\",\n /** 403 — the plan does not include zero-downtime deploys (`deploy.zero_downtime: \"on\"` below Enterprise). */\n PLAN_DOES_NOT_SUPPORT_ZERO_DOWNTIME: \"PLAN_DOES_NOT_SUPPORT_ZERO_DOWNTIME\",\n PLAN_MISMATCH_FOR_RENEWAL: \"PLAN_MISMATCH_FOR_RENEWAL\",\n PLAN_NOT_ALLOWED: \"PLAN_NOT_ALLOWED\",\n RATE_LIMIT_EXCEEDED: \"RATE_LIMIT_EXCEEDED\",\n REFUND_AMOUNT_EXCEEDS_PRICE: \"REFUND_AMOUNT_EXCEEDS_PRICE\",\n /** 409 — the release is already the active one. */\n RELEASE_ALREADY_ACTIVE: \"RELEASE_ALREADY_ACTIVE\",\n /** 410 — the release's kept code has expired or is outside the limit of the plan. */\n RELEASE_EXPIRED: \"RELEASE_EXPIRED\",\n /** 404 — the release does not exist or belongs to another application. */\n RELEASE_NOT_FOUND: \"RELEASE_NOT_FOUND\",\n REPO_ALREADY_LINKED: \"REPO_ALREADY_LINKED\",\n RESTORE_COOLDOWN: \"RESTORE_COOLDOWN\",\n SNAPSHOT_ENGINE_MISMATCH: \"SNAPSHOT_ENGINE_MISMATCH\",\n SNAPSHOT_FAILED: \"SNAPSHOT_FAILED\",\n SNAPSHOT_IMPORT_FAILED: \"SNAPSHOT_IMPORT_FAILED\",\n SNAPSHOT_NOT_FOUND: \"SNAPSHOT_NOT_FOUND\",\n SNAPSHOT_RATE_LIMITED: \"SNAPSHOT_RATE_LIMITED\",\n SNAPSHOT_TYPE_MISMATCH: \"SNAPSHOT_TYPE_MISMATCH\",\n SNAPSHOT_TOO_LARGE: \"SNAPSHOT_TOO_LARGE\",\n SOURCE_CONFLICT: \"SOURCE_CONFLICT\",\n SOURCE_REQUIRED: \"SOURCE_REQUIRED\",\n STORAGE_ABOVE_NEW_LIMIT: \"STORAGE_ABOVE_NEW_LIMIT\",\n SUBDOMAIN_CHANGE_RATE_LIMITED: \"SUBDOMAIN_CHANGE_RATE_LIMITED\",\n SUBDOMAIN_FORBIDDEN: \"SUBDOMAIN_FORBIDDEN\",\n SUBDOMAIN_TAKEN: \"SUBDOMAIN_TAKEN\",\n /** 400 — the CPF or CNPJ is not valid. */\n TAX_ID_INVALID: \"TAX_ID_INVALID\",\n TYPE_MISMATCH: \"TYPE_MISMATCH\",\n USER_LIMITS_NOT_FOUND: \"USER_LIMITS_NOT_FOUND\",\n USER_NOT_FOUND: \"USER_NOT_FOUND\",\n USER_NOT_IN_WORKSPACE: \"USER_NOT_IN_WORKSPACE\",\n DATABASE_BANNED: \"DATABASE_BANNED\",\n VALIDATION_ERROR: \"VALIDATION_ERROR\",\n ZIP_TOO_LARGE: \"ZIP_TOO_LARGE\",\n ZIP_TOO_SMALL: \"ZIP_TOO_SMALL\",\n STORAGE_FULL: \"STORAGE_FULL\",\n TARGET_IS_DIRECTORY: \"TARGET_IS_DIRECTORY\",\n ...WORKSPACE_ERROR_CODES\n};\nvar APIErrorCode = API_ERROR_CODES;\n\n// payloads/v1/application.ts\nvar ApplicationLanguage = {\n JAVASCRIPT: \"javascript\",\n TYPESCRIPT: \"typescript\",\n BUN: \"bun\",\n PYTHON: \"python\",\n STATIC: \"static\",\n PHP: \"php\",\n GO: \"go\",\n RUBY: \"ruby\",\n JAVA: \"java\",\n RUST: \"rust\"\n};\nvar ApplicationStatus = {\n UP: \"up\",\n DOWN: \"down\"\n};\nvar ApplicationCluster = {\n USA_1: 1,\n USA_2: 2,\n USA_3: 3\n};\nvar ApplicationType = {\n BOT: 1,\n WEBSITE: 2\n};\nvar ApplicationFileType = {\n FILE: \"file\",\n DIRECTORY: \"directory\"\n};\nvar ApplicationVersion = {\n RECOMMENDED: \"recommended\",\n LATEST: \"latest\",\n AUTO: \"auto\"\n};\nvar ApplicationFileContentType = {\n BASE64: \"base64\"\n};\nvar ApplicationZeroDowntime = {\n AUTO: \"auto\",\n ON: \"on\",\n OFF: \"off\"\n};\nvar ApplicationReleaseSource = {\n GITHUB: \"github\",\n CLI: \"cli\",\n UPLOAD: \"upload\",\n EDITOR: \"editor\",\n ROLLBACK: \"rollback\",\n ENV_CHANGE: \"env_change\"\n};\nvar ApplicationReleaseStatus = {\n DEPLOYING: \"deploying\",\n ACTIVE: \"active\",\n SUPERSEDED: \"superseded\",\n FAILED: \"failed\",\n ROLLED_BACK: \"rolled_back\",\n EXPIRED: \"expired\"\n};\nvar ApplicationEnvironmentChange = {\n ADDED: \"added\",\n MODIFIED: \"modified\",\n REMOVED: \"removed\"\n};\nvar ApplicationDnsRecordType = {\n CNAME: \"CNAME\",\n TXT: \"TXT\"\n};\nvar ApplicationDnsRecordStatus = {\n ACTIVE: \"active\",\n PENDING_VALIDATION: \"pending_validation\"\n};\nvar ShieldIncidentReason = {\n BURST: \"burst\",\n RATE_LIMIT: \"rate_limit\"\n};\nvar ShieldIncidentDirection = {\n IN: \"in\",\n OUT: \"out\"\n};\nvar ApplicationRealtimeEventType = {\n LOGS: \"logs\",\n SYSTEM: \"system\",\n HEARTBEAT: \"heartbeat\"\n};\n\n// payloads/v1/billing.ts\nvar BillingTaxIdType = {\n CPF: \"cpf\",\n CNPJ: \"cnpj\"\n};\n\n// payloads/v1/blob.ts\nvar BlobVisibility = { PUBLIC: \"public\", PRIVATE: \"private\" };\nvar BlobContentDisposition = {\n INLINE: \"inline\",\n ATTACHMENT: \"attachment\"\n};\nvar BlobUploadMode = { SINGLE: \"single\", MULTIPART: \"multipart\" };\nvar BlobUploadStatus = {\n PENDING: \"pending\",\n COMPLETED: \"completed\",\n ABORTED: \"aborted\",\n EXPIRED: \"expired\"\n};\nvar BlobCustomDomainStatus = {\n PENDING: \"pending\",\n ACTIVE: \"active\",\n FAILED: \"failed\",\n SUSPENDED: \"suspended\"\n};\n\n// payloads/v1/database.ts\nvar DatabaseType = {\n POSTGRESQL: 1,\n MONGODB: 2,\n REDIS: 3,\n MYSQL: 4\n};\nvar DatabaseStatus = {\n UP: \"up\",\n DOWN: \"down\"\n};\nvar DatabaseCluster = {\n USA_1: 1,\n USA_2: 2,\n USA_3: 3\n};\n\n// payloads/v1/database-data.ts\nvar DatabaseSortDirection = {\n Asc: \"asc\",\n Desc: \"desc\"\n};\nvar DatabaseFilterOperator = {\n Eq: \"=\",\n Ne: \"!=\",\n Lt: \"<\",\n Lte: \"<=\",\n Gt: \">\",\n Gte: \">=\",\n Like: \"LIKE\",\n IsNull: \"IS NULL\",\n IsNotNull: \"IS NOT NULL\"\n};\nvar DatabaseTableKind = {\n Table: \"table\",\n View: \"view\"\n};\nvar DatabaseRedisKeyType = {\n String: \"string\",\n Hash: \"hash\",\n List: \"list\",\n Set: \"set\",\n ZSet: \"zset\",\n Stream: \"stream\"\n};\n\n// payloads/v1/notification.ts\nvar NotificationType = {\n SIMPLE: 1,\n ATTACHMENT: 2\n};\nvar NotificationImportance = {\n LOW: \"low\",\n MEDIUM: \"medium\",\n HIGH: \"high\",\n CRITICAL: \"critical\"\n};\n\n// payloads/v1/oauth.ts\nvar APIOAuthCodeChallengeMethod = { S256: \"S256\" };\nvar APIOAuthConsentDecision = { Approve: \"approve\", Deny: \"deny\" };\n\n// payloads/v1/orders.ts\nvar OrderStatus = {\n UNPAID: \"unpaid\",\n PAID: \"paid\",\n CANCELLED: \"cancelled\",\n EXPIRED: \"expired\"\n};\nvar OrderType = {\n PURCHASE: \"purchase\",\n RENEW: \"renew\",\n UPGRADE: \"upgrade\"\n};\nvar OrderProvider = {\n PIX: \"pix\",\n CARD: \"card\",\n REDEEM_CODE: \"redeem_code\"\n};\nvar OrderCardPaymentStatus = {\n SUCCEEDED: \"succeeded\",\n REQUIRES_ACTION: \"requires_action\",\n PROCESSING: \"processing\"\n};\n\n// payloads/v1/snapshot.ts\nvar ResourceType = {\n APPLICATION: 1,\n DATABASE: 2\n};\nvar SnapshotScope = {\n APPLICATIONS: \"applications\",\n DATABASES: \"databases\"\n};\n\n// payloads/v1/status.ts\nvar StatusType = {\n HEALTHY: \"healthy\",\n DEGRADED: \"degraded\",\n UNKNOWN: \"unknown\"\n};\n\n// payloads/v1/user.ts\nvar UserLanguage = {\n PT_BR: \"pt-br\",\n EN_US: \"en-us\",\n ES_ES: \"es-es\"\n};\nexport {\n APIApiKeyPreset,\n APIApiKeyScope,\n APIErrorCode,\n APIOAuthCodeChallengeMethod,\n APIOAuthConsentDecision,\n API_ERROR_CODES,\n API_KEY_MAX_ALLOWED_IPS,\n API_KEY_MAX_PER_USER,\n API_KEY_NAME_MAX_LENGTH,\n API_KEY_SCOPES,\n API_KEY_SCOPE_LIST,\n ActivityOrigin,\n ActivityStatus,\n ActivityTargetType,\n ApplicationCluster,\n ApplicationDnsRecordStatus,\n ApplicationDnsRecordType,\n ApplicationEnvironmentChange,\n ApplicationFileContentType,\n ApplicationFileType,\n ApplicationLanguage,\n ApplicationRealtimeEventType,\n ApplicationReleaseSource,\n ApplicationReleaseStatus,\n ApplicationStatus,\n ApplicationType,\n ApplicationVersion,\n ApplicationZeroDowntime,\n BillingTaxIdType,\n BlobContentDisposition,\n BlobCustomDomainStatus,\n BlobUploadMode,\n BlobUploadStatus,\n BlobVisibility,\n DatabaseCluster,\n DatabaseFilterOperator,\n DatabaseRedisKeyType,\n DatabaseSortDirection,\n DatabaseStatus,\n DatabaseTableKind,\n DatabaseType,\n NotificationImportance,\n NotificationType,\n OrderCardPaymentStatus,\n OrderProvider,\n OrderStatus,\n OrderType,\n ResourceType,\n ShieldIncidentDirection,\n ShieldIncidentReason,\n SnapshotScope,\n StatusType,\n UserLanguage,\n UserPlan,\n WORKSPACE_ERROR_CODES,\n WORKSPACE_FOLDER_COLORS,\n WORKSPACE_PERMISSIONS,\n WORKSPACE_PERMISSION_LIST,\n WorkspaceActionRequestAction,\n WorkspaceActionRequestStatus,\n WorkspaceFolderColor,\n WorkspaceInviteKind,\n WorkspacePermission,\n WorkspaceResourceOrganizationScope,\n WorkspaceResourceType,\n WorkspaceRolePreset,\n apiKeyPresetScopes,\n workspacePresetPermissions\n};\n//# sourceMappingURL=v1.mjs.map","/** Error envelope sent by the API on any non-2xx response: `{ code, message?, details? }`. */\nexport interface BlobErrorBody {\n\tcode: string;\n\tmessage?: string;\n\tdetails?: unknown;\n}\n\n/**\n * Codes the SDK raises itself (they never come from the API): `NETWORK_ERROR`, `TIMEOUT`, `ABORTED`,\n * `INVALID_ARGUMENT`, `UPLOAD_FAILED` (the storage rejected a direct upload) and `INVALID_RESPONSE`.\n * `status` is `0` for the ones that happened before an HTTP response existed.\n */\nexport type BlobClientErrorCode = \"NETWORK_ERROR\" | \"TIMEOUT\" | \"ABORTED\" | \"INVALID_ARGUMENT\" | \"UPLOAD_FAILED\" | \"INVALID_RESPONSE\";\n\n/**\n * Error thrown for every failed call: an API error response (`code` is an `APIErrorCode`, for example\n * `BLOB_OBJECT_NOT_FOUND`) or a client-side failure (see {@link BlobClientErrorCode}).\n *\n * `toString()` and `toJSON()` never include the request that produced the error (URL, headers,\n * credentials, signed upload URLs) — only `status`, `code`, `message`, `details` and `retryAfter`.\n */\nexport class BlobError extends Error {\n\treadonly status: number;\n\treadonly code: string;\n\treadonly details: unknown;\n\t/** Seconds to wait before retrying, from the `Retry-After` header (429 responses). */\n\treadonly retryAfter: number | undefined;\n\n\tconstructor(status: number, body: BlobErrorBody, retryAfter?: number) {\n\t\tsuper(body.message || body.code);\n\t\tthis.name = \"BlobError\";\n\t\tthis.status = status;\n\t\tthis.code = body.code;\n\t\tthis.details = body.details;\n\t\tthis.retryAfter = retryAfter;\n\t\tObject.setPrototypeOf(this, new.target.prototype);\n\t}\n\n\ttoJSON(): { name: string; status: number; code: string; message: string; details: unknown; retryAfter: number | undefined } {\n\t\treturn { name: this.name, status: this.status, code: this.code, message: this.message, details: this.details, retryAfter: this.retryAfter };\n\t}\n\n\toverride toString(): string {\n\t\treturn `${this.name} [${this.status}] ${this.code}: ${this.message}`;\n\t}\n}\n\nexport const clientError = (code: BlobClientErrorCode, message: string, status = 0): BlobError => new BlobError(status, { code, message });\n","import { clientError } from \"./errors.js\";\n\n/** Everything `put` and `resume` accept as file content. A `ReadableStream` also needs `size`. */\nexport type BlobData = Blob | ArrayBuffer | Uint8Array | ReadableStream<Uint8Array> | string;\n\nexport interface Source {\n\tsize: number;\n\t/** Bytes `[start, end)`. Stream sources must be read in ascending, non-overlapping ranges (skipped bytes are discarded). */\n\tread(start: number, end: number): Promise<Blob | Uint8Array>;\n}\n\nexport function toSource(data: BlobData, size?: number): Source {\n\tif (typeof data === \"string\") return bytes(new TextEncoder().encode(data));\n\tif (data instanceof Uint8Array) return bytes(data);\n\tif (data instanceof ArrayBuffer) return bytes(new Uint8Array(data));\n\tif (typeof Blob !== \"undefined\" && data instanceof Blob) return { size: data.size, read: async (s, e) => data.slice(s, e) };\n\tif (typeof (data as ReadableStream).getReader === \"function\") {\n\t\tif (typeof size !== \"number\" || !Number.isInteger(size) || size < 0) throw clientError(\"INVALID_ARGUMENT\", \"`size` is required when the data is a ReadableStream\");\n\t\treturn stream(data as ReadableStream<Uint8Array>, size);\n\t}\n\tthrow clientError(\"INVALID_ARGUMENT\", \"Unsupported data type: use Blob, File, ArrayBuffer, Uint8Array, ReadableStream or string\");\n}\n\nconst bytes = (u8: Uint8Array): Source => ({ size: u8.byteLength, read: async (s, e) => u8.subarray(s, e) });\n\nfunction stream(readable: ReadableStream<Uint8Array>, size: number): Source {\n\tconst reader = readable.getReader();\n\tlet rest: Uint8Array = new Uint8Array(0);\n\tlet pos = 0;\n\tconst take = async (n: number, keep: boolean): Promise<Uint8Array> => {\n\t\tconst out = new Uint8Array(keep ? n : 0);\n\t\tlet got = 0;\n\t\twhile (got < n) {\n\t\t\tif (rest.length === 0) {\n\t\t\t\tconst { done, value } = await reader.read();\n\t\t\t\tif (done) throw clientError(\"INVALID_ARGUMENT\", \"The stream ended before `size` bytes were read\");\n\t\t\t\trest = value;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst m = Math.min(n - got, rest.length);\n\t\t\tif (keep) out.set(rest.subarray(0, m), got);\n\t\t\trest = rest.subarray(m);\n\t\t\tgot += m;\n\t\t}\n\t\tpos += n;\n\t\treturn out;\n\t};\n\treturn {\n\t\tsize,\n\t\tasync read(start, end) {\n\t\t\tif (start < pos) throw clientError(\"INVALID_ARGUMENT\", \"A stream can only be read forward\");\n\t\t\tif (start > pos) await take(start - pos, false);\n\t\t\treturn take(end - start, true);\n\t\t},\n\t};\n}\n","import { type BlobError, clientError } from \"./errors.js\";\n\nexport interface TransportRequest {\n\tmethod: string;\n\turl: string;\n\theaders: Record<string, string>;\n\tbody?: BodyInit | null;\n\tcredentials?: RequestCredentials;\n\tsignal: AbortSignal;\n\t/** Bytes of the request body sent so far. Only reported by the XMLHttpRequest transport. */\n\tonUploadProgress?: (loaded: number) => void;\n}\n\nexport interface TransportResponse {\n\tstatus: number;\n\tretryAfter: string | null;\n\ttext: string;\n}\n\nexport type FetchLike = (input: string, init?: RequestInit) => Promise<Response>;\n\nexport const fetchTransport =\n\t(fetchImpl: FetchLike) =>\n\tasync (req: TransportRequest): Promise<TransportResponse> => {\n\t\tconst init: RequestInit = { method: req.method, headers: req.headers, body: req.body ?? null, signal: req.signal };\n\t\tif (req.credentials) init.credentials = req.credentials;\n\t\tconst res = await fetchImpl(req.url, init);\n\t\treturn { status: res.status, retryAfter: res.headers.get(\"retry-after\"), text: await res.text() };\n\t};\n\n/** Browser-only transport: `fetch` cannot report upload progress, XMLHttpRequest can. */\nexport const xhrTransport = (req: TransportRequest): Promise<TransportResponse> =>\n\tnew Promise((resolve, reject) => {\n\t\tconst xhr = new XMLHttpRequest();\n\t\txhr.open(req.method, req.url);\n\t\tfor (const [k, v] of Object.entries(req.headers)) xhr.setRequestHeader(k, v);\n\t\tif (req.credentials === \"include\") xhr.withCredentials = true;\n\t\tif (req.onUploadProgress) {\n\t\t\tconst report = req.onUploadProgress;\n\t\t\txhr.upload.onprogress = (e) => report(e.loaded);\n\t\t}\n\t\tconst onAbort = () => xhr.abort();\n\t\treq.signal.addEventListener(\"abort\", onAbort, { once: true });\n\t\tconst done = () => req.signal.removeEventListener(\"abort\", onAbort);\n\t\txhr.onload = () => {\n\t\t\tdone();\n\t\t\t// Only 429 carries Retry-After; reading it on other responses (e.g. presigned PUTs) logs \"unsafe header\" in browsers.\n\t\t\tresolve({ status: xhr.status, retryAfter: xhr.status === 429 ? xhr.getResponseHeader(\"Retry-After\") : null, text: xhr.responseText });\n\t\t};\n\t\txhr.onerror =\n\t\t\txhr.onabort =\n\t\t\txhr.ontimeout =\n\t\t\t\t() => {\n\t\t\t\t\tdone();\n\t\t\t\t\treject(new Error(\"request failed\"));\n\t\t\t\t};\n\t\txhr.send((req.body ?? null) as XMLHttpRequestBodyInit | null);\n\t});\n\nexport const aborted = (): BlobError => clientError(\"ABORTED\", \"The operation was aborted\");\n\nexport function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tif (signal?.aborted) return reject(aborted());\n\t\tconst onAbort = () => {\n\t\t\tclearTimeout(timer);\n\t\t\treject(aborted());\n\t\t};\n\t\tconst timer = setTimeout(() => {\n\t\t\tsignal?.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve();\n\t\t}, ms);\n\t\tsignal?.addEventListener(\"abort\", onAbort, { once: true });\n\t});\n}\n","import type {\n\tAPIBlobBatchResult,\n\tAPIBlobCustomDomain,\n\tAPIBlobDeleteResult,\n\tAPIBlobDownload,\n\tAPIBlobObject,\n\tAPIBlobObjectList,\n\tAPIBlobRules,\n\tAPIBlobS3Credentials,\n\tAPIBlobShare,\n\tAPIBlobStats,\n\tAPIBlobUpload,\n\tAPIBlobUploadPart,\n\tAPIBlobUploadToken,\n\tBlobContentDisposition,\n\tBlobVisibility,\n\tRESTDeleteAPIBlobObjectsBody,\n\tRESTGetAPIBlobObjectDownloadQuery,\n\tRESTGetAPIBlobObjectsQuery,\n\tRESTPatchAPIBlobDomainBody,\n\tRESTPatchAPIBlobObjectBody,\n\tRESTPatchAPIBlobObjectsBody,\n\tRESTPostAPIBlobDomainBody,\n\tRESTPostAPIBlobObjectCopyBody,\n\tRESTPostAPIBlobObjectQuery,\n\tRESTPostAPIBlobShareBody,\n\tRESTPostAPIBlobUploadBody,\n\tRESTPostAPIBlobUploadPartsBody,\n\tRESTPostAPIBlobUploadTokenBody,\n\tRESTPutAPIBlobRuleBody,\n\tRESTPutAPIBlobRulesBody,\n\tSnowFlake,\n} from \"@vertracloud/api-types/v1\";\nimport { BlobError, clientError } from \"./errors.js\";\nimport { type BlobData, type Source, toSource } from \"./source.js\";\nimport { type FetchLike, type TransportRequest, type TransportResponse, aborted, fetchTransport, sleep, xhrTransport } from \"./transport.js\";\n\n/** Largest file sent with one `POST /objects` request; bigger files use a direct upload. */\nconst SIMPLE_UPLOAD_MAX = 5 * 1024 * 1024;\n/** The API hands out at most this many part URLs per request. */\nconst PART_URLS_PER_REQUEST = 100;\nconst MAX_BACKOFF_MS = 8000;\n\nexport interface BlobClientOptions {\n\t/** API key (`blob:read` / `blob:write`). Sent as `Authorization: Bearer <apiKey>`. */\n\tapiKey?: string;\n\t/** Upload token (`vcup_…`) for browsers and other untrusted clients; valid on the upload routes only. */\n\tuploadToken?: string;\n\t/**\n\t * API base URL **including the version prefix**; every route is appended to it (`${baseUrl}/objects`).\n\t * Default `https://blob.vertracloud.app/v1`.\n\t */\n\tbaseUrl?: string;\n\t/** Custom `fetch` (proxies, tests, instrumentation). When set, upload progress is by completed part instead of by byte. */\n\tfetch?: FetchLike;\n\t/** Sent with every API call. Use `\"include\"` with a cookie session; then no Authorization header is needed. Never sent to signed upload URLs. */\n\tcredentials?: RequestCredentials;\n\t/** Added as `?workspace_id=` to every API call, to act on the blob of a workspace owner. */\n\tworkspaceId?: string;\n\t/** Extra headers for every API call. */\n\theaders?: Record<string, string>;\n\t/** Parts uploaded at the same time in a multipart upload. Default 4. */\n\tpartConcurrency?: number;\n\t/** Retries for idempotent calls (GET, and the PUT of a part or single upload) on 5xx and network errors. Default 3. Never applied to 429. */\n\tmaxRetries?: number;\n\t/** First retry delay in ms; doubles each attempt, with jitter. Default 300. */\n\tretryDelayMs?: number;\n\t/** Default timeout in ms for each API call. Default 30000; `0` disables. */\n\ttimeout?: number;\n\t/** Timeout in ms for each request that sends file bytes (a part, a single PUT, or the simple upload). Default 300000; `0` disables. */\n\tuploadTimeout?: number;\n}\n\nexport interface RequestOptions {\n\tsignal?: AbortSignal;\n\t/** Timeout in ms for this call, overriding the client default. */\n\ttimeout?: number;\n}\n\nexport interface BlobProgress {\n\tloaded: number;\n\ttotal: number;\n}\n\nexport interface BlobWriteOptions {\n\tvisibility?: BlobVisibility;\n\t/** Replace an existing object at the same path. */\n\toverwrite?: boolean;\n\t/** Insert `-<10 random characters>` before the extension. */\n\trandomSuffix?: boolean;\n\t/** When the path is taken, save as `name-1.ext`, `name-2.ext`, … instead of failing. The returned object has the final path. Not with `overwrite`. */\n\trenameOnConflict?: boolean;\n\tcacheControl?: string;\n\tcontentDisposition?: BlobContentDisposition;\n\t/** File name suggested on download. */\n\tfilename?: string;\n\texpiresAt?: Date | string;\n\t/** Hex SHA-256 of the file. */\n\tchecksumSha256?: string;\n\t/** Up to 5 keys, plan-dependent. */\n\tmetadata?: Record<string, string>;\n}\n\nexport interface BlobPutOptions extends BlobWriteOptions, RequestOptions {\n\t/** Total size in bytes. Required for a `ReadableStream`. */\n\tsize?: number;\n\t/** Called as bytes are sent. By byte in browsers (XMLHttpRequest); by finished part in Node and edge runtimes. */\n\tonProgress?: (progress: BlobProgress) => void;\n\t/** Called once a direct upload exists, before any byte is sent. Keep `upload.id` to `resume` after a crash. */\n\tonUpload?: (upload: APIBlobUpload) => void;\n}\n\nexport interface BlobResumeOptions extends RequestOptions {\n\tsize?: number;\n\tonProgress?: (progress: BlobProgress) => void;\n}\n\nexport interface BlobListOptions extends RequestOptions {\n\tprefix?: string;\n\t/** Group paths into folders at this character (usually `/`); folders only come back from `listPage`. */\n\tdelimiter?: string;\n\tvisibility?: BlobVisibility;\n\t/** Page size, 1–1000. Default 100. */\n\tlimit?: number;\n}\n\nexport interface BlobListPageOptions extends BlobListOptions {\n\tcursor?: string;\n}\n\nexport interface BlobUpdateChanges {\n\tvisibility?: BlobVisibility;\n\t/** `null` restores the default. */\n\tcacheControl?: string | null;\n\tcontentDisposition?: BlobContentDisposition | null;\n\tfilename?: string | null;\n\texpiresAt?: Date | string | null;\n\t/** A `null` value removes that key. */\n\tmetadata?: Record<string, string | null>;\n}\n\nexport interface BlobCopyOptions extends RequestOptions {\n\toverwrite?: boolean;\n\trandomSuffix?: boolean;\n\tvisibility?: BlobVisibility;\n}\n\nexport interface BlobDownloadUrlOptions extends RequestOptions {\n\t/** Seconds, 60–86400. Default 3600. */\n\texpiresIn?: number;\n\tdisposition?: BlobContentDisposition;\n\tfilename?: string;\n}\n\nexport interface BlobUploadTokenOptions extends RequestOptions {\n\tpath?: string;\n\tprefix?: string;\n\tvisibility?: BlobVisibility;\n\t/** Let uploads made with the token replace an existing object. Default `false`. */\n\toverwrite?: boolean;\n\tmaxSize?: number;\n\tallowedExtensions?: string[];\n\tcacheControl?: string;\n\tcontentDisposition?: BlobContentDisposition;\n\texpiresAt?: Date | string;\n\tmetadata?: Record<string, string>;\n\t/** Seconds the token stays valid, 60–3600. Default 900. */\n\texpiresIn?: number;\n\t/** 1–100. Default 1. */\n\tmaxUses?: number;\n}\n\nexport interface BlobShareOptions extends RequestOptions {\n\t/** Seconds, 60 to 30 days. Default 24 hours. */\n\texpiresIn?: number;\n\tmaxDownloads?: number;\n\tpassword?: string;\n}\n\n/** One folder rule, with camelCase keys (the snake_case wire shape returned by `rules.get()` is accepted too). */\nexport interface BlobRuleInput {\n\tvisibility?: BlobVisibility;\n\texpireSeconds?: number;\n\tmaxSize?: number;\n\textensions?: string[];\n\tcacheControl?: string;\n\tdeleteAfterDays?: number;\n}\n\nexport type BlobRuleWithPrefix = (BlobRuleInput | RESTPutAPIBlobRuleBody) & { prefix: string };\n\nexport interface BlobImageOptions {\n\twidth?: number;\n\theight?: number;\n\t/** For example `scale-down`, `contain`, `cover`, `crop`, `pad`. */\n\tfit?: string;\n\t/** For example `auto`, `webp`, `avif`, `jpeg`, `png`. */\n\tformat?: string;\n\t/** 1–100. */\n\tquality?: number;\n}\n\nexport type BlobDeleteManyInput = { ids: SnowFlake[] } | { prefix: string };\n\ntype Query = Record<string, string | number | boolean | null | undefined>;\n\ninterface ApiCall extends RequestOptions {\n\tquery?: Query;\n\tjson?: unknown;\n\tbody?: BodyInit;\n\theaders?: Record<string, string>;\n\tonUploadProgress?: (loaded: number) => void;\n}\n\ninterface Req extends Omit<TransportRequest, \"signal\"> {\n\tsignal?: AbortSignal;\n\ttimeout?: number;\n\tretry: boolean;\n}\n\nconst snake = (key: string) => key.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`);\n\n/** Top-level camelCase keys -> snake_case wire keys; `Date` becomes an ISO string; `undefined` is dropped. Nested values (metadata) are untouched. */\nfunction toWire<T>(input: object): T {\n\tconst out: Record<string, unknown> = {};\n\tfor (const [key, value] of Object.entries(input)) {\n\t\tif (value !== undefined) out[snake(key)] = value instanceof Date ? value.toISOString() : value;\n\t}\n\treturn out as T;\n}\n\nexport class BlobClient {\n\treadonly baseUrl: string;\n\tprivate readonly apiKey: string | undefined;\n\tprivate readonly fetchImpl: FetchLike | undefined;\n\tprivate readonly credentials: RequestCredentials | undefined;\n\tprivate readonly workspaceId: string | undefined;\n\tprivate readonly extraHeaders: Record<string, string>;\n\tprivate readonly partConcurrency: number;\n\tprivate readonly maxRetries: number;\n\tprivate readonly retryDelayMs: number;\n\tprivate readonly timeout: number;\n\tprivate readonly uploadTimeout: number;\n\n\tconstructor(options: BlobClientOptions = {}) {\n\t\tif (options.apiKey && options.uploadToken) throw clientError(\"INVALID_ARGUMENT\", \"Pass either `apiKey` or `uploadToken`, not both\");\n\t\tthis.apiKey = options.apiKey ?? options.uploadToken;\n\t\tthis.baseUrl = (options.baseUrl ?? \"https://blob.vertracloud.app/v1\").replace(/\\/+$/, \"\");\n\t\tthis.fetchImpl = options.fetch;\n\t\tthis.credentials = options.credentials;\n\t\tthis.workspaceId = options.workspaceId;\n\t\tthis.extraHeaders = options.headers ?? {};\n\t\tthis.partConcurrency = Math.max(1, Math.floor(options.partConcurrency ?? 4));\n\t\tthis.maxRetries = Math.max(0, Math.floor(options.maxRetries ?? 3));\n\t\tthis.retryDelayMs = options.retryDelayMs ?? 300;\n\t\tthis.timeout = options.timeout ?? 30_000;\n\t\tthis.uploadTimeout = options.uploadTimeout ?? 300_000;\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// Upload\n\t// ---------------------------------------------------------------------------\n\n\t/**\n\t * Uploads a file. Up to 5 MB it is one `POST /objects`; above that it starts a direct upload and\n\t * follows the mode the API picks: one signed PUT, or parts sent in parallel. Returns the object.\n\t * Aborting `signal` during a direct upload cancels it on the server (best effort).\n\t */\n\tasync put(path: string, data: BlobData, options: BlobPutOptions = {}): Promise<APIBlobObject> {\n\t\tconst { size, onProgress, onUpload, signal, timeout, ...write } = options;\n\t\tconst src = toSource(data, size);\n\t\tconst ctx: TransferContext = { signal, timeout, onProgress };\n\t\tif (src.size <= SIMPLE_UPLOAD_MAX) return this.putSimple(path, src, write, ctx);\n\t\tconst upload = await this.api<APIBlobUpload>(\"POST\", \"/uploads\", { json: { ...toWire<RESTPostAPIBlobUploadBody>(write), path, size: src.size }, signal, timeout });\n\t\tonUpload?.(upload);\n\t\treturn this.transfer(upload, src, ctx, true, new Set());\n\t}\n\n\t/** Continues an interrupted direct upload, sending only the parts the server does not have yet. `data` must be the same file. */\n\tasync resume(uploadId: SnowFlake, data: BlobData, options: BlobResumeOptions = {}): Promise<APIBlobObject> {\n\t\tconst { size, onProgress, signal, timeout } = options;\n\t\tconst src = toSource(data, size);\n\t\tconst upload = await this.api<APIBlobUpload>(\"GET\", `/uploads/${enc(uploadId)}`, { signal, timeout });\n\t\treturn this.transfer(upload, src, { signal, timeout, onProgress }, false, new Set(upload.uploaded_parts ?? []));\n\t}\n\n\t/** Direct uploads still in progress. */\n\tlistUploads(options: RequestOptions = {}): Promise<APIBlobUpload[]> {\n\t\treturn this.api(\"GET\", \"/uploads\", options);\n\t}\n\n\t/** Aborts a direct upload and frees its reserved storage. Repeating it is not an error. */\n\tasync abortUpload(uploadId: SnowFlake, options: RequestOptions = {}): Promise<void> {\n\t\tawait this.api(\"DELETE\", `/uploads/${enc(uploadId)}`, options);\n\t}\n\n\tprivate async putSimple(path: string, src: Source, write: BlobWriteOptions, ctx: TransferContext): Promise<APIBlobObject> {\n\t\tconst { metadata, ...rest } = write;\n\t\tconst query = toWire<RESTPostAPIBlobObjectQuery>({ ...rest, path, ...(metadata ? { metadata: JSON.stringify(metadata) } : {}) });\n\t\tconst form = new FormData();\n\t\tform.append(\"file\", new Blob([await src.read(0, src.size)] as BlobPart[]), path.split(\"/\").pop() || \"file\");\n\t\tconst object = await this.api<APIBlobObject>(\"POST\", \"/objects\", {\n\t\t\tquery: query as unknown as Query,\n\t\t\tbody: form,\n\t\t\tsignal: ctx.signal,\n\t\t\ttimeout: ctx.timeout ?? this.uploadTimeout,\n\t\t\tonUploadProgress: ctx.onProgress && ((loaded) => ctx.onProgress?.({ loaded: Math.min(loaded, src.size), total: src.size })),\n\t\t});\n\t\tctx.onProgress?.({ loaded: src.size, total: src.size });\n\t\treturn object;\n\t}\n\n\tprivate async transfer(upload: APIBlobUpload, src: Source, ctx: TransferContext, abortOnUserAbort: boolean, skip: Set<number>): Promise<APIBlobObject> {\n\t\tif (src.size !== upload.size) throw clientError(\"INVALID_ARGUMENT\", `The data has ${src.size} bytes but the upload was created for ${upload.size}`);\n\t\ttry {\n\t\t\tif (upload.mode === \"single\") await this.putSingle(upload, src, ctx);\n\t\t\telse await this.putParts(upload, src, ctx, skip);\n\t\t\treturn await this.api<APIBlobObject>(\"POST\", `/uploads/${enc(upload.id)}/complete`, { signal: ctx.signal, timeout: ctx.timeout });\n\t\t} catch (error) {\n\t\t\t// Only an explicit abort cancels the upload; any other failure leaves it open so `resume` can finish it.\n\t\t\tif (abortOnUserAbort && ctx.signal?.aborted) await this.abortUpload(upload.id, { timeout: 5000 }).catch(() => {});\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tprivate async putSingle(upload: APIBlobUpload, src: Source, ctx: TransferContext): Promise<void> {\n\t\tif (!upload.url) throw clientError(\"INVALID_RESPONSE\", \"The upload has no URL\");\n\t\tconst body = await src.read(0, src.size);\n\t\tawait this.putBytes(upload.url, upload.headers, body, ctx.signal, ctx.onProgress && ((loaded) => ctx.onProgress?.({ loaded: Math.min(loaded, src.size), total: src.size })));\n\t\tctx.onProgress?.({ loaded: src.size, total: src.size });\n\t}\n\n\tprivate async putParts(upload: APIBlobUpload, src: Source, ctx: TransferContext, skip: Set<number>): Promise<void> {\n\t\tconst { part_size: partSize, part_count: partCount } = upload;\n\t\tif (!partSize || !partCount) throw clientError(\"INVALID_RESPONSE\", \"The multipart upload has no part layout\");\n\t\tconst range = (n: number): [number, number] => [(n - 1) * partSize, Math.min(n * partSize, src.size)];\n\t\tconst pending: number[] = [];\n\t\tlet done = 0;\n\t\tfor (let n = 1; n <= partCount; n++) {\n\t\t\tif (skip.has(n)) done += range(n)[1] - range(n)[0];\n\t\t\telse pending.push(n);\n\t\t}\n\t\tconst total = src.size;\n\t\tconst inflight = new Map<number, number>();\n\t\tconst report = () => {\n\t\t\tlet loaded = done;\n\t\t\tfor (const v of inflight.values()) loaded += v;\n\t\t\tctx.onProgress?.({ loaded: Math.min(loaded, total), total });\n\t\t};\n\t\tif (done > 0) report();\n\n\t\t// Part workers share a controller so one failure stops the others.\n\t\tconst ctl = new AbortController();\n\t\tconst onUserAbort = () => ctl.abort();\n\t\tctx.signal?.addEventListener(\"abort\", onUserAbort, { once: true });\n\t\tif (ctx.signal?.aborted) ctl.abort();\n\n\t\tconst urls = new Map<number, APIBlobUploadPart>();\n\t\tlet cursor = 0;\n\t\tlet failed = false;\n\t\tlet lock: Promise<unknown> = Promise.resolve();\n\t\t// Serialised: URL batches are requested in order, and stream sources must be read in order.\n\t\tconst next = () => {\n\t\t\tconst run = lock.then(async () => {\n\t\t\t\tif (failed || cursor >= pending.length) return null;\n\t\t\t\tconst n = pending[cursor];\n\t\t\t\tif (!urls.has(n)) {\n\t\t\t\t\tconst batch = pending.slice(cursor, cursor + PART_URLS_PER_REQUEST);\n\t\t\t\t\tconst parts = await this.api<APIBlobUploadPart[]>(\"POST\", `/uploads/${enc(upload.id)}/parts`, { json: { part_numbers: batch } satisfies RESTPostAPIBlobUploadPartsBody, signal: ctl.signal, timeout: ctx.timeout });\n\t\t\t\t\tfor (const part of parts) urls.set(part.part_number, part);\n\t\t\t\t}\n\t\t\t\tconst part = urls.get(n);\n\t\t\t\tif (!part) throw clientError(\"INVALID_RESPONSE\", `The API did not return a URL for part ${n}`);\n\t\t\t\tcursor++;\n\t\t\t\tconst [start, end] = range(n);\n\t\t\t\treturn { n, part, bytes: await src.read(start, end), size: end - start };\n\t\t\t});\n\t\t\tlock = run.catch(() => {});\n\t\t\treturn run;\n\t\t};\n\n\t\tconst worker = async () => {\n\t\t\tfor (let job = await next(); job; job = await next()) {\n\t\t\t\tawait this.putBytes(\n\t\t\t\t\tjob.part.url,\n\t\t\t\t\tjob.part.headers,\n\t\t\t\t\tjob.bytes,\n\t\t\t\t\tctl.signal,\n\t\t\t\t\tctx.onProgress &&\n\t\t\t\t\t\t((loaded) => {\n\t\t\t\t\t\t\tinflight.set(job.n, Math.min(loaded, job.size));\n\t\t\t\t\t\t\treport();\n\t\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\tinflight.delete(job.n);\n\t\t\t\tdone += job.size;\n\t\t\t\treport();\n\t\t\t}\n\t\t};\n\t\ttry {\n\t\t\tawait Promise.all(\n\t\t\t\tArray.from({ length: Math.min(this.partConcurrency, pending.length) }, () =>\n\t\t\t\t\tworker().catch((error) => {\n\t\t\t\t\t\tfailed = true;\n\t\t\t\t\t\tctl.abort();\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t);\n\t\t} finally {\n\t\t\tctx.signal?.removeEventListener(\"abort\", onUserAbort);\n\t\t}\n\t}\n\n\t/** PUT to a signed URL with exactly the headers the API returned. No credentials are attached. Retried on 5xx and network errors. */\n\tprivate async putBytes(url: string, headers: Record<string, string> | undefined, body: Blob | Uint8Array, signal: AbortSignal | undefined, onUploadProgress?: (loaded: number) => void): Promise<void> {\n\t\tconst res = await this.exec({ method: \"PUT\", url, headers: { ...headers }, body: body as BodyInit, signal, timeout: this.uploadTimeout, retry: true, onUploadProgress });\n\t\tif (res.status < 200 || res.status >= 300) throw clientError(\"UPLOAD_FAILED\", `The storage rejected the upload (HTTP ${res.status})`, res.status);\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// Objects\n\t// ---------------------------------------------------------------------------\n\n\t/** One page of objects plus the `folders` found under the prefix, and the `cursor` of the next page (`null` on the last). */\n\tlistPage(options: BlobListPageOptions = {}): Promise<APIBlobObjectList> {\n\t\tconst { signal, timeout, ...query } = options;\n\t\treturn this.api(\"GET\", \"/objects\", { query: toWire<RESTGetAPIBlobObjectsQuery>(query) as Query, signal, timeout });\n\t}\n\n\t/** Iterates every object that matches, fetching pages as needed. */\n\tasync *list(options: BlobListOptions = {}): AsyncGenerator<APIBlobObject, void, undefined> {\n\t\tlet cursor: string | undefined;\n\t\tdo {\n\t\t\tconst page = await this.listPage({ ...options, cursor });\n\t\t\tyield* page.objects;\n\t\t\tcursor = page.cursor ?? undefined;\n\t\t} while (cursor);\n\t}\n\n\tget(id: SnowFlake, options: RequestOptions = {}): Promise<APIBlobObject> {\n\t\treturn this.api(\"GET\", `/objects/${enc(id)}`, options);\n\t}\n\n\tupdate(id: SnowFlake, changes: BlobUpdateChanges, options: RequestOptions = {}): Promise<APIBlobObject> {\n\t\treturn this.api(\"PATCH\", `/objects/${enc(id)}`, { json: toWire<RESTPatchAPIBlobObjectBody>(changes), ...options });\n\t}\n\n\t/** Applies the same changes to any number of objects (sent in batches of 100, the API limit); one result per id, in the order of `ids`. */\n\tasync updateMany(ids: SnowFlake[], changes: BlobUpdateChanges, options: RequestOptions = {}): Promise<APIBlobBatchResult[]> {\n\t\tconst wire = toWire<RESTPatchAPIBlobObjectBody>(changes);\n\t\tconst results: APIBlobBatchResult[] = [];\n\t\tfor (let i = 0; i === 0 || i < ids.length; i += 100) {\n\t\t\tconst batch = await this.api<APIBlobBatchResult[]>(\"PATCH\", \"/objects\", { json: { ids: ids.slice(i, i + 100), changes: wire } satisfies RESTPatchAPIBlobObjectsBody, ...options });\n\t\t\tresults.push(...batch);\n\t\t}\n\t\treturn results;\n\t}\n\n\tcopy(id: SnowFlake, path: string, options: BlobCopyOptions & { move?: boolean } = {}): Promise<APIBlobObject> {\n\t\tconst { signal, timeout, ...rest } = options;\n\t\treturn this.api(\"POST\", \"/objects/copy\", { json: { ...toWire<Partial<RESTPostAPIBlobObjectCopyBody>>(rest), source: id, path }, signal, timeout });\n\t}\n\n\t/** Moves or renames an object; the id stays the same. */\n\tmove(id: SnowFlake, path: string, options: BlobCopyOptions = {}): Promise<APIBlobObject> {\n\t\treturn this.copy(id, path, { ...options, move: true });\n\t}\n\n\tasync delete(id: SnowFlake, options: RequestOptions = {}): Promise<void> {\n\t\tawait this.api(\"DELETE\", `/objects/${enc(id)}`, options);\n\t}\n\n\t/**\n\t * Deletes by `ids` or by folder `prefix`, repeating while the API reports `remaining`\n\t * (it deletes up to 1000 per call). The result merges every round.\n\t */\n\tasync deleteMany(input: BlobDeleteManyInput, options: RequestOptions = {}): Promise<APIBlobDeleteResult> {\n\t\tconst total: APIBlobDeleteResult = { deleted: [], not_found: [], remaining: false };\n\t\tlet ids = \"ids\" in input ? [...input.ids] : undefined;\n\t\tfor (;;) {\n\t\t\tconst body: RESTDeleteAPIBlobObjectsBody = ids ? { ids: ids.slice(0, 1000) } : { prefix: (input as { prefix: string }).prefix };\n\t\t\tconst res = await this.api<APIBlobDeleteResult>(\"DELETE\", \"/objects\", { json: body, ...options });\n\t\t\ttotal.deleted.push(...res.deleted);\n\t\t\ttotal.not_found.push(...res.not_found);\n\t\t\tif (ids) {\n\t\t\t\tconst seen = new Set([...total.deleted, ...total.not_found]);\n\t\t\t\tids = ids.filter((id) => !seen.has(id));\n\t\t\t}\n\t\t\tif (ids ? ids.length === 0 : !res.remaining) return total;\n\t\t\tif (res.deleted.length + res.not_found.length === 0) throw clientError(\"INVALID_RESPONSE\", \"deleteMany made no progress\");\n\t\t}\n\t}\n\n\t/** A temporary download link (`{ url, expires_at }`). It cannot be revoked. */\n\tdownloadUrl(id: SnowFlake, options: BlobDownloadUrlOptions = {}): Promise<APIBlobDownload> {\n\t\tconst { signal, timeout, ...rest } = options;\n\t\tconst query = { ...toWire<RESTGetAPIBlobObjectDownloadQuery>(rest), redirect: false };\n\t\treturn this.api(\"GET\", `/objects/${enc(id)}/download`, { query: query as Query, signal, timeout });\n\t}\n\n\t/**\n\t * Builds an image-transformation URL from a public object (or its public URL). Pure: no request is made.\n\t * Throws for a private object, which has no public URL.\n\t */\n\timageUrl(source: Pick<APIBlobObject, \"url\"> | string, options: BlobImageOptions = {}): string {\n\t\tconst raw = typeof source === \"string\" ? source : source.url;\n\t\tif (!raw) throw clientError(\"INVALID_ARGUMENT\", \"Only public objects can be transformed; this object is private\");\n\t\tconst url = new URL(raw);\n\t\tconst params: [string, number | string | undefined][] = [\n\t\t\t[\"w\", options.width],\n\t\t\t[\"h\", options.height],\n\t\t\t[\"fit\", options.fit],\n\t\t\t[\"format\", options.format],\n\t\t\t[\"q\", options.quality],\n\t\t];\n\t\tfor (const [key, value] of params) if (value !== undefined) url.searchParams.set(key, String(value));\n\t\treturn url.toString();\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// Account, tokens, S3\n\t// ---------------------------------------------------------------------------\n\n\tstats(options: RequestOptions = {}): Promise<APIBlobStats> {\n\t\treturn this.api(\"GET\", \"/stats\", options);\n\t}\n\n\t/** Creates a token that fixes every constraint you pass; hand it to a browser as `uploadToken`. */\n\tcreateUploadToken(options: BlobUploadTokenOptions = {}): Promise<APIBlobUploadToken> {\n\t\tconst { signal, timeout, ...rest } = options;\n\t\treturn this.api(\"POST\", \"/upload-tokens\", { json: toWire<RESTPostAPIBlobUploadTokenBody>(rest), signal, timeout });\n\t}\n\n\t/** S3-compatible credentials derived from the API key, for aws-cli, rclone or boto3. */\n\ts3Credentials(options: RequestOptions = {}): Promise<APIBlobS3Credentials> {\n\t\treturn this.api(\"GET\", \"/s3/credentials\", options);\n\t}\n\n\treadonly shares = {\n\t\tcreate: (objectId: SnowFlake, options: BlobShareOptions = {}): Promise<APIBlobShare> => {\n\t\t\tconst { signal, timeout, ...rest } = options;\n\t\t\treturn this.api(\"POST\", \"/shares\", { json: { ...toWire<Partial<RESTPostAPIBlobShareBody>>(rest), object_id: objectId }, signal, timeout });\n\t\t},\n\t\tlist: (options: RequestOptions & { objectId?: SnowFlake } = {}): Promise<APIBlobShare[]> => this.api(\"GET\", \"/shares\", { query: { object_id: options.objectId }, signal: options.signal, timeout: options.timeout }),\n\t\trevoke: async (shareId: SnowFlake, options: RequestOptions = {}): Promise<void> => {\n\t\t\tawait this.api(\"DELETE\", `/shares/${enc(shareId)}`, options);\n\t\t},\n\t};\n\n\treadonly rules = {\n\t\tget: (options: RequestOptions = {}): Promise<APIBlobRules> => this.api(\"GET\", \"/rules\", options),\n\t\t/** Replaces the whole list. `etag` is the one from the list you read; a stale one fails with `BLOB_RULES_CONFLICT`. */\n\t\tset: (rules: BlobRuleWithPrefix[], etag: string, options: RequestOptions = {}): Promise<APIBlobRules> => this.api(\"PUT\", \"/rules\", { json: { rules: rules.map((rule) => toWire(rule)) } as RESTPutAPIBlobRulesBody, headers: { \"If-Match\": etag }, ...options }),\n\t\t/** Creates or changes the rule of one folder; returns the whole list and its new etag. */\n\t\tput: (prefix: string, rule: BlobRuleInput | RESTPutAPIBlobRuleBody, options: RequestOptions = {}): Promise<APIBlobRules> => this.api(\"PUT\", `/rules/${enc(prefix)}`, { json: toWire<RESTPutAPIBlobRuleBody>(rule), ...options }),\n\t\tdelete: (prefix: string, options: RequestOptions = {}): Promise<APIBlobRules> => this.api(\"DELETE\", `/rules/${enc(prefix)}`, options),\n\t};\n\n\treadonly domains = {\n\t\tlist: (options: RequestOptions = {}): Promise<APIBlobCustomDomain[]> => this.api(\"GET\", \"/domains\", options),\n\t\tadd: (hostname: string, options: RequestOptions & { prefix?: string; web_content?: boolean } = {}): Promise<APIBlobCustomDomain> => {\n\t\t\tconst { signal, timeout, prefix, web_content } = options;\n\t\t\treturn this.api(\"POST\", \"/domains\", { json: { hostname, ...(prefix ? { prefix } : {}), ...(web_content === undefined ? {} : { web_content }) } satisfies RESTPostAPIBlobDomainBody, signal, timeout });\n\t\t},\n\t\tupdate: (domainId: SnowFlake, body: RESTPatchAPIBlobDomainBody, options: RequestOptions = {}): Promise<APIBlobCustomDomain> => this.api(\"PATCH\", `/domains/${enc(domainId)}`, { json: body, signal: options.signal, timeout: options.timeout }),\n\t\tverify: (domainId: SnowFlake, options: RequestOptions = {}): Promise<APIBlobCustomDomain> => this.api(\"POST\", `/domains/${enc(domainId)}/verify`, options),\n\t\tremove: async (domainId: SnowFlake, options: RequestOptions = {}): Promise<void> => {\n\t\t\tawait this.api(\"DELETE\", `/domains/${enc(domainId)}`, options);\n\t\t},\n\t};\n\n\t// ---------------------------------------------------------------------------\n\t// HTTP\n\t// ---------------------------------------------------------------------------\n\n\t/** One API call: builds the URL, authenticates, unwraps `{ response }` and turns an error envelope into a `BlobError`. */\n\tprivate async api<T>(method: string, path: string, call: ApiCall = {}): Promise<T> {\n\t\tconst query = new URLSearchParams();\n\t\tfor (const [key, value] of Object.entries({ ...call.query, workspace_id: this.workspaceId })) {\n\t\t\tif (value !== undefined && value !== null) query.set(key, String(value));\n\t\t}\n\t\tconst headers: Record<string, string> = { accept: \"application/json\", ...this.extraHeaders, ...call.headers };\n\t\tif (this.apiKey) headers.authorization = `Bearer ${this.apiKey}`;\n\t\tlet body = call.body;\n\t\tif (call.json !== undefined) {\n\t\t\tbody = JSON.stringify(call.json);\n\t\t\theaders[\"content-type\"] = \"application/json\";\n\t\t}\n\t\tconst qs = query.toString();\n\t\tconst res = await this.exec({\n\t\t\tmethod,\n\t\t\turl: `${this.baseUrl}${path}${qs ? `?${qs}` : \"\"}`,\n\t\t\theaders,\n\t\t\tbody,\n\t\t\tcredentials: this.credentials,\n\t\t\tsignal: call.signal,\n\t\t\ttimeout: call.timeout ?? this.timeout,\n\t\t\tretry: method === \"GET\",\n\t\t\tonUploadProgress: call.onUploadProgress,\n\t\t});\n\n\t\tlet parsed: unknown;\n\t\tif (res.text) {\n\t\t\ttry {\n\t\t\t\tparsed = JSON.parse(res.text);\n\t\t\t} catch {\n\t\t\t\tif (res.status >= 200 && res.status < 300) throw clientError(\"INVALID_RESPONSE\", \"The API returned a body that is not JSON\", res.status);\n\t\t\t}\n\t\t}\n\t\tif (res.status >= 200 && res.status < 300) return ((parsed as { response?: T } | undefined)?.response ?? null) as T;\n\t\tconst err = (parsed ?? {}) as { code?: unknown; message?: unknown; details?: unknown };\n\t\tconst retryAfter = Number(res.retryAfter);\n\t\tthrow new BlobError(res.status, { code: typeof err.code === \"string\" ? err.code : `HTTP_${res.status}`, message: typeof err.message === \"string\" ? err.message : undefined, details: err.details }, res.retryAfter && Number.isFinite(retryAfter) ? retryAfter : undefined);\n\t}\n\n\t/** Sends a request, retrying 5xx and network errors when `req.retry` (never 429). */\n\tprivate async exec(req: Req): Promise<TransportResponse> {\n\t\tconst retries = req.retry ? this.maxRetries : 0;\n\t\tfor (let attempt = 0; ; attempt++) {\n\t\t\ttry {\n\t\t\t\tconst res = await this.once(req);\n\t\t\t\tif (res.status < 500 || attempt >= retries) return res;\n\t\t\t} catch (error) {\n\t\t\t\tif (!(error instanceof BlobError) || (error.code !== \"NETWORK_ERROR\" && error.code !== \"TIMEOUT\") || attempt >= retries) throw error;\n\t\t\t}\n\t\t\tawait sleep(Math.min(this.retryDelayMs * 2 ** attempt, MAX_BACKOFF_MS) * (0.5 + Math.random() / 2), req.signal);\n\t\t}\n\t}\n\n\tprivate async once(req: Req): Promise<TransportResponse> {\n\t\tconst user = req.signal;\n\t\tif (user?.aborted) throw aborted();\n\t\tconst ctl = new AbortController();\n\t\tconst onAbort = () => ctl.abort();\n\t\tuser?.addEventListener(\"abort\", onAbort, { once: true });\n\t\tlet timedOut = false;\n\t\tconst timer = req.timeout\n\t\t\t? setTimeout(() => {\n\t\t\t\t\ttimedOut = true;\n\t\t\t\t\tctl.abort();\n\t\t\t\t}, req.timeout)\n\t\t\t: undefined;\n\t\tconst useXhr = req.onUploadProgress && !this.fetchImpl && typeof XMLHttpRequest !== \"undefined\";\n\t\ttry {\n\t\t\tconst send = useXhr ? xhrTransport : fetchTransport(this.fetchImpl ?? ((input, init) => globalThis.fetch(input, init)));\n\t\t\treturn await send({ ...req, signal: ctl.signal });\n\t\t} catch {\n\t\t\t// The original error is not forwarded: it can carry the request URL, which may be a signed upload URL.\n\t\t\tif (user?.aborted) throw aborted();\n\t\t\tif (timedOut) throw clientError(\"TIMEOUT\", \"The request timed out\");\n\t\t\tthrow clientError(\"NETWORK_ERROR\", \"The request failed before a response was received\");\n\t\t} finally {\n\t\t\tclearTimeout(timer);\n\t\t\tuser?.removeEventListener(\"abort\", onAbort);\n\t\t}\n\t}\n}\n\ninterface TransferContext extends RequestOptions {\n\tonProgress?: (progress: BlobProgress) => void;\n}\n\nconst enc = encodeURIComponent;\n","export const VERSION = \"0.1.1\"; // x-release-please-version\n\nexport * from \"./types.js\";\nexport { BlobClient } from \"./client.js\";\nexport type {\n\tBlobClientOptions,\n\tBlobCopyOptions,\n\tBlobDeleteManyInput,\n\tBlobDownloadUrlOptions,\n\tBlobImageOptions,\n\tBlobListOptions,\n\tBlobListPageOptions,\n\tBlobProgress,\n\tBlobPutOptions,\n\tBlobResumeOptions,\n\tBlobRuleInput,\n\tBlobRuleWithPrefix,\n\tBlobShareOptions,\n\tBlobUpdateChanges,\n\tBlobUploadTokenOptions,\n\tBlobWriteOptions,\n\tRequestOptions,\n} from \"./client.js\";\nexport { BlobError } from \"./errors.js\";\nexport type { BlobClientErrorCode, BlobErrorBody } from \"./errors.js\";\nexport type { BlobData } from \"./source.js\";\nexport type { FetchLike } from \"./transport.js\";\n"],"mappings":"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","names":["part"]}
package/package.json CHANGED
@@ -1,6 +1,67 @@
1
1
  {
2
- "name": "@vertracloud/blob",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
2
+ "name": "@vertracloud/blob",
3
+ "version": "0.1.1",
4
+ "private": false,
5
+ "description": "Official JavaScript/TypeScript SDK for Vertra Cloud Blob Storage. Works in Node.js 18+, browsers and edge runtimes.",
6
+ "type": "module",
7
+ "license": "MIT",
8
+ "homepage": "https://vertracloud.app",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/vertracloud/sdk-blob-js.git"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/vertracloud/sdk-blob-js/issues"
15
+ },
16
+ "keywords": [
17
+ "vertracloud",
18
+ "vertra cloud",
19
+ "sdk",
20
+ "blob",
21
+ "storage",
22
+ "object-storage",
23
+ "upload"
24
+ ],
25
+ "author": "Eydrenn Araujo",
26
+ "engines": {
27
+ "node": ">=18.17"
28
+ },
29
+ "sideEffects": false,
30
+ "main": "./dist/index.cjs",
31
+ "module": "./dist/index.js",
32
+ "types": "./dist/index.d.ts",
33
+ "exports": {
34
+ ".": {
35
+ "import": {
36
+ "types": "./dist/index.d.ts",
37
+ "default": "./dist/index.js"
38
+ },
39
+ "require": {
40
+ "types": "./dist/index.d.cts",
41
+ "default": "./dist/index.cjs"
42
+ }
43
+ }
44
+ },
45
+ "files": [
46
+ "dist",
47
+ "README.md",
48
+ "LICENSE"
49
+ ],
50
+ "scripts": {
51
+ "build": "tsup",
52
+ "test": "vitest run",
53
+ "test:watch": "vitest",
54
+ "typecheck": "tsc --noEmit",
55
+ "lint": "biome check --fix .",
56
+ "check": "npm run typecheck && npm run lint && npm run test"
57
+ },
58
+ "dependencies": {
59
+ "@vertracloud/api-types": "^0.4.0"
60
+ },
61
+ "devDependencies": {
62
+ "@biomejs/biome": "^1.9.4",
63
+ "tsup": "^8.3.5",
64
+ "typescript": "^5.7.2",
65
+ "vitest": "^2.1.8"
66
+ }
67
+ }