@gigadrive/sdk 0.7.21 → 0.7.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/auth/credential-provider.ts","../src/auth/token-manager.ts","../src/http-client.ts","../src/streaming.ts","../src/resources/base-resource.ts","../src/resources/ai-gateway/index.ts","../src/resources/api-keys.ts","../src/resources/application-env-vars.ts","../src/resources/application-requests.ts","../src/upload/checksum.ts","../src/upload/content-type.ts","../src/upload/source.ts","../src/upload/transport.ts","../src/resources/storage-buckets.ts","../src/resources/storage-objects.ts","../src/resources/storage-upload-sessions.ts","../src/resources/application-storage.ts","../src/resources/applications.ts","../src/resources/deployments.ts","../src/resources/image-optimization.ts","../src/resources/organization-ai-gateway.ts","../src/resources/organization-env-vars.ts","../src/resources/organization-members.ts","../src/resources/organization-products.ts","../src/resources/organizations.ts","../src/resources/sticky-sessions.ts","../src/client.ts","../src/pagination.ts"],"sourcesContent":["export { GigadriveClient } from './client';\nexport type { GigadriveClientConfig } from './client';\nexport * from './errors';\nexport type { ListQuery, Paginated, QueryValue } from './http-client';\nexport { paginate } from './pagination';\nexport * from './resources';\nexport { parseSSEStream } from './streaming';\n","/**\n * Base error class for all Gigadrive SDK errors. Every error thrown by the SDK\n * extends this class, so you can catch all SDK errors with a single check.\n *\n * @example\n * ```ts\n * try {\n * await client.organizations.list();\n * } catch (err) {\n * if (err instanceof GigadriveError) {\n * console.error('SDK error:', err.message);\n * }\n * }\n * ```\n */\nexport class GigadriveError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'GigadriveError';\n }\n}\n\n/**\n * Thrown when authentication fails. This includes missing or invalid credentials,\n * expired tokens, failed token refresh attempts, and failed token exchanges.\n *\n * Common causes:\n * - No credentials provided and no environment variables set\n * - Invalid `clientId`/`clientSecret` pair\n * - Expired or revoked refresh token\n * - API returned 401 even after an automatic token refresh retry\n *\n * @example\n * ```ts\n * try {\n * const client = new GigadriveClient(); // no credentials\n * } catch (err) {\n * if (err instanceof AuthenticationError) {\n * console.error('Auth failed:', err.message);\n * }\n * }\n * ```\n */\nexport class AuthenticationError extends GigadriveError {\n constructor(message: string) {\n super(message);\n this.name = 'AuthenticationError';\n }\n}\n\n/**\n * Thrown when the Gigadrive API returns a non-2xx HTTP response.\n *\n * Contains the HTTP {@link status} code and an optional machine-readable\n * {@link code} parsed from the response body.\n *\n * @example\n * ```ts\n * try {\n * await client.deployments.get('non-existent-id');\n * } catch (err) {\n * if (err instanceof ApiError) {\n * console.error(`API error ${err.status}: ${err.message}`);\n * // err.code may contain a machine-readable error code\n * }\n * }\n * ```\n */\nexport class ApiError extends GigadriveError {\n /** The HTTP status code of the failed response (e.g. 404, 500). */\n readonly status: number;\n /** An optional machine-readable error code from the API response body. */\n readonly code: string | undefined;\n\n constructor(message: string, status: number, code?: string) {\n super(message);\n this.name = 'ApiError';\n this.status = status;\n this.code = code;\n }\n}\n\n/**\n * Thrown when a file upload fails. The original cause (e.g. a network error or a\n * transport-level error from the resumable upload) is preserved on\n * {@link cause} for inspection.\n *\n * @example\n * ```ts\n * try {\n * await client.applications.storage.upload({ applicationId, bucketId, key, data });\n * } catch (err) {\n * if (err instanceof UploadError) {\n * console.error('Upload failed:', err.message, err.cause);\n * }\n * }\n * ```\n */\nexport class UploadError extends GigadriveError {\n /** The underlying error that caused the upload to fail, if any. */\n override readonly cause: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = 'UploadError';\n this.cause = cause;\n }\n}\n\n/**\n * Thrown when an upload cannot complete because its session (and the short-lived\n * upload URL it was issued with) expired. Create a new upload to retry.\n *\n * The upload URL is only valid until `session.expiresAt`; very large uploads on\n * slow connections can exceed that window.\n */\nexport class UploadSessionExpiredError extends UploadError {\n constructor(\n message = 'The upload session expired before the upload completed. Start a new upload to retry.',\n cause?: unknown\n ) {\n super(message, cause);\n this.name = 'UploadSessionExpiredError';\n }\n}\n","import { AuthenticationError } from '../errors';\n\nconst DEFAULT_SCOPE = 'offline_access openid profile email';\nconst TOKEN_EXPIRY_MARGIN_SECONDS = 30;\n\n/**\n * Compute the absolute expiry (epoch ms) for a token, applying a safety margin\n * so the SDK refreshes proactively. The margin is clamped to never exceed half\n * the token lifetime, so very short-lived tokens are not treated as already\n * expired (which would refresh on every request).\n */\nconst computeExpiresAt = (expiresInSeconds: number | undefined): number => {\n const ttl = expiresInSeconds ?? 3600;\n const margin = Math.min(TOKEN_EXPIRY_MARGIN_SECONDS, ttl / 2);\n return Date.now() + (ttl - margin) * 1000;\n};\n\n/**\n * Read an environment variable safely. Returns `undefined` when `process` is\n * unavailable (e.g. browsers / some edge runtimes) instead of throwing.\n *\n * @internal\n */\nexport const readEnv = (name: string): string | undefined => {\n if (typeof process === 'undefined' || !process.env) return undefined;\n return process.env[name];\n};\n\ninterface RawTokenResponse {\n access_token: string;\n refresh_token?: string;\n expires_in?: number;\n}\n\n/**\n * Validate and normalize a token-endpoint JSON response, guarding against\n * malformed payloads that would otherwise yield `Authorization: Bearer undefined`.\n */\nconst parseTokenResponse = (payload: unknown): RawTokenResponse => {\n const data = payload as { access_token?: unknown; refresh_token?: unknown; expires_in?: unknown };\n if (typeof data.access_token !== 'string' || data.access_token.length === 0) {\n throw new AuthenticationError('Token endpoint returned no access_token');\n }\n return {\n access_token: data.access_token,\n refresh_token: typeof data.refresh_token === 'string' ? data.refresh_token : undefined,\n expires_in: typeof data.expires_in === 'number' ? data.expires_in : undefined,\n };\n};\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** The result of a credential provider's token fetch. */\nexport interface TokenResult {\n /** The access token to use in API requests. */\n accessToken: string;\n /** Epoch milliseconds when the token expires, or `null` for tokens that never expire (e.g. static bearer tokens). */\n expiresAt: number | null;\n /** A refresh token for obtaining new access tokens, if the provider supports token rotation. */\n refreshToken?: string;\n}\n\n/**\n * A strategy for obtaining access tokens. The SDK ships with four built-in\n * providers (see {@link resolveCredentialProvider} for automatic selection),\n * but you can implement this interface for custom auth flows.\n */\nexport interface CredentialProvider {\n /** A string identifying the provider type (e.g. `\"oauth2-client-credentials\"`, `\"bearer\"`). */\n readonly type: string;\n /** Fetch a new access token. May perform network requests (e.g. OAuth2 token exchange). */\n getToken(): Promise<TokenResult>;\n}\n\ninterface OidcDiscoveryDocument {\n token_endpoint?: string;\n authorization_endpoint?: string;\n userinfo_endpoint?: string;\n}\n\n// ---------------------------------------------------------------------------\n// OIDC Discovery\n// ---------------------------------------------------------------------------\n\nconst discoverOidc = async (issuerUrl: string, fetchFn: typeof globalThis.fetch): Promise<OidcDiscoveryDocument> => {\n const discoveryUrl = `${issuerUrl.replace(/\\/$/, '')}/.well-known/openid-configuration`;\n const response = await fetchFn(discoveryUrl);\n\n if (!response.ok) {\n throw new AuthenticationError(`OIDC discovery failed: ${response.status} ${response.statusText}`);\n }\n\n return (await response.json()) as OidcDiscoveryDocument;\n};\n\n// ---------------------------------------------------------------------------\n// PKCE helpers\n// ---------------------------------------------------------------------------\n\nconst base64UrlEncode = (buffer: Uint8Array): string => {\n let binary = '';\n for (let i = 0; i < buffer.byteLength; i++) {\n binary += String.fromCharCode(buffer[i]);\n }\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n};\n\nconst generatePkce = async (): Promise<{ codeVerifier: string; codeChallenge: string }> => {\n const randomBytes = new Uint8Array(64);\n crypto.getRandomValues(randomBytes);\n const codeVerifier = base64UrlEncode(randomBytes);\n\n const encoder = new TextEncoder();\n const data = encoder.encode(codeVerifier);\n const digest = await crypto.subtle.digest('SHA-256', data);\n const codeChallenge = base64UrlEncode(new Uint8Array(digest));\n\n return { codeVerifier, codeChallenge };\n};\n\nconst generateState = (): string => {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n};\n\n// ---------------------------------------------------------------------------\n// OAuth2 Client Credentials Provider (Network API keys)\n// ---------------------------------------------------------------------------\n\n/**\n * Authenticates using the OAuth2 client credentials grant. Exchanges an\n * API key (client ID + secret) for a short-lived access token via the\n * Gigadrive Network token endpoint.\n *\n * Tokens are valid for 5 minutes. A 30-second safety margin is applied so\n * the SDK refreshes proactively before the token actually expires.\n *\n * This is the most common provider for server-to-server (machine-to-machine)\n * use cases.\n */\nexport class OAuth2ClientCredentialProvider implements CredentialProvider {\n readonly type = 'oauth2-client-credentials';\n\n constructor(\n private readonly clientId: string,\n private readonly clientSecret: string,\n private readonly tokenUrl: string,\n private readonly fetchFn: typeof globalThis.fetch\n ) {}\n\n async getToken(): Promise<TokenResult> {\n const credentials = btoa(`${this.clientId}:${this.clientSecret}`);\n\n const response = await this.fetchFn(this.tokenUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Authorization: `Basic ${credentials}`,\n },\n body: new URLSearchParams({ grant_type: 'client_credentials' }).toString(),\n });\n\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n throw new AuthenticationError(`OAuth2 token request failed (${response.status}): ${body}`);\n }\n\n const data = parseTokenResponse(await response.json());\n\n return {\n accessToken: data.access_token,\n expiresAt: computeExpiresAt(data.expires_in),\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// OAuth2 Authorization Code Provider (IDP, PKCE, no local server)\n// ---------------------------------------------------------------------------\n\n/**\n * Authenticates using the OAuth2 authorization code grant with PKCE. This\n * provider is designed for interactive flows where a user authorizes the\n * application via a browser.\n *\n * The SDK generates the PKCE challenge, builds the authorization URL, and\n * passes it to your `onAuthorizationUrl` callback. Your callback is\n * responsible for presenting the URL to the user and returning the result\n * (either the full redirect URL or just the authorization code).\n *\n * The provider performs OIDC discovery to locate the authorization and token\n * endpoints automatically.\n */\nexport class OAuth2AuthorizationCodeProvider implements CredentialProvider {\n readonly type = 'oauth2-authorization-code';\n private currentRefreshToken: string | null = null;\n\n constructor(\n private readonly clientId: string,\n private readonly issuerUrl: string,\n private readonly redirectUri: string,\n private readonly onAuthorizationUrl: (url: string) => Promise<string>,\n private readonly fetchFn: typeof globalThis.fetch,\n private readonly scope: string = DEFAULT_SCOPE\n ) {}\n\n async getToken(): Promise<TokenResult> {\n const oidc = await discoverOidc(this.issuerUrl, this.fetchFn);\n\n if (!oidc.token_endpoint) {\n throw new AuthenticationError('OIDC discovery returned no token endpoint');\n }\n\n // After the first interactive exchange, refresh silently rather than\n // re-prompting the user. Only fall back to a fresh authorization when the\n // refresh token is actually rejected — transient errors are surfaced.\n if (this.currentRefreshToken) {\n const refreshed = await this.tryRefresh(oidc.token_endpoint, this.currentRefreshToken);\n if (refreshed) return refreshed;\n this.currentRefreshToken = null;\n }\n\n if (!oidc.authorization_endpoint) {\n throw new AuthenticationError('OIDC discovery returned incomplete endpoints');\n }\n\n const { codeVerifier, codeChallenge } = await generatePkce();\n const state = generateState();\n\n const authUrl = new URL(oidc.authorization_endpoint);\n authUrl.searchParams.set('client_id', this.clientId);\n authUrl.searchParams.set('redirect_uri', this.redirectUri);\n authUrl.searchParams.set('response_type', 'code');\n authUrl.searchParams.set('scope', this.scope);\n authUrl.searchParams.set('code_challenge', codeChallenge);\n authUrl.searchParams.set('code_challenge_method', 'S256');\n authUrl.searchParams.set('state', state);\n\n const result = await this.onAuthorizationUrl(authUrl.toString());\n\n // Extract the authorization code — accept either a full URL or just the code\n let code: string;\n let returnedState: string | null = null;\n\n try {\n const callbackUrl = new URL(result);\n code = callbackUrl.searchParams.get('code') ?? '';\n returnedState = callbackUrl.searchParams.get('state');\n\n const error = callbackUrl.searchParams.get('error');\n if (error) {\n const description = callbackUrl.searchParams.get('error_description') ?? error;\n throw new AuthenticationError(`Authorization failed: ${description}`);\n }\n } catch (e) {\n if (e instanceof AuthenticationError) throw e;\n // Not a valid URL — treat the entire result as the code\n code = result;\n }\n\n if (!code) {\n throw new AuthenticationError('No authorization code received');\n }\n\n if (returnedState !== null && returnedState !== state) {\n throw new AuthenticationError('State mismatch — possible CSRF attack');\n }\n\n // Exchange code for tokens\n const response = await this.fetchFn(oidc.token_endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n grant_type: 'authorization_code',\n client_id: this.clientId,\n code,\n redirect_uri: this.redirectUri,\n code_verifier: codeVerifier,\n }).toString(),\n });\n\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n throw new AuthenticationError(`Token exchange failed (${response.status}): ${body}`);\n }\n\n const data = parseTokenResponse(await response.json());\n\n this.currentRefreshToken = data.refresh_token ?? null;\n\n return {\n accessToken: data.access_token,\n expiresAt: computeExpiresAt(data.expires_in),\n refreshToken: data.refresh_token,\n };\n }\n\n /**\n * Try to exchange the stored refresh token for a new access token. Returns the\n * token on success, `null` when the refresh token is definitively rejected\n * (a 4xx — caller should re-authenticate), and throws on transient failures.\n */\n private async tryRefresh(tokenEndpoint: string, refreshToken: string): Promise<TokenResult | null> {\n const response = await this.fetchFn(tokenEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n grant_type: 'refresh_token',\n client_id: this.clientId,\n refresh_token: refreshToken,\n }).toString(),\n });\n\n if (!response.ok) {\n // A 4xx means the refresh token is invalid/expired — re-authenticate.\n if (response.status >= 400 && response.status < 500) return null;\n // Transient (network/5xx) failures surface instead of forcing a re-prompt.\n const body = await response.text().catch(() => '');\n throw new AuthenticationError(`Token refresh failed (${response.status}): ${body}`);\n }\n\n const data = parseTokenResponse(await response.json());\n\n if (data.refresh_token) {\n this.currentRefreshToken = data.refresh_token;\n }\n\n return {\n accessToken: data.access_token,\n expiresAt: computeExpiresAt(data.expires_in),\n refreshToken: data.refresh_token ?? this.currentRefreshToken ?? undefined,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// OAuth2 Refresh Token Provider (IDP)\n// ---------------------------------------------------------------------------\n\n/**\n * Authenticates using an IDP refresh token. Exchanges the refresh token for\n * a short-lived access token via the IDP's token endpoint (discovered via\n * OIDC). Handles refresh-token rotation automatically — if the IDP issues\n * a new refresh token, it is stored internally for subsequent refreshes.\n *\n * This provider is typically used when a user has previously logged in\n * (e.g. via the CLI) and you have a stored refresh token.\n */\nexport class OAuth2RefreshTokenProvider implements CredentialProvider {\n readonly type = 'oauth2-refresh-token';\n private currentRefreshToken: string;\n\n constructor(\n private readonly clientId: string,\n refreshToken: string,\n private readonly issuerUrl: string,\n private readonly fetchFn: typeof globalThis.fetch\n ) {\n this.currentRefreshToken = refreshToken;\n }\n\n async getToken(): Promise<TokenResult> {\n const oidc = await discoverOidc(this.issuerUrl, this.fetchFn);\n\n if (!oidc.token_endpoint) {\n throw new AuthenticationError('OIDC discovery returned no token endpoint');\n }\n\n const response = await this.fetchFn(oidc.token_endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n grant_type: 'refresh_token',\n client_id: this.clientId,\n refresh_token: this.currentRefreshToken,\n }).toString(),\n });\n\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n if (response.status === 400) {\n throw new AuthenticationError('Refresh token is invalid or expired. Please re-authenticate.');\n }\n throw new AuthenticationError(`Token refresh failed (${response.status}): ${body}`);\n }\n\n const data = parseTokenResponse(await response.json());\n\n // Handle refresh token rotation\n if (data.refresh_token) {\n this.currentRefreshToken = data.refresh_token;\n }\n\n return {\n accessToken: data.access_token,\n expiresAt: computeExpiresAt(data.expires_in),\n refreshToken: data.refresh_token ?? this.currentRefreshToken,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Bearer Token Provider (static)\n// ---------------------------------------------------------------------------\n\n/**\n * Uses a static, pre-obtained bearer token. The token is never refreshed —\n * if it expires, API requests will fail with an {@link AuthenticationError}.\n *\n * This is the simplest provider and is used when the caller already has a\n * valid access token (e.g. from an external auth flow or a long-lived token).\n */\nexport class BearerTokenProvider implements CredentialProvider {\n readonly type = 'bearer';\n\n constructor(private readonly token: string) {}\n\n getToken(): Promise<TokenResult> {\n return Promise.resolve({ accessToken: this.token, expiresAt: null });\n }\n}\n\n// ---------------------------------------------------------------------------\n// Credential resolution\n// ---------------------------------------------------------------------------\n\nexport interface CredentialResolverConfig {\n clientId?: string;\n clientSecret?: string;\n bearerToken?: string;\n refreshToken?: string;\n idpIssuerUrl?: string;\n onAuthorizationUrl?: (url: string) => Promise<string>;\n redirectUri?: string;\n baseUrl?: string;\n fetch?: typeof globalThis.fetch;\n /** OAuth scopes to request in the authorization-code flow (in addition to identity scopes). */\n scopes?: string[];\n}\n\nconst DEFAULT_IDP_ISSUER_URL = 'https://idp.gigadrive.de';\nconst DEFAULT_BASE_URL = 'https://api.gigadrive.network';\n\n/**\n * Resolves a `CredentialProvider` from explicit config or environment variables.\n *\n * Resolution order:\n * 1. Explicit `bearerToken` → BearerTokenProvider\n * 2. Explicit `clientId` + `clientSecret` → OAuth2ClientCredentialProvider\n * 3. Explicit `refreshToken` + `clientId` → OAuth2RefreshTokenProvider\n * 4. Explicit `onAuthorizationUrl` + `clientId` → OAuth2AuthorizationCodeProvider\n * 5. `GIGADRIVE_BEARER_TOKEN` env var → BearerTokenProvider\n * 6. `GIGADRIVE_CLIENT_ID` + `GIGADRIVE_CLIENT_SECRET` → OAuth2ClientCredentialProvider\n * 7. `GIGADRIVE_REFRESH_TOKEN` + `GIGADRIVE_CLIENT_ID` → OAuth2RefreshTokenProvider\n * 8. Throws AuthenticationError\n */\nexport const resolveCredentialProvider = (config: CredentialResolverConfig): CredentialProvider => {\n // Bind the default fetch to globalThis so calling it as `this.fetchFn(...)`\n // does not throw \"Illegal invocation\" in runtimes that require a bound receiver.\n const fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis);\n const baseUrl = config.baseUrl ?? readEnv('GIGADRIVE_API_BASE_URL') ?? DEFAULT_BASE_URL;\n const idpIssuerUrl = config.idpIssuerUrl ?? readEnv('GIGADRIVE_IDP_ISSUER_URL') ?? DEFAULT_IDP_ISSUER_URL;\n const tokenUrl = `${baseUrl}/oauth2/token`;\n\n // 1. Explicit bearer token\n if (config.bearerToken) {\n return new BearerTokenProvider(config.bearerToken);\n }\n\n // 2. Explicit client credentials\n if (config.clientId && config.clientSecret) {\n return new OAuth2ClientCredentialProvider(config.clientId, config.clientSecret, tokenUrl, fetchFn);\n }\n\n // 3. Explicit refresh token\n if (config.refreshToken && config.clientId) {\n return new OAuth2RefreshTokenProvider(config.clientId, config.refreshToken, idpIssuerUrl, fetchFn);\n }\n\n // 4. Explicit authorization code callback\n if (config.onAuthorizationUrl && config.clientId) {\n const redirectUri = config.redirectUri ?? 'urn:ietf:wg:oauth:2.0:oob';\n const scope = config.scopes && config.scopes.length > 0 ? config.scopes.join(' ') : DEFAULT_SCOPE;\n return new OAuth2AuthorizationCodeProvider(\n config.clientId,\n idpIssuerUrl,\n redirectUri,\n config.onAuthorizationUrl,\n fetchFn,\n scope\n );\n }\n\n // 5. GIGADRIVE_BEARER_TOKEN env var\n const envBearerToken = readEnv('GIGADRIVE_BEARER_TOKEN');\n if (envBearerToken) {\n return new BearerTokenProvider(envBearerToken);\n }\n\n // 6. GIGADRIVE_CLIENT_ID + GIGADRIVE_CLIENT_SECRET env vars\n const envClientId = readEnv('GIGADRIVE_CLIENT_ID');\n const envClientSecret = readEnv('GIGADRIVE_CLIENT_SECRET');\n if (envClientId && envClientSecret) {\n return new OAuth2ClientCredentialProvider(envClientId, envClientSecret, tokenUrl, fetchFn);\n }\n\n // 7. GIGADRIVE_REFRESH_TOKEN + GIGADRIVE_CLIENT_ID env vars\n const envRefreshToken = readEnv('GIGADRIVE_REFRESH_TOKEN');\n if (envRefreshToken && envClientId) {\n return new OAuth2RefreshTokenProvider(envClientId, envRefreshToken, idpIssuerUrl, fetchFn);\n }\n\n // 8. No credentials found\n throw new AuthenticationError(\n 'No credentials provided. Set one of:\\n' +\n ' - GIGADRIVE_BEARER_TOKEN\\n' +\n ' - GIGADRIVE_CLIENT_ID + GIGADRIVE_CLIENT_SECRET\\n' +\n ' - GIGADRIVE_REFRESH_TOKEN + GIGADRIVE_CLIENT_ID\\n' +\n 'Or pass credentials directly to the GigadriveClient constructor.'\n );\n};\n","import type { CredentialProvider } from './credential-provider';\n\n/**\n * Manages the access-token lifecycle: caching, automatic expiry detection,\n * proactive refresh, and concurrent-call deduplication.\n *\n * When multiple API requests fire simultaneously with an expired token, only\n * a single refresh call is made — all concurrent callers await the same\n * pending Promise. This prevents a \"thundering herd\" of token requests.\n *\n * @internal Used internally by {@link HttpClient}. Not part of the public API.\n */\nexport class TokenManager {\n private cachedToken: string | null = null;\n private expiresAt: number | null = null;\n private pendingRefresh: Promise<string> | null = null;\n\n constructor(private readonly provider: CredentialProvider) {}\n\n /**\n * Returns a valid access token. Uses the cached token if still valid,\n * otherwise fetches a new one from the credential provider.\n *\n * Concurrent calls are deduplicated — only one refresh runs at a time.\n */\n async getToken(): Promise<string> {\n if (this.cachedToken && (this.expiresAt === null || Date.now() < this.expiresAt)) {\n return this.cachedToken;\n }\n\n // Deduplicate concurrent refresh calls\n if (this.pendingRefresh) {\n return this.pendingRefresh;\n }\n\n this.pendingRefresh = this.refresh();\n\n try {\n return await this.pendingRefresh;\n } finally {\n this.pendingRefresh = null;\n }\n }\n\n /**\n * Invalidates the cached token. The next `getToken()` call will trigger a refresh.\n */\n invalidate(): void {\n this.cachedToken = null;\n this.expiresAt = null;\n }\n\n private async refresh(): Promise<string> {\n const result = await this.provider.getToken();\n this.cachedToken = result.accessToken;\n this.expiresAt = result.expiresAt;\n return result.accessToken;\n }\n}\n","import type { TokenManager } from './auth/token-manager';\nimport { ApiError, AuthenticationError } from './errors';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * A paginated API response. List endpoints return this shape.\n *\n * @typeParam T - The type of each item in the list.\n */\nexport interface Paginated<T> {\n /** The items on the current page. */\n items: T[];\n /** The total number of items across all pages. */\n total: number;\n /** An opaque cursor for the next page, present on cursor-paginated endpoints when more items remain. */\n nextCursor?: string;\n}\n\n/** A value that can be serialized into a query-string parameter. `undefined` values are omitted. */\nexport type QueryValue = string | number | boolean | undefined;\n\n/** Common pagination query parameters accepted by list endpoints. */\nexport interface ListQuery {\n /** 1-indexed page number (for page/`perPage`-style pagination). */\n page?: number;\n /** Maximum number of items per page. */\n perPage?: number;\n /** Opaque cursor for cursor-based pagination (from a previous response's `nextCursor`). */\n cursor?: string;\n}\n\n/** @internal */\nexport interface RequestOptions {\n query?: Record<string, QueryValue>;\n body?: unknown;\n headers?: Record<string, string>;\n /** Abort signal to cancel the request (and any 401-refresh retry). */\n signal?: AbortSignal;\n}\n\nconst isRawBody = (body: unknown): boolean =>\n typeof body === 'string' ||\n body instanceof ArrayBuffer ||\n (typeof Uint8Array !== 'undefined' && body instanceof Uint8Array) ||\n (typeof Blob !== 'undefined' && body instanceof Blob) ||\n (typeof FormData !== 'undefined' && body instanceof FormData) ||\n (typeof ReadableStream !== 'undefined' && body instanceof ReadableStream);\n\nconst hasHeader = (headers: Record<string, string>, name: string): boolean =>\n Object.keys(headers).some((key) => key.toLowerCase() === name.toLowerCase());\n\n// ---------------------------------------------------------------------------\n// HTTP Client\n// ---------------------------------------------------------------------------\n\n/**\n * Low-level HTTP client used internally by all resource classes. Handles\n * authentication header injection, JSON serialization, error mapping, and\n * automatic retry on 401 responses.\n *\n * You do not need to use this class directly — interact with the API through\n * the resource properties on {@link GigadriveClient} instead.\n *\n * @internal\n */\nexport class HttpClient {\n constructor(\n private readonly baseUrl: string,\n private readonly tokenManager: TokenManager,\n private readonly fetchFn: typeof globalThis.fetch\n ) {}\n\n /** @internal */\n async get<T>(path: string, options?: Pick<RequestOptions, 'query' | 'signal'>): Promise<T> {\n return this.request<T>('GET', path, options);\n }\n\n /** @internal */\n async post<T>(\n path: string,\n body?: unknown,\n options?: Pick<RequestOptions, 'headers' | 'query' | 'signal'>\n ): Promise<T> {\n return this.request<T>('POST', path, { body, ...options });\n }\n\n /** @internal */\n async put<T>(\n path: string,\n body?: unknown,\n options?: Pick<RequestOptions, 'headers' | 'query' | 'signal'>\n ): Promise<T> {\n return this.request<T>('PUT', path, { body, ...options });\n }\n\n /** @internal */\n async patch<T>(\n path: string,\n body?: unknown,\n options?: Pick<RequestOptions, 'headers' | 'query' | 'signal'>\n ): Promise<T> {\n return this.request<T>('PATCH', path, { body, ...options });\n }\n\n /** @internal */\n async delete<T>(path: string, options?: Pick<RequestOptions, 'query' | 'signal'>): Promise<T> {\n return this.request<T>('DELETE', path, options);\n }\n\n /** @internal */\n async postRaw<T>(\n path: string,\n body: string | ArrayBuffer | Uint8Array | ReadableStream | Blob | FormData,\n headers?: Record<string, string>\n ): Promise<T> {\n return this.request<T>('POST', path, { body, headers });\n }\n\n /**\n * Make an authenticated request and return the raw `Response` without parsing\n * the body. Used for streamed (SSE) and binary responses.\n *\n * @throws {@link ApiError} if the response status is not OK.\n * @internal\n */\n async requestStream(method: string, path: string, options?: RequestOptions): Promise<Response> {\n const response = await this.fetchWithAuth(method, path, options);\n if (!response.ok) {\n throw await this.toApiError(response);\n }\n return response;\n }\n\n /**\n * Make a raw fetch request to an arbitrary URL (e.g. presigned upload URLs\n * or resumable upload endpoints). No auth header is injected and the base URL\n * is not prepended.\n *\n * @param url - The full URL to fetch.\n * @param init - Standard `RequestInit` options.\n * @returns The raw `Response` object.\n * @throws {@link ApiError} if the response status is not OK.\n *\n * @internal\n */\n async fetchRaw(url: string, init: RequestInit): Promise<Response> {\n const response = await this.fetchFn(url, init);\n if (!response.ok) {\n throw new ApiError(response.statusText, response.status);\n }\n return response;\n }\n\n private async request<T>(method: string, path: string, options?: RequestOptions): Promise<T> {\n const response = await this.fetchWithAuth(method, path, options);\n return this.handleResponse<T>(response);\n }\n\n /** Perform the request with auth injection and a single 401 refresh-retry. */\n private async fetchWithAuth(method: string, path: string, options?: RequestOptions): Promise<Response> {\n const url = this.buildUrl(path, options?.query);\n const token = await this.tokenManager.getToken();\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n ...options?.headers,\n };\n\n let requestBody: RequestInit['body'] = null;\n if (options?.body !== undefined) {\n if (isRawBody(options.body)) {\n // Raw bodies (FormData/Blob/bytes/streams) set their own Content-Type.\n requestBody = options.body as RequestInit['body'];\n } else {\n requestBody = JSON.stringify(options.body);\n if (!hasHeader(headers, 'Content-Type')) {\n headers['Content-Type'] = 'application/json';\n }\n }\n }\n\n const signal = options?.signal;\n const response = await this.fetchFn(url, { method, headers, body: requestBody, signal });\n\n // A streamed body is consumed by the first fetch and cannot be replayed, so\n // we cannot transparently retry it after a token refresh.\n const bodyIsOneShot = typeof ReadableStream !== 'undefined' && requestBody instanceof ReadableStream;\n\n // Retry once on 401 after refreshing the token.\n if (response.status === 401 && !bodyIsOneShot) {\n this.tokenManager.invalidate();\n const retryToken = await this.tokenManager.getToken();\n headers.Authorization = `Bearer ${retryToken}`;\n\n const retryResponse = await this.fetchFn(url, { method, headers, body: requestBody, signal });\n if (retryResponse.status === 401) {\n throw new AuthenticationError('Authentication failed after token refresh');\n }\n return retryResponse;\n }\n\n return response;\n }\n\n private async handleResponse<T>(response: Response): Promise<T> {\n if (response.ok) {\n // Handle empty responses (204 No Content, or responses with no body)\n if (response.status === 204) {\n return undefined as T;\n }\n\n const text = await response.text();\n if (!text) {\n return undefined as T;\n }\n\n return JSON.parse(text) as T;\n }\n\n throw await this.toApiError(response);\n }\n\n private async toApiError(response: Response): Promise<ApiError> {\n let message: string;\n let code: string | undefined;\n\n try {\n const body = (await response.json()) as { error?: string | { message?: string; code?: string } };\n if (typeof body.error === 'string') {\n message = body.error;\n } else if (body.error && typeof body.error === 'object') {\n message = body.error.message ?? response.statusText;\n code = body.error.code;\n } else {\n message = response.statusText;\n }\n } catch {\n message = response.statusText;\n }\n\n return new ApiError(message, response.status, code);\n }\n\n private buildUrl(path: string, query?: Record<string, QueryValue>): string {\n const url = `${this.baseUrl}${path}`;\n\n if (!query) return url;\n\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined) {\n params.set(key, String(value));\n }\n }\n\n const qs = params.toString();\n return qs ? `${url}?${qs}` : url;\n }\n}\n","/**\n * Server-Sent Events (SSE) parsing for streamed API responses (e.g. streamed\n * chat completions). Works in browsers and Node.js 18+ where `Response.body` is\n * a web `ReadableStream`.\n *\n * @internal\n */\n\n/** Extract and concatenate the `data:` payload(s) from a single SSE event block. */\nconst extractData = (rawEvent: string): string | null => {\n const dataLines = rawEvent\n .split('\\n')\n .filter((line) => line.startsWith('data:'))\n .map((line) => line.slice('data:'.length).replace(/^ /, ''));\n if (dataLines.length === 0) return null;\n const joined = dataLines.join('\\n');\n // Treat whitespace-only events (e.g. keep-alive comments or a truncated final\n // \"data:\" line) as \"no data\" so we never call JSON.parse on an empty string.\n return joined.trim().length === 0 ? null : joined;\n};\n\nconst parseEvent = <T>(data: string): T => {\n try {\n return JSON.parse(data) as T;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to parse streamed SSE data as JSON: ${message}`);\n }\n};\n\n/**\n * Parse an SSE stream, yielding each event's `data` payload parsed as JSON.\n * The `[DONE]` sentinel and empty keep-alive events are skipped; iteration ends\n * when the underlying stream closes.\n *\n * @typeParam T - The shape of each streamed JSON chunk.\n * @param response - A streaming `fetch` response.\n */\nexport async function* parseSSEStream<T = unknown>(response: Response): AsyncGenerator<T> {\n const body = response.body as ReadableStream<Uint8Array> | null;\n if (!body) {\n throw new Error('The response has no readable body to stream.');\n }\n\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n const drain = function* (flush: boolean): Generator<T> {\n // SSE events are separated by a blank line; CRLF is normalised on read.\n let separator = buffer.indexOf('\\n\\n');\n while (separator !== -1) {\n const rawEvent = buffer.slice(0, separator);\n buffer = buffer.slice(separator + 2);\n const data = extractData(rawEvent);\n if (data !== null && data !== '[DONE]') {\n yield parseEvent<T>(data);\n }\n separator = buffer.indexOf('\\n\\n');\n }\n if (flush) {\n const data = extractData(buffer);\n buffer = '';\n if (data !== null && data !== '[DONE]') {\n yield parseEvent<T>(data);\n }\n }\n };\n\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n // Normalise CRLF on the whole buffer so a separator split across two reads\n // (a trailing \"\\r\" then a leading \"\\n\") is still collapsed correctly.\n buffer = (buffer + decoder.decode(value, { stream: true })).replace(/\\r\\n/g, '\\n');\n yield* drain(false);\n }\n yield* drain(true);\n } finally {\n // Cancel (not just release the lock) so breaking out of the consumer's\n // `for await` early stops the underlying HTTP body instead of leaking it.\n await reader.cancel().catch(() => undefined);\n }\n}\n","import type { HttpClient } from '../http-client';\n\n/**\n * Base class for all API resource classes. Provides access to the shared\n * HTTP client for making authenticated API requests.\n *\n * @internal\n */\nexport class BaseResource {\n constructor(protected readonly httpClient: HttpClient) {}\n}\n","import type { HttpClient, Paginated } from '../../http-client';\nimport { parseSSEStream } from '../../streaming';\nimport { BaseResource } from '../base-resource';\nimport type {\n AiModel,\n ChatCompletionChunk,\n ChatCompletionRequest,\n ChatCompletionResponse,\n GatewayRequestOptions,\n GatewayResult,\n ResponsesRequest,\n ResponsesResponse,\n SpeechRequest,\n TranscriptionRequest,\n TranscriptionResponse,\n VideoGenerationRequest,\n VideoGenerationResponse,\n VideoModelList,\n} from './types';\n\nexport type * from './types';\n\nconst BASE = '/ai/v1';\n\nconst toBlob = (file: Blob | Uint8Array | ArrayBuffer): Blob => {\n if (file instanceof Uint8Array) return new Blob([file]);\n if (typeof Blob !== 'undefined' && file instanceof Blob) return file;\n return new Blob([new Uint8Array(file as ArrayBuffer)]);\n};\n\n/** Text-to-speech and speech-to-text endpoints. */\nexport class AiGatewayAudioResource extends BaseResource {\n /**\n * Synthesize speech from text. Returns the raw audio bytes.\n *\n * @returns The audio content as an `ArrayBuffer` (format per `response_format`).\n */\n async speech(data: SpeechRequest, options?: GatewayRequestOptions): Promise<ArrayBuffer> {\n const response = await this.httpClient.requestStream('POST', `${BASE}/audio/speech`, {\n body: data,\n headers: options?.headers,\n });\n return response.arrayBuffer();\n }\n\n /**\n * Transcribe an audio file to text. The file is sent as multipart form data.\n */\n async transcriptions(data: TranscriptionRequest, options?: GatewayRequestOptions): Promise<TranscriptionResponse> {\n const form = new FormData();\n const { file, filename, ...rest } = data;\n form.set('file', toBlob(file), filename ?? 'audio');\n for (const [key, value] of Object.entries(rest)) {\n if (value === undefined || value === null) continue;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- narrows to primitive so no-base-to-string is satisfied\n form.set(key, typeof value === 'object' ? JSON.stringify(value) : String(value as string | number | boolean));\n }\n return this.httpClient.postRaw(`${BASE}/audio/transcriptions`, form, options?.headers);\n }\n}\n\n/** Video generation endpoints. */\nexport class AiGatewayVideosResource extends BaseResource {\n /** Generate a video from a prompt. */\n async generations(data: VideoGenerationRequest, options?: GatewayRequestOptions): Promise<VideoGenerationResponse> {\n return this.httpClient.post(`${BASE}/videos`, data, { headers: options?.headers });\n }\n\n /** List the video models available through the gateway. */\n async listModels(): Promise<VideoModelList> {\n return this.httpClient.get(`${BASE}/videos/models`);\n }\n}\n\n/**\n * Interact with the Gigadrive AI Gateway — an OpenAI-compatible API that routes\n * requests to multiple AI providers. Accessed via {@link GigadriveClient.aiGateway}.\n *\n * @example\n * ```ts\n * // Chat completion\n * const res = await client.aiGateway.chatCompletions({\n * model: 'openai/gpt-4o',\n * messages: [{ role: 'user', content: 'Hello!' }],\n * });\n * console.log(res.choices[0].message.content);\n *\n * // Streamed chat completion\n * for await (const chunk of client.aiGateway.chatCompletionsStream({\n * model: 'openai/gpt-4o',\n * messages: [{ role: 'user', content: 'Write a haiku.' }],\n * })) {\n * process.stdout.write(chunk.choices[0]?.delta.content ?? '');\n * }\n * ```\n */\nexport class AiGatewayResource extends BaseResource {\n /** Text-to-speech and speech-to-text. */\n readonly audio: AiGatewayAudioResource;\n /** Video generation. */\n readonly videos: AiGatewayVideosResource;\n\n constructor(httpClient: HttpClient) {\n super(httpClient);\n this.audio = new AiGatewayAudioResource(httpClient);\n this.videos = new AiGatewayVideosResource(httpClient);\n }\n\n /**\n * Create a chat completion using the OpenAI-compatible endpoint.\n *\n * @param data - The chat completion request (model, messages, options, provider routing).\n * @param options - Custom headers (e.g. `X-Gigadrive-Application-Id`).\n */\n async chatCompletions(data: ChatCompletionRequest, options?: GatewayRequestOptions): Promise<ChatCompletionResponse> {\n return this.httpClient.post(`${BASE}/chat/completions`, { ...data, stream: false }, { headers: options?.headers });\n }\n\n /**\n * Like {@link chatCompletions}, but also returns the raw response and the\n * gateway request-id / cost headers.\n */\n async chatCompletionsWithResponse(\n data: ChatCompletionRequest,\n options?: GatewayRequestOptions\n ): Promise<GatewayResult<ChatCompletionResponse>> {\n const response = await this.httpClient.requestStream('POST', `${BASE}/chat/completions`, {\n body: { ...data, stream: false },\n headers: options?.headers,\n });\n const body = (await response.json()) as ChatCompletionResponse;\n const cost = response.headers.get('X-Gigadrive-Cost-Micros');\n const costMicros = cost !== null ? Number(cost) : NaN;\n return {\n data: body,\n response,\n requestId: response.headers.get('X-Gigadrive-Request-Id') ?? undefined,\n costMicros: Number.isFinite(costMicros) ? costMicros : undefined,\n };\n }\n\n /**\n * Stream a chat completion as Server-Sent Events. Yields each chunk as it\n * arrives and ends when the gateway closes the stream.\n */\n async *chatCompletionsStream(\n data: ChatCompletionRequest,\n options?: GatewayRequestOptions\n ): AsyncGenerator<ChatCompletionChunk> {\n const response = await this.httpClient.requestStream('POST', `${BASE}/chat/completions`, {\n body: { ...data, stream: true },\n headers: options?.headers,\n });\n yield* parseSSEStream<ChatCompletionChunk>(response);\n }\n\n /**\n * Create a response using the Open Responses-compatible endpoint.\n */\n async responses(data: ResponsesRequest, options?: GatewayRequestOptions): Promise<ResponsesResponse> {\n return this.httpClient.post(`${BASE}/responses`, { ...data, stream: false }, { headers: options?.headers });\n }\n\n /**\n * Stream a response using the Open Responses-compatible endpoint.\n */\n async *responsesStream(data: ResponsesRequest, options?: GatewayRequestOptions): AsyncGenerator<unknown> {\n const response = await this.httpClient.requestStream('POST', `${BASE}/responses`, {\n body: { ...data, stream: true },\n headers: options?.headers,\n });\n yield* parseSSEStream(response);\n }\n\n /**\n * List all AI models available through the gateway.\n */\n async listModels(): Promise<Paginated<AiModel>> {\n return this.httpClient.get(`${BASE}/models`);\n }\n\n /**\n * Get details for a specific AI model by its ID.\n *\n * @param modelId - The model identifier (e.g. `\"openai/gpt-4o\"`).\n */\n async getModel(modelId: string): Promise<AiModel> {\n return this.httpClient.get(`${BASE}/models/${encodeURIComponent(modelId)}`);\n }\n}\n","import type { Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\n\n/** An application-scoped API key. The secret is never returned after creation. */\nexport interface ApiKey {\n /** Unique identifier (UUID). Used as the OAuth client ID. */\n id: string;\n /** Human-readable label. */\n name: string;\n /** Application this key is scoped to. */\n applicationId: string | null;\n /** API capability scopes granted to the key. */\n scopes: string[];\n /** ISO 8601 expiry, or `null` if the key never expires. */\n expiresAt: string | null;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/** Input for creating an application-scoped API key. */\nexport interface CreateApiKeyInput {\n /** Human-readable label for the key. */\n name: string;\n /** Application to scope the key to. The key can only act on this application. */\n applicationId: string;\n /**\n * API capability scopes to grant. Each must be a subset of your own access and\n * cannot include API key management. Defaults to a minimal read-only set.\n */\n scopes?: string[];\n /** Optional ISO 8601 expiry. Defaults to 90 days when omitted. */\n expiresAt?: string;\n}\n\n/**\n * The result of creating an API key. Includes the plaintext {@link secret},\n * which is returned only once and cannot be retrieved again.\n */\nexport interface CreateApiKeyResult extends ApiKey {\n /** The plaintext client secret. Store it now — it cannot be retrieved again. */\n secret: string;\n}\n\n/** Query for {@link ApiKeysResource.list}. */\nexport interface ListApiKeysQuery {\n /** Application whose keys should be listed. */\n applicationId: string;\n}\n\n/**\n * Manage application-scoped API keys. Accessed via {@link GigadriveClient.apiKeys}.\n *\n * @example\n * ```ts\n * const key = await client.apiKeys.create({ name: 'ci', applicationId: 'app-id' });\n * // Use key.id + key.secret as OAuth client credentials. Store the secret now.\n * ```\n */\nexport class ApiKeysResource extends BaseResource {\n /**\n * Provision a new application-scoped API key. The plaintext secret is returned\n * exactly once — store it immediately.\n *\n * @param data - The key name, target application, and optional scopes/expiry.\n * @returns The created key including its one-time plaintext secret.\n */\n async create(data: CreateApiKeyInput): Promise<CreateApiKeyResult> {\n return this.httpClient.post('/api-keys', data);\n }\n\n /**\n * List the API keys scoped to an application. Secrets are never returned.\n *\n * @param query - The application whose keys should be listed.\n * @returns A paginated list of API key metadata.\n */\n async list(query: ListApiKeysQuery): Promise<Paginated<ApiKey>> {\n return this.httpClient.get('/api-keys', {\n query: query as unknown as Record<string, string | number | undefined>,\n });\n }\n\n /**\n * Permanently revoke an API key.\n *\n * @param apiKeyId - The API key ID (UUID).\n */\n async delete(apiKeyId: string): Promise<void> {\n return this.httpClient.delete(`/api-keys/${apiKeyId}`);\n }\n}\n","import type { ListQuery, Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\nimport type { CreateEnvVarInput, EnvVar, PullEnvVarsQuery, PullEnvVarsResult, UpdateEnvVarInput } from './env-vars';\n\n/**\n * Manage environment variables scoped to an application.\n * Accessed via `client.applications.envVars`.\n */\nexport class ApplicationEnvVarsResource extends BaseResource {\n /**\n * List all environment variables for an application.\n *\n * @param applicationId - The application ID (UUID).\n * @returns A paginated list of environment variables.\n *\n * @example\n * ```ts\n * const { items } = await client.applications.envVars.list('app-id');\n * for (const v of items) {\n * console.log(`${v.key}=${v.sensitive ? '***' : v.value}`);\n * }\n * ```\n */\n async list(applicationId: string, query?: ListQuery): Promise<Paginated<EnvVar>> {\n return this.httpClient.get(`/applications/${applicationId}/env-vars`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * Pull the environment variables that apply to an application for local\n * development. Merges organization-wide, application-wide, and (optionally)\n * environment-specific overrides, returning only non-sensitive values — ready\n * to write to a local `.env` file.\n *\n * @param applicationId - The application ID (UUID).\n * @param query - Optional environment targeting.\n * @returns The resolved non-sensitive variables plus the count of omitted secrets.\n *\n * @example\n * ```ts\n * const { items } = await client.applications.envVars.pull('app-id');\n * const dotenv = items.map((v) => `${v.key}=${v.value}`).join('\\n');\n * ```\n */\n async pull(applicationId: string, query?: PullEnvVarsQuery): Promise<PullEnvVarsResult> {\n return this.httpClient.get(`/applications/${applicationId}/env-vars/pull`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * Create a new environment variable for an application.\n *\n * @param applicationId - The application ID (UUID).\n * @param data - The variable key, value, and optional settings.\n * @returns The newly created environment variable.\n *\n * @example\n * ```ts\n * const envVar = await client.applications.envVars.create('app-id', {\n * key: 'DATABASE_URL',\n * value: 'postgres://...',\n * sensitive: true,\n * });\n * ```\n */\n async create(applicationId: string, data: CreateEnvVarInput): Promise<EnvVar> {\n return this.httpClient.post(`/applications/${applicationId}/env-vars`, data);\n }\n\n /**\n * Update an existing environment variable. Only the fields you provide\n * will be changed; omitted fields are left unchanged.\n *\n * @param applicationId - The application ID (UUID).\n * @param envVarId - The environment variable ID (UUID).\n * @param data - The fields to update.\n * @returns The updated environment variable.\n *\n * @example\n * ```ts\n * await client.applications.envVars.update('app-id', 'var-id', {\n * value: 'postgres://new-host/db',\n * });\n * ```\n */\n async update(applicationId: string, envVarId: string, data: UpdateEnvVarInput): Promise<EnvVar> {\n return this.httpClient.patch(`/applications/${applicationId}/env-vars/${envVarId}`, data);\n }\n\n /**\n * Permanently delete an environment variable.\n *\n * @param applicationId - The application ID (UUID).\n * @param envVarId - The environment variable ID (UUID).\n *\n * @example\n * ```ts\n * await client.applications.envVars.delete('app-id', 'var-id');\n * ```\n */\n async delete(applicationId: string, envVarId: string): Promise<void> {\n return this.httpClient.delete(`/applications/${applicationId}/env-vars/${envVarId}`);\n }\n}\n","import type { Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\n\n/** A nested reference to the application that served a request. */\nexport interface NetworkRequestApplicationRef {\n id: string;\n name: string;\n}\n\n/** A nested reference to the deployment that served a request. */\nexport interface NetworkRequestDeploymentRef {\n id: string;\n status: string;\n}\n\n/** A nested reference to the function route that handled a request. */\nexport interface NetworkRequestFunctionRef {\n id: string;\n name: string | null;\n path: string;\n region: string | null;\n}\n\n/** A nested reference to the static asset that served a request. */\nexport interface NetworkRequestAssetRef {\n id: string;\n path: string;\n objectKey: string;\n}\n\n/** A nested reference to the storage bucket involved in a request. */\nexport interface NetworkRequestBucketRef {\n id: string;\n name: string;\n slug: string;\n}\n\n/** A nested reference to the storage object involved in a request. */\nexport interface NetworkRequestObjectRef {\n id: string;\n key: string;\n contentType: string | null;\n}\n\n/** The HTTP request details captured for a network request. */\nexport interface NetworkRequestDetails {\n method: string;\n hostname: string;\n path: string;\n query: string | null;\n protocol: string | null;\n country: string | null;\n userAgent: string | null;\n referer: string | null;\n}\n\n/** The HTTP response details captured for a network request. */\nexport interface NetworkResponseDetails {\n status: number | null;\n cacheStatus: 'hit' | 'miss' | 'bypass' | 'revalidated' | 'stale' | 'updating' | null;\n cacheHit: boolean | null;\n region: string | null;\n edgeLocation: string | null;\n}\n\n/** Byte and timing metrics for a network request. */\nexport interface NetworkRequestMetrics {\n requestBodyBytes: number | null;\n responseBodyBytes: number | null;\n bytesSent: number | null;\n durationMs: number | null;\n}\n\n/** A single observed request served through the Gigadrive Network edge (summary form). */\nexport interface NetworkRequestSummary {\n id: string;\n application: NetworkRequestApplicationRef;\n deployment: NetworkRequestDeploymentRef | null;\n deploymentFunction: NetworkRequestFunctionRef | null;\n deploymentAsset: NetworkRequestAssetRef | null;\n storageBucket: NetworkRequestBucketRef | null;\n storageObject: NetworkRequestObjectRef | null;\n request: NetworkRequestDetails;\n response: NetworkResponseDetails;\n metrics: NetworkRequestMetrics;\n startedAt: string;\n completedAt: string | null;\n}\n\n/** A full network request record, including sanitized request/response headers. */\nexport interface NetworkRequest extends NetworkRequestSummary {\n /** Sanitized request headers captured for debugging. */\n requestHeaders: Record<string, string>;\n /** Sanitized response headers captured for debugging. */\n responseHeaders: Record<string, string>;\n}\n\n/** Query filters for listing application requests. All fields are optional. */\nexport interface ListRequestsQuery {\n /** Filter to requests served by one deployment. */\n deploymentId?: string;\n /** Filter to requests served by one function route. */\n deploymentFunctionId?: string;\n /** Filter to requests served by one static asset route. */\n deploymentAssetId?: string;\n /** Filter to storage delivery requests for one bucket. */\n storageBucketId?: string;\n /** Filter to storage delivery requests for one object. */\n storageObjectId?: string;\n /** Only include requests that started at or after this ISO 8601 timestamp. */\n from?: string;\n /** Only include requests that started before or at this ISO 8601 timestamp. */\n to?: string;\n /** Maximum number of records to return. */\n limit?: number;\n /** Opaque cursor from a previous response's `nextCursor`. */\n cursor?: string;\n /** Filter by HTTP method (e.g. `\"GET\"`). */\n method?: string;\n /** Filter by exact HTTP status code. */\n status?: number;\n /** Filter by status family (`2`, `3`, `4`, or `5`). */\n statusFamily?: number;\n /** Filter by request hostname. */\n hostname?: string;\n /** Filter to requests whose path starts with this prefix. */\n pathPrefix?: string;\n /** Filter by ISO 3166-1 alpha-2 country code. */\n country?: string;\n /** Filter by origin region. */\n region?: string;\n /** Filter by edge location. */\n edgeLocation?: string;\n /** Filter by CDN cache state. */\n cacheStatus?: string;\n /** Filter by whether the response was served from cache. */\n cacheHit?: boolean;\n}\n\n/**\n * Read observed traffic (request logs) for an application. Accessed via\n * `client.applications.requests`.\n *\n * @example\n * ```ts\n * // Recent 5xx responses for a deployment\n * const { items } = await client.applications.requests.list('app-id', {\n * deploymentId: 'dep-id',\n * statusFamily: 5,\n * limit: 100,\n * });\n * ```\n */\nexport class ApplicationRequestsResource extends BaseResource {\n /**\n * List requests for an application, with rich filtering and cursor pagination.\n *\n * @param applicationId - The application ID (UUID).\n * @param query - Optional filters and pagination.\n * @returns A page of request summaries.\n */\n async list(applicationId: string, query?: ListRequestsQuery): Promise<Paginated<NetworkRequestSummary>> {\n return this.httpClient.get(`/applications/${applicationId}/requests`, {\n query: query as Record<string, string | number | boolean | undefined> | undefined,\n });\n }\n\n /**\n * Get a single request by ID, including sanitized request/response headers.\n *\n * @param applicationId - The application ID (UUID).\n * @param requestId - The request record ID (UUID).\n * @returns The full request record.\n */\n async get(applicationId: string, requestId: string): Promise<NetworkRequest> {\n return this.httpClient.get(`/applications/${applicationId}/requests/${requestId}`);\n }\n}\n","/**\n * Checksum helpers used to satisfy the storage upload contract, which requires\n * a SHA-256 of the object content (SHA-1 and MD5 are optional integrity hints).\n *\n * SHA-256 and SHA-1 are computed with the Web Crypto API (`crypto.subtle`),\n * which is available in modern browsers and Node.js 18+. MD5 is not provided by\n * Web Crypto, so it is computed with Node's `crypto` module and is therefore\n * Node-only — pass `checksumMd5` explicitly if you need it in the browser.\n *\n * @internal\n */\n\n/** A set of computed content checksums (lowercase hex). */\nexport interface Checksums {\n /** SHA-256 checksum. Always computed. */\n sha256: string;\n /** SHA-1 checksum, when requested. */\n sha1?: string;\n /** MD5 checksum, when requested (Node.js only). */\n md5?: string;\n}\n\n/** Which optional checksums to compute alongside the always-required SHA-256. */\nexport interface ChecksumRequest {\n /** Also compute a SHA-1 checksum. */\n sha1?: boolean;\n /** Also compute an MD5 checksum (Node.js only). */\n md5?: boolean;\n}\n\nconst toHex = (buffer: ArrayBuffer): string => {\n const bytes = new Uint8Array(buffer);\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += bytes[i].toString(16).padStart(2, '0');\n }\n return hex;\n};\n\nconst subtleDigest = async (algorithm: 'SHA-256' | 'SHA-1', bytes: Uint8Array): Promise<string> =>\n toHex(await crypto.subtle.digest(algorithm, bytes));\n\nconst importNodeCrypto = async (): Promise<typeof import('node:crypto') | null> => {\n if (typeof process === 'undefined' || !process.versions?.node) return null;\n try {\n return await import('node:crypto');\n } catch {\n return null;\n }\n};\n\nconst md5Hex = async (bytes: Uint8Array): Promise<string> => {\n const nodeCrypto = await importNodeCrypto();\n if (!nodeCrypto) {\n throw new Error('MD5 checksums are only supported in Node.js. Provide checksumMd5 explicitly in the browser.');\n }\n return nodeCrypto.createHash('md5').update(bytes).digest('hex');\n};\n\n/**\n * Compute checksums for an in-memory byte buffer.\n *\n * @param bytes - The content bytes.\n * @param request - Which optional checksums to compute (SHA-256 is always computed).\n */\nexport const computeChecksums = async (bytes: Uint8Array, request: ChecksumRequest = {}): Promise<Checksums> => {\n const checksums: Checksums = { sha256: await subtleDigest('SHA-256', bytes) };\n if (request.sha1) checksums.sha1 = await subtleDigest('SHA-1', bytes);\n if (request.md5) checksums.md5 = await md5Hex(bytes);\n return checksums;\n};\n\n/**\n * Compute checksums for a file on disk by streaming it through Node's hashing\n * primitives — avoids loading the whole file into memory. Node.js only.\n *\n * @param path - Filesystem path to hash.\n * @param request - Which optional checksums to compute (SHA-256 is always computed).\n */\nexport const hashNodeFile = async (path: string, request: ChecksumRequest = {}): Promise<Checksums> => {\n const [fs, nodeCrypto] = await Promise.all([import('node:fs'), import('node:crypto')]);\n const sha256 = nodeCrypto.createHash('sha256');\n const sha1 = request.sha1 ? nodeCrypto.createHash('sha1') : null;\n const md5 = request.md5 ? nodeCrypto.createHash('md5') : null;\n\n await new Promise<void>((resolve, reject) => {\n const stream = fs.createReadStream(path);\n stream.on('data', (chunk) => {\n sha256.update(chunk);\n sha1?.update(chunk);\n md5?.update(chunk);\n });\n stream.on('end', () => resolve());\n stream.on('error', reject);\n });\n\n const checksums: Checksums = { sha256: sha256.digest('hex') };\n if (sha1) checksums.sha1 = sha1.digest('hex');\n if (md5) checksums.md5 = md5.digest('hex');\n return checksums;\n};\n","/**\n * Minimal filename → MIME type inference used to populate an upload's content\n * type when the caller does not provide one. Intentionally dependency-free and\n * covers the most common web/asset types; callers can always pass an explicit\n * `contentType` to override.\n *\n * @internal\n */\n\nconst MIME_TYPES: Record<string, string> = {\n // Text & code\n txt: 'text/plain',\n csv: 'text/csv',\n html: 'text/html',\n htm: 'text/html',\n css: 'text/css',\n js: 'text/javascript',\n mjs: 'text/javascript',\n json: 'application/json',\n xml: 'application/xml',\n md: 'text/markdown',\n // Images\n png: 'image/png',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n webp: 'image/webp',\n svg: 'image/svg+xml',\n avif: 'image/avif',\n ico: 'image/x-icon',\n bmp: 'image/bmp',\n tiff: 'image/tiff',\n heic: 'image/heic',\n // Audio\n mp3: 'audio/mpeg',\n wav: 'audio/wav',\n ogg: 'audio/ogg',\n oga: 'audio/ogg',\n flac: 'audio/flac',\n aac: 'audio/aac',\n m4a: 'audio/mp4',\n // Video\n mp4: 'video/mp4',\n webm: 'video/webm',\n mov: 'video/quicktime',\n avi: 'video/x-msvideo',\n mkv: 'video/x-matroska',\n // Documents\n pdf: 'application/pdf',\n doc: 'application/msword',\n docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n xls: 'application/vnd.ms-excel',\n xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n ppt: 'application/vnd.ms-powerpoint',\n pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n // Archives & binaries\n zip: 'application/zip',\n gz: 'application/gzip',\n tar: 'application/x-tar',\n br: 'application/x-brotli',\n wasm: 'application/wasm',\n // Fonts\n woff: 'font/woff',\n woff2: 'font/woff2',\n ttf: 'font/ttf',\n otf: 'font/otf',\n};\n\n/**\n * Infer a MIME type from a filename or object key by its extension.\n *\n * @param nameOrKey - A filename or object key (e.g. `\"images/photo.jpg\"`).\n * @returns The inferred MIME type, or `undefined` if the extension is unknown.\n */\nexport const inferContentType = (nameOrKey: string): string | undefined => {\n const lastDot = nameOrKey.lastIndexOf('.');\n if (lastDot === -1 || lastDot === nameOrKey.length - 1) return undefined;\n const ext = nameOrKey.slice(lastDot + 1).toLowerCase();\n return MIME_TYPES[ext];\n};\n","/**\n * Resolves the various accepted upload inputs (in-memory bytes, a Node.js file\n * path, or a Node.js readable stream) into the concrete values the upload flow\n * needs: the object tus-js-client consumes, the byte size, an inferred content\n * type, and the required checksums.\n *\n * @internal\n */\n\nimport { computeChecksums, hashNodeFile, type Checksums } from './checksum';\nimport { inferContentType } from './content-type';\n\n/** A minimal Node.js `Readable`-like shape (avoids depending on `node:stream` types). */\nexport interface NodeReadableLike {\n on(event: string, listener: (...args: unknown[]) => void): unknown;\n pipe?: unknown;\n read?: unknown;\n}\n\n/** In-memory data accepted by the upload helpers. `Buffer` is a `Uint8Array`. */\nexport type UploadData = Blob | ArrayBuffer | Uint8Array;\n\n/** The tus-js-client file input union. */\nexport type TusFile = File | Blob | Uint8Array | NodeReadableLike;\n\n/** Input describing what to upload and any pre-supplied metadata. */\nexport interface UploadSourceInput {\n /** The object key/path the upload targets — used to infer content type. */\n key: string;\n /** In-memory data (browser `File`/`Blob`, Node `Buffer`, `Uint8Array`, `ArrayBuffer`). */\n data?: UploadData;\n /** A filesystem path to stream from (Node.js only). */\n path?: string;\n /** A readable stream (Node.js only). Requires `contentLength` and `checksumSha256`. */\n stream?: NodeReadableLike;\n /** Explicit content type. Inferred from `key` when omitted. */\n contentType?: string;\n /** Explicit byte size. Required for `stream`; computed otherwise. */\n contentLength?: number;\n /** Pre-computed SHA-256 (skips hashing). Required for `stream`. */\n checksumSha256?: string;\n /** Pre-computed SHA-1. */\n checksumSha1?: string;\n /** Pre-computed MD5. */\n checksumMd5?: string;\n}\n\n/** The fully resolved upload source. */\nexport interface ResolvedUploadSource {\n /** The value handed to tus-js-client. */\n tusFile: TusFile;\n /** Total upload size in bytes. */\n size: number;\n /** Resolved content type, if known. */\n contentType?: string;\n /** Checksums (always includes SHA-256). */\n checksums: Checksums;\n /** Whether a finite chunk size is required (true for streamed/file-path inputs). */\n requiresFiniteChunkSize: boolean;\n}\n\nconst isNode = (): boolean => typeof process !== 'undefined' && !!process.versions?.node;\n\nconst toBytes = async (data: UploadData): Promise<Uint8Array> => {\n if (typeof Blob !== 'undefined' && data instanceof Blob) return new Uint8Array(await data.arrayBuffer());\n if (data instanceof Uint8Array) return data;\n if (data instanceof ArrayBuffer) return new Uint8Array(data);\n throw new Error('Unsupported upload data type. Pass a File, Blob, Buffer, Uint8Array, or ArrayBuffer.');\n};\n\nconst sizeOf = (data: UploadData): number => {\n if (typeof Blob !== 'undefined' && data instanceof Blob) return data.size;\n if (data instanceof Uint8Array) return data.byteLength;\n if (data instanceof ArrayBuffer) return data.byteLength;\n throw new Error('Cannot determine upload size. Pass a File, Blob, Buffer, Uint8Array, or ArrayBuffer.');\n};\n\n/** Convert in-memory data into a value tus-js-client accepts in the current runtime. */\nconst toTusFile = (data: UploadData): TusFile => {\n // Node accepts Buffer/Uint8Array directly; browsers are happiest with a Blob.\n if (data instanceof Uint8Array) return isNode() ? data : new Blob([data]);\n if (typeof Blob !== 'undefined' && data instanceof Blob) return data;\n const bytes = new Uint8Array(data as ArrayBuffer);\n return isNode() ? bytes : new Blob([bytes]);\n};\n\n/**\n * Build the checksum set, always honoring caller-supplied SHA-1/MD5 (they are\n * passed through, never recomputed). Only SHA-256 is ever computed by the SDK.\n */\nconst buildChecksums = (input: UploadSourceInput, sha256: string): Checksums => {\n const checksums: Checksums = { sha256 };\n if (input.checksumSha1) checksums.sha1 = input.checksumSha1;\n if (input.checksumMd5) checksums.md5 = input.checksumMd5;\n return checksums;\n};\n\n/**\n * Resolve an {@link UploadSourceInput} into a {@link ResolvedUploadSource},\n * computing size, content type, and the SHA-256 as needed.\n *\n * @param input - The upload source description. Exactly one of `data`, `path`,\n * or `stream` must be provided.\n * @param options - Set `hash: false` to skip SHA-256 computation (e.g. when\n * uploading to an already-authorized URL, where checksums are not needed).\n */\nexport const resolveUploadSource = async (\n input: UploadSourceInput,\n options: { hash?: boolean } = {}\n): Promise<ResolvedUploadSource> => {\n const sourceCount = [input.data !== undefined, input.path !== undefined, input.stream !== undefined].filter(\n Boolean\n ).length;\n if (sourceCount > 1) {\n throw new Error('Provide only one upload source: data, path, or stream.');\n }\n\n const hash = options.hash !== false;\n const contentType = input.contentType ?? inferContentType(input.key);\n\n if (input.data !== undefined) {\n const size = input.contentLength ?? sizeOf(input.data);\n const sha256 = input.checksumSha256 ?? (hash ? (await computeChecksums(await toBytes(input.data))).sha256 : '');\n return {\n tusFile: toTusFile(input.data),\n size,\n contentType,\n checksums: buildChecksums(input, sha256),\n requiresFiniteChunkSize: false,\n };\n }\n\n if (input.path !== undefined) {\n if (!isNode()) throw new Error('Uploading from a file path is only supported in Node.js.');\n const fs = await import('node:fs');\n const size = input.contentLength ?? fs.statSync(input.path).size;\n const sha256 = input.checksumSha256 ?? (hash ? (await hashNodeFile(input.path)).sha256 : '');\n // A fresh read stream is handed to tus for the byte upload.\n const tusFile = fs.createReadStream(input.path) as unknown as NodeReadableLike;\n return { tusFile, size, contentType, checksums: buildChecksums(input, sha256), requiresFiniteChunkSize: true };\n }\n\n if (input.stream !== undefined) {\n if (input.contentLength === undefined) {\n throw new Error('Uploading from a stream requires contentLength to be provided.');\n }\n if (hash && !input.checksumSha256) {\n throw new Error('Uploading from a stream requires checksumSha256 to be provided.');\n }\n return {\n tusFile: input.stream,\n size: input.contentLength,\n contentType,\n checksums: buildChecksums(input, input.checksumSha256 ?? ''),\n requiresFiniteChunkSize: true,\n };\n }\n\n throw new Error('No upload source provided. Pass one of: data, path, or stream.');\n};\n","/**\n * Thin, injectable wrapper around `tus-js-client` that performs the resumable\n * byte upload. Isolated here so the upload flow can be unit-tested with a fake\n * transport (no real network I/O) and so abort/resume behaviour lives in one\n * place.\n *\n * @internal\n */\n\nimport * as tus from 'tus-js-client';\nimport { UploadError, UploadSessionExpiredError } from '../errors';\nimport type { ResolvedUploadSource, TusFile } from './source';\n\n/** Default chunk size for streamed/file-path uploads, which require a finite chunk size. */\nexport const DEFAULT_STREAM_CHUNK_SIZE = 50 * 1024 * 1024;\n\n/** A persistence backend for resumable upload fingerprints (matches tus-js-client's `UrlStorage`). */\nexport interface UploadUrlStorage {\n findAllUploads(): Promise<unknown[]>;\n findUploadsByFingerprint(fingerprint: string): Promise<unknown[]>;\n removeUpload(urlStorageKey: string): Promise<void>;\n addUpload(fingerprint: string, upload: unknown): Promise<string>;\n}\n\n/** Parameters for a single byte upload. */\nexport interface TusUploadParams {\n /** The file/data passed to tus-js-client. */\n data: TusFile;\n /** Signed upload URL (already includes the short-lived upload token). */\n uploadUrl: string;\n /** Total upload size in bytes. */\n uploadSize: number;\n /** Headers to send with each request (must include `Tus-Resumable`). */\n headers: Record<string, string>;\n /** Maximum chunk size in bytes. Required for streamed inputs. */\n chunkSize?: number;\n /** Retry backoff in milliseconds. `null`/`[]` disables retries. */\n retryDelays?: number[] | null;\n /** Progress callback. */\n onProgress?: (bytesSent: number, bytesTotal: number) => void;\n /** Abort signal to cancel the upload. */\n signal?: AbortSignal;\n /** Persist a resumable fingerprint so the upload can resume later. */\n resume?: boolean;\n /** Custom storage for resumable fingerprints (defaults to the tus-js-client default for the runtime). */\n urlStorage?: UploadUrlStorage;\n}\n\n/** Performs a single resumable byte upload. Resolves on success, rejects on error/abort. */\nexport type UploadTransport = (params: TusUploadParams) => Promise<void>;\n\nconst DEFAULT_RETRY_DELAYS = [0, 1000, 3000, 5000];\n\n/** An `AbortError`-named error, consistent with the Fetch/DOM cancellation convention. */\nexport const createAbortError = (): Error => {\n const error = new Error('The upload was aborted.');\n error.name = 'AbortError';\n return error;\n};\n\n/** The default upload transport, backed by `tus-js-client`. */\nexport const tusUploadTransport: UploadTransport = (params) =>\n new Promise<void>((resolve, reject) => {\n if (params.signal?.aborted) {\n reject(createAbortError());\n return;\n }\n\n let settled = false;\n const cleanup = () => {\n if (params.signal) params.signal.removeEventListener('abort', onAbort);\n };\n const finish = (fn: () => void) => {\n if (settled) return;\n settled = true;\n cleanup();\n fn();\n };\n\n const upload = new tus.Upload(params.data as tus.Upload['file'], {\n uploadUrl: params.uploadUrl,\n uploadSize: params.uploadSize,\n headers: params.headers,\n chunkSize: params.chunkSize ?? Infinity,\n retryDelays: params.retryDelays === undefined ? DEFAULT_RETRY_DELAYS : params.retryDelays,\n storeFingerprintForResuming: params.resume ?? false,\n removeFingerprintOnSuccess: true,\n ...(params.urlStorage ? { urlStorage: params.urlStorage as never } : {}),\n onProgress: params.onProgress ?? null,\n onError: (error) => finish(() => reject(error)),\n onSuccess: () => finish(() => resolve()),\n });\n\n const onAbort = () => {\n void upload.abort();\n finish(() => reject(createAbortError()));\n };\n // `once` ensures the listener detaches after firing, even if `finish` (and\n // thus `cleanup`) never runs because the upload hangs without settling.\n if (params.signal) params.signal.addEventListener('abort', onAbort, { once: true });\n\n upload.start();\n });\n\n/** Options shared by the high-level upload entry points. */\nexport interface RunUploadOptions {\n /** Maximum chunk size in bytes. */\n chunkSize?: number;\n /** Retry backoff in milliseconds. `null`/`[]` disables retries. */\n retryDelays?: number[] | null;\n /** Progress callback. */\n onProgress?: (bytesSent: number, bytesTotal: number) => void;\n /** Abort signal to cancel the upload. */\n signal?: AbortSignal;\n /** Persist a resumable fingerprint so the upload can resume later. */\n resume?: boolean;\n /** Custom storage for resumable fingerprints. */\n urlStorage?: UploadUrlStorage;\n}\n\n/** Run a resolved upload through the given transport, applying sensible chunk-size defaults. */\nexport const runResolvedUpload = (\n transport: UploadTransport,\n uploadUrl: string,\n resolved: ResolvedUploadSource,\n options: RunUploadOptions = {},\n headers: Record<string, string> = { 'Tus-Resumable': '1.0.0' }\n): Promise<void> =>\n transport({\n data: resolved.tusFile,\n uploadUrl,\n uploadSize: resolved.size,\n headers,\n chunkSize: options.chunkSize ?? (resolved.requiresFiniteChunkSize ? DEFAULT_STREAM_CHUNK_SIZE : undefined),\n retryDelays: options.retryDelays,\n onProgress: options.onProgress,\n signal: options.signal,\n resume: options.resume,\n urlStorage: options.urlStorage,\n });\n\nconst tusStatus = (error: unknown): number | undefined => {\n const response = (error as tus.DetailedError | undefined)?.originalResponse;\n return response ? response.getStatus() : undefined;\n};\n\n/**\n * Normalise a transport-layer error into an SDK error. Aborts are re-thrown\n * as-is; auth/expiry statuses become {@link UploadSessionExpiredError}; anything\n * else becomes a generic {@link UploadError}.\n */\nexport const toUploadError = (error: unknown): never => {\n if (error instanceof Error && error.name === 'AbortError') throw error;\n const status = tusStatus(error);\n if (status === 401 || status === 403 || status === 410) {\n throw new UploadSessionExpiredError(undefined, error);\n }\n throw new UploadError(error instanceof Error ? error.message : 'The upload failed.', error);\n};\n","import type { ListQuery, Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\n\n/** A storage bucket belonging to an application. Buckets hold objects (files). */\nexport interface StorageBucket {\n /** Unique identifier (UUID). */\n id: string;\n /** The application this bucket belongs to. */\n applicationId: string;\n /** Human-readable bucket name. */\n name: string;\n /** Globally unique, hostname-safe label used to build the bucket's serving hostname. */\n slug: string;\n /** `\"public\"` buckets serve objects through the CDN hostname; `\"private\"` buckets require signed access URLs. */\n visibility: 'public' | 'private';\n /** The hostname clients use to read public objects or signed private-object URLs. */\n cdnHostname: string;\n /** The application environment this bucket is scoped to. */\n environmentId: string;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/** Input for creating a new storage bucket. */\nexport interface CreateStorageBucketInput {\n /** Human-readable name for the bucket. */\n name: string;\n /** The application environment to scope this bucket to. */\n environmentId: string;\n /** Optional hostname-safe slug used in the generated serving hostname. Auto-generated when omitted. */\n slug?: string;\n /** Bucket visibility. Defaults to `\"private\"`. */\n visibility?: 'public' | 'private';\n}\n\n/**\n * Manage storage buckets for an application.\n * Accessed via `client.applications.storage.buckets`.\n *\n * @example\n * ```ts\n * // Create a public bucket\n * const bucket = await client.applications.storage.buckets.create('app-id', {\n * name: 'User Uploads',\n * environmentId: 'env-id',\n * visibility: 'public',\n * });\n *\n * // List all buckets\n * const { items } = await client.applications.storage.buckets.list('app-id');\n * ```\n */\nexport class StorageBucketsResource extends BaseResource {\n /**\n * List all storage buckets for an application.\n *\n * @param applicationId - The application ID (UUID).\n * @param query - Optional pagination parameters.\n * @returns A paginated list of storage buckets.\n *\n * @example\n * ```ts\n * const { items, total } = await client.applications.storage.buckets.list('app-id');\n * console.log(`${total} buckets found`);\n * ```\n */\n async list(applicationId: string, query?: ListQuery): Promise<Paginated<StorageBucket>> {\n return this.httpClient.get(`/applications/${applicationId}/storage/buckets`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * Create a new storage bucket.\n *\n * @param applicationId - The application ID (UUID).\n * @param data - Bucket name, environment, and optional slug/visibility.\n * @returns The newly created bucket.\n *\n * @example\n * ```ts\n * const bucket = await client.applications.storage.buckets.create('app-id', {\n * name: 'Assets',\n * environmentId: 'env-id',\n * visibility: 'public',\n * });\n * console.log(`Bucket CDN: https://${bucket.cdnHostname}`);\n * ```\n */\n async create(applicationId: string, data: CreateStorageBucketInput): Promise<StorageBucket> {\n return this.httpClient.post(`/applications/${applicationId}/storage/buckets`, data);\n }\n\n /**\n * Get a storage bucket by ID.\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @returns The bucket details.\n *\n * @example\n * ```ts\n * const bucket = await client.applications.storage.buckets.get('app-id', 'bucket-id');\n * console.log(`${bucket.name} (${bucket.visibility})`);\n * ```\n */\n async get(applicationId: string, bucketId: string): Promise<StorageBucket> {\n return this.httpClient.get(`/applications/${applicationId}/storage/buckets/${bucketId}`);\n }\n\n /**\n * Permanently delete a storage bucket and all its objects.\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n *\n * @example\n * ```ts\n * await client.applications.storage.buckets.delete('app-id', 'bucket-id');\n * ```\n */\n async delete(applicationId: string, bucketId: string): Promise<void> {\n return this.httpClient.delete(`/applications/${applicationId}/storage/buckets/${bucketId}`);\n }\n}\n","import type { Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\n\n/** A file (object) stored in a storage bucket. */\nexport interface StorageObject {\n /** Unique identifier (UUID). */\n id: string;\n /** The bucket this object belongs to. */\n bucketId: string;\n /** The application this object belongs to. */\n applicationId: string;\n /** The upload session that created this object, or `null` for imported objects. */\n uploadSessionId: string | null;\n /** The object key (path) within the bucket (e.g. `\"images/photo.jpg\"`). */\n key: string;\n /** MIME content type (e.g. `\"image/jpeg\"`), or `null` if not set. */\n contentType: string | null;\n /** File size in bytes. */\n contentLength: number;\n /** SHA-1 checksum of the file contents, if available. */\n checksumSha1: string | null;\n /** SHA-256 checksum of the file contents, if available. */\n checksumSha256: string | null;\n /** MD5 checksum of the file contents, if available. */\n checksumMd5: string | null;\n /** ISO 8601 timestamp of when the upload was finalized. */\n uploadedAt: string;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/**\n * Access URL details for a storage object. For public buckets, the URL is a\n * stable CDN URL. For private buckets, the URL is time-limited and signed.\n */\nexport interface StorageObjectAccess {\n /** `\"public\"` for stable CDN URLs, `\"signed\"` for time-limited signed URLs. */\n accessType: 'public' | 'signed';\n /** The URL to access the object. */\n url: string;\n /** ISO 8601 expiry timestamp for signed URLs. `null` for public URLs. */\n expiresAt: string | null;\n}\n\n/** Query parameters for listing objects in a bucket. */\nexport interface ListStorageObjectsQuery {\n /** Only return objects whose key starts with this prefix. */\n prefix?: string;\n /** Group keys by this delimiter into `commonPrefixes` (virtual folders). Defaults to `\"/\"`. */\n delimiter?: string;\n /** Opaque cursor from a previous response's `nextCursor`. */\n cursor?: string;\n /** Maximum number of objects to return (1–1000, default 200). */\n limit?: number;\n}\n\n/** A page of storage objects, including any common (folder) prefixes. */\nexport interface StorageObjectList extends Paginated<StorageObject> {\n /** Virtual \"folder\" prefixes at the current level when a delimiter is used. */\n commonPrefixes: string[];\n}\n\n/**\n * Read and delete objects in storage buckets, and generate access URLs.\n * Accessed via `client.applications.storage.objects`.\n *\n * Objects are addressed by their object ID (UUID). If you only have the object\n * key, use {@link getByKey} to resolve it, or read the `id` from a listing.\n *\n * To upload objects, use `client.applications.storage.upload()`.\n *\n * @example\n * ```ts\n * // List all objects in a bucket\n * const { items } = await client.applications.storage.objects.list('app-id', 'bucket-id');\n * for (const obj of items) {\n * console.log(`${obj.key} (${obj.contentLength} bytes)`);\n * }\n *\n * // Get a signed download URL for a private object\n * const { url } = await client.applications.storage.objects.getAccessUrl('app-id', 'bucket-id', 'object-id');\n * ```\n */\nexport class StorageObjectsResource extends BaseResource {\n /**\n * List objects in a storage bucket, optionally filtered by key prefix and\n * grouped into virtual folders by a delimiter.\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @param query - Optional prefix/delimiter/cursor/limit parameters.\n * @returns A page of objects plus any common (folder) prefixes and a `nextCursor`.\n *\n * @example\n * ```ts\n * // List the \"images/\" folder, one level deep\n * const { items, commonPrefixes, nextCursor } = await client.applications.storage.objects.list(\n * 'app-id', 'bucket-id', { prefix: 'images/', limit: 100 },\n * );\n * ```\n */\n async list(applicationId: string, bucketId: string, query?: ListStorageObjectsQuery): Promise<StorageObjectList> {\n return this.httpClient.get(`/applications/${applicationId}/storage/buckets/${bucketId}/objects`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * Get metadata for a specific object by its object ID.\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @param objectId - The object ID (UUID) — not the object key. Use {@link getByKey} to resolve a key.\n * @returns The object metadata.\n *\n * @example\n * ```ts\n * const obj = await client.applications.storage.objects.get('app-id', 'bucket-id', 'object-id');\n * console.log(`${obj.key}: ${obj.contentLength} bytes, type: ${obj.contentType}`);\n * ```\n */\n async get(applicationId: string, bucketId: string, objectId: string): Promise<StorageObject> {\n return this.httpClient.get(`/applications/${applicationId}/storage/buckets/${bucketId}/objects/${objectId}`);\n }\n\n /**\n * Resolve an object by its key (path) instead of its ID. Convenience over\n * {@link list} — lists with the key as the prefix and returns the exact match,\n * paging through results until found, or `null` if no object with that key\n * exists. (The API has no get-by-key endpoint.)\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @param key - The object key/path (e.g. `\"images/photo.jpg\"`).\n * @returns The matching object, or `null` if not found.\n */\n async getByKey(applicationId: string, bucketId: string, key: string): Promise<StorageObject | null> {\n let cursor: string | undefined;\n do {\n const page = await this.list(applicationId, bucketId, { prefix: key, delimiter: '', cursor });\n const match = page.items.find((object) => object.key === key);\n if (match) return match;\n cursor = page.nextCursor;\n } while (cursor);\n return null;\n }\n\n /**\n * Permanently delete an object from a storage bucket.\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @param objectId - The object ID (UUID) — not the object key.\n *\n * @example\n * ```ts\n * await client.applications.storage.objects.delete('app-id', 'bucket-id', 'object-id');\n * ```\n */\n async delete(applicationId: string, bucketId: string, objectId: string): Promise<void> {\n return this.httpClient.delete(`/applications/${applicationId}/storage/buckets/${bucketId}/objects/${objectId}`);\n }\n\n /**\n * Get an access URL for a storage object. For objects in public buckets,\n * returns a stable CDN URL. For private buckets, returns a time-limited\n * signed URL.\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @param objectId - The object ID (UUID) — not the object key.\n * @param options - Optional `expiresInSeconds` for signed URLs (60–86400).\n * @returns The access URL and its type/expiry.\n *\n * @example\n * ```ts\n * const access = await client.applications.storage.objects.getAccessUrl('app-id', 'bucket-id', 'object-id', {\n * expiresInSeconds: 3600,\n * });\n * if (access.accessType === 'signed') {\n * console.log(`Signed URL expires at ${access.expiresAt}`);\n * }\n * console.log(`Download: ${access.url}`);\n * ```\n */\n async getAccessUrl(\n applicationId: string,\n bucketId: string,\n objectId: string,\n options?: { expiresInSeconds?: number }\n ): Promise<StorageObjectAccess> {\n return this.httpClient.get(\n `/applications/${applicationId}/storage/buckets/${bucketId}/objects/${objectId}/access-url`,\n { query: { expiresInSeconds: options?.expiresInSeconds } }\n );\n }\n}\n","import type { ListQuery, Paginated } from '../http-client';\nimport { resolveUploadSource, type NodeReadableLike, type UploadData } from '../upload/source';\nimport {\n runResolvedUpload,\n toUploadError,\n tusUploadTransport,\n type RunUploadOptions,\n type UploadTransport,\n} from '../upload/transport';\nimport { BaseResource } from './base-resource';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * Represents an upload session for a storage object. Upload sessions track the\n * lifecycle of a file upload from creation through completion.\n */\nexport interface StorageUploadSession {\n /** Unique identifier (UUID). */\n id: string;\n /** The bucket this upload targets. */\n bucketId: string;\n /** The application this upload belongs to. */\n applicationId: string;\n /** The object key/path the file will be stored at (e.g. `\"images/photo.jpg\"`). */\n key: string;\n /** MIME content type declared at creation, or `null` if not specified. */\n contentType: string | null;\n /** Expected file size in bytes declared at creation, or `null`. */\n contentLength: number | null;\n /** SHA-1 checksum for server-side verification, if provided. */\n checksumSha1: string | null;\n /** SHA-256 checksum for server-side verification, if provided. */\n checksumSha256: string | null;\n /** MD5 checksum for server-side verification, if provided. */\n checksumMd5: string | null;\n /**\n * Current session state:\n * - `\"pending\"` — Session created, awaiting the first bytes.\n * - `\"ready\"` — Receiving file data.\n * - `\"completed\"` — Upload verified and storage object created.\n * - `\"failed\"` — Upload failed or was rejected.\n * - `\"expired\"` — Session exceeded its expiration time.\n */\n state: 'pending' | 'ready' | 'completed' | 'failed' | 'expired';\n /** ISO 8601 timestamp when this session (and its upload URL) expires. */\n expiresAt: string;\n /** ISO 8601 timestamp when the upload was finalized, or `null`. */\n uploadedAt: string | null;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/** Input for creating a new upload session. */\nexport interface CreateUploadSessionInput {\n /** The object key/path the file will be stored at (e.g. `\"images/photo.jpg\"`). 1–1024 characters. */\n key: string;\n /** File size in bytes. Required. */\n contentLength: number;\n /** Lowercase hex SHA-256 checksum (64 chars) of the content. Required for server-side verification. */\n checksumSha256: string;\n /** MIME content type of the file (e.g. `\"image/jpeg\"`). */\n contentType?: string;\n /** Optional lowercase hex SHA-1 checksum (40 chars). */\n checksumSha1?: string;\n /** Optional lowercase hex MD5 checksum (32 chars). */\n checksumMd5?: string;\n}\n\n/**\n * Response from creating an upload session. Contains both the session metadata\n * and the resumable upload instructions (signed URL + headers).\n */\nexport interface CreateUploadSessionResponse {\n /** The created upload session. */\n session: StorageUploadSession;\n /** Resumable upload instructions — use these to send the file data. */\n upload: {\n /** The HTTP method for the byte upload (resumable upload protocol). */\n method: 'PATCH';\n /** Signed upload URL. Send your file data here. */\n url: string;\n /** Required headers to include with the upload request. */\n headers: Record<string, string>;\n /** The URL where the object will be accessible after upload (CDN URL for public buckets). */\n publicObjectUrl: string;\n };\n}\n\n/** A byte source for uploading directly to a known signed URL. */\nexport interface UploadByteSource {\n /** In-memory data (`File`/`Blob`/`Buffer`/`Uint8Array`/`ArrayBuffer`). */\n data?: UploadData;\n /** A filesystem path to stream from (Node.js only). */\n path?: string;\n /** A readable stream (Node.js only). Requires `contentLength`. */\n stream?: NodeReadableLike;\n /** Byte size — required for `stream` inputs, computed otherwise. */\n contentLength?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Resource\n// ---------------------------------------------------------------------------\n\n/**\n * Manage upload sessions and upload bytes to a signed upload URL using the\n * resumable upload protocol. Accessed via\n * `client.applications.storage.uploadSessions`.\n *\n * For most use cases, prefer the high-level `client.applications.storage.upload()`\n * which creates the session, computes the required checksum, uploads the bytes,\n * and returns the public URL.\n */\nexport class StorageUploadSessionsResource extends BaseResource {\n constructor(\n httpClient: ConstructorParameters<typeof BaseResource>[0],\n private readonly transport: UploadTransport = tusUploadTransport\n ) {\n super(httpClient);\n }\n\n /**\n * List upload sessions for a bucket.\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @param query - Optional pagination parameters.\n * @returns A paginated list of upload sessions.\n */\n async list(applicationId: string, bucketId: string, query?: ListQuery): Promise<Paginated<StorageUploadSession>> {\n return this.httpClient.get(`/applications/${applicationId}/storage/buckets/${bucketId}/uploads`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * Create an upload session. Returns the session metadata and a signed upload\n * URL for sending file data. This is the low-level method — for most use\n * cases prefer `client.applications.storage.upload()` which also computes the\n * required SHA-256 checksum for you.\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @param data - Object key, content length, SHA-256 checksum, and optional content type / extra checksums.\n * @returns The session and resumable upload instructions (URL, method, headers).\n */\n async create(\n applicationId: string,\n bucketId: string,\n data: CreateUploadSessionInput\n ): Promise<CreateUploadSessionResponse> {\n return this.httpClient.post(`/applications/${applicationId}/storage/buckets/${bucketId}/uploads`, data);\n }\n\n /**\n * Get an upload session by ID. Use this to track server-side processing after\n * an upload (poll until `state === 'completed'`).\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @param sessionId - The upload session ID (UUID).\n * @returns The current session state.\n */\n async get(applicationId: string, bucketId: string, sessionId: string): Promise<StorageUploadSession> {\n return this.httpClient.get(`/applications/${applicationId}/storage/buckets/${bucketId}/uploads/${sessionId}`);\n }\n\n /**\n * Upload bytes directly to a pre-existing signed upload URL — for example, a\n * URL returned by {@link create} or handed to your client by a backend. Skips\n * session creation and checksum computation.\n *\n * @param url - A signed upload URL.\n * @param source - The bytes to upload.\n * @param options - Chunk size, retry config, progress, abort signal, resume,\n * and any required `headers` returned with the upload session.\n * @throws {@link UploadError} if the upload fails after all retries.\n */\n async uploadToUrl(\n url: string,\n source: UploadByteSource,\n options?: RunUploadOptions & { headers?: Record<string, string> }\n ): Promise<void> {\n const resolved = await resolveUploadSource({ key: '', ...source }, { hash: false });\n const headers = { 'Tus-Resumable': '1.0.0', ...options?.headers };\n await runResolvedUpload(this.transport, url, resolved, options, headers).catch(toUploadError);\n }\n\n /**\n * Resume an interrupted upload to a previously issued signed upload URL. The\n * resumable protocol negotiates the current offset and continues from there.\n *\n * @param url - The signed upload URL from the original {@link create} call.\n * @param source - The full bytes to upload (the same content as the original).\n * @param options - Chunk size, retry config, progress, abort signal.\n */\n async resumeFromUrl(\n url: string,\n source: UploadByteSource,\n options?: RunUploadOptions & { headers?: Record<string, string> }\n ): Promise<void> {\n return this.uploadToUrl(url, source, { ...options, resume: true });\n }\n}\n","import { UploadError } from '../errors';\nimport type { HttpClient } from '../http-client';\nimport { resolveUploadSource, type NodeReadableLike, type UploadData } from '../upload/source';\nimport {\n runResolvedUpload,\n toUploadError,\n tusUploadTransport,\n type UploadTransport,\n type UploadUrlStorage,\n} from '../upload/transport';\nimport { StorageBucketsResource } from './storage-buckets';\nimport { StorageObjectsResource, type StorageObject } from './storage-objects';\nimport { StorageUploadSessionsResource, type StorageUploadSession } from './storage-upload-sessions';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Options controlling whether and how to wait for an upload to finalize server-side. */\nexport interface WaitForCompletionOptions {\n /** Maximum time to wait in milliseconds. Default: 60000. */\n timeoutMs?: number;\n /** How often to poll the session state, in milliseconds. Default: 1000. */\n pollIntervalMs?: number;\n}\n\n/** Input for the high-level {@link ApplicationStorageResource.upload | upload()} method. */\nexport interface UploadFileInput {\n /** The application ID (UUID). */\n applicationId: string;\n /** The target bucket ID (UUID). */\n bucketId: string;\n /** The object key/path in the bucket (e.g. `\"images/logo.png\"`). */\n key: string;\n /** In-memory data (browser `File`/`Blob`, Node `Buffer`, `Uint8Array`, `ArrayBuffer`). */\n data?: UploadData;\n /** A filesystem path to upload from (Node.js only). Size, checksum, and content type are derived automatically. */\n path?: string;\n /** A readable stream to upload from (Node.js only). Requires `contentLength` and `checksumSha256`. */\n stream?: NodeReadableLike;\n /** MIME content type. Inferred from `key` when omitted. */\n contentType?: string;\n /** Byte size. Required for `stream`; computed otherwise. */\n contentLength?: number;\n /** Pre-computed SHA-256 (skips hashing). Required for `stream`. */\n checksumSha256?: string;\n /** Also send a SHA-1 checksum. */\n checksumSha1?: string;\n /** Also send an MD5 checksum (Node.js only unless provided). */\n checksumMd5?: string;\n /** Maximum chunk size in bytes (for very large files / streams). */\n chunkSize?: number;\n /** Retry backoff in milliseconds; `null`/`[]` disables retries. */\n retryDelays?: number[] | null;\n /** Progress callback invoked during the byte upload. */\n onProgress?: (bytesSent: number, bytesTotal: number) => void;\n /** Abort signal to cancel the upload. */\n signal?: AbortSignal;\n /** Persist a resumable fingerprint so the upload can be resumed later. */\n resume?: boolean;\n /** Custom storage backend for resumable fingerprints. */\n urlStorage?: UploadUrlStorage;\n /** Wait until the object is finalized server-side before resolving. Pass options to tune polling. */\n waitForCompletion?: boolean | WaitForCompletionOptions;\n}\n\n/** Result of a successful upload. */\nexport interface UploadFileResult {\n /** The upload session. When `waitForCompletion` was set, `state` is `\"completed\"`. */\n session: StorageUploadSession;\n /** The public/CDN URL of the uploaded object. */\n url: string;\n /** The finalized storage object — present only when `waitForCompletion` was set. */\n object?: StorageObject;\n}\n\n/** Options for {@link ApplicationStorageResource.uploadBatch | uploadBatch()}. */\nexport interface UploadBatchOptions {\n /** Maximum number of concurrent uploads. Default: 4. */\n concurrency?: number;\n /** Called after each file settles, with the number completed and the total. */\n onProgress?: (completed: number, total: number) => void;\n}\n\n/** The outcome of one file within a batch upload. Errors are isolated per file. */\nexport interface UploadBatchItemResult {\n /** The input that produced this result. */\n input: UploadFileInput;\n /** The successful result, if the upload succeeded. */\n result?: UploadFileResult;\n /** The error, if this upload failed. */\n error?: unknown;\n}\n\n// ---------------------------------------------------------------------------\n// Resource\n// ---------------------------------------------------------------------------\n\nconst delay = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\n/**\n * Namespace for all storage operations on an application: bucket management,\n * object listing/access, low-level upload sessions, and the high-level\n * {@link upload} / {@link uploadBatch} helpers.\n *\n * Accessed via `client.applications.storage`.\n *\n * @example\n * ```ts\n * // High-level upload (Node.js, from a path — checksum/size/content-type inferred)\n * const { url } = await client.applications.storage.upload({\n * applicationId: 'app-id',\n * bucketId: 'bucket-id',\n * key: 'photos/cat.jpg',\n * path: './cat.jpg',\n * });\n *\n * // Browser upload from a file input, with progress and abort\n * const controller = new AbortController();\n * const { url } = await client.applications.storage.upload({\n * applicationId: 'app-id',\n * bucketId: 'bucket-id',\n * key: `uploads/${file.name}`,\n * data: file,\n * onProgress: (sent, total) => console.log(`${Math.round((sent / total) * 100)}%`),\n * signal: controller.signal,\n * });\n * ```\n */\nexport class ApplicationStorageResource {\n /** Create, list, get, and delete storage buckets. */\n readonly buckets: StorageBucketsResource;\n /** List, get, delete objects, and generate access URLs. */\n readonly objects: StorageObjectsResource;\n /** Low-level upload sessions and direct-to-URL byte uploads. */\n readonly uploadSessions: StorageUploadSessionsResource;\n\n private readonly transport: UploadTransport;\n\n constructor(httpClient: HttpClient, transport: UploadTransport = tusUploadTransport) {\n this.transport = transport;\n this.buckets = new StorageBucketsResource(httpClient);\n this.objects = new StorageObjectsResource(httpClient);\n this.uploadSessions = new StorageUploadSessionsResource(httpClient, transport);\n }\n\n /**\n * Upload a file to a storage bucket. Handles the full flow: computes the\n * required SHA-256 checksum, creates an upload session, uploads the bytes with\n * automatic retries (and optional progress/abort/resume), and returns the\n * public URL.\n *\n * Accepts browser `File`/`Blob`, Node `Buffer`/`Uint8Array`/`ArrayBuffer`, a\n * Node filesystem `path`, or a Node readable `stream` (with `contentLength`\n * and `checksumSha256`). The content type is inferred from `key` when omitted.\n *\n * @param input - What and where to upload, plus optional transfer options.\n * @returns The upload session and public object URL (and the finalized object when `waitForCompletion` is set).\n * @throws {@link UploadError} if the byte upload fails.\n * @throws {@link UploadSessionExpiredError} if the session expires mid-upload.\n *\n * @example\n * ```ts\n * const { session, url, object } = await client.applications.storage.upload({\n * applicationId, bucketId, key: 'reports/q1.pdf', path: './q1.pdf',\n * waitForCompletion: true,\n * });\n * console.log(object?.contentLength, 'bytes available at', url);\n * ```\n */\n async upload(input: UploadFileInput): Promise<UploadFileResult> {\n const resolved = await resolveUploadSource({\n key: input.key,\n data: input.data,\n path: input.path,\n stream: input.stream,\n contentType: input.contentType,\n contentLength: input.contentLength,\n checksumSha256: input.checksumSha256,\n checksumSha1: input.checksumSha1,\n checksumMd5: input.checksumMd5,\n });\n\n const { session, upload } = await this.uploadSessions.create(input.applicationId, input.bucketId, {\n key: input.key,\n contentLength: resolved.size,\n checksumSha256: resolved.checksums.sha256,\n contentType: resolved.contentType,\n checksumSha1: resolved.checksums.sha1,\n checksumMd5: resolved.checksums.md5,\n });\n\n await runResolvedUpload(\n this.transport,\n upload.url,\n resolved,\n {\n chunkSize: input.chunkSize,\n retryDelays: input.retryDelays,\n onProgress: input.onProgress,\n signal: input.signal,\n resume: input.resume,\n urlStorage: input.urlStorage,\n },\n // Forward any required headers the API issued with the session.\n { 'Tus-Resumable': '1.0.0', ...upload.headers }\n ).catch(toUploadError);\n\n if (input.waitForCompletion) {\n const options = typeof input.waitForCompletion === 'object' ? input.waitForCompletion : undefined;\n const completed = await this.waitForCompletion(input.applicationId, input.bucketId, session.id, options);\n const object = (await this.objects.getByKey(input.applicationId, input.bucketId, input.key)) ?? undefined;\n return { session: completed, url: upload.publicObjectUrl, object };\n }\n\n return { session, url: upload.publicObjectUrl };\n }\n\n /**\n * Upload many files concurrently. Each file is uploaded independently; a\n * failure for one file does not abort the others — inspect each item's\n * `error`/`result`.\n *\n * @param inputs - The files to upload.\n * @param options - Concurrency limit and an aggregated progress callback.\n * @returns One result per input, in the same order.\n *\n * @example\n * ```ts\n * const results = await client.applications.storage.uploadBatch(\n * files.map((f) => ({ applicationId, bucketId, key: `uploads/${f.name}`, data: f })),\n * { concurrency: 6, onProgress: (done, total) => console.log(`${done}/${total}`) },\n * );\n * const failed = results.filter((r) => r.error);\n * ```\n */\n async uploadBatch(inputs: UploadFileInput[], options?: UploadBatchOptions): Promise<UploadBatchItemResult[]> {\n const concurrency = Math.max(1, options?.concurrency ?? 4);\n const results: UploadBatchItemResult[] = new Array(inputs.length);\n let completed = 0;\n let next = 0;\n\n const worker = async (): Promise<void> => {\n for (;;) {\n const index = next++;\n if (index >= inputs.length) return;\n try {\n results[index] = { input: inputs[index], result: await this.upload(inputs[index]) };\n } catch (error) {\n results[index] = { input: inputs[index], error };\n }\n completed++;\n options?.onProgress?.(completed, inputs.length);\n }\n };\n\n await Promise.all(Array.from({ length: Math.min(concurrency, inputs.length) }, () => worker()));\n return results;\n }\n\n /**\n * Poll an upload session until the object is finalized server-side.\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @param sessionId - The upload session ID (UUID).\n * @param options - Timeout and polling interval.\n * @returns The completed session.\n * @throws {@link UploadError} if the session fails, expires, or the timeout elapses.\n */\n async waitForCompletion(\n applicationId: string,\n bucketId: string,\n sessionId: string,\n options?: WaitForCompletionOptions\n ): Promise<StorageUploadSession> {\n const timeoutMs = options?.timeoutMs ?? 60_000;\n const pollIntervalMs = options?.pollIntervalMs ?? 1000;\n const deadline = Date.now() + timeoutMs;\n\n for (;;) {\n const session = await this.uploadSessions.get(applicationId, bucketId, sessionId);\n if (session.state === 'completed') return session;\n if (session.state === 'failed' || session.state === 'expired') {\n throw new UploadError(`Upload session ${session.state}.`);\n }\n if (Date.now() >= deadline) {\n throw new UploadError('Timed out waiting for the upload to complete.');\n }\n await delay(pollIntervalMs);\n }\n }\n}\n","import type { ListQuery, Paginated } from '../http-client';\nimport { ApplicationEnvVarsResource } from './application-env-vars';\nimport { ApplicationRequestsResource } from './application-requests';\nimport { ApplicationStorageResource } from './application-storage';\nimport { BaseResource } from './base-resource';\nimport type { ApplicationHostnameList, HostnameAvailability, SetProductionHostnameResult } from './hostnames';\nimport type { Organization } from './organizations';\n\n/** A Gigadrive Network application, belonging to an {@link Organization}. */\nexport interface Application {\n /** Unique identifier (UUID). */\n id: string;\n /** The organization this application belongs to. */\n organization: Organization;\n /** Display name of the application. */\n name: string;\n /** Avatar / logo URL. */\n imageUrl: string;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/** Input accepted when creating a Gigadrive Network application. */\nexport interface CreateApplicationInput {\n /** Organization that will own the application. */\n organizationId: string;\n /** Display name. Surrounding whitespace is removed by the API. */\n name: string;\n /** Optional lowercase slug. Generated from {@link name} when omitted. */\n slug?: string;\n /**\n * Project directory relative to the repository root. The API normalizes\n * redundant separators and rejects absolute paths and traversal segments.\n */\n rootDirectory?: string;\n}\n\n/**\n * Application creation result used to start the first deployment without an\n * additional lookup.\n */\nexport interface CreatedApplication {\n /** Stable application UUID. */\n id: string;\n /** Owning organization UUID. */\n organizationId: string;\n /** Normalized display name. */\n name: string;\n /** Generated or caller-supplied application slug. */\n slug: string;\n /** Application icon URL. */\n imageUrl: string;\n /** Normalized project directory, or `null` for the repository root. */\n rootDirectory: string | null;\n /** Production environment slug to use for the first deployment. */\n defaultEnvironmentSlug: string;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/** Query filters for listing applications. */\nexport interface ListApplicationsQuery extends ListQuery {\n /** Only return applications belonging to this organization. */\n organizationId?: string;\n}\n\n/**\n * Manage applications. Accessed via {@link GigadriveClient.applications}.\n *\n * @example\n * ```ts\n * const { items: apps } = await client.applications.list();\n * console.log(apps.map((a) => `${a.name} (${a.organization.name})`));\n * ```\n */\nexport class ApplicationsResource extends BaseResource {\n /**\n * Manage environment variables scoped to an application.\n *\n * @example\n * ```ts\n * await client.applications.envVars.create('app-id', {\n * key: 'DATABASE_URL',\n * value: 'postgres://...',\n * sensitive: true,\n * });\n * ```\n */\n readonly envVars: ApplicationEnvVarsResource;\n\n /**\n * Manage storage buckets, objects, and file uploads for an application.\n *\n * @example\n * ```ts\n * // Upload a file\n * const { url } = await client.applications.storage.upload({\n * applicationId: 'app-id',\n * bucketId: 'bucket-id',\n * key: 'images/logo.png',\n * data: fileData,\n * });\n *\n * // List objects in a bucket\n * const { items } = await client.applications.storage.objects.list('app-id', 'bucket-id');\n * ```\n */\n readonly storage: ApplicationStorageResource;\n\n /**\n * Read observed traffic (request logs) for an application.\n *\n * @example\n * ```ts\n * const { items } = await client.applications.requests.list('app-id', { statusFamily: 5 });\n * ```\n */\n readonly requests: ApplicationRequestsResource;\n\n constructor(...args: ConstructorParameters<typeof BaseResource>) {\n super(...args);\n this.envVars = new ApplicationEnvVarsResource(this.httpClient);\n this.storage = new ApplicationStorageResource(this.httpClient);\n this.requests = new ApplicationRequestsResource(this.httpClient);\n }\n\n /**\n * List applications the authenticated actor has access to.\n *\n * Requires the `network:applications:read` scope.\n *\n * @param query - Optional organization filter and pagination.\n * @returns A paginated list of applications.\n *\n * @example\n * ```ts\n * const { items, total } = await client.applications.list({ organizationId: 'org-id' });\n * console.log(`Found ${total} applications`);\n * ```\n */\n async list(query?: ListApplicationsQuery): Promise<Paginated<Application>> {\n return this.httpClient.get('/applications', {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * Creates an application with production and preview environments.\n *\n * Requires the `network:applications:write` scope and access to the owning\n * organization. Application-, deployment-, and function-scoped tokens cannot\n * create applications.\n *\n * @param input - Ownership, display name, and optional repository layout.\n * @returns The persisted application plus the default production environment\n * slug, ready for an immediate deployment request.\n *\n * @example\n * ```ts\n * const app = await client.applications.create({\n * organizationId: 'org-id',\n * name: 'Next.js Storefront',\n * });\n * console.log(app.id, app.defaultEnvironmentSlug);\n * ```\n */\n async create(input: CreateApplicationInput): Promise<CreatedApplication> {\n return this.httpClient.post('/applications', input);\n }\n\n /**\n * List the `*.gigadrive.app` hostnames for an application (production alias\n * and per-branch aliases).\n *\n * @param applicationId - The application ID (UUID).\n * @returns The hostnames plus the production hostname `label`.\n *\n * @example\n * ```ts\n * const { items, label } = await client.applications.hostnames('app-id');\n * console.log(`Production: ${label}.gigadrive.app`);\n * ```\n */\n async hostnames(applicationId: string): Promise<ApplicationHostnameList> {\n return this.httpClient.get(`/applications/${applicationId}/hostnames`);\n }\n\n /**\n * Check whether a candidate production hostname label is allowed and globally\n * available before setting it with {@link setProductionHostname}.\n *\n * Requires the `network:applications:read` scope.\n *\n * @param applicationId - The application ID (UUID).\n * @param label - The candidate production hostname label (e.g. `\"my-app\"`).\n * @returns Whether the label is available, plus a `reason` when it is not.\n *\n * @example\n * ```ts\n * const { available, reason } = await client.applications.checkHostnameAvailability('app-id', 'my-app');\n * if (!available) console.log(`Unavailable: ${reason}`);\n * ```\n */\n async checkHostnameAvailability(applicationId: string, label: string): Promise<HostnameAvailability> {\n return this.httpClient.get(`/applications/${applicationId}/hostname/availability`, {\n query: { label },\n });\n }\n\n /**\n * Set the application's production hostname. The production alias\n * `{label}.gigadrive.app` is re-pointed to the latest production deployment.\n *\n * Requires the `network:applications:write` scope. Deployment- and\n * function-scoped tokens cannot change the production hostname.\n *\n * @param applicationId - The application ID (UUID).\n * @param label - The production hostname label (e.g. `\"my-app\"`). It is\n * normalized (slugified) server-side.\n * @returns The saved label, the resulting hostname, and whether it is live yet.\n *\n * @example\n * ```ts\n * const { hostname, live } = await client.applications.setProductionHostname('app-id', 'my-app');\n * console.log(live ? `Live at ${hostname}` : `Reserved ${hostname} (deploy to go live)`);\n * ```\n */\n async setProductionHostname(applicationId: string, label: string): Promise<SetProductionHostnameResult> {\n return this.httpClient.put(`/applications/${applicationId}/hostname`, { label });\n }\n}\n","import type { Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\nimport type { Hostname } from './hostnames';\n\n/**\n * The lifecycle status of a deployment.\n * - `\"PENDING\"` — Created, waiting for artifact upload.\n * - `\"QUEUED\"` — Queued for processing.\n * - `\"STARTING\"` — Processing is starting.\n * - `\"BUILDING\"` — Build pipeline is running.\n * - `\"PROVISIONING\"` — Infrastructure is being provisioned.\n * - `\"ACTIVE\"` — Successfully deployed and serving traffic.\n * - `\"FAILED\"` — Build or provisioning failed.\n */\nexport type DeploymentStatus = 'PENDING' | 'QUEUED' | 'STARTING' | 'BUILDING' | 'PROVISIONING' | 'ACTIVE' | 'FAILED';\n\n/** The severity level of a deployment log entry. */\nexport type DeploymentLogType = 'INFO' | 'ERROR' | 'WARN' | 'DEBUG';\n\n/** A deployment of an application to the Gigadrive Network. */\nexport interface Deployment {\n /** Unique identifier (UUID). */\n id: string;\n /** The application this deployment belongs to. */\n applicationId: string;\n /** Current lifecycle status. */\n status: DeploymentStatus;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/** A single log entry from a deployment's build or provisioning pipeline. */\nexport interface DeploymentLog {\n /** Unique identifier. */\n id: string;\n /** The log message text. */\n message: string;\n /** Severity level: `\"INFO\"`, `\"ERROR\"`, `\"WARN\"`, or `\"DEBUG\"`. */\n type: DeploymentLogType;\n /** ISO 8601 timestamp of when this log entry was created. */\n createdAt: string;\n}\n\n/** A paginated page of deployment log entries. */\nexport interface DeploymentLogPage {\n /** Total number of log entries for this deployment. */\n totalItems: number;\n /** Maximum number of entries per page. */\n limit: number;\n /** Number of entries skipped (for pagination). */\n offset: number;\n /** The log entries on this page. */\n items: DeploymentLog[];\n}\n\n/** Input for creating a new deployment. */\nexport interface CreateDeploymentInput {\n /** The application to deploy. */\n applicationId: string;\n /** Optional git source for the deployment. When omitted, the deployment expects an artifact upload. */\n gitSource?: {\n /** The git ref to deploy (e.g. `\"main\"`, `\"v1.0.0\"`). */\n ref: string;\n /** A specific commit SHA to deploy. If omitted, the HEAD of the ref is used. */\n sha?: string;\n };\n}\n\n/** Query filters for listing deployments. All fields are optional. */\nexport interface ListDeploymentsQuery {\n /** Filter by organization ID. */\n organizationId?: string;\n /** Filter by application ID. */\n applicationId?: string;\n /** Filter by deployment status. */\n status?: DeploymentStatus;\n}\n\n/** Query parameters for fetching deployment logs. */\nexport interface ListDeploymentLogsQuery {\n /** Number of log entries to skip (for pagination). */\n offset?: number;\n /** Maximum number of log entries to return per page. */\n limit?: number;\n /** Only return log entries created after this ISO 8601 timestamp. Useful for tailing logs. */\n 'createdAt[gt]'?: string;\n}\n\n/** Result from starting a multipart deployment upload. */\nexport interface StartUploadResult {\n /** The multipart upload ID. Pass this to subsequent `getPresignedUrl` and `completeUpload` calls. */\n uploadId: string;\n}\n\n/** A presigned URL for uploading a single part of a multipart deployment upload. */\nexport interface PresignedUrlResult {\n /** The presigned URL to PUT the part data to. */\n url: string;\n}\n\n/** A successfully uploaded part, used to complete the multipart upload. */\nexport interface UploadPart {\n /** The 1-based part number. */\n partNumber: number;\n /** The ETag returned by the storage provider after uploading this part. */\n etag: string;\n}\n\n/**\n * Manage deployments — create, monitor, upload artifacts, and read logs.\n * Accessed via {@link GigadriveClient.deployments}.\n *\n * ## Deployment lifecycle\n *\n * 1. **Create** a deployment with {@link create}.\n * 2. **Upload** build artifacts using the multipart upload flow\n * ({@link startUpload} → {@link getPresignedUrl} → {@link uploadPart} → {@link completeUpload}).\n * 3. **Monitor** the build with {@link get} and {@link getLogs}.\n *\n * @example\n * ```ts\n * // Create a deployment\n * const deployment = await client.deployments.create({ applicationId: 'app-id' });\n *\n * // Check status\n * const updated = await client.deployments.get(deployment.id);\n * console.log(`Status: ${updated.status}`);\n *\n * // Read build logs\n * const logs = await client.deployments.getLogs(deployment.id, { limit: 50 });\n * for (const entry of logs.items) {\n * console.log(`[${entry.type}] ${entry.message}`);\n * }\n * ```\n */\nexport class DeploymentsResource extends BaseResource {\n /**\n * List deployments, optionally filtered by organization, application, or status.\n *\n * Requires the `network:deployments:read` scope.\n *\n * @param query - Optional filters.\n * @returns A paginated list of deployments.\n *\n * @example\n * ```ts\n * // All deployments for an application\n * const { items } = await client.deployments.list({ applicationId: 'app-id' });\n *\n * // Only active deployments\n * const { items } = await client.deployments.list({ status: 'ACTIVE' });\n * ```\n */\n async list(query?: ListDeploymentsQuery): Promise<Paginated<Deployment>> {\n return this.httpClient.get('/deployments', {\n query: query as Record<string, string | undefined> | undefined,\n });\n }\n\n /**\n * Get a deployment by ID, including its current status.\n *\n * @param deploymentId - The deployment ID (UUID).\n * @returns The deployment with its current status.\n *\n * @example\n * ```ts\n * const deployment = await client.deployments.get('deployment-id');\n * if (deployment.status === 'ACTIVE') {\n * console.log('Deployment is live!');\n * }\n * ```\n */\n async get(deploymentId: string): Promise<Deployment> {\n return this.httpClient.get(`/deployments/${deploymentId}`);\n }\n\n /**\n * Create a new deployment. The deployment starts in `\"PENDING\"` status,\n * waiting for artifact upload. Use the multipart upload methods\n * ({@link startUpload}, {@link getPresignedUrl}, {@link uploadPart},\n * {@link completeUpload}) to upload build artifacts.\n *\n * Requires the `network:deployments:trigger` scope.\n *\n * @param data - The application ID and optional git source.\n * @returns The newly created deployment.\n *\n * @example\n * ```ts\n * const deployment = await client.deployments.create({\n * applicationId: 'app-id',\n * });\n * console.log(`Created deployment ${deployment.id} (${deployment.status})`);\n * ```\n */\n async create(data: CreateDeploymentInput): Promise<Deployment> {\n return this.httpClient.post('/deployments', data);\n }\n\n /**\n * Start a multipart upload for deployment artifacts. This initiates a new\n * multipart upload and returns an upload ID for subsequent part uploads.\n *\n * The deployment must be in `\"PENDING\"` status.\n *\n * @param deploymentId - The deployment ID (UUID).\n * @returns An object containing the `uploadId` for subsequent calls.\n *\n * @example\n * ```ts\n * const { uploadId } = await client.deployments.startUpload('deployment-id');\n * ```\n */\n async startUpload(deploymentId: string): Promise<StartUploadResult> {\n return this.httpClient.post(`/deployments/${deploymentId}/upload/start`);\n }\n\n /**\n * Get a presigned URL for uploading a single part of a multipart upload.\n * The URL is temporary and should be used immediately with {@link uploadPart}.\n *\n * @param deploymentId - The deployment ID (UUID).\n * @param uploadId - The multipart upload ID from {@link startUpload}.\n * @param partNumber - The 1-based part number.\n * @returns An object containing the presigned `url` to PUT the part data to.\n *\n * @example\n * ```ts\n * const { url } = await client.deployments.getPresignedUrl(\n * 'deployment-id', uploadId, 1,\n * );\n * ```\n */\n async getPresignedUrl(deploymentId: string, uploadId: string, partNumber: number): Promise<PresignedUrlResult> {\n if (!Number.isInteger(partNumber) || partNumber < 1) {\n throw new Error(`partNumber must be a positive integer, received ${partNumber}`);\n }\n return this.httpClient.post(`/deployments/${deploymentId}/upload/part`, { uploadId, partNumber });\n }\n\n /**\n * Upload a part to a presigned URL obtained from {@link getPresignedUrl}.\n * This sends the chunk data directly to the backend storage service, not\n * to the Gigadrive API. The returned `etag` is needed for\n * {@link completeUpload}.\n *\n * @param presignedUrl - The presigned URL from {@link getPresignedUrl}.\n * @param data - The chunk data to upload.\n * @param partNumber - The 1-based part number (used for error messages).\n * @returns The part number and ETag. Collect these for {@link completeUpload}.\n * @throws {@link ApiError} if the PUT request fails.\n * @throws Error if the storage provider does not return an ETag header.\n *\n * @example\n * ```ts\n * const chunk = fileBuffer.subarray(0, 10 * 1024 * 1024); // 10 MB\n * const part = await client.deployments.uploadPart(presignedUrl, chunk, 1);\n * // part = { partNumber: 1, etag: '\"abc123...\"' }\n * ```\n */\n async uploadPart(\n presignedUrl: string,\n data: ArrayBuffer | Uint8Array | Blob,\n partNumber: number\n ): Promise<UploadPart> {\n if (!Number.isInteger(partNumber) || partNumber < 1) {\n throw new Error(`partNumber must be a positive integer, received ${partNumber}`);\n }\n const response = await this.httpClient.fetchRaw(presignedUrl, {\n method: 'PUT',\n headers: {\n // Deployment artifacts are always ZIP archives.\n 'Content-Type': 'application/zip',\n 'Content-Length': String(data instanceof Blob ? data.size : data.byteLength),\n },\n body: data,\n });\n\n const etag = response.headers.get('ETag');\n if (!etag) {\n throw new Error(`No ETag received for part ${partNumber}`);\n }\n\n return { partNumber, etag };\n }\n\n /**\n * Complete a multipart upload after all parts have been uploaded via\n * {@link uploadPart}. This signals the storage provider to assemble the\n * parts into a single object and triggers the deployment build pipeline.\n *\n * @param deploymentId - The deployment ID (UUID).\n * @param uploadId - The multipart upload ID from {@link startUpload}.\n * @param parts - Array of `{ partNumber, etag }` from each {@link uploadPart} call.\n *\n * @example\n * ```ts\n * await client.deployments.completeUpload(deploymentId, uploadId, [\n * { partNumber: 1, etag: '\"abc...\"' },\n * { partNumber: 2, etag: '\"def...\"' },\n * ]);\n * ```\n */\n async completeUpload(deploymentId: string, uploadId: string, parts: UploadPart[]): Promise<void> {\n return this.httpClient.post(`/deployments/${deploymentId}/upload/complete`, { uploadId, parts });\n }\n\n /**\n * Fetch deployment logs. Supports pagination and filtering by timestamp\n * for incremental log tailing.\n *\n * @param deploymentId - The deployment ID (UUID).\n * @param query - Optional pagination and filter parameters.\n * @returns A page of log entries with total count.\n *\n * @example\n * ```ts\n * // Get the first page of logs\n * const page = await client.deployments.getLogs('deployment-id', {\n * offset: 0,\n * limit: 100,\n * });\n *\n * for (const entry of page.items) {\n * const prefix = entry.type === 'ERROR' ? 'ERR' : entry.type === 'WARN' ? 'WRN' : 'INF';\n * console.log(`[${prefix}] ${entry.message}`);\n * }\n *\n * // Tail new logs since last fetch\n * const newLogs = await client.deployments.getLogs('deployment-id', {\n * 'createdAt[gt]': lastEntry.createdAt,\n * });\n * ```\n */\n async getLogs(deploymentId: string, query?: ListDeploymentLogsQuery): Promise<DeploymentLogPage> {\n return this.httpClient.get(`/deployments/${deploymentId}/logs`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * List the immutable `*.gigadrive.app` hostnames assigned to a deployment.\n *\n * @param deploymentId - The deployment ID (UUID).\n * @returns A paginated list of hostnames.\n *\n * @example\n * ```ts\n * const { items } = await client.deployments.getHostnames('deployment-id');\n * console.log(items.map((h) => h.hostname));\n * ```\n */\n async getHostnames(deploymentId: string): Promise<Paginated<Hostname>> {\n return this.httpClient.get(`/deployments/${deploymentId}/hostnames`);\n }\n}\n","import type { NormalizedImagePolicy } from '@gigadrive/network-config';\n\nimport { BaseResource } from './base-resource';\n\nexport interface ImageCacheInspection {\n enabled: boolean;\n deploymentTag: string;\n sourceTag: string | null;\n policy: NormalizedImagePolicy | null;\n}\n\nexport interface ImageCachePurgeResult {\n purged: true;\n tag: string;\n}\n\nexport interface ManagedImageUrlOptions {\n /** Deployment or custom application origin, for example `https://app.gigadrive.app`. */\n origin: string;\n /** Local application path or approved absolute remote URL. */\n source: string;\n filename?: string;\n width?: number;\n height?: number;\n quality?: number;\n format?: 'avif' | 'webp' | 'jpeg' | 'png';\n fit?: 'contain' | 'cover' | 'fill' | 'inside' | 'outside';\n variant?: string;\n}\n\n/** Creates the stable, framework-neutral managed image URL served on an application hostname. */\nexport const createManagedImageUrl = (options: ManagedImageUrlOptions): string => {\n const inferredFilename = options.source.split('/').filter(Boolean).at(-1)?.split('?')[0] || 'image.image';\n const filename = (options.filename ?? inferredFilename).replace(/[^A-Za-z0-9._-]/g, '_') || 'image.image';\n const url = new URL(\n `/_gigadrive/image/${encodeURIComponent(options.source)}/${encodeURIComponent(filename)}`,\n options.origin\n );\n for (const [name, value] of Object.entries({\n width: options.width,\n height: options.height,\n quality: options.quality,\n format: options.format,\n fit: options.fit,\n variant: options.variant,\n })) {\n if (value !== undefined) url.searchParams.set(name, String(value));\n }\n return url.toString();\n};\n\n/** Managed image optimization cache inspection and source/deployment purge operations. */\nexport class ImageOptimizationResource extends BaseResource {\n /** Create a managed image URL without making an API request. */\n url(options: ManagedImageUrlOptions): string {\n return createManagedImageUrl(options);\n }\n\n /** Inspect the immutable deployment policy and Bunny cache tags used for a source. */\n inspect(deploymentId: string, source?: string): Promise<ImageCacheInspection> {\n return this.httpClient.get(`/deployments/${deploymentId}/image-cache`, {\n query: { source },\n });\n }\n\n /** Purge all variants for one source, or every optimized image in the deployment when omitted. */\n purge(deploymentId: string, source?: string): Promise<ImageCachePurgeResult> {\n return this.httpClient.delete(`/deployments/${deploymentId}/image-cache`, {\n query: { source },\n });\n }\n}\n","import type { HttpClient, Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** One bucket of an AI Gateway usage breakdown (by model, provider, or user). */\nexport interface AiGatewayUsageBreakdown {\n /** Bucket label (a model, provider, or user identifier). */\n label: string;\n /** Number of requests in this bucket. */\n requests: number;\n /** Total tokens in this bucket. */\n tokens: number;\n /** Input tokens in this bucket. */\n inputTokens: number;\n /** Output tokens in this bucket. */\n outputTokens: number;\n /** Billable cost in micros of USD for this bucket. */\n costMicros: number;\n}\n\n/** Aggregated AI Gateway usage over a time range, with breakdowns. */\nexport interface AiGatewayUsageSummary {\n summary: {\n requestCount: number;\n successCount: number;\n errorCount: number;\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n billableCostMicros: number;\n avgLatencyMs: number;\n };\n byModel: AiGatewayUsageBreakdown[];\n byProvider: AiGatewayUsageBreakdown[];\n byUser: AiGatewayUsageBreakdown[];\n}\n\n/** One provider attempt recorded while routing an AI Gateway request. */\nexport interface AiGatewayProviderAttempt {\n provider: string;\n error?: string;\n statusCode?: number;\n tag?: string;\n}\n\n/** A single AI Gateway request event with full telemetry. */\nexport interface AiGatewayRequestEvent {\n id: string;\n requestId: string;\n traceId: string | null;\n billingSubjectType: 'organization' | 'application';\n organizationId: string;\n applicationId: string | null;\n actorId: string | null;\n actorType: string;\n apiKeyId: string | null;\n authenticatedUserId: string | null;\n callerEndUserId: string | null;\n modelRequested: string;\n modelServed: string | null;\n provider: string | null;\n providerAttempts: AiGatewayProviderAttempt[] | null;\n status: 'pending' | 'success' | 'error' | 'cancelled';\n errorCode: string | null;\n errorType: string | null;\n inputTokens: number;\n outputTokens: number;\n cachedInputTokens: number;\n totalTokens: number;\n usageSource: 'provider' | 'estimated' | 'none';\n providerCostMicros: number;\n billableCostMicros: number;\n streaming: boolean;\n latencyMs: number | null;\n metadata: Record<string, string> | null;\n startedAt: string;\n completedAt: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\n/** An AI Gateway spend/usage budget. */\nexport interface AiGatewayBudget {\n id: string;\n organizationId: string;\n /** Application-specific target, or `null` for organization-wide. */\n applicationId: string | null;\n /** User-specific target, or `null` for all users. */\n userId: string | null;\n period: 'day' | 'month';\n maxCostMicros: number | null;\n maxRequests: number | null;\n maxTokens: number | null;\n maxRequestCostMicros: number | null;\n enabled: boolean;\n createdAt: string;\n updatedAt: string;\n}\n\n/** Input for one budget when replacing the budget set. */\nexport interface AiGatewayBudgetInput {\n applicationId?: string;\n userId?: string;\n period?: 'day' | 'month';\n maxCostMicros?: number | null;\n maxRequests?: number | null;\n maxTokens?: number | null;\n maxRequestCostMicros?: number | null;\n enabled?: boolean;\n}\n\n/** An AI Gateway governance policy. */\nexport interface AiGatewayPolicy {\n id: string;\n organizationId: string;\n /** Application-specific target, or `null` for organization-wide. */\n applicationId: string | null;\n /** Allowed model IDs, or `null` to allow all. */\n allowedModels: string[] | null;\n /** Allowed provider IDs, or `null` to allow all. */\n allowedProviders: string[] | null;\n requireZdr: boolean;\n allowFallbacks: boolean;\n maxOutputTokens: number | null;\n createdAt: string;\n updatedAt: string;\n}\n\n/** Input for creating or updating an AI Gateway policy. */\nexport interface AiGatewayPolicyInput {\n applicationId?: string;\n allowedModels?: string[] | null;\n allowedProviders?: string[] | null;\n requireZdr?: boolean;\n allowFallbacks?: boolean;\n maxOutputTokens?: number | null;\n}\n\n/** Query for usage summary. */\nexport interface AiGatewayUsageQuery {\n /** Only include usage at or after this ISO 8601 timestamp. */\n from?: string;\n /** Only include usage before or at this ISO 8601 timestamp. */\n to?: string;\n /** Restrict to one application. */\n applicationId?: string;\n}\n\n/** Query for the request-event log and CSV export. */\nexport interface AiGatewayRequestsQuery extends AiGatewayUsageQuery {\n model?: string;\n provider?: string;\n status?: 'pending' | 'success' | 'error' | 'cancelled';\n requestId?: string;\n authenticatedUserId?: string;\n callerEndUserId?: string;\n limit?: number;\n cursor?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Sub-resources\n// ---------------------------------------------------------------------------\n\n/** AI Gateway usage analytics for an organization. */\nexport class AiGatewayUsageResource extends BaseResource {\n /** Get an aggregated usage summary with breakdowns by model, provider, and user. */\n async summary(organizationId: string, query?: AiGatewayUsageQuery): Promise<AiGatewayUsageSummary> {\n return this.httpClient.get(`/organizations/${organizationId}/ai-gateway/usage/summary`, {\n query: query as Record<string, string | undefined> | undefined,\n });\n }\n\n /** List request-level usage events. */\n async requests(organizationId: string, query?: AiGatewayRequestsQuery): Promise<Paginated<AiGatewayRequestEvent>> {\n return this.httpClient.get(`/organizations/${organizationId}/ai-gateway/usage/requests`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /** Export request-level usage events as CSV text. */\n async export(organizationId: string, query?: AiGatewayRequestsQuery): Promise<string> {\n const response = await this.httpClient.requestStream(\n 'GET',\n `/organizations/${organizationId}/ai-gateway/usage/export`,\n { query: query as Record<string, string | number | undefined> | undefined }\n );\n return response.text();\n }\n}\n\n/** AI Gateway budgets for an organization. */\nexport class AiGatewayBudgetsResource extends BaseResource {\n /** List all budgets for an organization. */\n async list(organizationId: string): Promise<{ items: AiGatewayBudget[] }> {\n return this.httpClient.get(`/organizations/${organizationId}/ai-gateway/budgets`);\n }\n\n /**\n * Replace the organization's entire budget set. Pass an empty array to clear\n * all budgets.\n */\n async replace(organizationId: string, budgets: AiGatewayBudgetInput[]): Promise<{ items: AiGatewayBudget[] }> {\n return this.httpClient.put(`/organizations/${organizationId}/ai-gateway/budgets`, { budgets });\n }\n}\n\n/** AI Gateway governance policies for an organization. */\nexport class AiGatewayPoliciesResource extends BaseResource {\n /**\n * Get the governance policy for an organization, or for a specific\n * application when `applicationId` is provided. Returns `null` if no policy is set.\n */\n async get(organizationId: string, options?: { applicationId?: string }): Promise<AiGatewayPolicy | null> {\n const { policy } = await this.httpClient.get<{ policy: AiGatewayPolicy | null }>(\n `/organizations/${organizationId}/ai-gateway/policies`,\n { query: { applicationId: options?.applicationId } }\n );\n return policy;\n }\n\n /** Create or update an AI Gateway policy. */\n async put(organizationId: string, data: AiGatewayPolicyInput): Promise<AiGatewayPolicy> {\n const { policy } = await this.httpClient.put<{ policy: AiGatewayPolicy }>(\n `/organizations/${organizationId}/ai-gateway/policies`,\n data\n );\n return policy;\n }\n}\n\n/**\n * Organization-scoped AI Gateway governance: usage analytics, budgets, and\n * model/provider policies. Accessed via `client.organizations.aiGateway`.\n */\nexport class OrganizationAiGatewayResource {\n /** Usage analytics (summary, request log, CSV export). */\n readonly usage: AiGatewayUsageResource;\n /** Spend/usage budgets. */\n readonly budgets: AiGatewayBudgetsResource;\n /** Model/provider governance policies. */\n readonly policies: AiGatewayPoliciesResource;\n\n constructor(httpClient: HttpClient) {\n this.usage = new AiGatewayUsageResource(httpClient);\n this.budgets = new AiGatewayBudgetsResource(httpClient);\n this.policies = new AiGatewayPoliciesResource(httpClient);\n }\n}\n","import type { ListQuery, Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\nimport type { CreateEnvVarInput, EnvVar, UpdateEnvVarInput } from './env-vars';\n\n/**\n * Manage environment variables scoped to an organization.\n * Accessed via `client.organizations.envVars`.\n */\nexport class OrganizationEnvVarsResource extends BaseResource {\n /**\n * List all environment variables for an organization.\n *\n * @param organizationId - The organization ID (UUID).\n * @returns A paginated list of environment variables.\n *\n * @example\n * ```ts\n * const { items } = await client.organizations.envVars.list('org-id');\n * for (const v of items) {\n * console.log(`${v.key}=${v.sensitive ? '***' : v.value}`);\n * }\n * ```\n */\n async list(organizationId: string, query?: ListQuery): Promise<Paginated<EnvVar>> {\n return this.httpClient.get(`/organizations/${organizationId}/env-vars`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * Create a new environment variable for an organization.\n *\n * @param organizationId - The organization ID (UUID).\n * @param data - The variable key, value, and optional settings.\n * @returns The newly created environment variable.\n *\n * @example\n * ```ts\n * const envVar = await client.organizations.envVars.create('org-id', {\n * key: 'STRIPE_SECRET',\n * value: 'sk_live_...',\n * sensitive: true,\n * });\n * ```\n */\n async create(organizationId: string, data: CreateEnvVarInput): Promise<EnvVar> {\n return this.httpClient.post(`/organizations/${organizationId}/env-vars`, data);\n }\n\n /**\n * Update an existing environment variable. Only the fields you provide\n * will be changed; omitted fields are left unchanged.\n *\n * @param organizationId - The organization ID (UUID).\n * @param envVarId - The environment variable ID (UUID).\n * @param data - The fields to update.\n * @returns The updated environment variable.\n *\n * @example\n * ```ts\n * await client.organizations.envVars.update('org-id', 'var-id', {\n * value: 'new-value',\n * });\n * ```\n */\n async update(organizationId: string, envVarId: string, data: UpdateEnvVarInput): Promise<EnvVar> {\n return this.httpClient.patch(`/organizations/${organizationId}/env-vars/${envVarId}`, data);\n }\n\n /**\n * Permanently delete an environment variable.\n *\n * @param organizationId - The organization ID (UUID).\n * @param envVarId - The environment variable ID (UUID).\n *\n * @example\n * ```ts\n * await client.organizations.envVars.delete('org-id', 'var-id');\n * ```\n */\n async delete(organizationId: string, envVarId: string): Promise<void> {\n return this.httpClient.delete(`/organizations/${organizationId}/env-vars/${envVarId}`);\n }\n}\n","import type { ListQuery, Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\n\n/** Organization membership role used for administration privileges. */\nexport type OrganizationMembershipRole = 'OWNER' | 'ADMIN' | 'MEMBER';\n\n/** A user membership in a Gigadrive organization. */\nexport interface OrganizationMember {\n /** Unique membership identifier (UUID). */\n membershipId: string;\n /** Organization that owns this membership. */\n organizationId: string;\n /** User who belongs to the organization. */\n userId: string;\n /** Email address of the organization member. */\n email: string;\n /** Given name of the organization member, or null when unset. */\n givenName: string | null;\n /** Family name of the organization member, or null when unset. */\n familyName: string | null;\n /** Avatar URL for the organization member, or null when unset. */\n imageUrl: string | null;\n /** Organization membership role. */\n role: OrganizationMembershipRole;\n /** ISO 8601 timestamp when the user joined the organization. */\n joinedAt: string;\n}\n\n/**\n * List organization members. Accessed via {@link OrganizationsResource.members}.\n *\n * @example\n * ```ts\n * const { items } = await client.organizations.members.list('org-id');\n * console.log(items.map((m) => `${m.email} (${m.role})`));\n * ```\n */\nexport class OrganizationMembersResource extends BaseResource {\n /**\n * List the users who belong to an organization.\n *\n * @param organizationId - Organization whose members should be listed.\n * @param query - Optional pagination.\n * @returns A paginated list of organization members.\n *\n * @example\n * ```ts\n * const { items, total } = await client.organizations.members.list('org-id');\n * console.log(`Found ${total} members`);\n * ```\n */\n async list(organizationId: string, query?: ListQuery): Promise<Paginated<OrganizationMember>> {\n return this.httpClient.get(`/organizations/${organizationId}/members`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n}\n","import type { ListQuery, Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\n\n/** Product access mode from the code-defined product registry. */\nexport type ProductAccessMode = 'organization' | 'user';\n\n/** Fallback access policy when no explicit entitlement override exists. */\nexport type ProductDefaultAccessPolicy = 'granted' | 'explicit_entitlement_required';\n\n/** Lifecycle status of an explicit product entitlement override. */\nexport type ProductEntitlementStatus = 'ACTIVE' | 'SUSPENDED' | 'REVOKED';\n\n/** Lifecycle status of a local organization product subscription. */\nexport type ProductSubscriptionStatus = 'ACTIVE' | 'CANCELED';\n\n/** Whether effective access was resolved from an override or the registry default. */\nexport type ProductAccessResolutionSource = 'explicit' | 'default';\n\n/** A plan defined for a product in the product registry. */\nexport interface ProductPlan {\n /** Stable plan slug. */\n slug: string;\n /** Human-readable plan name. */\n displayName: string;\n /** Short description of the plan. */\n description: string;\n}\n\n/** Product metadata from the code-defined product registry. */\nexport interface ProductDefinition {\n /** Stable product slug (e.g. `network`, `office`). */\n slug: string;\n /** Human-readable product name. */\n displayName: string;\n /** Whether the product is granted to organizations or directly to users. */\n accessMode: ProductAccessMode;\n /** Fallback access policy when no explicit entitlement override exists. */\n defaultAccessPolicy: ProductDefaultAccessPolicy;\n /** Locally activatable plans for the product. */\n plans: ProductPlan[];\n}\n\n/** Explicit organization product entitlement override. */\nexport interface OrganizationProductEntitlement {\n /** Unique identifier (UUID). */\n id: string;\n /** Product slug this entitlement applies to. */\n product: string;\n /** Lifecycle status of the override. */\n status: ProductEntitlementStatus;\n /** User who last granted or updated the override, if known. */\n grantedByUserId: string | null;\n /** ISO 8601 timestamp when the entitlement was revoked, if revoked. */\n revokedAt: string | null;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/** Local organization product subscription / plan selection. */\nexport interface OrganizationProductSubscription {\n /** Unique identifier (UUID). */\n id: string;\n /** Product slug this subscription applies to. */\n product: string;\n /** Currently selected plan slug. */\n plan: string;\n /** Local subscription lifecycle status. */\n status: ProductSubscriptionStatus;\n /** User who activated the current plan, if known. */\n activatedByUserId: string | null;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/** Effective product access summary for an organization-scoped product. */\nexport interface OrganizationProductAccess {\n /** Product metadata from the registry. */\n product: ProductDefinition;\n /** Whether the organization currently has effective access. */\n hasAccess: boolean;\n /** Whether access was resolved from an explicit override or the default policy. */\n resolutionSource: ProductAccessResolutionSource;\n /** Explicit entitlement override when one exists. */\n explicitEntitlement: OrganizationProductEntitlement | null;\n /** Local product subscription when one exists. */\n subscription: OrganizationProductSubscription | null;\n}\n\n/** Compact yes/no entitlement check for an organization product. */\nexport interface OrganizationProductEntitlementCheck {\n /** Organization that was checked. */\n organizationId: string;\n /** Product slug that was checked. */\n product: string;\n /** Whether the organization currently has effective access. */\n hasAccess: boolean;\n}\n\n/**\n * Inspect organization product access / entitlements.\n *\n * Accessed via {@link OrganizationsResource.products}.\n *\n * Subscriptions are read-only through the public API — plan changes happen in\n * Gigadrive product surfaces, not via the SDK.\n *\n * @example\n * ```ts\n * const { items } = await client.organizations.products.list('org-id');\n * const check = await client.organizations.products.checkEntitlement('org-id', 'office');\n * console.log(check.hasAccess);\n * ```\n */\nexport class OrganizationProductsResource extends BaseResource {\n /**\n * List effective product access for every organization-scoped product.\n *\n * @param organizationId - Organization whose product access should be listed.\n * @param query - Optional pagination.\n * @returns A paginated list of product access summaries.\n *\n * @example\n * ```ts\n * const { items } = await client.organizations.products.list('org-id');\n * for (const item of items) {\n * console.log(item.product.slug, item.hasAccess);\n * }\n * ```\n */\n async list(organizationId: string, query?: ListQuery): Promise<Paginated<OrganizationProductAccess>> {\n return this.httpClient.get(`/organizations/${organizationId}/products`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * Get effective access for one organization-scoped product.\n *\n * @param organizationId - Organization to inspect.\n * @param product - Product slug from the product registry.\n * @returns Product access summary including entitlement and subscription state.\n *\n * @example\n * ```ts\n * const access = await client.organizations.products.get('org-id', 'office');\n * console.log(access.hasAccess, access.subscription?.plan);\n * ```\n */\n async get(organizationId: string, product: string): Promise<OrganizationProductAccess> {\n return this.httpClient.get(`/organizations/${organizationId}/products/${product}`);\n }\n\n /**\n * Check whether an organization currently has access to a product.\n *\n * @param organizationId - Organization to check.\n * @param product - Product slug from the product registry.\n * @returns Compact entitlement check result.\n *\n * @example\n * ```ts\n * const { hasAccess } = await client.organizations.products.checkEntitlement('org-id', 'network');\n * ```\n */\n async checkEntitlement(organizationId: string, product: string): Promise<OrganizationProductEntitlementCheck> {\n return this.httpClient.get(`/organizations/${organizationId}/products/${product}/entitlement`);\n }\n}\n","import type { ListQuery, Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\nimport { OrganizationAiGatewayResource } from './organization-ai-gateway';\nimport { OrganizationEnvVarsResource } from './organization-env-vars';\nimport { OrganizationMembersResource } from './organization-members';\nimport { OrganizationProductsResource } from './organization-products';\n\n/** A Gigadrive Network organization. */\nexport interface Organization {\n /** Unique identifier (UUID). */\n id: string;\n /** Display name of the organization. */\n name: string;\n /** URL-safe slug (e.g. `gigadrive`). */\n slug: string;\n /** Avatar / logo URL. */\n imageUrl: string;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/** Input for creating an organization. */\nexport interface CreateOrganizationInput {\n /** Display name for the new organization. */\n name: string;\n /** Optional URL-safe slug. Generated from the name when omitted. */\n slug?: string;\n}\n\n/**\n * Manage organizations. Accessed via {@link GigadriveClient.organizations}.\n *\n * @example\n * ```ts\n * const { items: orgs } = await client.organizations.list();\n * console.log(orgs.map((o) => o.name));\n * ```\n */\nexport class OrganizationsResource extends BaseResource {\n /**\n * Manage environment variables scoped to an organization.\n *\n * @example\n * ```ts\n * // List all env vars for an organization\n * const { items } = await client.organizations.envVars.list('org-id');\n *\n * // Create a new env var\n * await client.organizations.envVars.create('org-id', {\n * key: 'ANALYTICS_KEY',\n * value: 'ak_live_...',\n * sensitive: true,\n * });\n * ```\n */\n readonly envVars: OrganizationEnvVarsResource;\n\n /**\n * AI Gateway governance for an organization: usage analytics, budgets, and\n * model/provider policies.\n *\n * @example\n * ```ts\n * const usage = await client.organizations.aiGateway.usage.summary('org-id', { from: '2026-06-01' });\n * console.log(usage.summary.totalTokens);\n * ```\n */\n readonly aiGateway: OrganizationAiGatewayResource;\n\n /**\n * List organization members and membership roles.\n *\n * @example\n * ```ts\n * const { items } = await client.organizations.members.list('org-id');\n * ```\n */\n readonly members: OrganizationMembersResource;\n\n /**\n * Inspect organization product entitlements. Read-only through the public\n * API — plan changes happen in Gigadrive product surfaces, not via the SDK.\n *\n * @example\n * ```ts\n * const check = await client.organizations.products.checkEntitlement('org-id', 'office');\n * ```\n */\n readonly products: OrganizationProductsResource;\n\n constructor(...args: ConstructorParameters<typeof BaseResource>) {\n super(...args);\n this.envVars = new OrganizationEnvVarsResource(this.httpClient);\n this.aiGateway = new OrganizationAiGatewayResource(this.httpClient);\n this.members = new OrganizationMembersResource(this.httpClient);\n this.products = new OrganizationProductsResource(this.httpClient);\n }\n\n /**\n * List organizations the authenticated actor has access to.\n *\n * @param query - Optional pagination.\n * @returns A paginated list of organizations.\n *\n * @example\n * ```ts\n * const { items, total } = await client.organizations.list();\n * console.log(`Found ${total} organizations`);\n * ```\n */\n async list(query?: ListQuery): Promise<Paginated<Organization>> {\n return this.httpClient.get('/organizations', {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * Get a single organization by ID.\n *\n * @param organizationId - Organization to retrieve.\n * @returns The organization.\n *\n * @example\n * ```ts\n * const org = await client.organizations.get('org-id');\n * console.log(org.name, org.slug);\n * ```\n */\n async get(organizationId: string): Promise<Organization> {\n return this.httpClient.get(`/organizations/${organizationId}`);\n }\n\n /**\n * Create a new organization.\n *\n * Requires a user-backed token with the `platform:organizations:write` scope.\n * The authenticated user becomes the organization owner.\n *\n * @param input - Organization creation input.\n * @returns The created organization.\n *\n * @example\n * ```ts\n * const org = await client.organizations.create({ name: 'Acme Corp' });\n * console.log(org.id, org.slug);\n * ```\n */\n async create(input: CreateOrganizationInput): Promise<Organization> {\n return this.httpClient.post('/organizations', input);\n }\n}\n","import { BaseResource } from './base-resource';\n\n/** Input for minting a routing-only sticky session URL. */\nexport interface CreateStickySessionUrlInput {\n /** Opaque application key shared by callers that must reach the same instance. */\n key: string;\n /** Relative deployment route, including any application query parameters. */\n endpoint: string;\n /** HTTP method used to resolve the target route. Defaults to `GET`. */\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'HEAD' | 'OPTIONS' | 'PATCH';\n /** URL lifetime in seconds. Defaults to four hours; accepted range is 60–86,400. */\n expiresInSeconds?: number;\n}\n\n/** A signed sticky URL and its absolute ISO 8601 expiration time. */\nexport interface CreateStickySessionUrlResult {\n url: string;\n expiresAt: string;\n}\n\n/**\n * Creates protocol-independent sticky routing URLs for MicroVM functions.\n *\n * The URL selects an instance but does not authenticate an application user or\n * store application state. Reusing the same key and unexpired URL keeps HTTP,\n * streaming, and WebSocket traffic on the same function instance.\n */\nexport class StickySessionsResource extends BaseResource {\n /**\n * Mints a signed URL for an opaque application key.\n *\n * Deployed Gigadrive workloads can call this with a zero-config\n * `GigadriveClient`; the platform injects `GIGADRIVE_CLIENT_ID` and\n * `GIGADRIVE_CLIENT_SECRET` using the SDK's existing credential chain.\n */\n async createUrl(input: CreateStickySessionUrlInput): Promise<CreateStickySessionUrlResult> {\n return this.httpClient.post('/sticky-sessions/urls', {\n ...input,\n method: input.method ?? 'GET',\n });\n }\n}\n","import { readEnv, resolveCredentialProvider } from './auth/credential-provider';\nimport { TokenManager } from './auth/token-manager';\nimport { HttpClient } from './http-client';\nimport { AiGatewayResource } from './resources/ai-gateway';\nimport { ApiKeysResource } from './resources/api-keys';\nimport { ApplicationsResource } from './resources/applications';\nimport { DeploymentsResource } from './resources/deployments';\nimport { ImageOptimizationResource } from './resources/image-optimization';\nimport { OrganizationsResource } from './resources/organizations';\nimport { StickySessionsResource } from './resources/sticky-sessions';\n\nconst DEFAULT_BASE_URL = 'https://api.gigadrive.network';\n\n/**\n * Configuration for the {@link GigadriveClient}.\n *\n * Credentials are resolved in priority order: explicit config fields first,\n * then environment variables. See {@link GigadriveClient} for the full\n * resolution chain.\n */\nexport interface GigadriveClientConfig {\n /**\n * OAuth2 client ID (the API key ID from the Gigadrive dashboard).\n * Used for both client-credentials and refresh-token flows.\n * Falls back to the `GIGADRIVE_CLIENT_ID` environment variable.\n */\n clientId?: string;\n\n /**\n * OAuth2 client secret (the API key secret from the Gigadrive dashboard).\n * Used together with {@link clientId} for the client-credentials grant.\n * Falls back to the `GIGADRIVE_CLIENT_SECRET` environment variable.\n */\n clientSecret?: string;\n\n /**\n * A pre-obtained bearer token (either an IDP or Network token).\n * When set, the SDK sends this token directly without any OAuth exchange.\n * The token is never refreshed — if it expires, requests will fail.\n * Falls back to the `GIGADRIVE_BEARER_TOKEN` environment variable.\n */\n bearerToken?: string;\n\n /**\n * An IDP refresh token for automatic access-token renewal. Used together\n * with {@link clientId}. The SDK will exchange this for short-lived access\n * tokens and handle refresh-token rotation automatically.\n * Falls back to the `GIGADRIVE_REFRESH_TOKEN` environment variable.\n */\n refreshToken?: string;\n\n /**\n * The IDP issuer URL used for OIDC discovery (fetching the\n * `.well-known/openid-configuration`). Only needed for refresh-token and\n * authorization-code flows.\n * Falls back to `GIGADRIVE_IDP_ISSUER_URL`, default: `https://idp.gigadrive.de`.\n */\n idpIssuerUrl?: string;\n\n /**\n * Callback for the OAuth2 authorization code flow with PKCE. The SDK\n * builds the authorization URL and passes it to this callback. Your code\n * must present the URL to the user (e.g. open a browser), then return\n * either the full redirect URL or just the authorization code.\n *\n * Requires {@link clientId} to be set.\n *\n * @param url - The authorization URL the user should visit.\n * @returns The full redirect URL (including `?code=...&state=...`) or the\n * bare authorization code.\n *\n * @example\n * ```ts\n * const client = new GigadriveClient({\n * clientId: 'my-app',\n * onAuthorizationUrl: async (url) => {\n * console.log('Visit:', url);\n * return await readline.question('Paste the redirect URL: ');\n * },\n * });\n * ```\n */\n onAuthorizationUrl?: (url: string) => Promise<string>;\n\n /**\n * Redirect URI for the authorization code flow.\n * Default: `urn:ietf:wg:oauth:2.0:oob` (out-of-band / manual copy-paste).\n */\n redirectUri?: string;\n\n /**\n * OAuth scopes to request during the authorization-code flow, in addition to\n * the default identity scopes (`openid profile email offline_access`). Use\n * this to request API capability scopes (e.g. `network:applications:read`) so\n * the resulting token can call the corresponding endpoints.\n */\n scopes?: string[];\n\n /**\n * Base URL of the Gigadrive Network API.\n * Falls back to `GIGADRIVE_API_BASE_URL`, default: `https://api.gigadrive.network`.\n */\n baseUrl?: string;\n\n /**\n * Custom `fetch` implementation. Useful for testing (injectable mock) or\n * non-standard runtimes like Cloudflare Workers that provide their own\n * `fetch`. Defaults to `globalThis.fetch`.\n */\n fetch?: typeof globalThis.fetch;\n}\n\n/**\n * The main entry point for the Gigadrive Network SDK.\n *\n * Create an instance to interact with organizations, applications, deployments,\n * storage, and the AI gateway. Authentication is handled automatically —\n * tokens are obtained, cached, and refreshed behind the scenes.\n *\n * ## Credential resolution order\n *\n * The client resolves credentials in the following order, using the first\n * match it finds:\n *\n * 1. Explicit `bearerToken` in config\n * 2. Explicit `clientId` + `clientSecret` in config\n * 3. Explicit `clientId` + `refreshToken` in config\n * 4. Explicit `clientId` + `onAuthorizationUrl` callback in config\n * 5. `GIGADRIVE_BEARER_TOKEN` environment variable\n * 6. `GIGADRIVE_CLIENT_ID` + `GIGADRIVE_CLIENT_SECRET` environment variables\n * 7. `GIGADRIVE_CLIENT_ID` + `GIGADRIVE_REFRESH_TOKEN` environment variables\n *\n * If no credentials are found, the constructor throws an\n * {@link AuthenticationError}.\n *\n * @example\n * ```ts\n * // Credentials auto-detected from environment variables\n * const client = new GigadriveClient();\n *\n * // Explicit API key (client credentials)\n * const client = new GigadriveClient({\n * clientId: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',\n * clientSecret: 'sk_live_...',\n * });\n *\n * // Pre-obtained bearer token\n * const client = new GigadriveClient({ bearerToken: 'eyJ...' });\n *\n * // IDP refresh token — access tokens are renewed automatically\n * const client = new GigadriveClient({\n * clientId: 'my-app',\n * refreshToken: 'rt_...',\n * });\n *\n * // Use the client\n * const orgs = await client.organizations.list();\n * const deployment = await client.deployments.create({ applicationId: 'app-1' });\n * ```\n *\n * @throws {@link AuthenticationError} if no valid credentials are found.\n */\nexport class GigadriveClient {\n /** Organization management (list, environment variables). */\n readonly organizations: OrganizationsResource;\n /** Application management (list, environment variables, storage). */\n readonly applications: ApplicationsResource;\n /** Deployment lifecycle (create, upload, status, logs). */\n readonly deployments: DeploymentsResource;\n /** AI Gateway — OpenAI-compatible chat completions and model listing. */\n readonly aiGateway: AiGatewayResource;\n /** Application-scoped API key management (create, list, revoke). */\n readonly apiKeys: ApiKeysResource;\n /** Signed URLs that keep related requests on one MicroVM instance. */\n readonly stickySessions: StickySessionsResource;\n /** Managed image optimization inspection and cache purge operations. */\n readonly imageOptimization: ImageOptimizationResource;\n\n constructor(config: GigadriveClientConfig = {}) {\n const baseUrl = config.baseUrl ?? readEnv('GIGADRIVE_API_BASE_URL') ?? DEFAULT_BASE_URL;\n // Bind the default fetch to globalThis so it can be invoked as a method on\n // the HTTP client without throwing \"Illegal invocation\" in some runtimes.\n const fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis);\n\n const credentialProvider = resolveCredentialProvider({ ...config, baseUrl, fetch: fetchFn });\n const tokenManager = new TokenManager(credentialProvider);\n const httpClient = new HttpClient(baseUrl, tokenManager, fetchFn);\n\n this.organizations = new OrganizationsResource(httpClient);\n this.applications = new ApplicationsResource(httpClient);\n this.deployments = new DeploymentsResource(httpClient);\n this.aiGateway = new AiGatewayResource(httpClient);\n this.apiKeys = new ApiKeysResource(httpClient);\n this.stickySessions = new StickySessionsResource(httpClient);\n this.imageOptimization = new ImageOptimizationResource(httpClient);\n }\n}\n","import type { Paginated } from './http-client';\n\n/**\n * Lazily iterate every item across all pages of a cursor-paginated endpoint.\n * Pass a function that fetches one page for a given cursor; iteration stops when\n * the API stops returning a `nextCursor`.\n *\n * @typeParam T - The item type.\n * @param fetchPage - Fetches a single page for the given cursor (`undefined` for the first page).\n *\n * @example\n * ```ts\n * for await (const object of paginate((cursor) =>\n * client.applications.storage.objects.list('app-id', 'bucket-id', { cursor }),\n * )) {\n * console.log(object.key);\n * }\n * ```\n */\nexport async function* paginate<T>(\n fetchPage: (cursor: string | undefined) => Promise<Paginated<T>>\n): AsyncGenerator<T> {\n let cursor: string | undefined;\n do {\n const page = await fetchPage(cursor);\n for (const item of page.items) {\n yield item;\n }\n cursor = page.nextCursor;\n } while (cursor);\n}\n"],"mappings":"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","names":["DEFAULT_BASE_URL"]}
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/requires-port@1.0.0/node_modules/requires-port/index.js","../../../node_modules/.pnpm/querystringify@2.2.0/node_modules/querystringify/index.js","../../../node_modules/.pnpm/url-parse@1.5.10/node_modules/url-parse/index.js","../../../node_modules/.pnpm/is-stream@2.0.1/node_modules/is-stream/index.js","../../../node_modules/.pnpm/lodash.throttle@4.1.1/node_modules/lodash.throttle/index.js","../../../node_modules/.pnpm/custom-error-instance@2.1.1/node_modules/custom-error-instance/bin/factories.js","../../../node_modules/.pnpm/custom-error-instance@2.1.1/node_modules/custom-error-instance/bin/error.js","../../../node_modules/.pnpm/custom-error-instance@2.1.1/node_modules/custom-error-instance/index.js","../../../node_modules/.pnpm/lodash._basetostring@4.12.0/node_modules/lodash._basetostring/index.js","../../../node_modules/.pnpm/lodash._stringtopath@4.8.0/node_modules/lodash._stringtopath/index.js","../../../node_modules/.pnpm/lodash._baseiteratee@4.7.0/node_modules/lodash._baseiteratee/index.js","../../../node_modules/.pnpm/lodash._createset@4.0.3/node_modules/lodash._createset/index.js","../../../node_modules/.pnpm/lodash._root@3.0.1/node_modules/lodash._root/index.js","../../../node_modules/.pnpm/lodash._baseuniq@4.6.0/node_modules/lodash._baseuniq/index.js","../../../node_modules/.pnpm/lodash.uniqby@4.5.0/node_modules/lodash.uniqby/index.js","../../../node_modules/.pnpm/combine-errors@3.0.3/node_modules/combine-errors/index.js","../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/polyfills.js","../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/legacy-streams.js","../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/clone.js","../../../node_modules/.pnpm/graceful-fs@4.2.11/node_modules/graceful-fs/graceful-fs.js","../../../node_modules/.pnpm/retry@0.12.0/node_modules/retry/lib/retry_operation.js","../../../node_modules/.pnpm/retry@0.12.0/node_modules/retry/lib/retry.js","../../../node_modules/.pnpm/retry@0.12.0/node_modules/retry/index.js","../../../node_modules/.pnpm/signal-exit@3.0.7/node_modules/signal-exit/signals.js","../../../node_modules/.pnpm/signal-exit@3.0.7/node_modules/signal-exit/index.js","../../../node_modules/.pnpm/proper-lockfile@4.1.2/node_modules/proper-lockfile/lib/mtime-precision.js","../../../node_modules/.pnpm/proper-lockfile@4.1.2/node_modules/proper-lockfile/lib/lockfile.js","../../../node_modules/.pnpm/proper-lockfile@4.1.2/node_modules/proper-lockfile/lib/adapter.js","../../../node_modules/.pnpm/proper-lockfile@4.1.2/node_modules/proper-lockfile/index.js","../src/errors.ts","../src/auth/credential-provider.ts","../src/auth/token-manager.ts","../src/http-client.ts","../src/streaming.ts","../src/resources/base-resource.ts","../src/resources/ai-gateway/index.ts","../src/resources/api-keys.ts","../src/resources/application-env-vars.ts","../src/resources/application-requests.ts","../src/upload/checksum.ts","../src/upload/content-type.ts","../src/upload/source.ts","../../../node_modules/.pnpm/tus-js-client@4.3.1/node_modules/tus-js-client/lib.esm/error.js","../../../node_modules/.pnpm/tus-js-client@4.3.1/node_modules/tus-js-client/lib.esm/logger.js","../../../node_modules/.pnpm/tus-js-client@4.3.1/node_modules/tus-js-client/lib.esm/noopUrlStorage.js","../../../node_modules/.pnpm/js-base64@3.8.1/node_modules/js-base64/base64.mjs","../../../node_modules/.pnpm/tus-js-client@4.3.1/node_modules/tus-js-client/lib.esm/upload.js","../../../node_modules/.pnpm/tus-js-client@4.3.1/node_modules/tus-js-client/lib.esm/uuid.js","../../../node_modules/.pnpm/tus-js-client@4.3.1/node_modules/tus-js-client/lib.esm/node/fileReader.js","../../../node_modules/.pnpm/tus-js-client@4.3.1/node_modules/tus-js-client/lib.esm/node/sources/BufferSource.js","../../../node_modules/.pnpm/tus-js-client@4.3.1/node_modules/tus-js-client/lib.esm/node/sources/FileSource.js","../../../node_modules/.pnpm/tus-js-client@4.3.1/node_modules/tus-js-client/lib.esm/node/sources/StreamSource.js","../../../node_modules/.pnpm/tus-js-client@4.3.1/node_modules/tus-js-client/lib.esm/node/fileSignature.js","../../../node_modules/.pnpm/tus-js-client@4.3.1/node_modules/tus-js-client/lib.esm/node/httpStack.js","../../../node_modules/.pnpm/tus-js-client@4.3.1/node_modules/tus-js-client/lib.esm/node/urlStorage.js","../../../node_modules/.pnpm/tus-js-client@4.3.1/node_modules/tus-js-client/lib.esm/node/index.js","../src/upload/transport.ts","../src/resources/storage-buckets.ts","../src/resources/storage-objects.ts","../src/resources/storage-upload-sessions.ts","../src/resources/application-storage.ts","../src/resources/applications.ts","../src/resources/deployments.ts","../src/resources/image-optimization.ts","../src/resources/organization-ai-gateway.ts","../src/resources/organization-env-vars.ts","../src/resources/organization-members.ts","../src/resources/organization-products.ts","../src/resources/organizations.ts","../src/resources/sticky-sessions.ts","../src/client.ts","../src/pagination.ts"],"sourcesContent":["'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?#&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encode(key);\n value = encode(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , controlOrWhitespace = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n , CRHTLF = /[\\n\\r\\t]/g\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n , port = /:\\d+$/\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n , windowsDriveLetter = /^[a-zA-Z]:/;\n\n/**\n * Remove control characters and whitespace from the beginning of a string.\n *\n * @param {Object|String} str String to trim.\n * @returns {String} A new string representing `str` stripped of control\n * characters and whitespace from its beginning.\n * @public\n */\nfunction trimLeft(str) {\n return (str ? str : '').toString().replace(controlOrWhitespace, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address, url) { // Sanitize what is left of the address\n return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d*)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var globalVar;\n\n if (typeof window !== 'undefined') globalVar = window;\n else if (typeof global !== 'undefined') globalVar = global;\n else if (typeof self !== 'undefined') globalVar = self;\n else globalVar = {};\n\n var location = globalVar.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n return (\n scheme === 'file:' ||\n scheme === 'ftp:' ||\n scheme === 'http:' ||\n scheme === 'https:' ||\n scheme === 'ws:' ||\n scheme === 'wss:'\n );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n location = location || {};\n\n var match = protocolre.exec(address);\n var protocol = match[1] ? match[1].toLowerCase() : '';\n var forwardSlashes = !!match[2];\n var otherSlashes = !!match[3];\n var slashesCount = 0;\n var rest;\n\n if (forwardSlashes) {\n if (otherSlashes) {\n rest = match[2] + match[3] + match[4];\n slashesCount = match[2].length + match[3].length;\n } else {\n rest = match[2] + match[4];\n slashesCount = match[2].length;\n }\n } else {\n if (otherSlashes) {\n rest = match[3] + match[4];\n slashesCount = match[3].length;\n } else {\n rest = match[4]\n }\n }\n\n if (protocol === 'file:') {\n if (slashesCount >= 2) {\n rest = rest.slice(2);\n }\n } else if (isSpecial(protocol)) {\n rest = match[4];\n } else if (protocol) {\n if (forwardSlashes) {\n rest = rest.slice(2);\n }\n } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n rest = match[4];\n }\n\n return {\n protocol: protocol,\n slashes: forwardSlashes || isSpecial(protocol),\n slashesCount: slashesCount,\n rest: rest\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n if (relative === '') return base;\n\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '', location);\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (\n extracted.protocol === 'file:' && (\n extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n (!extracted.slashes &&\n (extracted.protocol ||\n extracted.slashesCount < 2 ||\n !isSpecial(url.protocol)))\n ) {\n instructions[3] = [/(.*)/, 'pathname'];\n }\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address, url);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n index = parse === '@'\n ? address.lastIndexOf(parse)\n : address.indexOf(parse);\n\n if (~index) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // Default to a / for pathname if none exists. This normalizes the URL\n // to always have a /\n //\n if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n url.pathname = '/' + url.pathname;\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n\n if (url.auth) {\n index = url.auth.indexOf(':');\n\n if (~index) {\n url.username = url.auth.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = url.auth.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password))\n } else {\n url.username = encodeURIComponent(decodeURIComponent(url.auth));\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n }\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (port.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n case 'username':\n case 'password':\n url[part] = encodeURIComponent(value);\n break;\n\n case 'auth':\n var index = value.indexOf(':');\n\n if (~index) {\n url.username = value.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = value.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password));\n } else {\n url.username = encodeURIComponent(decodeURIComponent(value));\n }\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , host = url.host\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result =\n protocol +\n ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n } else if (url.password) {\n result += ':'+ url.password;\n result += '@';\n } else if (\n url.protocol !== 'file:' &&\n isSpecial(url.protocol) &&\n !host &&\n url.pathname !== '/'\n ) {\n //\n // Add back the empty userinfo, otherwise the original invalid URL\n // might be transformed into a valid one with `url.pathname` as host.\n //\n result += '@';\n }\n\n //\n // Trailing colon is removed from `url.host` when it is parsed. If it still\n // ends with a colon, then add back the trailing colon that was removed. This\n // prevents an invalid URL from being transformed into a valid one.\n //\n if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {\n host += ':';\n }\n\n result += host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","'use strict';\n\nconst isStream = stream =>\n\tstream !== null &&\n\ttypeof stream === 'object' &&\n\ttypeof stream.pipe === 'function';\n\nisStream.writable = stream =>\n\tisStream(stream) &&\n\tstream.writable !== false &&\n\ttypeof stream._write === 'function' &&\n\ttypeof stream._writableState === 'object';\n\nisStream.readable = stream =>\n\tisStream(stream) &&\n\tstream.readable !== false &&\n\ttypeof stream._read === 'function' &&\n\ttypeof stream._readableState === 'object';\n\nisStream.duplex = stream =>\n\tisStream.writable(stream) &&\n\tisStream.readable(stream);\n\nisStream.transform = stream =>\n\tisStream.duplex(stream) &&\n\ttypeof stream._transform === 'function';\n\nmodule.exports = isStream;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = throttle;\n","\"use strict\";\n\nexports.expectReceive = function(properties, configuration, factory) {\n var message;\n factory.root(properties, configuration, factory);\n\n message = this.message;\n if (properties.hasOwnProperty('expected')) message += ' Expected ' + properties.expected + '.';\n if (properties.hasOwnProperty('received')) message += ' Received: ' + properties.received + '.';\n this.message = message;\n};\n\nexports.root = function(properties, configuration, factories) {\n var _this = this;\n var code;\n var config = { stackLength: Error.stackTraceLimit, rootOnly: true };\n var messageStr = '';\n var originalStackLength = Error.stackTraceLimit;\n var stack;\n\n function updateStack() {\n stack[0] = _this.toString();\n _this.stack = stack.join('\\n');\n }\n\n // get configuration options\n if (!configuration || typeof configuration !== 'object') configuration = {};\n if (configuration.hasOwnProperty('stackLength') &&\n typeof configuration.stackLength === 'number' &&\n !isNaN(configuration.stackLength) &&\n configuration.stackLength >= 0) config.stackLength = configuration.stackLength;\n if (!configuration.hasOwnProperty('rootOnly')) config.rootOnly = configuration.rootOnly;\n\n // check if this should only be run as root\n if (!config.rootOnly || this.CustomError.parent === Error) {\n\n // copy properties onto this object\n Object.keys(properties).forEach(function(key) {\n switch(key) {\n case 'code':\n code = properties.code || void 0;\n break;\n case 'message':\n messageStr = properties.message || '';\n break;\n default:\n _this[key] = properties[key];\n }\n });\n\n // generate the stack trace\n Error.stackTraceLimit = config.stackLength + 2;\n stack = (new Error()).stack.split('\\n');\n stack.splice(0, 3);\n stack.unshift('');\n Error.stackTraceLimit = originalStackLength;\n this.stack = stack.join('\\n');\n\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n get: function() {\n return code;\n },\n set: function(value) {\n code = value;\n updateStack();\n }\n });\n\n Object.defineProperty(this, 'message', {\n configurable: true,\n enumerable: true,\n get: function() {\n return messageStr;\n },\n set: function(value) {\n messageStr = value;\n updateStack();\n }\n });\n\n\n updateStack();\n\n }\n};","\"use strict\";\n\nmodule.exports = CustomError;\nCustomError.factory = require('./factories.js');\n\nvar Err = CustomError('CustomError');\nErr.order = CustomError(Err, { message: 'Arguments out of order.', code: 'EOARG' });\n\n/**\n * Create a custom error\n * @param {string} [name] The name to give the error. Defaults to the name of it's parent.\n * @param {function} [parent] The Error or CustomError constructor to inherit from.\n * @param {object} [properties] The default properties for the custom error.\n * @param {function} [factory] A function to call to modify the custom error instance when it is instantiated.\n * @returns {function} that should be used as a constructor.\n */\nfunction CustomError(name, parent, properties, factory) {\n var construct;\n var isRoot;\n\n // normalize arguments\n parent = findArg(arguments, 1, Error, isParentArg, [isPropertiesArg, isFactoryArg]);\n properties = findArg(arguments, 2, {}, isPropertiesArg, [isFactoryArg]);\n factory = findArg(arguments, 3, noop, isFactoryArg, []);\n name = findArg(arguments, 0, parent === Error ? 'Error' : parent.prototype.CustomError.name, isNameArg, [isParentArg, isPropertiesArg, isFactoryArg]);\n\n // if this is the root and their is no factory then use the default root factory\n isRoot = parent === Error;\n if (isRoot && factory === noop) factory = CustomError.factory.root;\n\n // build the constructor function\n construct = function(message, configuration) {\n var _this;\n var ar;\n var factories;\n var i;\n var item;\n var props;\n\n // force this function to be called with the new keyword\n if (!(this instanceof construct)) return new construct(message, configuration);\n\n // rename the constructor\n delete this.constructor.name;\n Object.defineProperty(this.constructor, 'name', {\n enumerable: false,\n configurable: true,\n value: name,\n writable: false\n });\n\n // make sure that the message is an object\n if (typeof message === 'string') message = { message: message };\n if (!message) message = {};\n\n // build the properties object\n ar = this.CustomError.chain.slice(0).reverse().map(function(value) { return value.properties });\n ar.push(message);\n ar.unshift({});\n props = Object.assign.apply(Object, ar);\n\n // build the factories caller (forcing scope to this)\n _this = this;\n factories = {};\n Object.keys(CustomError.factory).forEach(function(key) {\n factories[key] = function(props, config) {\n CustomError.factory[key].call(_this, props, config, factories);\n };\n });\n\n // call each factory in the chain, starting at the root\n for (i = this.CustomError.chain.length - 1; i >= 0; i--) {\n item = this.CustomError.chain[i];\n if (item.factory !== noop) {\n item.factory.call(this, props, configuration, factories);\n }\n }\n };\n\n // cause the function prototype to inherit from parent's prototype\n construct.prototype = Object.create(parent.prototype);\n construct.prototype.constructor = construct;\n\n // update error name\n construct.prototype.name = name;\n\n // add details about the custom error to the prototype\n construct.prototype.CustomError = {\n chain: isRoot ? [] : parent.prototype.CustomError.chain.slice(0),\n factory: factory,\n name: name,\n parent: parent,\n properties: properties\n };\n construct.prototype.CustomError.chain.unshift(construct.prototype.CustomError);\n\n // update the toString method on the prototype to accept a code\n construct.prototype.toString = function() {\n var result = this.CustomError.chain[this.CustomError.chain.length - 1].name;\n if (this.code) result += ' ' + this.code;\n if (this.message) result += ': ' + this.message;\n return result;\n };\n\n return construct;\n}\n\n\n\n\nfunction findArg(args, index, defaultValue, filter, antiFilters) {\n var anti = -1;\n var found = -1;\n var i;\n var j;\n var len = index < args.length ? index : args.length;\n var val;\n\n for (i = 0; i <= len; i++) {\n val = args[i];\n if (anti === -1) {\n for (j = 0; j < antiFilters.length; j++) {\n if (antiFilters[j](val)) anti = i;\n }\n }\n if (found === -1 && filter(val)) {\n found = i;\n }\n }\n\n if (found !== -1 && anti !== -1 && anti < found) throw new Err.order();\n return found !== -1 ?args[found] : defaultValue;\n}\n\nfunction isFactoryArg(value) {\n return typeof value === 'function' && value !== Error && !value.prototype.CustomError;\n}\n\nfunction isNameArg(value) {\n return typeof value === 'string';\n}\n\nfunction isParentArg(value) {\n return typeof value === 'function' && (value === Error || value.prototype.CustomError);\n}\n\nfunction isPropertiesArg(value) {\n return value && typeof value === 'object';\n}\n\nfunction noop() {}","\nmodule.exports = require('./bin/error');\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to determine if values are of the language type `Object`. */\nvar objectTypes = {\n 'function': true,\n 'object': true\n};\n\n/** Detect free variable `exports`. */\nvar freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType)\n ? exports\n : undefined;\n\n/** Detect free variable `module`. */\nvar freeModule = (objectTypes[typeof module] && module && !module.nodeType)\n ? module\n : undefined;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global);\n\n/** Detect free variable `self`. */\nvar freeSelf = checkGlobal(objectTypes[typeof self] && self);\n\n/** Detect free variable `window`. */\nvar freeWindow = checkGlobal(objectTypes[typeof window] && window);\n\n/** Detect `this` as the global object. */\nvar thisGlobal = checkGlobal(objectTypes[typeof this] && this);\n\n/**\n * Used as a reference to the global object.\n *\n * The `this` value is used if it's the global object to avoid Greasemonkey's\n * restricted `window` object, otherwise the `window` object is used.\n */\nvar root = freeGlobal ||\n ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) ||\n freeSelf || thisGlobal || Function('return this')();\n\n/**\n * Checks if `value` is a global object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {null|Object} Returns `value` if it's a global object, else `null`.\n */\nfunction checkGlobal(value) {\n return (value && value.Object === Object) ? value : null;\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\nmodule.exports = baseToString;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\nvar baseToString = require('lodash._basetostring');\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to determine if values are of the language type `Object`. */\nvar objectTypes = {\n 'function': true,\n 'object': true\n};\n\n/** Detect free variable `exports`. */\nvar freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType)\n ? exports\n : undefined;\n\n/** Detect free variable `module`. */\nvar freeModule = (objectTypes[typeof module] && module && !module.nodeType)\n ? module\n : undefined;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global);\n\n/** Detect free variable `self`. */\nvar freeSelf = checkGlobal(objectTypes[typeof self] && self);\n\n/** Detect free variable `window`. */\nvar freeWindow = checkGlobal(objectTypes[typeof window] && window);\n\n/** Detect `this` as the global object. */\nvar thisGlobal = checkGlobal(objectTypes[typeof this] && this);\n\n/**\n * Used as a reference to the global object.\n *\n * The `this` value is used if it's the global object to avoid Greasemonkey's\n * restricted `window` object, otherwise the `window` object is used.\n */\nvar root = freeGlobal ||\n ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) ||\n freeSelf || thisGlobal || Function('return this')();\n\n/**\n * Checks if `value` is a global object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {null|Object} Returns `value` if it's a global object, else `null`.\n */\nfunction checkGlobal(value) {\n return (value && value.Object === Object) ? value : null;\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to search.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object[key];\n return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n var result = [];\n toString(string).replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'user': 'fred' };\n * var other = { 'user': 'fred' };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8 which returns 'object' for typed array and weak map constructors,\n // and PhantomJS 1.9 which returns 'function' for `NodeList` instances.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/6.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (!isObject(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = stringToPath;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\nvar stringToPath = require('lodash._stringtopath');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n PARTIAL_COMPARE_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Used to determine if values are of the language type `Object`. */\nvar objectTypes = {\n 'function': true,\n 'object': true\n};\n\n/** Detect free variable `exports`. */\nvar freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType)\n ? exports\n : undefined;\n\n/** Detect free variable `module`. */\nvar freeModule = (objectTypes[typeof module] && module && !module.nodeType)\n ? module\n : undefined;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global);\n\n/** Detect free variable `self`. */\nvar freeSelf = checkGlobal(objectTypes[typeof self] && self);\n\n/** Detect free variable `window`. */\nvar freeWindow = checkGlobal(objectTypes[typeof window] && window);\n\n/** Detect `this` as the global object. */\nvar thisGlobal = checkGlobal(objectTypes[typeof this] && this);\n\n/**\n * Used as a reference to the global object.\n *\n * The `this` value is used if it's the global object to avoid Greasemonkey's\n * restricted `window` object, otherwise the `window` object is used.\n */\nvar root = freeGlobal ||\n ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) ||\n freeSelf || thisGlobal || Function('return this')();\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\nfunction baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n}\n\n/**\n * Checks if `value` is a global object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {null|Object} Returns `value` if it's a global object, else `null`.\n */\nfunction checkGlobal(value) {\n return (value && value.Object === Object) ? value : null;\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\nfunction setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetPrototype = Object.getPrototypeOf,\n nativeKeys = Object.keys;\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var cache = this.__data__;\n if (cache instanceof ListCache && cache.__data__.length == LARGE_ARRAY_SIZE) {\n cache = this.__data__ = new MapCache(cache.__data__);\n }\n cache.set(key, value);\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to search.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n // Avoid a bug in IE 10-11 where objects with a [[Prototype]] of `null`,\n // that are composed entirely of index properties, return `false` for\n // `hasOwnProperty` checks of them.\n return hasOwnProperty.call(object, key) ||\n (typeof object == 'object' && key in object && getPrototype(object) === null);\n}\n\n/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n return key in Object(object);\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {boolean} [bitmask] The bitmask of comparison flags.\n * The bitmask may be composed of the following flags:\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, bitmask, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = arrayTag,\n othTag = arrayTag;\n\n if (!objIsArr) {\n objTag = getTag(object);\n objTag = objTag == argsTag ? objectTag : objTag;\n }\n if (!othIsArr) {\n othTag = getTag(other);\n othTag = othTag == argsTag ? objectTag : othTag;\n }\n var objIsObj = objTag == objectTag && !isHostObject(object),\n othIsObj = othTag == objectTag && !isHostObject(other),\n isSameTag = objTag == othTag;\n\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)\n : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);\n }\n if (!(bitmask & PARTIAL_COMPARE_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, equalFunc, customizer, bitmask, stack);\n}\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n}\n\n/**\n * The base implementation of `_.keys` which doesn't skip the constructor\n * property of prototypes or treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n return nativeKeys(Object(object));\n}\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n}\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);\n };\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\nfunction createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!seen.has(othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {\n return seen.add(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, customizer, bitmask, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n // Coerce dates and booleans to numbers, dates to milliseconds and\n // booleans to `1` or `0` treating invalid dates coerced to `NaN` as\n // not equal.\n return +object == +other;\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case numberTag:\n // Treat `NaN` vs. `NaN` as equal.\n return (object != +object) ? other != +other : object == +other;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/6.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= UNORDERED_COMPARE_FLAG;\n stack.set(object, other);\n\n // Recursively compare objects (susceptible to call stack limits).\n return equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n * for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, bitmask, stack) {\n var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n objProps = keys(object),\n objLength = objProps.length,\n othProps = keys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : baseHas(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n return result;\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a\n * [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) that affects\n * Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n var result = toPairs(object),\n length = result.length;\n\n while (length--) {\n result[length][2] = isStrictComparable(result[length][1]);\n }\n return result;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object[key];\n return isNative(value) ? value : undefined;\n}\n\n/**\n * Gets the `[[Prototype]]` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {null|Object} Returns the `[[Prototype]]`.\n */\nfunction getPrototype(value) {\n return nativeGetPrototype(Object(value));\n}\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction getTag(value) {\n return objectToString.call(value);\n}\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = objectToString.call(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : undefined;\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var result,\n index = -1,\n length = path.length;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result) {\n return result;\n }\n var length = object ? object.length : 0;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isString(object) || isArguments(object));\n}\n\n/**\n * Creates an array of index keys for `object` values of arrays,\n * `arguments` objects, and strings, otherwise `null` is returned.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array|null} Returns index keys, else `null`.\n */\nfunction indexKeys(object) {\n var length = object ? object.length : undefined;\n if (isLength(length) &&\n (isArray(object) || isString(object) || isArguments(object))) {\n return baseTimes(length, String);\n }\n return null;\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\n/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'user': 'fred' };\n * var other = { 'user': 'fred' };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @type {Function}\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(getLength(value)) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8 which returns 'object' for typed array and weak map constructors,\n // and PhantomJS 1.9 which returns 'function' for `NodeList` instances.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length,\n * else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/6.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (!isObject(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nfunction isTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[objectToString.call(value)];\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is used in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n var isProto = isPrototype(object);\n if (!(isProto || isArrayLike(object))) {\n return baseKeys(object);\n }\n var indexes = indexKeys(object),\n skipIndexes = !!indexes,\n result = indexes || [],\n length = result.length;\n\n for (var key in object) {\n if (baseHas(object, key) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length))) &&\n !(isProto && key == 'constructor')) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\nvar toPairs = createToPairs(keys);\n\n/**\n * This method returns the first argument given to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = baseIteratee;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to determine if values are of the language type `Object`. */\nvar objectTypes = {\n 'function': true,\n 'object': true\n};\n\n/** Detect free variable `exports`. */\nvar freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType)\n ? exports\n : undefined;\n\n/** Detect free variable `module`. */\nvar freeModule = (objectTypes[typeof module] && module && !module.nodeType)\n ? module\n : undefined;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global);\n\n/** Detect free variable `self`. */\nvar freeSelf = checkGlobal(objectTypes[typeof self] && self);\n\n/** Detect free variable `window`. */\nvar freeWindow = checkGlobal(objectTypes[typeof window] && window);\n\n/** Detect `this` as the global object. */\nvar thisGlobal = checkGlobal(objectTypes[typeof this] && this);\n\n/**\n * Used as a reference to the global object.\n *\n * The `this` value is used if it's the global object to avoid Greasemonkey's\n * restricted `window` object, otherwise the `window` object is used.\n */\nvar root = freeGlobal ||\n ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) ||\n freeSelf || thisGlobal || Function('return this')();\n\n/**\n * Checks if `value` is a global object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {null|Object} Returns `value` if it's a global object, else `null`.\n */\nfunction checkGlobal(value) {\n return (value && value.Object === Object) ? value : null;\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\n/**\n * Creates a set of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object[key];\n return isNative(value) ? value : undefined;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8 which returns 'object' for typed array and weak map constructors,\n // and PhantomJS 1.9 which returns 'function' for `NodeList` instances.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/6.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (!isObject(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * A no-operation function that returns `undefined` regardless of the\n * arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.noop(object) === undefined;\n * // => true\n */\nfunction noop() {\n // No operation performed.\n}\n\nmodule.exports = createSet;\n","/**\n * lodash 3.0.1 (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license <https://lodash.com/license>\n */\n\n/** Used to determine if values are of the language type `Object`. */\nvar objectTypes = {\n 'function': true,\n 'object': true\n};\n\n/** Detect free variable `exports`. */\nvar freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType)\n ? exports\n : undefined;\n\n/** Detect free variable `module`. */\nvar freeModule = (objectTypes[typeof module] && module && !module.nodeType)\n ? module\n : undefined;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = checkGlobal(freeExports && freeModule && typeof global == 'object' && global);\n\n/** Detect free variable `self`. */\nvar freeSelf = checkGlobal(objectTypes[typeof self] && self);\n\n/** Detect free variable `window`. */\nvar freeWindow = checkGlobal(objectTypes[typeof window] && window);\n\n/** Detect `this` as the global object. */\nvar thisGlobal = checkGlobal(objectTypes[typeof this] && this);\n\n/**\n * Used as a reference to the global object.\n *\n * The `this` value is used if it's the global object to avoid Greasemonkey's\n * restricted `window` object, otherwise the `window` object is used.\n */\nvar root = freeGlobal ||\n ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) ||\n freeSelf || thisGlobal || Function('return this')();\n\n/**\n * Checks if `value` is a global object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {null|Object} Returns `value` if it's a global object, else `null`.\n */\nfunction checkGlobal(value) {\n return (value && value.Object === Object) ? value : null;\n}\n\nmodule.exports = root;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\nvar createSet = require('lodash._createset'),\n root = require('lodash._root');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} array The array to search.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludes(array, value) {\n return !!array.length && baseIndexOf(array, value, 0) > -1;\n}\n\n/**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to search.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\nfunction arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to search.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return indexOfNaN(array, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * Checks if a cache value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the index at which the first occurrence of `NaN` is found in `array`.\n *\n * @private\n * @param {Array} array The array to search.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched `NaN`, else `-1`.\n */\nfunction indexOfNaN(array, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 0 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n var other = array[index];\n if (other !== other) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values ? values.length : 0;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to search.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\nfunction baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object[key];\n return isNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'user': 'fred' };\n * var other = { 'user': 'fred' };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified,\n * else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8 which returns 'object' for typed array and weak map constructors,\n // and PhantomJS 1.9 which returns 'function' for `NodeList` instances.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/6.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (!isObject(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseUniq;\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\nvar baseIteratee = require('lodash._baseiteratee'),\n baseUniq = require('lodash._baseuniq');\n\n/**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Array|Function|Object|string} [iteratee=_.identity]\n * The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\nfunction uniqBy(array, iteratee) {\n return (array && array.length)\n ? baseUniq(array, baseIteratee(iteratee))\n : [];\n}\n\nmodule.exports = uniqBy;\n","'use strict'\n\n/**\n * Module Dependencies\n */\n\nvar Custom = require('custom-error-instance')\nvar uniq = require('lodash.uniqby')\n\n/**\n * Use a custom error type\n */\n\nvar MultiError = Custom('MultiError')\n\n/**\n * Export `Error`\n */\n\nmodule.exports = error\n\n/**\n * Initialize an error\n */\n\nfunction error (errors) {\n if (!(this instanceof error)) return new error(errors)\n errors = Array.isArray(errors) ? errors : [ errors ]\n errors = uniq(errors, function (err) { return err.stack })\n if (errors.length === 1) return errors[0]\n var multierror = new MultiError({\n message: errors.map(function (err) { return err.message }).join('; '),\n errors: errors.reduce(function (errs, err) { return errs.concat(err.errors || err) }, []),\n })\n\n // lazily get/set the stack\n multierror.__defineGetter__('stack', function() {\n return errors.map(function (err) { return err.stack }).join('\\n\\n')\n })\n\n multierror.__defineSetter__('stack', function(value) {\n return [value].concat(multierror.stack).join('\\n\\n')\n })\n\n return multierror\n}\n","var constants = require('constants')\n\nvar origCwd = process.cwd\nvar cwd = null\n\nvar platform = process.env.GRACEFUL_FS_PLATFORM || process.platform\n\nprocess.cwd = function() {\n if (!cwd)\n cwd = origCwd.call(process)\n return cwd\n}\ntry {\n process.cwd()\n} catch (er) {}\n\n// This check is needed until node.js 12 is required\nif (typeof process.chdir === 'function') {\n var chdir = process.chdir\n process.chdir = function (d) {\n cwd = null\n chdir.call(process, d)\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)\n}\n\nmodule.exports = patch\n\nfunction patch (fs) {\n // (re-)implement some things that are known busted or missing.\n\n // lchmod, broken prior to 0.6.2\n // back-port the fix here.\n if (constants.hasOwnProperty('O_SYMLINK') &&\n process.version.match(/^v0\\.6\\.[0-2]|^v0\\.5\\./)) {\n patchLchmod(fs)\n }\n\n // lutimes implementation, or no-op\n if (!fs.lutimes) {\n patchLutimes(fs)\n }\n\n // https://github.com/isaacs/node-graceful-fs/issues/4\n // Chown should not fail on einval or eperm if non-root.\n // It should not fail on enosys ever, as this just indicates\n // that a fs doesn't support the intended operation.\n\n fs.chown = chownFix(fs.chown)\n fs.fchown = chownFix(fs.fchown)\n fs.lchown = chownFix(fs.lchown)\n\n fs.chmod = chmodFix(fs.chmod)\n fs.fchmod = chmodFix(fs.fchmod)\n fs.lchmod = chmodFix(fs.lchmod)\n\n fs.chownSync = chownFixSync(fs.chownSync)\n fs.fchownSync = chownFixSync(fs.fchownSync)\n fs.lchownSync = chownFixSync(fs.lchownSync)\n\n fs.chmodSync = chmodFixSync(fs.chmodSync)\n fs.fchmodSync = chmodFixSync(fs.fchmodSync)\n fs.lchmodSync = chmodFixSync(fs.lchmodSync)\n\n fs.stat = statFix(fs.stat)\n fs.fstat = statFix(fs.fstat)\n fs.lstat = statFix(fs.lstat)\n\n fs.statSync = statFixSync(fs.statSync)\n fs.fstatSync = statFixSync(fs.fstatSync)\n fs.lstatSync = statFixSync(fs.lstatSync)\n\n // if lchmod/lchown do not exist, then make them no-ops\n if (fs.chmod && !fs.lchmod) {\n fs.lchmod = function (path, mode, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchmodSync = function () {}\n }\n if (fs.chown && !fs.lchown) {\n fs.lchown = function (path, uid, gid, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchownSync = function () {}\n }\n\n // on Windows, A/V software can lock the directory, causing this\n // to fail with an EACCES or EPERM if the directory contains newly\n // created files. Try again on failure, for up to 60 seconds.\n\n // Set the timeout this long because some Windows Anti-Virus, such as Parity\n // bit9, may lock files for up to a minute, causing npm package install\n // failures. Also, take care to yield the scheduler. Windows scheduling gives\n // CPU to a busy looping process, which can cause the program causing the lock\n // contention to be starved of CPU by node, so the contention doesn't resolve.\n if (platform === \"win32\") {\n fs.rename = typeof fs.rename !== 'function' ? fs.rename\n : (function (fs$rename) {\n function rename (from, to, cb) {\n var start = Date.now()\n var backoff = 0;\n fs$rename(from, to, function CB (er) {\n if (er\n && (er.code === \"EACCES\" || er.code === \"EPERM\" || er.code === \"EBUSY\")\n && Date.now() - start < 60000) {\n setTimeout(function() {\n fs.stat(to, function (stater, st) {\n if (stater && stater.code === \"ENOENT\")\n fs$rename(from, to, CB);\n else\n cb(er)\n })\n }, backoff)\n if (backoff < 100)\n backoff += 10;\n return;\n }\n if (cb) cb(er)\n })\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename)\n return rename\n })(fs.rename)\n }\n\n // if read() returns EAGAIN, then just try it again.\n fs.read = typeof fs.read !== 'function' ? fs.read\n : (function (fs$read) {\n function read (fd, buffer, offset, length, position, callback_) {\n var callback\n if (callback_ && typeof callback_ === 'function') {\n var eagCounter = 0\n callback = function (er, _, __) {\n if (er && er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n callback_.apply(this, arguments)\n }\n }\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n\n // This ensures `util.promisify` works as it does for native `fs.read`.\n if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)\n return read\n })(fs.read)\n\n fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync\n : (function (fs$readSync) { return function (fd, buffer, offset, length, position) {\n var eagCounter = 0\n while (true) {\n try {\n return fs$readSync.call(fs, fd, buffer, offset, length, position)\n } catch (er) {\n if (er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n continue\n }\n throw er\n }\n }\n }})(fs.readSync)\n\n function patchLchmod (fs) {\n fs.lchmod = function (path, mode, callback) {\n fs.open( path\n , constants.O_WRONLY | constants.O_SYMLINK\n , mode\n , function (err, fd) {\n if (err) {\n if (callback) callback(err)\n return\n }\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n fs.fchmod(fd, mode, function (err) {\n fs.close(fd, function(err2) {\n if (callback) callback(err || err2)\n })\n })\n })\n }\n\n fs.lchmodSync = function (path, mode) {\n var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)\n\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n var threw = true\n var ret\n try {\n ret = fs.fchmodSync(fd, mode)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n }\n\n function patchLutimes (fs) {\n if (constants.hasOwnProperty(\"O_SYMLINK\") && fs.futimes) {\n fs.lutimes = function (path, at, mt, cb) {\n fs.open(path, constants.O_SYMLINK, function (er, fd) {\n if (er) {\n if (cb) cb(er)\n return\n }\n fs.futimes(fd, at, mt, function (er) {\n fs.close(fd, function (er2) {\n if (cb) cb(er || er2)\n })\n })\n })\n }\n\n fs.lutimesSync = function (path, at, mt) {\n var fd = fs.openSync(path, constants.O_SYMLINK)\n var ret\n var threw = true\n try {\n ret = fs.futimesSync(fd, at, mt)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n\n } else if (fs.futimes) {\n fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }\n fs.lutimesSync = function () {}\n }\n }\n\n function chmodFix (orig) {\n if (!orig) return orig\n return function (target, mode, cb) {\n return orig.call(fs, target, mode, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chmodFixSync (orig) {\n if (!orig) return orig\n return function (target, mode) {\n try {\n return orig.call(fs, target, mode)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n\n function chownFix (orig) {\n if (!orig) return orig\n return function (target, uid, gid, cb) {\n return orig.call(fs, target, uid, gid, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chownFixSync (orig) {\n if (!orig) return orig\n return function (target, uid, gid) {\n try {\n return orig.call(fs, target, uid, gid)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n function statFix (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = null\n }\n function callback (er, stats) {\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n if (cb) cb.apply(this, arguments)\n }\n return options ? orig.call(fs, target, options, callback)\n : orig.call(fs, target, callback)\n }\n }\n\n function statFixSync (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options) {\n var stats = options ? orig.call(fs, target, options)\n : orig.call(fs, target)\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n return stats;\n }\n }\n\n // ENOSYS means that the fs doesn't support the op. Just ignore\n // that, because it doesn't matter.\n //\n // if there's no getuid, or if getuid() is something other\n // than 0, and the error is EINVAL or EPERM, then just ignore\n // it.\n //\n // This specific case is a silent failure in cp, install, tar,\n // and most other unix tools that manage permissions.\n //\n // When running as root, or if other types of errors are\n // encountered, then it's strict.\n function chownErOk (er) {\n if (!er)\n return true\n\n if (er.code === \"ENOSYS\")\n return true\n\n var nonroot = !process.getuid || process.getuid() !== 0\n if (nonroot) {\n if (er.code === \"EINVAL\" || er.code === \"EPERM\")\n return true\n }\n\n return false\n }\n}\n","var Stream = require('stream').Stream\n\nmodule.exports = legacy\n\nfunction legacy (fs) {\n return {\n ReadStream: ReadStream,\n WriteStream: WriteStream\n }\n\n function ReadStream (path, options) {\n if (!(this instanceof ReadStream)) return new ReadStream(path, options);\n\n Stream.call(this);\n\n var self = this;\n\n this.path = path;\n this.fd = null;\n this.readable = true;\n this.paused = false;\n\n this.flags = 'r';\n this.mode = 438; /*=0666*/\n this.bufferSize = 64 * 1024;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.encoding) this.setEncoding(this.encoding);\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.end === undefined) {\n this.end = Infinity;\n } else if ('number' !== typeof this.end) {\n throw TypeError('end must be a Number');\n }\n\n if (this.start > this.end) {\n throw new Error('start must be <= end');\n }\n\n this.pos = this.start;\n }\n\n if (this.fd !== null) {\n process.nextTick(function() {\n self._read();\n });\n return;\n }\n\n fs.open(this.path, this.flags, this.mode, function (err, fd) {\n if (err) {\n self.emit('error', err);\n self.readable = false;\n return;\n }\n\n self.fd = fd;\n self.emit('open', fd);\n self._read();\n })\n }\n\n function WriteStream (path, options) {\n if (!(this instanceof WriteStream)) return new WriteStream(path, options);\n\n Stream.call(this);\n\n this.path = path;\n this.fd = null;\n this.writable = true;\n\n this.flags = 'w';\n this.encoding = 'binary';\n this.mode = 438; /*=0666*/\n this.bytesWritten = 0;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.start < 0) {\n throw new Error('start must be >= zero');\n }\n\n this.pos = this.start;\n }\n\n this.busy = false;\n this._queue = [];\n\n if (this.fd === null) {\n this._open = fs.open;\n this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);\n this.flush();\n }\n }\n}\n","'use strict'\n\nmodule.exports = clone\n\nvar getPrototypeOf = Object.getPrototypeOf || function (obj) {\n return obj.__proto__\n}\n\nfunction clone (obj) {\n if (obj === null || typeof obj !== 'object')\n return obj\n\n if (obj instanceof Object)\n var copy = { __proto__: getPrototypeOf(obj) }\n else\n var copy = Object.create(null)\n\n Object.getOwnPropertyNames(obj).forEach(function (key) {\n Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))\n })\n\n return copy\n}\n","var fs = require('fs')\nvar polyfills = require('./polyfills.js')\nvar legacy = require('./legacy-streams.js')\nvar clone = require('./clone.js')\n\nvar util = require('util')\n\n/* istanbul ignore next - node 0.x polyfill */\nvar gracefulQueue\nvar previousSymbol\n\n/* istanbul ignore else - node 0.x polyfill */\nif (typeof Symbol === 'function' && typeof Symbol.for === 'function') {\n gracefulQueue = Symbol.for('graceful-fs.queue')\n // This is used in testing by future versions\n previousSymbol = Symbol.for('graceful-fs.previous')\n} else {\n gracefulQueue = '___graceful-fs.queue'\n previousSymbol = '___graceful-fs.previous'\n}\n\nfunction noop () {}\n\nfunction publishQueue(context, queue) {\n Object.defineProperty(context, gracefulQueue, {\n get: function() {\n return queue\n }\n })\n}\n\nvar debug = noop\nif (util.debuglog)\n debug = util.debuglog('gfs4')\nelse if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || ''))\n debug = function() {\n var m = util.format.apply(util, arguments)\n m = 'GFS4: ' + m.split(/\\n/).join('\\nGFS4: ')\n console.error(m)\n }\n\n// Once time initialization\nif (!fs[gracefulQueue]) {\n // This queue can be shared by multiple loaded instances\n var queue = global[gracefulQueue] || []\n publishQueue(fs, queue)\n\n // Patch fs.close/closeSync to shared queue version, because we need\n // to retry() whenever a close happens *anywhere* in the program.\n // This is essential when multiple graceful-fs instances are\n // in play at the same time.\n fs.close = (function (fs$close) {\n function close (fd, cb) {\n return fs$close.call(fs, fd, function (err) {\n // This function uses the graceful-fs shared queue\n if (!err) {\n resetQueue()\n }\n\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n })\n }\n\n Object.defineProperty(close, previousSymbol, {\n value: fs$close\n })\n return close\n })(fs.close)\n\n fs.closeSync = (function (fs$closeSync) {\n function closeSync (fd) {\n // This function uses the graceful-fs shared queue\n fs$closeSync.apply(fs, arguments)\n resetQueue()\n }\n\n Object.defineProperty(closeSync, previousSymbol, {\n value: fs$closeSync\n })\n return closeSync\n })(fs.closeSync)\n\n if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || '')) {\n process.on('exit', function() {\n debug(fs[gracefulQueue])\n require('assert').equal(fs[gracefulQueue].length, 0)\n })\n }\n}\n\nif (!global[gracefulQueue]) {\n publishQueue(global, fs[gracefulQueue]);\n}\n\nmodule.exports = patch(clone(fs))\nif (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {\n module.exports = patch(fs)\n fs.__patched = true;\n}\n\nfunction patch (fs) {\n // Everything that references the open() function needs to be in here\n polyfills(fs)\n fs.gracefulify = patch\n\n fs.createReadStream = createReadStream\n fs.createWriteStream = createWriteStream\n var fs$readFile = fs.readFile\n fs.readFile = readFile\n function readFile (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$readFile(path, options, cb)\n\n function go$readFile (path, options, cb, startTime) {\n return fs$readFile(path, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$writeFile = fs.writeFile\n fs.writeFile = writeFile\n function writeFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$writeFile(path, data, options, cb)\n\n function go$writeFile (path, data, options, cb, startTime) {\n return fs$writeFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$appendFile = fs.appendFile\n if (fs$appendFile)\n fs.appendFile = appendFile\n function appendFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$appendFile(path, data, options, cb)\n\n function go$appendFile (path, data, options, cb, startTime) {\n return fs$appendFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$copyFile = fs.copyFile\n if (fs$copyFile)\n fs.copyFile = copyFile\n function copyFile (src, dest, flags, cb) {\n if (typeof flags === 'function') {\n cb = flags\n flags = 0\n }\n return go$copyFile(src, dest, flags, cb)\n\n function go$copyFile (src, dest, flags, cb, startTime) {\n return fs$copyFile(src, dest, flags, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$readdir = fs.readdir\n fs.readdir = readdir\n var noReaddirOptionVersions = /^v[0-5]\\./\n function readdir (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n var go$readdir = noReaddirOptionVersions.test(process.version)\n ? function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n : function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, options, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n\n return go$readdir(path, options, cb)\n\n function fs$readdirCallback (path, options, cb, startTime) {\n return function (err, files) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([\n go$readdir,\n [path, options, cb],\n err,\n startTime || Date.now(),\n Date.now()\n ])\n else {\n if (files && files.sort)\n files.sort()\n\n if (typeof cb === 'function')\n cb.call(this, err, files)\n }\n }\n }\n }\n\n if (process.version.substr(0, 4) === 'v0.8') {\n var legStreams = legacy(fs)\n ReadStream = legStreams.ReadStream\n WriteStream = legStreams.WriteStream\n }\n\n var fs$ReadStream = fs.ReadStream\n if (fs$ReadStream) {\n ReadStream.prototype = Object.create(fs$ReadStream.prototype)\n ReadStream.prototype.open = ReadStream$open\n }\n\n var fs$WriteStream = fs.WriteStream\n if (fs$WriteStream) {\n WriteStream.prototype = Object.create(fs$WriteStream.prototype)\n WriteStream.prototype.open = WriteStream$open\n }\n\n Object.defineProperty(fs, 'ReadStream', {\n get: function () {\n return ReadStream\n },\n set: function (val) {\n ReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n Object.defineProperty(fs, 'WriteStream', {\n get: function () {\n return WriteStream\n },\n set: function (val) {\n WriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n // legacy names\n var FileReadStream = ReadStream\n Object.defineProperty(fs, 'FileReadStream', {\n get: function () {\n return FileReadStream\n },\n set: function (val) {\n FileReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n var FileWriteStream = WriteStream\n Object.defineProperty(fs, 'FileWriteStream', {\n get: function () {\n return FileWriteStream\n },\n set: function (val) {\n FileWriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n function ReadStream (path, options) {\n if (this instanceof ReadStream)\n return fs$ReadStream.apply(this, arguments), this\n else\n return ReadStream.apply(Object.create(ReadStream.prototype), arguments)\n }\n\n function ReadStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n if (that.autoClose)\n that.destroy()\n\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n that.read()\n }\n })\n }\n\n function WriteStream (path, options) {\n if (this instanceof WriteStream)\n return fs$WriteStream.apply(this, arguments), this\n else\n return WriteStream.apply(Object.create(WriteStream.prototype), arguments)\n }\n\n function WriteStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n that.destroy()\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n }\n })\n }\n\n function createReadStream (path, options) {\n return new fs.ReadStream(path, options)\n }\n\n function createWriteStream (path, options) {\n return new fs.WriteStream(path, options)\n }\n\n var fs$open = fs.open\n fs.open = open\n function open (path, flags, mode, cb) {\n if (typeof mode === 'function')\n cb = mode, mode = null\n\n return go$open(path, flags, mode, cb)\n\n function go$open (path, flags, mode, cb, startTime) {\n return fs$open(path, flags, mode, function (err, fd) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n return fs\n}\n\nfunction enqueue (elem) {\n debug('ENQUEUE', elem[0].name, elem[1])\n fs[gracefulQueue].push(elem)\n retry()\n}\n\n// keep track of the timeout between retry() calls\nvar retryTimer\n\n// reset the startTime and lastTime to now\n// this resets the start of the 60 second overall timeout as well as the\n// delay between attempts so that we'll retry these jobs sooner\nfunction resetQueue () {\n var now = Date.now()\n for (var i = 0; i < fs[gracefulQueue].length; ++i) {\n // entries that are only a length of 2 are from an older version, don't\n // bother modifying those since they'll be retried anyway.\n if (fs[gracefulQueue][i].length > 2) {\n fs[gracefulQueue][i][3] = now // startTime\n fs[gracefulQueue][i][4] = now // lastTime\n }\n }\n // call retry to make sure we're actively processing the queue\n retry()\n}\n\nfunction retry () {\n // clear the timer and remove it to help prevent unintended concurrency\n clearTimeout(retryTimer)\n retryTimer = undefined\n\n if (fs[gracefulQueue].length === 0)\n return\n\n var elem = fs[gracefulQueue].shift()\n var fn = elem[0]\n var args = elem[1]\n // these items may be unset if they were added by an older graceful-fs\n var err = elem[2]\n var startTime = elem[3]\n var lastTime = elem[4]\n\n // if we don't have a startTime we have no way of knowing if we've waited\n // long enough, so go ahead and retry this item now\n if (startTime === undefined) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args)\n } else if (Date.now() - startTime >= 60000) {\n // it's been more than 60 seconds total, bail now\n debug('TIMEOUT', fn.name, args)\n var cb = args.pop()\n if (typeof cb === 'function')\n cb.call(null, err)\n } else {\n // the amount of time between the last attempt and right now\n var sinceAttempt = Date.now() - lastTime\n // the amount of time between when we first tried, and when we last tried\n // rounded up to at least 1\n var sinceStart = Math.max(lastTime - startTime, 1)\n // backoff. wait longer than the total time we've been retrying, but only\n // up to a maximum of 100ms\n var desiredDelay = Math.min(sinceStart * 1.2, 100)\n // it's been long enough since the last retry, do it again\n if (sinceAttempt >= desiredDelay) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args.concat([startTime]))\n } else {\n // if we can't do this job yet, push it to the end of the queue\n // and let the next iteration check again\n fs[gracefulQueue].push(elem)\n }\n }\n\n // schedule our next run if one isn't already scheduled\n if (retryTimer === undefined) {\n retryTimer = setTimeout(retry, 0)\n }\n}\n","function RetryOperation(timeouts, options) {\n // Compatibility for the old (timeouts, retryForever) signature\n if (typeof options === 'boolean') {\n options = { forever: options };\n }\n\n this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n this._timeouts = timeouts;\n this._options = options || {};\n this._maxRetryTime = options && options.maxRetryTime || Infinity;\n this._fn = null;\n this._errors = [];\n this._attempts = 1;\n this._operationTimeout = null;\n this._operationTimeoutCb = null;\n this._timeout = null;\n this._operationStart = null;\n\n if (this._options.forever) {\n this._cachedTimeouts = this._timeouts.slice(0);\n }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n this._attempts = 1;\n this._timeouts = this._originalTimeouts;\n}\n\nRetryOperation.prototype.stop = function() {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n this._timeouts = [];\n this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n if (!err) {\n return false;\n }\n var currentTime = new Date().getTime();\n if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n this._errors.unshift(new Error('RetryOperation timeout occurred'));\n return false;\n }\n\n this._errors.push(err);\n\n var timeout = this._timeouts.shift();\n if (timeout === undefined) {\n if (this._cachedTimeouts) {\n // retry forever, only keep last error\n this._errors.splice(this._errors.length - 1, this._errors.length);\n this._timeouts = this._cachedTimeouts.slice(0);\n timeout = this._timeouts.shift();\n } else {\n return false;\n }\n }\n\n var self = this;\n var timer = setTimeout(function() {\n self._attempts++;\n\n if (self._operationTimeoutCb) {\n self._timeout = setTimeout(function() {\n self._operationTimeoutCb(self._attempts);\n }, self._operationTimeout);\n\n if (self._options.unref) {\n self._timeout.unref();\n }\n }\n\n self._fn(self._attempts);\n }, timeout);\n\n if (this._options.unref) {\n timer.unref();\n }\n\n return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n this._fn = fn;\n\n if (timeoutOps) {\n if (timeoutOps.timeout) {\n this._operationTimeout = timeoutOps.timeout;\n }\n if (timeoutOps.cb) {\n this._operationTimeoutCb = timeoutOps.cb;\n }\n }\n\n var self = this;\n if (this._operationTimeoutCb) {\n this._timeout = setTimeout(function() {\n self._operationTimeoutCb();\n }, self._operationTimeout);\n }\n\n this._operationStart = new Date().getTime();\n\n this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n console.log('Using RetryOperation.try() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n console.log('Using RetryOperation.start() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n if (this._errors.length === 0) {\n return null;\n }\n\n var counts = {};\n var mainError = null;\n var mainErrorCount = 0;\n\n for (var i = 0; i < this._errors.length; i++) {\n var error = this._errors[i];\n var message = error.message;\n var count = (counts[message] || 0) + 1;\n\n counts[message] = count;\n\n if (count >= mainErrorCount) {\n mainError = error;\n mainErrorCount = count;\n }\n }\n\n return mainError;\n};\n","var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n var timeouts = exports.timeouts(options);\n return new RetryOperation(timeouts, {\n forever: options && options.forever,\n unref: options && options.unref,\n maxRetryTime: options && options.maxRetryTime\n });\n};\n\nexports.timeouts = function(options) {\n if (options instanceof Array) {\n return [].concat(options);\n }\n\n var opts = {\n retries: 10,\n factor: 2,\n minTimeout: 1 * 1000,\n maxTimeout: Infinity,\n randomize: false\n };\n for (var key in options) {\n opts[key] = options[key];\n }\n\n if (opts.minTimeout > opts.maxTimeout) {\n throw new Error('minTimeout is greater than maxTimeout');\n }\n\n var timeouts = [];\n for (var i = 0; i < opts.retries; i++) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n if (options && options.forever && !timeouts.length) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n // sort the array numerically ascending\n timeouts.sort(function(a,b) {\n return a - b;\n });\n\n return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n var random = (opts.randomize)\n ? (Math.random() + 1)\n : 1;\n\n var timeout = Math.round(random * opts.minTimeout * Math.pow(opts.factor, attempt));\n timeout = Math.min(timeout, opts.maxTimeout);\n\n return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n if (options instanceof Array) {\n methods = options;\n options = null;\n }\n\n if (!methods) {\n methods = [];\n for (var key in obj) {\n if (typeof obj[key] === 'function') {\n methods.push(key);\n }\n }\n }\n\n for (var i = 0; i < methods.length; i++) {\n var method = methods[i];\n var original = obj[method];\n\n obj[method] = function retryWrapper(original) {\n var op = exports.operation(options);\n var args = Array.prototype.slice.call(arguments, 1);\n var callback = args.pop();\n\n args.push(function(err) {\n if (op.retry(err)) {\n return;\n }\n if (err) {\n arguments[0] = op.mainError();\n }\n callback.apply(this, arguments);\n });\n\n op.attempt(function() {\n original.apply(obj, args);\n });\n }.bind(obj, original);\n obj[method].options = options;\n }\n};\n","module.exports = require('./lib/retry');","// This is not the set of all possible signals.\n//\n// It IS, however, the set of all signals that trigger\n// an exit on either Linux or BSD systems. Linux is a\n// superset of the signal names supported on BSD, and\n// the unknown signals just fail to register, so we can\n// catch that easily enough.\n//\n// Don't bother with SIGKILL. It's uncatchable, which\n// means that we can't fire any callbacks anyway.\n//\n// If a user does happen to register a handler on a non-\n// fatal signal like SIGWINCH or something, and then\n// exit, it'll end up firing `process.emit('exit')`, so\n// the handler will be fired anyway.\n//\n// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n// artificially, inherently leave the process in a\n// state from which it is not safe to try and enter JS\n// listeners.\nmodule.exports = [\n 'SIGABRT',\n 'SIGALRM',\n 'SIGHUP',\n 'SIGINT',\n 'SIGTERM'\n]\n\nif (process.platform !== 'win32') {\n module.exports.push(\n 'SIGVTALRM',\n 'SIGXCPU',\n 'SIGXFSZ',\n 'SIGUSR2',\n 'SIGTRAP',\n 'SIGSYS',\n 'SIGQUIT',\n 'SIGIOT'\n // should detect profiler and enable/disable accordingly.\n // see #21\n // 'SIGPROF'\n )\n}\n\nif (process.platform === 'linux') {\n module.exports.push(\n 'SIGIO',\n 'SIGPOLL',\n 'SIGPWR',\n 'SIGSTKFLT',\n 'SIGUNUSED'\n )\n}\n","// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nvar process = global.process\n\nconst processOk = function (process) {\n return process &&\n typeof process === 'object' &&\n typeof process.removeListener === 'function' &&\n typeof process.emit === 'function' &&\n typeof process.reallyExit === 'function' &&\n typeof process.listeners === 'function' &&\n typeof process.kill === 'function' &&\n typeof process.pid === 'number' &&\n typeof process.on === 'function'\n}\n\n// some kind of non-node environment, just no-op\n/* istanbul ignore if */\nif (!processOk(process)) {\n module.exports = function () {\n return function () {}\n }\n} else {\n var assert = require('assert')\n var signals = require('./signals.js')\n var isWin = /^win/i.test(process.platform)\n\n var EE = require('events')\n /* istanbul ignore if */\n if (typeof EE !== 'function') {\n EE = EE.EventEmitter\n }\n\n var emitter\n if (process.__signal_exit_emitter__) {\n emitter = process.__signal_exit_emitter__\n } else {\n emitter = process.__signal_exit_emitter__ = new EE()\n emitter.count = 0\n emitter.emitted = {}\n }\n\n // Because this emitter is a global, we have to check to see if a\n // previous version of this library failed to enable infinite listeners.\n // I know what you're about to say. But literally everything about\n // signal-exit is a compromise with evil. Get used to it.\n if (!emitter.infinite) {\n emitter.setMaxListeners(Infinity)\n emitter.infinite = true\n }\n\n module.exports = function (cb, opts) {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return function () {}\n }\n assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')\n\n if (loaded === false) {\n load()\n }\n\n var ev = 'exit'\n if (opts && opts.alwaysLast) {\n ev = 'afterexit'\n }\n\n var remove = function () {\n emitter.removeListener(ev, cb)\n if (emitter.listeners('exit').length === 0 &&\n emitter.listeners('afterexit').length === 0) {\n unload()\n }\n }\n emitter.on(ev, cb)\n\n return remove\n }\n\n var unload = function unload () {\n if (!loaded || !processOk(global.process)) {\n return\n }\n loaded = false\n\n signals.forEach(function (sig) {\n try {\n process.removeListener(sig, sigListeners[sig])\n } catch (er) {}\n })\n process.emit = originalProcessEmit\n process.reallyExit = originalProcessReallyExit\n emitter.count -= 1\n }\n module.exports.unload = unload\n\n var emit = function emit (event, code, signal) {\n /* istanbul ignore if */\n if (emitter.emitted[event]) {\n return\n }\n emitter.emitted[event] = true\n emitter.emit(event, code, signal)\n }\n\n // { <signal>: <listener fn>, ... }\n var sigListeners = {}\n signals.forEach(function (sig) {\n sigListeners[sig] = function listener () {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return\n }\n // If there are no other listeners, an exit is coming!\n // Simplest way: remove us and then re-send the signal.\n // We know that this will kill the process, so we can\n // safely emit now.\n var listeners = process.listeners(sig)\n if (listeners.length === emitter.count) {\n unload()\n emit('exit', null, sig)\n /* istanbul ignore next */\n emit('afterexit', null, sig)\n /* istanbul ignore next */\n if (isWin && sig === 'SIGHUP') {\n // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n // so use a supported signal instead\n sig = 'SIGINT'\n }\n /* istanbul ignore next */\n process.kill(process.pid, sig)\n }\n }\n })\n\n module.exports.signals = function () {\n return signals\n }\n\n var loaded = false\n\n var load = function load () {\n if (loaded || !processOk(global.process)) {\n return\n }\n loaded = true\n\n // This is the number of onSignalExit's that are in play.\n // It's important so that we can count the correct number of\n // listeners on signals, and don't wait for the other one to\n // handle it instead of us.\n emitter.count += 1\n\n signals = signals.filter(function (sig) {\n try {\n process.on(sig, sigListeners[sig])\n return true\n } catch (er) {\n return false\n }\n })\n\n process.emit = processEmit\n process.reallyExit = processReallyExit\n }\n module.exports.load = load\n\n var originalProcessReallyExit = process.reallyExit\n var processReallyExit = function processReallyExit (code) {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return\n }\n process.exitCode = code || /* istanbul ignore next */ 0\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n /* istanbul ignore next */\n originalProcessReallyExit.call(process, process.exitCode)\n }\n\n var originalProcessEmit = process.emit\n var processEmit = function processEmit (ev, arg) {\n if (ev === 'exit' && processOk(global.process)) {\n /* istanbul ignore else */\n if (arg !== undefined) {\n process.exitCode = arg\n }\n var ret = originalProcessEmit.apply(this, arguments)\n /* istanbul ignore next */\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n /* istanbul ignore next */\n return ret\n } else {\n return originalProcessEmit.apply(this, arguments)\n }\n }\n}\n","'use strict';\n\nconst cacheSymbol = Symbol();\n\nfunction probe(file, fs, callback) {\n const cachedPrecision = fs[cacheSymbol];\n\n if (cachedPrecision) {\n return fs.stat(file, (err, stat) => {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n\n callback(null, stat.mtime, cachedPrecision);\n });\n }\n\n // Set mtime by ceiling Date.now() to seconds + 5ms so that it's \"not on the second\"\n const mtime = new Date((Math.ceil(Date.now() / 1000) * 1000) + 5);\n\n fs.utimes(file, mtime, mtime, (err) => {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n\n fs.stat(file, (err, stat) => {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n\n const precision = stat.mtime.getTime() % 1000 === 0 ? 's' : 'ms';\n\n // Cache the precision in a non-enumerable way\n Object.defineProperty(fs, cacheSymbol, { value: precision });\n\n callback(null, stat.mtime, precision);\n });\n });\n}\n\nfunction getMtime(precision) {\n let now = Date.now();\n\n if (precision === 's') {\n now = Math.ceil(now / 1000) * 1000;\n }\n\n return new Date(now);\n}\n\nmodule.exports.probe = probe;\nmodule.exports.getMtime = getMtime;\n","'use strict';\n\nconst path = require('path');\nconst fs = require('graceful-fs');\nconst retry = require('retry');\nconst onExit = require('signal-exit');\nconst mtimePrecision = require('./mtime-precision');\n\nconst locks = {};\n\nfunction getLockFile(file, options) {\n return options.lockfilePath || `${file}.lock`;\n}\n\nfunction resolveCanonicalPath(file, options, callback) {\n if (!options.realpath) {\n return callback(null, path.resolve(file));\n }\n\n // Use realpath to resolve symlinks\n // It also resolves relative paths\n options.fs.realpath(file, callback);\n}\n\nfunction acquireLock(file, options, callback) {\n const lockfilePath = getLockFile(file, options);\n\n // Use mkdir to create the lockfile (atomic operation)\n options.fs.mkdir(lockfilePath, (err) => {\n if (!err) {\n // At this point, we acquired the lock!\n // Probe the mtime precision\n return mtimePrecision.probe(lockfilePath, options.fs, (err, mtime, mtimePrecision) => {\n // If it failed, try to remove the lock..\n /* istanbul ignore if */\n if (err) {\n options.fs.rmdir(lockfilePath, () => {});\n\n return callback(err);\n }\n\n callback(null, mtime, mtimePrecision);\n });\n }\n\n // If error is not EEXIST then some other error occurred while locking\n if (err.code !== 'EEXIST') {\n return callback(err);\n }\n\n // Otherwise, check if lock is stale by analyzing the file mtime\n if (options.stale <= 0) {\n return callback(Object.assign(new Error('Lock file is already being held'), { code: 'ELOCKED', file }));\n }\n\n options.fs.stat(lockfilePath, (err, stat) => {\n if (err) {\n // Retry if the lockfile has been removed (meanwhile)\n // Skip stale check to avoid recursiveness\n if (err.code === 'ENOENT') {\n return acquireLock(file, { ...options, stale: 0 }, callback);\n }\n\n return callback(err);\n }\n\n if (!isLockStale(stat, options)) {\n return callback(Object.assign(new Error('Lock file is already being held'), { code: 'ELOCKED', file }));\n }\n\n // If it's stale, remove it and try again!\n // Skip stale check to avoid recursiveness\n removeLock(file, options, (err) => {\n if (err) {\n return callback(err);\n }\n\n acquireLock(file, { ...options, stale: 0 }, callback);\n });\n });\n });\n}\n\nfunction isLockStale(stat, options) {\n return stat.mtime.getTime() < Date.now() - options.stale;\n}\n\nfunction removeLock(file, options, callback) {\n // Remove lockfile, ignoring ENOENT errors\n options.fs.rmdir(getLockFile(file, options), (err) => {\n if (err && err.code !== 'ENOENT') {\n return callback(err);\n }\n\n callback();\n });\n}\n\nfunction updateLock(file, options) {\n const lock = locks[file];\n\n // Just for safety, should never happen\n /* istanbul ignore if */\n if (lock.updateTimeout) {\n return;\n }\n\n lock.updateDelay = lock.updateDelay || options.update;\n lock.updateTimeout = setTimeout(() => {\n lock.updateTimeout = null;\n\n // Stat the file to check if mtime is still ours\n // If it is, we can still recover from a system sleep or a busy event loop\n options.fs.stat(lock.lockfilePath, (err, stat) => {\n const isOverThreshold = lock.lastUpdate + options.stale < Date.now();\n\n // If it failed to update the lockfile, keep trying unless\n // the lockfile was deleted or we are over the threshold\n if (err) {\n if (err.code === 'ENOENT' || isOverThreshold) {\n return setLockAsCompromised(file, lock, Object.assign(err, { code: 'ECOMPROMISED' }));\n }\n\n lock.updateDelay = 1000;\n\n return updateLock(file, options);\n }\n\n const isMtimeOurs = lock.mtime.getTime() === stat.mtime.getTime();\n\n if (!isMtimeOurs) {\n return setLockAsCompromised(\n file,\n lock,\n Object.assign(\n new Error('Unable to update lock within the stale threshold'),\n { code: 'ECOMPROMISED' }\n ));\n }\n\n const mtime = mtimePrecision.getMtime(lock.mtimePrecision);\n\n options.fs.utimes(lock.lockfilePath, mtime, mtime, (err) => {\n const isOverThreshold = lock.lastUpdate + options.stale < Date.now();\n\n // Ignore if the lock was released\n if (lock.released) {\n return;\n }\n\n // If it failed to update the lockfile, keep trying unless\n // the lockfile was deleted or we are over the threshold\n if (err) {\n if (err.code === 'ENOENT' || isOverThreshold) {\n return setLockAsCompromised(file, lock, Object.assign(err, { code: 'ECOMPROMISED' }));\n }\n\n lock.updateDelay = 1000;\n\n return updateLock(file, options);\n }\n\n // All ok, keep updating..\n lock.mtime = mtime;\n lock.lastUpdate = Date.now();\n lock.updateDelay = null;\n updateLock(file, options);\n });\n });\n }, lock.updateDelay);\n\n // Unref the timer so that the nodejs process can exit freely\n // This is safe because all acquired locks will be automatically released\n // on process exit\n\n // We first check that `lock.updateTimeout.unref` exists because some users\n // may be using this module outside of NodeJS (e.g., in an electron app),\n // and in those cases `setTimeout` return an integer.\n /* istanbul ignore else */\n if (lock.updateTimeout.unref) {\n lock.updateTimeout.unref();\n }\n}\n\nfunction setLockAsCompromised(file, lock, err) {\n // Signal the lock has been released\n lock.released = true;\n\n // Cancel lock mtime update\n // Just for safety, at this point updateTimeout should be null\n /* istanbul ignore if */\n if (lock.updateTimeout) {\n clearTimeout(lock.updateTimeout);\n }\n\n if (locks[file] === lock) {\n delete locks[file];\n }\n\n lock.options.onCompromised(err);\n}\n\n// ----------------------------------------------------------\n\nfunction lock(file, options, callback) {\n /* istanbul ignore next */\n options = {\n stale: 10000,\n update: null,\n realpath: true,\n retries: 0,\n fs,\n onCompromised: (err) => { throw err; },\n ...options,\n };\n\n options.retries = options.retries || 0;\n options.retries = typeof options.retries === 'number' ? { retries: options.retries } : options.retries;\n options.stale = Math.max(options.stale || 0, 2000);\n options.update = options.update == null ? options.stale / 2 : options.update || 0;\n options.update = Math.max(Math.min(options.update, options.stale / 2), 1000);\n\n // Resolve to a canonical file path\n resolveCanonicalPath(file, options, (err, file) => {\n if (err) {\n return callback(err);\n }\n\n // Attempt to acquire the lock\n const operation = retry.operation(options.retries);\n\n operation.attempt(() => {\n acquireLock(file, options, (err, mtime, mtimePrecision) => {\n if (operation.retry(err)) {\n return;\n }\n\n if (err) {\n return callback(operation.mainError());\n }\n\n // We now own the lock\n const lock = locks[file] = {\n lockfilePath: getLockFile(file, options),\n mtime,\n mtimePrecision,\n options,\n lastUpdate: Date.now(),\n };\n\n // We must keep the lock fresh to avoid staleness\n updateLock(file, options);\n\n callback(null, (releasedCallback) => {\n if (lock.released) {\n return releasedCallback &&\n releasedCallback(Object.assign(new Error('Lock is already released'), { code: 'ERELEASED' }));\n }\n\n // Not necessary to use realpath twice when unlocking\n unlock(file, { ...options, realpath: false }, releasedCallback);\n });\n });\n });\n });\n}\n\nfunction unlock(file, options, callback) {\n options = {\n fs,\n realpath: true,\n ...options,\n };\n\n // Resolve to a canonical file path\n resolveCanonicalPath(file, options, (err, file) => {\n if (err) {\n return callback(err);\n }\n\n // Skip if the lock is not acquired\n const lock = locks[file];\n\n if (!lock) {\n return callback(Object.assign(new Error('Lock is not acquired/owned by you'), { code: 'ENOTACQUIRED' }));\n }\n\n lock.updateTimeout && clearTimeout(lock.updateTimeout); // Cancel lock mtime update\n lock.released = true; // Signal the lock has been released\n delete locks[file]; // Delete from locks\n\n removeLock(file, options, callback);\n });\n}\n\nfunction check(file, options, callback) {\n options = {\n stale: 10000,\n realpath: true,\n fs,\n ...options,\n };\n\n options.stale = Math.max(options.stale || 0, 2000);\n\n // Resolve to a canonical file path\n resolveCanonicalPath(file, options, (err, file) => {\n if (err) {\n return callback(err);\n }\n\n // Check if lockfile exists\n options.fs.stat(getLockFile(file, options), (err, stat) => {\n if (err) {\n // If does not exist, file is not locked. Otherwise, callback with error\n return err.code === 'ENOENT' ? callback(null, false) : callback(err);\n }\n\n // Otherwise, check if lock is stale by analyzing the file mtime\n return callback(null, !isLockStale(stat, options));\n });\n });\n}\n\nfunction getLocks() {\n return locks;\n}\n\n// Remove acquired locks on exit\n/* istanbul ignore next */\nonExit(() => {\n for (const file in locks) {\n const options = locks[file].options;\n\n try { options.fs.rmdirSync(getLockFile(file, options)); } catch (e) { /* Empty */ }\n }\n});\n\nmodule.exports.lock = lock;\nmodule.exports.unlock = unlock;\nmodule.exports.check = check;\nmodule.exports.getLocks = getLocks;\n","'use strict';\n\nconst fs = require('graceful-fs');\n\nfunction createSyncFs(fs) {\n const methods = ['mkdir', 'realpath', 'stat', 'rmdir', 'utimes'];\n const newFs = { ...fs };\n\n methods.forEach((method) => {\n newFs[method] = (...args) => {\n const callback = args.pop();\n let ret;\n\n try {\n ret = fs[`${method}Sync`](...args);\n } catch (err) {\n return callback(err);\n }\n\n callback(null, ret);\n };\n });\n\n return newFs;\n}\n\n// ----------------------------------------------------------\n\nfunction toPromise(method) {\n return (...args) => new Promise((resolve, reject) => {\n args.push((err, result) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n });\n\n method(...args);\n });\n}\n\nfunction toSync(method) {\n return (...args) => {\n let err;\n let result;\n\n args.push((_err, _result) => {\n err = _err;\n result = _result;\n });\n\n method(...args);\n\n if (err) {\n throw err;\n }\n\n return result;\n };\n}\n\nfunction toSyncOptions(options) {\n // Shallow clone options because we are oging to mutate them\n options = { ...options };\n\n // Transform fs to use the sync methods instead\n options.fs = createSyncFs(options.fs || fs);\n\n // Retries are not allowed because it requires the flow to be sync\n if (\n (typeof options.retries === 'number' && options.retries > 0) ||\n (options.retries && typeof options.retries.retries === 'number' && options.retries.retries > 0)\n ) {\n throw Object.assign(new Error('Cannot use retries with the sync api'), { code: 'ESYNC' });\n }\n\n return options;\n}\n\nmodule.exports = {\n toPromise,\n toSync,\n toSyncOptions,\n};\n","'use strict';\n\nconst lockfile = require('./lib/lockfile');\nconst { toPromise, toSync, toSyncOptions } = require('./lib/adapter');\n\nasync function lock(file, options) {\n const release = await toPromise(lockfile.lock)(file, options);\n\n return toPromise(release);\n}\n\nfunction lockSync(file, options) {\n const release = toSync(lockfile.lock)(file, toSyncOptions(options));\n\n return toSync(release);\n}\n\nfunction unlock(file, options) {\n return toPromise(lockfile.unlock)(file, options);\n}\n\nfunction unlockSync(file, options) {\n return toSync(lockfile.unlock)(file, toSyncOptions(options));\n}\n\nfunction check(file, options) {\n return toPromise(lockfile.check)(file, options);\n}\n\nfunction checkSync(file, options) {\n return toSync(lockfile.check)(file, toSyncOptions(options));\n}\n\nmodule.exports = lock;\nmodule.exports.lock = lock;\nmodule.exports.unlock = unlock;\nmodule.exports.lockSync = lockSync;\nmodule.exports.unlockSync = unlockSync;\nmodule.exports.check = check;\nmodule.exports.checkSync = checkSync;\n","/**\n * Base error class for all Gigadrive SDK errors. Every error thrown by the SDK\n * extends this class, so you can catch all SDK errors with a single check.\n *\n * @example\n * ```ts\n * try {\n * await client.organizations.list();\n * } catch (err) {\n * if (err instanceof GigadriveError) {\n * console.error('SDK error:', err.message);\n * }\n * }\n * ```\n */\nexport class GigadriveError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'GigadriveError';\n }\n}\n\n/**\n * Thrown when authentication fails. This includes missing or invalid credentials,\n * expired tokens, failed token refresh attempts, and failed token exchanges.\n *\n * Common causes:\n * - No credentials provided and no environment variables set\n * - Invalid `clientId`/`clientSecret` pair\n * - Expired or revoked refresh token\n * - API returned 401 even after an automatic token refresh retry\n *\n * @example\n * ```ts\n * try {\n * const client = new GigadriveClient(); // no credentials\n * } catch (err) {\n * if (err instanceof AuthenticationError) {\n * console.error('Auth failed:', err.message);\n * }\n * }\n * ```\n */\nexport class AuthenticationError extends GigadriveError {\n constructor(message: string) {\n super(message);\n this.name = 'AuthenticationError';\n }\n}\n\n/**\n * Thrown when the Gigadrive API returns a non-2xx HTTP response.\n *\n * Contains the HTTP {@link status} code and an optional machine-readable\n * {@link code} parsed from the response body.\n *\n * @example\n * ```ts\n * try {\n * await client.deployments.get('non-existent-id');\n * } catch (err) {\n * if (err instanceof ApiError) {\n * console.error(`API error ${err.status}: ${err.message}`);\n * // err.code may contain a machine-readable error code\n * }\n * }\n * ```\n */\nexport class ApiError extends GigadriveError {\n /** The HTTP status code of the failed response (e.g. 404, 500). */\n readonly status: number;\n /** An optional machine-readable error code from the API response body. */\n readonly code: string | undefined;\n\n constructor(message: string, status: number, code?: string) {\n super(message);\n this.name = 'ApiError';\n this.status = status;\n this.code = code;\n }\n}\n\n/**\n * Thrown when a file upload fails. The original cause (e.g. a network error or a\n * transport-level error from the resumable upload) is preserved on\n * {@link cause} for inspection.\n *\n * @example\n * ```ts\n * try {\n * await client.applications.storage.upload({ applicationId, bucketId, key, data });\n * } catch (err) {\n * if (err instanceof UploadError) {\n * console.error('Upload failed:', err.message, err.cause);\n * }\n * }\n * ```\n */\nexport class UploadError extends GigadriveError {\n /** The underlying error that caused the upload to fail, if any. */\n override readonly cause: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = 'UploadError';\n this.cause = cause;\n }\n}\n\n/**\n * Thrown when an upload cannot complete because its session (and the short-lived\n * upload URL it was issued with) expired. Create a new upload to retry.\n *\n * The upload URL is only valid until `session.expiresAt`; very large uploads on\n * slow connections can exceed that window.\n */\nexport class UploadSessionExpiredError extends UploadError {\n constructor(\n message = 'The upload session expired before the upload completed. Start a new upload to retry.',\n cause?: unknown\n ) {\n super(message, cause);\n this.name = 'UploadSessionExpiredError';\n }\n}\n","import { AuthenticationError } from '../errors';\n\nconst DEFAULT_SCOPE = 'offline_access openid profile email';\nconst TOKEN_EXPIRY_MARGIN_SECONDS = 30;\n\n/**\n * Compute the absolute expiry (epoch ms) for a token, applying a safety margin\n * so the SDK refreshes proactively. The margin is clamped to never exceed half\n * the token lifetime, so very short-lived tokens are not treated as already\n * expired (which would refresh on every request).\n */\nconst computeExpiresAt = (expiresInSeconds: number | undefined): number => {\n const ttl = expiresInSeconds ?? 3600;\n const margin = Math.min(TOKEN_EXPIRY_MARGIN_SECONDS, ttl / 2);\n return Date.now() + (ttl - margin) * 1000;\n};\n\n/**\n * Read an environment variable safely. Returns `undefined` when `process` is\n * unavailable (e.g. browsers / some edge runtimes) instead of throwing.\n *\n * @internal\n */\nexport const readEnv = (name: string): string | undefined => {\n if (typeof process === 'undefined' || !process.env) return undefined;\n return process.env[name];\n};\n\ninterface RawTokenResponse {\n access_token: string;\n refresh_token?: string;\n expires_in?: number;\n}\n\n/**\n * Validate and normalize a token-endpoint JSON response, guarding against\n * malformed payloads that would otherwise yield `Authorization: Bearer undefined`.\n */\nconst parseTokenResponse = (payload: unknown): RawTokenResponse => {\n const data = payload as { access_token?: unknown; refresh_token?: unknown; expires_in?: unknown };\n if (typeof data.access_token !== 'string' || data.access_token.length === 0) {\n throw new AuthenticationError('Token endpoint returned no access_token');\n }\n return {\n access_token: data.access_token,\n refresh_token: typeof data.refresh_token === 'string' ? data.refresh_token : undefined,\n expires_in: typeof data.expires_in === 'number' ? data.expires_in : undefined,\n };\n};\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** The result of a credential provider's token fetch. */\nexport interface TokenResult {\n /** The access token to use in API requests. */\n accessToken: string;\n /** Epoch milliseconds when the token expires, or `null` for tokens that never expire (e.g. static bearer tokens). */\n expiresAt: number | null;\n /** A refresh token for obtaining new access tokens, if the provider supports token rotation. */\n refreshToken?: string;\n}\n\n/**\n * A strategy for obtaining access tokens. The SDK ships with four built-in\n * providers (see {@link resolveCredentialProvider} for automatic selection),\n * but you can implement this interface for custom auth flows.\n */\nexport interface CredentialProvider {\n /** A string identifying the provider type (e.g. `\"oauth2-client-credentials\"`, `\"bearer\"`). */\n readonly type: string;\n /** Fetch a new access token. May perform network requests (e.g. OAuth2 token exchange). */\n getToken(): Promise<TokenResult>;\n}\n\ninterface OidcDiscoveryDocument {\n token_endpoint?: string;\n authorization_endpoint?: string;\n userinfo_endpoint?: string;\n}\n\n// ---------------------------------------------------------------------------\n// OIDC Discovery\n// ---------------------------------------------------------------------------\n\nconst discoverOidc = async (issuerUrl: string, fetchFn: typeof globalThis.fetch): Promise<OidcDiscoveryDocument> => {\n const discoveryUrl = `${issuerUrl.replace(/\\/$/, '')}/.well-known/openid-configuration`;\n const response = await fetchFn(discoveryUrl);\n\n if (!response.ok) {\n throw new AuthenticationError(`OIDC discovery failed: ${response.status} ${response.statusText}`);\n }\n\n return (await response.json()) as OidcDiscoveryDocument;\n};\n\n// ---------------------------------------------------------------------------\n// PKCE helpers\n// ---------------------------------------------------------------------------\n\nconst base64UrlEncode = (buffer: Uint8Array): string => {\n let binary = '';\n for (let i = 0; i < buffer.byteLength; i++) {\n binary += String.fromCharCode(buffer[i]);\n }\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n};\n\nconst generatePkce = async (): Promise<{ codeVerifier: string; codeChallenge: string }> => {\n const randomBytes = new Uint8Array(64);\n crypto.getRandomValues(randomBytes);\n const codeVerifier = base64UrlEncode(randomBytes);\n\n const encoder = new TextEncoder();\n const data = encoder.encode(codeVerifier);\n const digest = await crypto.subtle.digest('SHA-256', data);\n const codeChallenge = base64UrlEncode(new Uint8Array(digest));\n\n return { codeVerifier, codeChallenge };\n};\n\nconst generateState = (): string => {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n};\n\n// ---------------------------------------------------------------------------\n// OAuth2 Client Credentials Provider (Network API keys)\n// ---------------------------------------------------------------------------\n\n/**\n * Authenticates using the OAuth2 client credentials grant. Exchanges an\n * API key (client ID + secret) for a short-lived access token via the\n * Gigadrive Network token endpoint.\n *\n * Tokens are valid for 5 minutes. A 30-second safety margin is applied so\n * the SDK refreshes proactively before the token actually expires.\n *\n * This is the most common provider for server-to-server (machine-to-machine)\n * use cases.\n */\nexport class OAuth2ClientCredentialProvider implements CredentialProvider {\n readonly type = 'oauth2-client-credentials';\n\n constructor(\n private readonly clientId: string,\n private readonly clientSecret: string,\n private readonly tokenUrl: string,\n private readonly fetchFn: typeof globalThis.fetch\n ) {}\n\n async getToken(): Promise<TokenResult> {\n const credentials = btoa(`${this.clientId}:${this.clientSecret}`);\n\n const response = await this.fetchFn(this.tokenUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n Authorization: `Basic ${credentials}`,\n },\n body: new URLSearchParams({ grant_type: 'client_credentials' }).toString(),\n });\n\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n throw new AuthenticationError(`OAuth2 token request failed (${response.status}): ${body}`);\n }\n\n const data = parseTokenResponse(await response.json());\n\n return {\n accessToken: data.access_token,\n expiresAt: computeExpiresAt(data.expires_in),\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// OAuth2 Authorization Code Provider (IDP, PKCE, no local server)\n// ---------------------------------------------------------------------------\n\n/**\n * Authenticates using the OAuth2 authorization code grant with PKCE. This\n * provider is designed for interactive flows where a user authorizes the\n * application via a browser.\n *\n * The SDK generates the PKCE challenge, builds the authorization URL, and\n * passes it to your `onAuthorizationUrl` callback. Your callback is\n * responsible for presenting the URL to the user and returning the result\n * (either the full redirect URL or just the authorization code).\n *\n * The provider performs OIDC discovery to locate the authorization and token\n * endpoints automatically.\n */\nexport class OAuth2AuthorizationCodeProvider implements CredentialProvider {\n readonly type = 'oauth2-authorization-code';\n private currentRefreshToken: string | null = null;\n\n constructor(\n private readonly clientId: string,\n private readonly issuerUrl: string,\n private readonly redirectUri: string,\n private readonly onAuthorizationUrl: (url: string) => Promise<string>,\n private readonly fetchFn: typeof globalThis.fetch,\n private readonly scope: string = DEFAULT_SCOPE\n ) {}\n\n async getToken(): Promise<TokenResult> {\n const oidc = await discoverOidc(this.issuerUrl, this.fetchFn);\n\n if (!oidc.token_endpoint) {\n throw new AuthenticationError('OIDC discovery returned no token endpoint');\n }\n\n // After the first interactive exchange, refresh silently rather than\n // re-prompting the user. Only fall back to a fresh authorization when the\n // refresh token is actually rejected — transient errors are surfaced.\n if (this.currentRefreshToken) {\n const refreshed = await this.tryRefresh(oidc.token_endpoint, this.currentRefreshToken);\n if (refreshed) return refreshed;\n this.currentRefreshToken = null;\n }\n\n if (!oidc.authorization_endpoint) {\n throw new AuthenticationError('OIDC discovery returned incomplete endpoints');\n }\n\n const { codeVerifier, codeChallenge } = await generatePkce();\n const state = generateState();\n\n const authUrl = new URL(oidc.authorization_endpoint);\n authUrl.searchParams.set('client_id', this.clientId);\n authUrl.searchParams.set('redirect_uri', this.redirectUri);\n authUrl.searchParams.set('response_type', 'code');\n authUrl.searchParams.set('scope', this.scope);\n authUrl.searchParams.set('code_challenge', codeChallenge);\n authUrl.searchParams.set('code_challenge_method', 'S256');\n authUrl.searchParams.set('state', state);\n\n const result = await this.onAuthorizationUrl(authUrl.toString());\n\n // Extract the authorization code — accept either a full URL or just the code\n let code: string;\n let returnedState: string | null = null;\n\n try {\n const callbackUrl = new URL(result);\n code = callbackUrl.searchParams.get('code') ?? '';\n returnedState = callbackUrl.searchParams.get('state');\n\n const error = callbackUrl.searchParams.get('error');\n if (error) {\n const description = callbackUrl.searchParams.get('error_description') ?? error;\n throw new AuthenticationError(`Authorization failed: ${description}`);\n }\n } catch (e) {\n if (e instanceof AuthenticationError) throw e;\n // Not a valid URL — treat the entire result as the code\n code = result;\n }\n\n if (!code) {\n throw new AuthenticationError('No authorization code received');\n }\n\n if (returnedState !== null && returnedState !== state) {\n throw new AuthenticationError('State mismatch — possible CSRF attack');\n }\n\n // Exchange code for tokens\n const response = await this.fetchFn(oidc.token_endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n grant_type: 'authorization_code',\n client_id: this.clientId,\n code,\n redirect_uri: this.redirectUri,\n code_verifier: codeVerifier,\n }).toString(),\n });\n\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n throw new AuthenticationError(`Token exchange failed (${response.status}): ${body}`);\n }\n\n const data = parseTokenResponse(await response.json());\n\n this.currentRefreshToken = data.refresh_token ?? null;\n\n return {\n accessToken: data.access_token,\n expiresAt: computeExpiresAt(data.expires_in),\n refreshToken: data.refresh_token,\n };\n }\n\n /**\n * Try to exchange the stored refresh token for a new access token. Returns the\n * token on success, `null` when the refresh token is definitively rejected\n * (a 4xx — caller should re-authenticate), and throws on transient failures.\n */\n private async tryRefresh(tokenEndpoint: string, refreshToken: string): Promise<TokenResult | null> {\n const response = await this.fetchFn(tokenEndpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n grant_type: 'refresh_token',\n client_id: this.clientId,\n refresh_token: refreshToken,\n }).toString(),\n });\n\n if (!response.ok) {\n // A 4xx means the refresh token is invalid/expired — re-authenticate.\n if (response.status >= 400 && response.status < 500) return null;\n // Transient (network/5xx) failures surface instead of forcing a re-prompt.\n const body = await response.text().catch(() => '');\n throw new AuthenticationError(`Token refresh failed (${response.status}): ${body}`);\n }\n\n const data = parseTokenResponse(await response.json());\n\n if (data.refresh_token) {\n this.currentRefreshToken = data.refresh_token;\n }\n\n return {\n accessToken: data.access_token,\n expiresAt: computeExpiresAt(data.expires_in),\n refreshToken: data.refresh_token ?? this.currentRefreshToken ?? undefined,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// OAuth2 Refresh Token Provider (IDP)\n// ---------------------------------------------------------------------------\n\n/**\n * Authenticates using an IDP refresh token. Exchanges the refresh token for\n * a short-lived access token via the IDP's token endpoint (discovered via\n * OIDC). Handles refresh-token rotation automatically — if the IDP issues\n * a new refresh token, it is stored internally for subsequent refreshes.\n *\n * This provider is typically used when a user has previously logged in\n * (e.g. via the CLI) and you have a stored refresh token.\n */\nexport class OAuth2RefreshTokenProvider implements CredentialProvider {\n readonly type = 'oauth2-refresh-token';\n private currentRefreshToken: string;\n\n constructor(\n private readonly clientId: string,\n refreshToken: string,\n private readonly issuerUrl: string,\n private readonly fetchFn: typeof globalThis.fetch\n ) {\n this.currentRefreshToken = refreshToken;\n }\n\n async getToken(): Promise<TokenResult> {\n const oidc = await discoverOidc(this.issuerUrl, this.fetchFn);\n\n if (!oidc.token_endpoint) {\n throw new AuthenticationError('OIDC discovery returned no token endpoint');\n }\n\n const response = await this.fetchFn(oidc.token_endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body: new URLSearchParams({\n grant_type: 'refresh_token',\n client_id: this.clientId,\n refresh_token: this.currentRefreshToken,\n }).toString(),\n });\n\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n if (response.status === 400) {\n throw new AuthenticationError('Refresh token is invalid or expired. Please re-authenticate.');\n }\n throw new AuthenticationError(`Token refresh failed (${response.status}): ${body}`);\n }\n\n const data = parseTokenResponse(await response.json());\n\n // Handle refresh token rotation\n if (data.refresh_token) {\n this.currentRefreshToken = data.refresh_token;\n }\n\n return {\n accessToken: data.access_token,\n expiresAt: computeExpiresAt(data.expires_in),\n refreshToken: data.refresh_token ?? this.currentRefreshToken,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Bearer Token Provider (static)\n// ---------------------------------------------------------------------------\n\n/**\n * Uses a static, pre-obtained bearer token. The token is never refreshed —\n * if it expires, API requests will fail with an {@link AuthenticationError}.\n *\n * This is the simplest provider and is used when the caller already has a\n * valid access token (e.g. from an external auth flow or a long-lived token).\n */\nexport class BearerTokenProvider implements CredentialProvider {\n readonly type = 'bearer';\n\n constructor(private readonly token: string) {}\n\n getToken(): Promise<TokenResult> {\n return Promise.resolve({ accessToken: this.token, expiresAt: null });\n }\n}\n\n// ---------------------------------------------------------------------------\n// Credential resolution\n// ---------------------------------------------------------------------------\n\nexport interface CredentialResolverConfig {\n clientId?: string;\n clientSecret?: string;\n bearerToken?: string;\n refreshToken?: string;\n idpIssuerUrl?: string;\n onAuthorizationUrl?: (url: string) => Promise<string>;\n redirectUri?: string;\n baseUrl?: string;\n fetch?: typeof globalThis.fetch;\n /** OAuth scopes to request in the authorization-code flow (in addition to identity scopes). */\n scopes?: string[];\n}\n\nconst DEFAULT_IDP_ISSUER_URL = 'https://idp.gigadrive.de';\nconst DEFAULT_BASE_URL = 'https://api.gigadrive.network';\n\n/**\n * Resolves a `CredentialProvider` from explicit config or environment variables.\n *\n * Resolution order:\n * 1. Explicit `bearerToken` → BearerTokenProvider\n * 2. Explicit `clientId` + `clientSecret` → OAuth2ClientCredentialProvider\n * 3. Explicit `refreshToken` + `clientId` → OAuth2RefreshTokenProvider\n * 4. Explicit `onAuthorizationUrl` + `clientId` → OAuth2AuthorizationCodeProvider\n * 5. `GIGADRIVE_BEARER_TOKEN` env var → BearerTokenProvider\n * 6. `GIGADRIVE_CLIENT_ID` + `GIGADRIVE_CLIENT_SECRET` → OAuth2ClientCredentialProvider\n * 7. `GIGADRIVE_REFRESH_TOKEN` + `GIGADRIVE_CLIENT_ID` → OAuth2RefreshTokenProvider\n * 8. Throws AuthenticationError\n */\nexport const resolveCredentialProvider = (config: CredentialResolverConfig): CredentialProvider => {\n // Bind the default fetch to globalThis so calling it as `this.fetchFn(...)`\n // does not throw \"Illegal invocation\" in runtimes that require a bound receiver.\n const fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis);\n const baseUrl = config.baseUrl ?? readEnv('GIGADRIVE_API_BASE_URL') ?? DEFAULT_BASE_URL;\n const idpIssuerUrl = config.idpIssuerUrl ?? readEnv('GIGADRIVE_IDP_ISSUER_URL') ?? DEFAULT_IDP_ISSUER_URL;\n const tokenUrl = `${baseUrl}/oauth2/token`;\n\n // 1. Explicit bearer token\n if (config.bearerToken) {\n return new BearerTokenProvider(config.bearerToken);\n }\n\n // 2. Explicit client credentials\n if (config.clientId && config.clientSecret) {\n return new OAuth2ClientCredentialProvider(config.clientId, config.clientSecret, tokenUrl, fetchFn);\n }\n\n // 3. Explicit refresh token\n if (config.refreshToken && config.clientId) {\n return new OAuth2RefreshTokenProvider(config.clientId, config.refreshToken, idpIssuerUrl, fetchFn);\n }\n\n // 4. Explicit authorization code callback\n if (config.onAuthorizationUrl && config.clientId) {\n const redirectUri = config.redirectUri ?? 'urn:ietf:wg:oauth:2.0:oob';\n const scope = config.scopes && config.scopes.length > 0 ? config.scopes.join(' ') : DEFAULT_SCOPE;\n return new OAuth2AuthorizationCodeProvider(\n config.clientId,\n idpIssuerUrl,\n redirectUri,\n config.onAuthorizationUrl,\n fetchFn,\n scope\n );\n }\n\n // 5. GIGADRIVE_BEARER_TOKEN env var\n const envBearerToken = readEnv('GIGADRIVE_BEARER_TOKEN');\n if (envBearerToken) {\n return new BearerTokenProvider(envBearerToken);\n }\n\n // 6. GIGADRIVE_CLIENT_ID + GIGADRIVE_CLIENT_SECRET env vars\n const envClientId = readEnv('GIGADRIVE_CLIENT_ID');\n const envClientSecret = readEnv('GIGADRIVE_CLIENT_SECRET');\n if (envClientId && envClientSecret) {\n return new OAuth2ClientCredentialProvider(envClientId, envClientSecret, tokenUrl, fetchFn);\n }\n\n // 7. GIGADRIVE_REFRESH_TOKEN + GIGADRIVE_CLIENT_ID env vars\n const envRefreshToken = readEnv('GIGADRIVE_REFRESH_TOKEN');\n if (envRefreshToken && envClientId) {\n return new OAuth2RefreshTokenProvider(envClientId, envRefreshToken, idpIssuerUrl, fetchFn);\n }\n\n // 8. No credentials found\n throw new AuthenticationError(\n 'No credentials provided. Set one of:\\n' +\n ' - GIGADRIVE_BEARER_TOKEN\\n' +\n ' - GIGADRIVE_CLIENT_ID + GIGADRIVE_CLIENT_SECRET\\n' +\n ' - GIGADRIVE_REFRESH_TOKEN + GIGADRIVE_CLIENT_ID\\n' +\n 'Or pass credentials directly to the GigadriveClient constructor.'\n );\n};\n","import type { CredentialProvider } from './credential-provider';\n\n/**\n * Manages the access-token lifecycle: caching, automatic expiry detection,\n * proactive refresh, and concurrent-call deduplication.\n *\n * When multiple API requests fire simultaneously with an expired token, only\n * a single refresh call is made — all concurrent callers await the same\n * pending Promise. This prevents a \"thundering herd\" of token requests.\n *\n * @internal Used internally by {@link HttpClient}. Not part of the public API.\n */\nexport class TokenManager {\n private cachedToken: string | null = null;\n private expiresAt: number | null = null;\n private pendingRefresh: Promise<string> | null = null;\n\n constructor(private readonly provider: CredentialProvider) {}\n\n /**\n * Returns a valid access token. Uses the cached token if still valid,\n * otherwise fetches a new one from the credential provider.\n *\n * Concurrent calls are deduplicated — only one refresh runs at a time.\n */\n async getToken(): Promise<string> {\n if (this.cachedToken && (this.expiresAt === null || Date.now() < this.expiresAt)) {\n return this.cachedToken;\n }\n\n // Deduplicate concurrent refresh calls\n if (this.pendingRefresh) {\n return this.pendingRefresh;\n }\n\n this.pendingRefresh = this.refresh();\n\n try {\n return await this.pendingRefresh;\n } finally {\n this.pendingRefresh = null;\n }\n }\n\n /**\n * Invalidates the cached token. The next `getToken()` call will trigger a refresh.\n */\n invalidate(): void {\n this.cachedToken = null;\n this.expiresAt = null;\n }\n\n private async refresh(): Promise<string> {\n const result = await this.provider.getToken();\n this.cachedToken = result.accessToken;\n this.expiresAt = result.expiresAt;\n return result.accessToken;\n }\n}\n","import type { TokenManager } from './auth/token-manager';\nimport { ApiError, AuthenticationError } from './errors';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * A paginated API response. List endpoints return this shape.\n *\n * @typeParam T - The type of each item in the list.\n */\nexport interface Paginated<T> {\n /** The items on the current page. */\n items: T[];\n /** The total number of items across all pages. */\n total: number;\n /** An opaque cursor for the next page, present on cursor-paginated endpoints when more items remain. */\n nextCursor?: string;\n}\n\n/** A value that can be serialized into a query-string parameter. `undefined` values are omitted. */\nexport type QueryValue = string | number | boolean | undefined;\n\n/** Common pagination query parameters accepted by list endpoints. */\nexport interface ListQuery {\n /** 1-indexed page number (for page/`perPage`-style pagination). */\n page?: number;\n /** Maximum number of items per page. */\n perPage?: number;\n /** Opaque cursor for cursor-based pagination (from a previous response's `nextCursor`). */\n cursor?: string;\n}\n\n/** @internal */\nexport interface RequestOptions {\n query?: Record<string, QueryValue>;\n body?: unknown;\n headers?: Record<string, string>;\n /** Abort signal to cancel the request (and any 401-refresh retry). */\n signal?: AbortSignal;\n}\n\nconst isRawBody = (body: unknown): boolean =>\n typeof body === 'string' ||\n body instanceof ArrayBuffer ||\n (typeof Uint8Array !== 'undefined' && body instanceof Uint8Array) ||\n (typeof Blob !== 'undefined' && body instanceof Blob) ||\n (typeof FormData !== 'undefined' && body instanceof FormData) ||\n (typeof ReadableStream !== 'undefined' && body instanceof ReadableStream);\n\nconst hasHeader = (headers: Record<string, string>, name: string): boolean =>\n Object.keys(headers).some((key) => key.toLowerCase() === name.toLowerCase());\n\n// ---------------------------------------------------------------------------\n// HTTP Client\n// ---------------------------------------------------------------------------\n\n/**\n * Low-level HTTP client used internally by all resource classes. Handles\n * authentication header injection, JSON serialization, error mapping, and\n * automatic retry on 401 responses.\n *\n * You do not need to use this class directly — interact with the API through\n * the resource properties on {@link GigadriveClient} instead.\n *\n * @internal\n */\nexport class HttpClient {\n constructor(\n private readonly baseUrl: string,\n private readonly tokenManager: TokenManager,\n private readonly fetchFn: typeof globalThis.fetch\n ) {}\n\n /** @internal */\n async get<T>(path: string, options?: Pick<RequestOptions, 'query' | 'signal'>): Promise<T> {\n return this.request<T>('GET', path, options);\n }\n\n /** @internal */\n async post<T>(\n path: string,\n body?: unknown,\n options?: Pick<RequestOptions, 'headers' | 'query' | 'signal'>\n ): Promise<T> {\n return this.request<T>('POST', path, { body, ...options });\n }\n\n /** @internal */\n async put<T>(\n path: string,\n body?: unknown,\n options?: Pick<RequestOptions, 'headers' | 'query' | 'signal'>\n ): Promise<T> {\n return this.request<T>('PUT', path, { body, ...options });\n }\n\n /** @internal */\n async patch<T>(\n path: string,\n body?: unknown,\n options?: Pick<RequestOptions, 'headers' | 'query' | 'signal'>\n ): Promise<T> {\n return this.request<T>('PATCH', path, { body, ...options });\n }\n\n /** @internal */\n async delete<T>(path: string, options?: Pick<RequestOptions, 'query' | 'signal'>): Promise<T> {\n return this.request<T>('DELETE', path, options);\n }\n\n /** @internal */\n async postRaw<T>(\n path: string,\n body: string | ArrayBuffer | Uint8Array | ReadableStream | Blob | FormData,\n headers?: Record<string, string>\n ): Promise<T> {\n return this.request<T>('POST', path, { body, headers });\n }\n\n /**\n * Make an authenticated request and return the raw `Response` without parsing\n * the body. Used for streamed (SSE) and binary responses.\n *\n * @throws {@link ApiError} if the response status is not OK.\n * @internal\n */\n async requestStream(method: string, path: string, options?: RequestOptions): Promise<Response> {\n const response = await this.fetchWithAuth(method, path, options);\n if (!response.ok) {\n throw await this.toApiError(response);\n }\n return response;\n }\n\n /**\n * Make a raw fetch request to an arbitrary URL (e.g. presigned upload URLs\n * or resumable upload endpoints). No auth header is injected and the base URL\n * is not prepended.\n *\n * @param url - The full URL to fetch.\n * @param init - Standard `RequestInit` options.\n * @returns The raw `Response` object.\n * @throws {@link ApiError} if the response status is not OK.\n *\n * @internal\n */\n async fetchRaw(url: string, init: RequestInit): Promise<Response> {\n const response = await this.fetchFn(url, init);\n if (!response.ok) {\n throw new ApiError(response.statusText, response.status);\n }\n return response;\n }\n\n private async request<T>(method: string, path: string, options?: RequestOptions): Promise<T> {\n const response = await this.fetchWithAuth(method, path, options);\n return this.handleResponse<T>(response);\n }\n\n /** Perform the request with auth injection and a single 401 refresh-retry. */\n private async fetchWithAuth(method: string, path: string, options?: RequestOptions): Promise<Response> {\n const url = this.buildUrl(path, options?.query);\n const token = await this.tokenManager.getToken();\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n ...options?.headers,\n };\n\n let requestBody: RequestInit['body'] = null;\n if (options?.body !== undefined) {\n if (isRawBody(options.body)) {\n // Raw bodies (FormData/Blob/bytes/streams) set their own Content-Type.\n requestBody = options.body as RequestInit['body'];\n } else {\n requestBody = JSON.stringify(options.body);\n if (!hasHeader(headers, 'Content-Type')) {\n headers['Content-Type'] = 'application/json';\n }\n }\n }\n\n const signal = options?.signal;\n const response = await this.fetchFn(url, { method, headers, body: requestBody, signal });\n\n // A streamed body is consumed by the first fetch and cannot be replayed, so\n // we cannot transparently retry it after a token refresh.\n const bodyIsOneShot = typeof ReadableStream !== 'undefined' && requestBody instanceof ReadableStream;\n\n // Retry once on 401 after refreshing the token.\n if (response.status === 401 && !bodyIsOneShot) {\n this.tokenManager.invalidate();\n const retryToken = await this.tokenManager.getToken();\n headers.Authorization = `Bearer ${retryToken}`;\n\n const retryResponse = await this.fetchFn(url, { method, headers, body: requestBody, signal });\n if (retryResponse.status === 401) {\n throw new AuthenticationError('Authentication failed after token refresh');\n }\n return retryResponse;\n }\n\n return response;\n }\n\n private async handleResponse<T>(response: Response): Promise<T> {\n if (response.ok) {\n // Handle empty responses (204 No Content, or responses with no body)\n if (response.status === 204) {\n return undefined as T;\n }\n\n const text = await response.text();\n if (!text) {\n return undefined as T;\n }\n\n return JSON.parse(text) as T;\n }\n\n throw await this.toApiError(response);\n }\n\n private async toApiError(response: Response): Promise<ApiError> {\n let message: string;\n let code: string | undefined;\n\n try {\n const body = (await response.json()) as { error?: string | { message?: string; code?: string } };\n if (typeof body.error === 'string') {\n message = body.error;\n } else if (body.error && typeof body.error === 'object') {\n message = body.error.message ?? response.statusText;\n code = body.error.code;\n } else {\n message = response.statusText;\n }\n } catch {\n message = response.statusText;\n }\n\n return new ApiError(message, response.status, code);\n }\n\n private buildUrl(path: string, query?: Record<string, QueryValue>): string {\n const url = `${this.baseUrl}${path}`;\n\n if (!query) return url;\n\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined) {\n params.set(key, String(value));\n }\n }\n\n const qs = params.toString();\n return qs ? `${url}?${qs}` : url;\n }\n}\n","/**\n * Server-Sent Events (SSE) parsing for streamed API responses (e.g. streamed\n * chat completions). Works in browsers and Node.js 18+ where `Response.body` is\n * a web `ReadableStream`.\n *\n * @internal\n */\n\n/** Extract and concatenate the `data:` payload(s) from a single SSE event block. */\nconst extractData = (rawEvent: string): string | null => {\n const dataLines = rawEvent\n .split('\\n')\n .filter((line) => line.startsWith('data:'))\n .map((line) => line.slice('data:'.length).replace(/^ /, ''));\n if (dataLines.length === 0) return null;\n const joined = dataLines.join('\\n');\n // Treat whitespace-only events (e.g. keep-alive comments or a truncated final\n // \"data:\" line) as \"no data\" so we never call JSON.parse on an empty string.\n return joined.trim().length === 0 ? null : joined;\n};\n\nconst parseEvent = <T>(data: string): T => {\n try {\n return JSON.parse(data) as T;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to parse streamed SSE data as JSON: ${message}`);\n }\n};\n\n/**\n * Parse an SSE stream, yielding each event's `data` payload parsed as JSON.\n * The `[DONE]` sentinel and empty keep-alive events are skipped; iteration ends\n * when the underlying stream closes.\n *\n * @typeParam T - The shape of each streamed JSON chunk.\n * @param response - A streaming `fetch` response.\n */\nexport async function* parseSSEStream<T = unknown>(response: Response): AsyncGenerator<T> {\n const body = response.body as ReadableStream<Uint8Array> | null;\n if (!body) {\n throw new Error('The response has no readable body to stream.');\n }\n\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n const drain = function* (flush: boolean): Generator<T> {\n // SSE events are separated by a blank line; CRLF is normalised on read.\n let separator = buffer.indexOf('\\n\\n');\n while (separator !== -1) {\n const rawEvent = buffer.slice(0, separator);\n buffer = buffer.slice(separator + 2);\n const data = extractData(rawEvent);\n if (data !== null && data !== '[DONE]') {\n yield parseEvent<T>(data);\n }\n separator = buffer.indexOf('\\n\\n');\n }\n if (flush) {\n const data = extractData(buffer);\n buffer = '';\n if (data !== null && data !== '[DONE]') {\n yield parseEvent<T>(data);\n }\n }\n };\n\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n // Normalise CRLF on the whole buffer so a separator split across two reads\n // (a trailing \"\\r\" then a leading \"\\n\") is still collapsed correctly.\n buffer = (buffer + decoder.decode(value, { stream: true })).replace(/\\r\\n/g, '\\n');\n yield* drain(false);\n }\n yield* drain(true);\n } finally {\n // Cancel (not just release the lock) so breaking out of the consumer's\n // `for await` early stops the underlying HTTP body instead of leaking it.\n await reader.cancel().catch(() => undefined);\n }\n}\n","import type { HttpClient } from '../http-client';\n\n/**\n * Base class for all API resource classes. Provides access to the shared\n * HTTP client for making authenticated API requests.\n *\n * @internal\n */\nexport class BaseResource {\n constructor(protected readonly httpClient: HttpClient) {}\n}\n","import type { HttpClient, Paginated } from '../../http-client';\nimport { parseSSEStream } from '../../streaming';\nimport { BaseResource } from '../base-resource';\nimport type {\n AiModel,\n ChatCompletionChunk,\n ChatCompletionRequest,\n ChatCompletionResponse,\n GatewayRequestOptions,\n GatewayResult,\n ResponsesRequest,\n ResponsesResponse,\n SpeechRequest,\n TranscriptionRequest,\n TranscriptionResponse,\n VideoGenerationRequest,\n VideoGenerationResponse,\n VideoModelList,\n} from './types';\n\nexport type * from './types';\n\nconst BASE = '/ai/v1';\n\nconst toBlob = (file: Blob | Uint8Array | ArrayBuffer): Blob => {\n if (file instanceof Uint8Array) return new Blob([file]);\n if (typeof Blob !== 'undefined' && file instanceof Blob) return file;\n return new Blob([new Uint8Array(file as ArrayBuffer)]);\n};\n\n/** Text-to-speech and speech-to-text endpoints. */\nexport class AiGatewayAudioResource extends BaseResource {\n /**\n * Synthesize speech from text. Returns the raw audio bytes.\n *\n * @returns The audio content as an `ArrayBuffer` (format per `response_format`).\n */\n async speech(data: SpeechRequest, options?: GatewayRequestOptions): Promise<ArrayBuffer> {\n const response = await this.httpClient.requestStream('POST', `${BASE}/audio/speech`, {\n body: data,\n headers: options?.headers,\n });\n return response.arrayBuffer();\n }\n\n /**\n * Transcribe an audio file to text. The file is sent as multipart form data.\n */\n async transcriptions(data: TranscriptionRequest, options?: GatewayRequestOptions): Promise<TranscriptionResponse> {\n const form = new FormData();\n const { file, filename, ...rest } = data;\n form.set('file', toBlob(file), filename ?? 'audio');\n for (const [key, value] of Object.entries(rest)) {\n if (value === undefined || value === null) continue;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- narrows to primitive so no-base-to-string is satisfied\n form.set(key, typeof value === 'object' ? JSON.stringify(value) : String(value as string | number | boolean));\n }\n return this.httpClient.postRaw(`${BASE}/audio/transcriptions`, form, options?.headers);\n }\n}\n\n/** Video generation endpoints. */\nexport class AiGatewayVideosResource extends BaseResource {\n /** Generate a video from a prompt. */\n async generations(data: VideoGenerationRequest, options?: GatewayRequestOptions): Promise<VideoGenerationResponse> {\n return this.httpClient.post(`${BASE}/videos`, data, { headers: options?.headers });\n }\n\n /** List the video models available through the gateway. */\n async listModels(): Promise<VideoModelList> {\n return this.httpClient.get(`${BASE}/videos/models`);\n }\n}\n\n/**\n * Interact with the Gigadrive AI Gateway — an OpenAI-compatible API that routes\n * requests to multiple AI providers. Accessed via {@link GigadriveClient.aiGateway}.\n *\n * @example\n * ```ts\n * // Chat completion\n * const res = await client.aiGateway.chatCompletions({\n * model: 'openai/gpt-4o',\n * messages: [{ role: 'user', content: 'Hello!' }],\n * });\n * console.log(res.choices[0].message.content);\n *\n * // Streamed chat completion\n * for await (const chunk of client.aiGateway.chatCompletionsStream({\n * model: 'openai/gpt-4o',\n * messages: [{ role: 'user', content: 'Write a haiku.' }],\n * })) {\n * process.stdout.write(chunk.choices[0]?.delta.content ?? '');\n * }\n * ```\n */\nexport class AiGatewayResource extends BaseResource {\n /** Text-to-speech and speech-to-text. */\n readonly audio: AiGatewayAudioResource;\n /** Video generation. */\n readonly videos: AiGatewayVideosResource;\n\n constructor(httpClient: HttpClient) {\n super(httpClient);\n this.audio = new AiGatewayAudioResource(httpClient);\n this.videos = new AiGatewayVideosResource(httpClient);\n }\n\n /**\n * Create a chat completion using the OpenAI-compatible endpoint.\n *\n * @param data - The chat completion request (model, messages, options, provider routing).\n * @param options - Custom headers (e.g. `X-Gigadrive-Application-Id`).\n */\n async chatCompletions(data: ChatCompletionRequest, options?: GatewayRequestOptions): Promise<ChatCompletionResponse> {\n return this.httpClient.post(`${BASE}/chat/completions`, { ...data, stream: false }, { headers: options?.headers });\n }\n\n /**\n * Like {@link chatCompletions}, but also returns the raw response and the\n * gateway request-id / cost headers.\n */\n async chatCompletionsWithResponse(\n data: ChatCompletionRequest,\n options?: GatewayRequestOptions\n ): Promise<GatewayResult<ChatCompletionResponse>> {\n const response = await this.httpClient.requestStream('POST', `${BASE}/chat/completions`, {\n body: { ...data, stream: false },\n headers: options?.headers,\n });\n const body = (await response.json()) as ChatCompletionResponse;\n const cost = response.headers.get('X-Gigadrive-Cost-Micros');\n const costMicros = cost !== null ? Number(cost) : NaN;\n return {\n data: body,\n response,\n requestId: response.headers.get('X-Gigadrive-Request-Id') ?? undefined,\n costMicros: Number.isFinite(costMicros) ? costMicros : undefined,\n };\n }\n\n /**\n * Stream a chat completion as Server-Sent Events. Yields each chunk as it\n * arrives and ends when the gateway closes the stream.\n */\n async *chatCompletionsStream(\n data: ChatCompletionRequest,\n options?: GatewayRequestOptions\n ): AsyncGenerator<ChatCompletionChunk> {\n const response = await this.httpClient.requestStream('POST', `${BASE}/chat/completions`, {\n body: { ...data, stream: true },\n headers: options?.headers,\n });\n yield* parseSSEStream<ChatCompletionChunk>(response);\n }\n\n /**\n * Create a response using the Open Responses-compatible endpoint.\n */\n async responses(data: ResponsesRequest, options?: GatewayRequestOptions): Promise<ResponsesResponse> {\n return this.httpClient.post(`${BASE}/responses`, { ...data, stream: false }, { headers: options?.headers });\n }\n\n /**\n * Stream a response using the Open Responses-compatible endpoint.\n */\n async *responsesStream(data: ResponsesRequest, options?: GatewayRequestOptions): AsyncGenerator<unknown> {\n const response = await this.httpClient.requestStream('POST', `${BASE}/responses`, {\n body: { ...data, stream: true },\n headers: options?.headers,\n });\n yield* parseSSEStream(response);\n }\n\n /**\n * List all AI models available through the gateway.\n */\n async listModels(): Promise<Paginated<AiModel>> {\n return this.httpClient.get(`${BASE}/models`);\n }\n\n /**\n * Get details for a specific AI model by its ID.\n *\n * @param modelId - The model identifier (e.g. `\"openai/gpt-4o\"`).\n */\n async getModel(modelId: string): Promise<AiModel> {\n return this.httpClient.get(`${BASE}/models/${encodeURIComponent(modelId)}`);\n }\n}\n","import type { Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\n\n/** An application-scoped API key. The secret is never returned after creation. */\nexport interface ApiKey {\n /** Unique identifier (UUID). Used as the OAuth client ID. */\n id: string;\n /** Human-readable label. */\n name: string;\n /** Application this key is scoped to. */\n applicationId: string | null;\n /** API capability scopes granted to the key. */\n scopes: string[];\n /** ISO 8601 expiry, or `null` if the key never expires. */\n expiresAt: string | null;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/** Input for creating an application-scoped API key. */\nexport interface CreateApiKeyInput {\n /** Human-readable label for the key. */\n name: string;\n /** Application to scope the key to. The key can only act on this application. */\n applicationId: string;\n /**\n * API capability scopes to grant. Each must be a subset of your own access and\n * cannot include API key management. Defaults to a minimal read-only set.\n */\n scopes?: string[];\n /** Optional ISO 8601 expiry. Defaults to 90 days when omitted. */\n expiresAt?: string;\n}\n\n/**\n * The result of creating an API key. Includes the plaintext {@link secret},\n * which is returned only once and cannot be retrieved again.\n */\nexport interface CreateApiKeyResult extends ApiKey {\n /** The plaintext client secret. Store it now — it cannot be retrieved again. */\n secret: string;\n}\n\n/** Query for {@link ApiKeysResource.list}. */\nexport interface ListApiKeysQuery {\n /** Application whose keys should be listed. */\n applicationId: string;\n}\n\n/**\n * Manage application-scoped API keys. Accessed via {@link GigadriveClient.apiKeys}.\n *\n * @example\n * ```ts\n * const key = await client.apiKeys.create({ name: 'ci', applicationId: 'app-id' });\n * // Use key.id + key.secret as OAuth client credentials. Store the secret now.\n * ```\n */\nexport class ApiKeysResource extends BaseResource {\n /**\n * Provision a new application-scoped API key. The plaintext secret is returned\n * exactly once — store it immediately.\n *\n * @param data - The key name, target application, and optional scopes/expiry.\n * @returns The created key including its one-time plaintext secret.\n */\n async create(data: CreateApiKeyInput): Promise<CreateApiKeyResult> {\n return this.httpClient.post('/api-keys', data);\n }\n\n /**\n * List the API keys scoped to an application. Secrets are never returned.\n *\n * @param query - The application whose keys should be listed.\n * @returns A paginated list of API key metadata.\n */\n async list(query: ListApiKeysQuery): Promise<Paginated<ApiKey>> {\n return this.httpClient.get('/api-keys', {\n query: query as unknown as Record<string, string | number | undefined>,\n });\n }\n\n /**\n * Permanently revoke an API key.\n *\n * @param apiKeyId - The API key ID (UUID).\n */\n async delete(apiKeyId: string): Promise<void> {\n return this.httpClient.delete(`/api-keys/${apiKeyId}`);\n }\n}\n","import type { ListQuery, Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\nimport type { CreateEnvVarInput, EnvVar, PullEnvVarsQuery, PullEnvVarsResult, UpdateEnvVarInput } from './env-vars';\n\n/**\n * Manage environment variables scoped to an application.\n * Accessed via `client.applications.envVars`.\n */\nexport class ApplicationEnvVarsResource extends BaseResource {\n /**\n * List all environment variables for an application.\n *\n * @param applicationId - The application ID (UUID).\n * @returns A paginated list of environment variables.\n *\n * @example\n * ```ts\n * const { items } = await client.applications.envVars.list('app-id');\n * for (const v of items) {\n * console.log(`${v.key}=${v.sensitive ? '***' : v.value}`);\n * }\n * ```\n */\n async list(applicationId: string, query?: ListQuery): Promise<Paginated<EnvVar>> {\n return this.httpClient.get(`/applications/${applicationId}/env-vars`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * Pull the environment variables that apply to an application for local\n * development. Merges organization-wide, application-wide, and (optionally)\n * environment-specific overrides, returning only non-sensitive values — ready\n * to write to a local `.env` file.\n *\n * @param applicationId - The application ID (UUID).\n * @param query - Optional environment targeting.\n * @returns The resolved non-sensitive variables plus the count of omitted secrets.\n *\n * @example\n * ```ts\n * const { items } = await client.applications.envVars.pull('app-id');\n * const dotenv = items.map((v) => `${v.key}=${v.value}`).join('\\n');\n * ```\n */\n async pull(applicationId: string, query?: PullEnvVarsQuery): Promise<PullEnvVarsResult> {\n return this.httpClient.get(`/applications/${applicationId}/env-vars/pull`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * Create a new environment variable for an application.\n *\n * @param applicationId - The application ID (UUID).\n * @param data - The variable key, value, and optional settings.\n * @returns The newly created environment variable.\n *\n * @example\n * ```ts\n * const envVar = await client.applications.envVars.create('app-id', {\n * key: 'DATABASE_URL',\n * value: 'postgres://...',\n * sensitive: true,\n * });\n * ```\n */\n async create(applicationId: string, data: CreateEnvVarInput): Promise<EnvVar> {\n return this.httpClient.post(`/applications/${applicationId}/env-vars`, data);\n }\n\n /**\n * Update an existing environment variable. Only the fields you provide\n * will be changed; omitted fields are left unchanged.\n *\n * @param applicationId - The application ID (UUID).\n * @param envVarId - The environment variable ID (UUID).\n * @param data - The fields to update.\n * @returns The updated environment variable.\n *\n * @example\n * ```ts\n * await client.applications.envVars.update('app-id', 'var-id', {\n * value: 'postgres://new-host/db',\n * });\n * ```\n */\n async update(applicationId: string, envVarId: string, data: UpdateEnvVarInput): Promise<EnvVar> {\n return this.httpClient.patch(`/applications/${applicationId}/env-vars/${envVarId}`, data);\n }\n\n /**\n * Permanently delete an environment variable.\n *\n * @param applicationId - The application ID (UUID).\n * @param envVarId - The environment variable ID (UUID).\n *\n * @example\n * ```ts\n * await client.applications.envVars.delete('app-id', 'var-id');\n * ```\n */\n async delete(applicationId: string, envVarId: string): Promise<void> {\n return this.httpClient.delete(`/applications/${applicationId}/env-vars/${envVarId}`);\n }\n}\n","import type { Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\n\n/** A nested reference to the application that served a request. */\nexport interface NetworkRequestApplicationRef {\n id: string;\n name: string;\n}\n\n/** A nested reference to the deployment that served a request. */\nexport interface NetworkRequestDeploymentRef {\n id: string;\n status: string;\n}\n\n/** A nested reference to the function route that handled a request. */\nexport interface NetworkRequestFunctionRef {\n id: string;\n name: string | null;\n path: string;\n region: string | null;\n}\n\n/** A nested reference to the static asset that served a request. */\nexport interface NetworkRequestAssetRef {\n id: string;\n path: string;\n objectKey: string;\n}\n\n/** A nested reference to the storage bucket involved in a request. */\nexport interface NetworkRequestBucketRef {\n id: string;\n name: string;\n slug: string;\n}\n\n/** A nested reference to the storage object involved in a request. */\nexport interface NetworkRequestObjectRef {\n id: string;\n key: string;\n contentType: string | null;\n}\n\n/** The HTTP request details captured for a network request. */\nexport interface NetworkRequestDetails {\n method: string;\n hostname: string;\n path: string;\n query: string | null;\n protocol: string | null;\n country: string | null;\n userAgent: string | null;\n referer: string | null;\n}\n\n/** The HTTP response details captured for a network request. */\nexport interface NetworkResponseDetails {\n status: number | null;\n cacheStatus: 'hit' | 'miss' | 'bypass' | 'revalidated' | 'stale' | 'updating' | null;\n cacheHit: boolean | null;\n region: string | null;\n edgeLocation: string | null;\n}\n\n/** Byte and timing metrics for a network request. */\nexport interface NetworkRequestMetrics {\n requestBodyBytes: number | null;\n responseBodyBytes: number | null;\n bytesSent: number | null;\n durationMs: number | null;\n}\n\n/** A single observed request served through the Gigadrive Network edge (summary form). */\nexport interface NetworkRequestSummary {\n id: string;\n application: NetworkRequestApplicationRef;\n deployment: NetworkRequestDeploymentRef | null;\n deploymentFunction: NetworkRequestFunctionRef | null;\n deploymentAsset: NetworkRequestAssetRef | null;\n storageBucket: NetworkRequestBucketRef | null;\n storageObject: NetworkRequestObjectRef | null;\n request: NetworkRequestDetails;\n response: NetworkResponseDetails;\n metrics: NetworkRequestMetrics;\n startedAt: string;\n completedAt: string | null;\n}\n\n/** A full network request record, including sanitized request/response headers. */\nexport interface NetworkRequest extends NetworkRequestSummary {\n /** Sanitized request headers captured for debugging. */\n requestHeaders: Record<string, string>;\n /** Sanitized response headers captured for debugging. */\n responseHeaders: Record<string, string>;\n}\n\n/** Query filters for listing application requests. All fields are optional. */\nexport interface ListRequestsQuery {\n /** Filter to requests served by one deployment. */\n deploymentId?: string;\n /** Filter to requests served by one function route. */\n deploymentFunctionId?: string;\n /** Filter to requests served by one static asset route. */\n deploymentAssetId?: string;\n /** Filter to storage delivery requests for one bucket. */\n storageBucketId?: string;\n /** Filter to storage delivery requests for one object. */\n storageObjectId?: string;\n /** Only include requests that started at or after this ISO 8601 timestamp. */\n from?: string;\n /** Only include requests that started before or at this ISO 8601 timestamp. */\n to?: string;\n /** Maximum number of records to return. */\n limit?: number;\n /** Opaque cursor from a previous response's `nextCursor`. */\n cursor?: string;\n /** Filter by HTTP method (e.g. `\"GET\"`). */\n method?: string;\n /** Filter by exact HTTP status code. */\n status?: number;\n /** Filter by status family (`2`, `3`, `4`, or `5`). */\n statusFamily?: number;\n /** Filter by request hostname. */\n hostname?: string;\n /** Filter to requests whose path starts with this prefix. */\n pathPrefix?: string;\n /** Filter by ISO 3166-1 alpha-2 country code. */\n country?: string;\n /** Filter by origin region. */\n region?: string;\n /** Filter by edge location. */\n edgeLocation?: string;\n /** Filter by CDN cache state. */\n cacheStatus?: string;\n /** Filter by whether the response was served from cache. */\n cacheHit?: boolean;\n}\n\n/**\n * Read observed traffic (request logs) for an application. Accessed via\n * `client.applications.requests`.\n *\n * @example\n * ```ts\n * // Recent 5xx responses for a deployment\n * const { items } = await client.applications.requests.list('app-id', {\n * deploymentId: 'dep-id',\n * statusFamily: 5,\n * limit: 100,\n * });\n * ```\n */\nexport class ApplicationRequestsResource extends BaseResource {\n /**\n * List requests for an application, with rich filtering and cursor pagination.\n *\n * @param applicationId - The application ID (UUID).\n * @param query - Optional filters and pagination.\n * @returns A page of request summaries.\n */\n async list(applicationId: string, query?: ListRequestsQuery): Promise<Paginated<NetworkRequestSummary>> {\n return this.httpClient.get(`/applications/${applicationId}/requests`, {\n query: query as Record<string, string | number | boolean | undefined> | undefined,\n });\n }\n\n /**\n * Get a single request by ID, including sanitized request/response headers.\n *\n * @param applicationId - The application ID (UUID).\n * @param requestId - The request record ID (UUID).\n * @returns The full request record.\n */\n async get(applicationId: string, requestId: string): Promise<NetworkRequest> {\n return this.httpClient.get(`/applications/${applicationId}/requests/${requestId}`);\n }\n}\n","/**\n * Checksum helpers used to satisfy the storage upload contract, which requires\n * a SHA-256 of the object content (SHA-1 and MD5 are optional integrity hints).\n *\n * SHA-256 and SHA-1 are computed with the Web Crypto API (`crypto.subtle`),\n * which is available in modern browsers and Node.js 18+. MD5 is not provided by\n * Web Crypto, so it is computed with Node's `crypto` module and is therefore\n * Node-only — pass `checksumMd5` explicitly if you need it in the browser.\n *\n * @internal\n */\n\n/** A set of computed content checksums (lowercase hex). */\nexport interface Checksums {\n /** SHA-256 checksum. Always computed. */\n sha256: string;\n /** SHA-1 checksum, when requested. */\n sha1?: string;\n /** MD5 checksum, when requested (Node.js only). */\n md5?: string;\n}\n\n/** Which optional checksums to compute alongside the always-required SHA-256. */\nexport interface ChecksumRequest {\n /** Also compute a SHA-1 checksum. */\n sha1?: boolean;\n /** Also compute an MD5 checksum (Node.js only). */\n md5?: boolean;\n}\n\nconst toHex = (buffer: ArrayBuffer): string => {\n const bytes = new Uint8Array(buffer);\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += bytes[i].toString(16).padStart(2, '0');\n }\n return hex;\n};\n\nconst subtleDigest = async (algorithm: 'SHA-256' | 'SHA-1', bytes: Uint8Array): Promise<string> =>\n toHex(await crypto.subtle.digest(algorithm, bytes));\n\nconst importNodeCrypto = async (): Promise<typeof import('node:crypto') | null> => {\n if (typeof process === 'undefined' || !process.versions?.node) return null;\n try {\n return await import('node:crypto');\n } catch {\n return null;\n }\n};\n\nconst md5Hex = async (bytes: Uint8Array): Promise<string> => {\n const nodeCrypto = await importNodeCrypto();\n if (!nodeCrypto) {\n throw new Error('MD5 checksums are only supported in Node.js. Provide checksumMd5 explicitly in the browser.');\n }\n return nodeCrypto.createHash('md5').update(bytes).digest('hex');\n};\n\n/**\n * Compute checksums for an in-memory byte buffer.\n *\n * @param bytes - The content bytes.\n * @param request - Which optional checksums to compute (SHA-256 is always computed).\n */\nexport const computeChecksums = async (bytes: Uint8Array, request: ChecksumRequest = {}): Promise<Checksums> => {\n const checksums: Checksums = { sha256: await subtleDigest('SHA-256', bytes) };\n if (request.sha1) checksums.sha1 = await subtleDigest('SHA-1', bytes);\n if (request.md5) checksums.md5 = await md5Hex(bytes);\n return checksums;\n};\n\n/**\n * Compute checksums for a file on disk by streaming it through Node's hashing\n * primitives — avoids loading the whole file into memory. Node.js only.\n *\n * @param path - Filesystem path to hash.\n * @param request - Which optional checksums to compute (SHA-256 is always computed).\n */\nexport const hashNodeFile = async (path: string, request: ChecksumRequest = {}): Promise<Checksums> => {\n const [fs, nodeCrypto] = await Promise.all([import('node:fs'), import('node:crypto')]);\n const sha256 = nodeCrypto.createHash('sha256');\n const sha1 = request.sha1 ? nodeCrypto.createHash('sha1') : null;\n const md5 = request.md5 ? nodeCrypto.createHash('md5') : null;\n\n await new Promise<void>((resolve, reject) => {\n const stream = fs.createReadStream(path);\n stream.on('data', (chunk) => {\n sha256.update(chunk);\n sha1?.update(chunk);\n md5?.update(chunk);\n });\n stream.on('end', () => resolve());\n stream.on('error', reject);\n });\n\n const checksums: Checksums = { sha256: sha256.digest('hex') };\n if (sha1) checksums.sha1 = sha1.digest('hex');\n if (md5) checksums.md5 = md5.digest('hex');\n return checksums;\n};\n","/**\n * Minimal filename → MIME type inference used to populate an upload's content\n * type when the caller does not provide one. Intentionally dependency-free and\n * covers the most common web/asset types; callers can always pass an explicit\n * `contentType` to override.\n *\n * @internal\n */\n\nconst MIME_TYPES: Record<string, string> = {\n // Text & code\n txt: 'text/plain',\n csv: 'text/csv',\n html: 'text/html',\n htm: 'text/html',\n css: 'text/css',\n js: 'text/javascript',\n mjs: 'text/javascript',\n json: 'application/json',\n xml: 'application/xml',\n md: 'text/markdown',\n // Images\n png: 'image/png',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n webp: 'image/webp',\n svg: 'image/svg+xml',\n avif: 'image/avif',\n ico: 'image/x-icon',\n bmp: 'image/bmp',\n tiff: 'image/tiff',\n heic: 'image/heic',\n // Audio\n mp3: 'audio/mpeg',\n wav: 'audio/wav',\n ogg: 'audio/ogg',\n oga: 'audio/ogg',\n flac: 'audio/flac',\n aac: 'audio/aac',\n m4a: 'audio/mp4',\n // Video\n mp4: 'video/mp4',\n webm: 'video/webm',\n mov: 'video/quicktime',\n avi: 'video/x-msvideo',\n mkv: 'video/x-matroska',\n // Documents\n pdf: 'application/pdf',\n doc: 'application/msword',\n docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n xls: 'application/vnd.ms-excel',\n xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n ppt: 'application/vnd.ms-powerpoint',\n pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n // Archives & binaries\n zip: 'application/zip',\n gz: 'application/gzip',\n tar: 'application/x-tar',\n br: 'application/x-brotli',\n wasm: 'application/wasm',\n // Fonts\n woff: 'font/woff',\n woff2: 'font/woff2',\n ttf: 'font/ttf',\n otf: 'font/otf',\n};\n\n/**\n * Infer a MIME type from a filename or object key by its extension.\n *\n * @param nameOrKey - A filename or object key (e.g. `\"images/photo.jpg\"`).\n * @returns The inferred MIME type, or `undefined` if the extension is unknown.\n */\nexport const inferContentType = (nameOrKey: string): string | undefined => {\n const lastDot = nameOrKey.lastIndexOf('.');\n if (lastDot === -1 || lastDot === nameOrKey.length - 1) return undefined;\n const ext = nameOrKey.slice(lastDot + 1).toLowerCase();\n return MIME_TYPES[ext];\n};\n","/**\n * Resolves the various accepted upload inputs (in-memory bytes, a Node.js file\n * path, or a Node.js readable stream) into the concrete values the upload flow\n * needs: the object tus-js-client consumes, the byte size, an inferred content\n * type, and the required checksums.\n *\n * @internal\n */\n\nimport { computeChecksums, hashNodeFile, type Checksums } from './checksum';\nimport { inferContentType } from './content-type';\n\n/** A minimal Node.js `Readable`-like shape (avoids depending on `node:stream` types). */\nexport interface NodeReadableLike {\n on(event: string, listener: (...args: unknown[]) => void): unknown;\n pipe?: unknown;\n read?: unknown;\n}\n\n/** In-memory data accepted by the upload helpers. `Buffer` is a `Uint8Array`. */\nexport type UploadData = Blob | ArrayBuffer | Uint8Array;\n\n/** The tus-js-client file input union. */\nexport type TusFile = File | Blob | Uint8Array | NodeReadableLike;\n\n/** Input describing what to upload and any pre-supplied metadata. */\nexport interface UploadSourceInput {\n /** The object key/path the upload targets — used to infer content type. */\n key: string;\n /** In-memory data (browser `File`/`Blob`, Node `Buffer`, `Uint8Array`, `ArrayBuffer`). */\n data?: UploadData;\n /** A filesystem path to stream from (Node.js only). */\n path?: string;\n /** A readable stream (Node.js only). Requires `contentLength` and `checksumSha256`. */\n stream?: NodeReadableLike;\n /** Explicit content type. Inferred from `key` when omitted. */\n contentType?: string;\n /** Explicit byte size. Required for `stream`; computed otherwise. */\n contentLength?: number;\n /** Pre-computed SHA-256 (skips hashing). Required for `stream`. */\n checksumSha256?: string;\n /** Pre-computed SHA-1. */\n checksumSha1?: string;\n /** Pre-computed MD5. */\n checksumMd5?: string;\n}\n\n/** The fully resolved upload source. */\nexport interface ResolvedUploadSource {\n /** The value handed to tus-js-client. */\n tusFile: TusFile;\n /** Total upload size in bytes. */\n size: number;\n /** Resolved content type, if known. */\n contentType?: string;\n /** Checksums (always includes SHA-256). */\n checksums: Checksums;\n /** Whether a finite chunk size is required (true for streamed/file-path inputs). */\n requiresFiniteChunkSize: boolean;\n}\n\nconst isNode = (): boolean => typeof process !== 'undefined' && !!process.versions?.node;\n\nconst toBytes = async (data: UploadData): Promise<Uint8Array> => {\n if (typeof Blob !== 'undefined' && data instanceof Blob) return new Uint8Array(await data.arrayBuffer());\n if (data instanceof Uint8Array) return data;\n if (data instanceof ArrayBuffer) return new Uint8Array(data);\n throw new Error('Unsupported upload data type. Pass a File, Blob, Buffer, Uint8Array, or ArrayBuffer.');\n};\n\nconst sizeOf = (data: UploadData): number => {\n if (typeof Blob !== 'undefined' && data instanceof Blob) return data.size;\n if (data instanceof Uint8Array) return data.byteLength;\n if (data instanceof ArrayBuffer) return data.byteLength;\n throw new Error('Cannot determine upload size. Pass a File, Blob, Buffer, Uint8Array, or ArrayBuffer.');\n};\n\n/** Convert in-memory data into a value tus-js-client accepts in the current runtime. */\nconst toTusFile = (data: UploadData): TusFile => {\n // Node accepts Buffer/Uint8Array directly; browsers are happiest with a Blob.\n if (data instanceof Uint8Array) return isNode() ? data : new Blob([data]);\n if (typeof Blob !== 'undefined' && data instanceof Blob) return data;\n const bytes = new Uint8Array(data as ArrayBuffer);\n return isNode() ? bytes : new Blob([bytes]);\n};\n\n/**\n * Build the checksum set, always honoring caller-supplied SHA-1/MD5 (they are\n * passed through, never recomputed). Only SHA-256 is ever computed by the SDK.\n */\nconst buildChecksums = (input: UploadSourceInput, sha256: string): Checksums => {\n const checksums: Checksums = { sha256 };\n if (input.checksumSha1) checksums.sha1 = input.checksumSha1;\n if (input.checksumMd5) checksums.md5 = input.checksumMd5;\n return checksums;\n};\n\n/**\n * Resolve an {@link UploadSourceInput} into a {@link ResolvedUploadSource},\n * computing size, content type, and the SHA-256 as needed.\n *\n * @param input - The upload source description. Exactly one of `data`, `path`,\n * or `stream` must be provided.\n * @param options - Set `hash: false` to skip SHA-256 computation (e.g. when\n * uploading to an already-authorized URL, where checksums are not needed).\n */\nexport const resolveUploadSource = async (\n input: UploadSourceInput,\n options: { hash?: boolean } = {}\n): Promise<ResolvedUploadSource> => {\n const sourceCount = [input.data !== undefined, input.path !== undefined, input.stream !== undefined].filter(\n Boolean\n ).length;\n if (sourceCount > 1) {\n throw new Error('Provide only one upload source: data, path, or stream.');\n }\n\n const hash = options.hash !== false;\n const contentType = input.contentType ?? inferContentType(input.key);\n\n if (input.data !== undefined) {\n const size = input.contentLength ?? sizeOf(input.data);\n const sha256 = input.checksumSha256 ?? (hash ? (await computeChecksums(await toBytes(input.data))).sha256 : '');\n return {\n tusFile: toTusFile(input.data),\n size,\n contentType,\n checksums: buildChecksums(input, sha256),\n requiresFiniteChunkSize: false,\n };\n }\n\n if (input.path !== undefined) {\n if (!isNode()) throw new Error('Uploading from a file path is only supported in Node.js.');\n const fs = await import('node:fs');\n const size = input.contentLength ?? fs.statSync(input.path).size;\n const sha256 = input.checksumSha256 ?? (hash ? (await hashNodeFile(input.path)).sha256 : '');\n // A fresh read stream is handed to tus for the byte upload.\n const tusFile = fs.createReadStream(input.path) as unknown as NodeReadableLike;\n return { tusFile, size, contentType, checksums: buildChecksums(input, sha256), requiresFiniteChunkSize: true };\n }\n\n if (input.stream !== undefined) {\n if (input.contentLength === undefined) {\n throw new Error('Uploading from a stream requires contentLength to be provided.');\n }\n if (hash && !input.checksumSha256) {\n throw new Error('Uploading from a stream requires checksumSha256 to be provided.');\n }\n return {\n tusFile: input.stream,\n size: input.contentLength,\n contentType,\n checksums: buildChecksums(input, input.checksumSha256 ?? ''),\n requiresFiniteChunkSize: true,\n };\n }\n\n throw new Error('No upload source provided. Pass one of: data, path, or stream.');\n};\n","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\nfunction _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _isNativeFunction(fn) { try { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; } catch (e) { return typeof fn === \"function\"; } }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nvar DetailedError = /*#__PURE__*/function (_Error) {\n function DetailedError(message) {\n var _this;\n var causingErr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n var req = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var res = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n _classCallCheck(this, DetailedError);\n _this = _callSuper(this, DetailedError, [message]);\n _this.originalRequest = req;\n _this.originalResponse = res;\n _this.causingError = causingErr;\n if (causingErr != null) {\n message += \", caused by \".concat(causingErr.toString());\n }\n if (req != null) {\n var requestId = req.getHeader('X-Request-ID') || 'n/a';\n var method = req.getMethod();\n var url = req.getURL();\n var status = res ? res.getStatus() : 'n/a';\n var body = res ? res.getBody() || '' : 'n/a';\n message += \", originated from request (method: \".concat(method, \", url: \").concat(url, \", response code: \").concat(status, \", response text: \").concat(body, \", request id: \").concat(requestId, \")\");\n }\n _this.message = message;\n return _this;\n }\n _inherits(DetailedError, _Error);\n return _createClass(DetailedError);\n}( /*#__PURE__*/_wrapNativeSuper(Error));\nexport default DetailedError;","var isEnabled = false;\nexport function enableDebugLog() {\n isEnabled = true;\n}\nexport function log(msg) {\n if (!isEnabled) return;\n console.log(msg);\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar NoopUrlStorage = /*#__PURE__*/function () {\n function NoopUrlStorage() {\n _classCallCheck(this, NoopUrlStorage);\n }\n return _createClass(NoopUrlStorage, [{\n key: \"listAllUploads\",\n value: function listAllUploads() {\n return Promise.resolve([]);\n }\n }, {\n key: \"findUploadsByFingerprint\",\n value: function findUploadsByFingerprint(_fingerprint) {\n return Promise.resolve([]);\n }\n }, {\n key: \"removeUpload\",\n value: function removeUpload(_urlStorageKey) {\n return Promise.resolve();\n }\n }, {\n key: \"addUpload\",\n value: function addUpload(_fingerprint, _upload) {\n return Promise.resolve(null);\n }\n }]);\n}();\nexport { NoopUrlStorage as default };","/**\n * base64.ts\n *\n * Licensed under the BSD 3-Clause License.\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * References:\n * http://en.wikipedia.org/wiki/Base64\n *\n * @author Dan Kogai (https://github.com/dankogai)\n */\nconst version = '3.8.1';\n/**\n * @deprecated use lowercase `version`.\n */\nconst VERSION = version;\nconst _hasBuffer = typeof Buffer === 'function';\nconst _TD = typeof TextDecoder === 'function' ? new TextDecoder('utf-8', { ignoreBOM: true }) : undefined;\nconst _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined;\nconst b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nconst b64chs = Array.prototype.slice.call(b64ch);\nconst b64tab = ((a) => {\n let tab = {};\n a.forEach((c, i) => tab[c] = i);\n return tab;\n})(b64chs);\nconst b64re = /^(?:[A-Za-z\\d+\\/]{4})*?(?:[A-Za-z\\d+\\/]{2}(?:==)?|[A-Za-z\\d+\\/]{3}=?)?$/;\nconst _fromCC = String.fromCharCode.bind(String);\nconst _U8Afrom = typeof Uint8Array.from === 'function'\n ? Uint8Array.from.bind(Uint8Array)\n : (it) => new Uint8Array(Array.prototype.slice.call(it, 0));\nconst _mkUriSafe = (src) => src\n .replace(/=/g, '').replace(/[+\\/]/g, (m0) => m0 == '+' ? '-' : '_');\nconst _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\\+\\/]/g, '');\n/**\n * polyfill version of `btoa`\n */\nconst btoaPolyfill = (bin) => {\n // console.log('polyfilled');\n let u32, c0, c1, c2, asc = '';\n const pad = bin.length % 3;\n for (let i = 0; i < bin.length;) {\n if ((c0 = bin.charCodeAt(i++)) > 255 ||\n (c1 = bin.charCodeAt(i++)) > 255 ||\n (c2 = bin.charCodeAt(i++)) > 255)\n throw new TypeError('invalid character found');\n u32 = (c0 << 16) | (c1 << 8) | c2;\n asc += b64chs[u32 >> 18 & 63]\n + b64chs[u32 >> 12 & 63]\n + b64chs[u32 >> 6 & 63]\n + b64chs[u32 & 63];\n }\n return pad ? asc.slice(0, pad - 3) + \"===\".substring(pad) : asc;\n};\n/**\n * does what `window.btoa` of web browsers do.\n * @param {String} bin binary string\n * @returns {string} Base64-encoded string\n */\nconst _btoa = typeof btoa === 'function' ? (bin) => btoa(bin)\n : _hasBuffer ? (bin) => {\n if (/[^\\x00-\\xff]/.test(bin))\n throw new TypeError('invalid character found');\n return Buffer.from(bin, 'binary').toString('base64');\n }\n : btoaPolyfill;\nconst _fromUint8Array = _hasBuffer\n ? (u8a) => Buffer.from(u8a).toString('base64')\n : (u8a) => {\n // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326\n const maxargs = 0x1000;\n let strs = [];\n for (let i = 0, l = u8a.length; i < l; i += maxargs) {\n strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));\n }\n return _btoa(strs.join(''));\n };\n/**\n * converts a Uint8Array to a Base64 string.\n * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5\n * @returns {string} Base64 string\n */\nconst fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const utob = (src: string) => unescape(encodeURIComponent(src));\n// reverting good old fationed regexp\nconst cb_utob = (c) => {\n if (c.length < 2) {\n var cc = c.charCodeAt(0);\n return cc < 0x80 ? c\n : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6))\n + _fromCC(0x80 | (cc & 0x3f)))\n : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n else {\n var cc = 0x10000\n + (c.charCodeAt(0) - 0xD800) * 0x400\n + (c.charCodeAt(1) - 0xDC00);\n return (_fromCC(0xf0 | ((cc >>> 18) & 0x07))\n + _fromCC(0x80 | ((cc >>> 12) & 0x3f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n};\nconst re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-8 string\n * @returns {string} UTF-16 string\n */\nconst utob = (u) => u.replace(re_utob, cb_utob);\n//\nconst _encode = _hasBuffer\n ? (s) => Buffer.from(s, 'utf8').toString('base64')\n : _TE\n ? (s) => _fromUint8Array(_TE.encode(s))\n : (s) => _btoa(utob(s));\n/**\n * converts a UTF-8-encoded string to a Base64 string.\n * @param {boolean} [urlsafe] if `true` make the result URL-safe\n * @returns {string} Base64 string\n */\nconst encode = (src, urlsafe = false) => urlsafe\n ? _mkUriSafe(_encode(src))\n : _encode(src);\n/**\n * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5.\n * @returns {string} Base64 string\n */\nconst encodeURI = (src) => encode(src, true);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const btou = (src: string) => decodeURIComponent(escape(src));\n// reverting good old fationed regexp\nconst re_btou = /[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}/g;\nconst cb_btou = (cccc) => {\n switch (cccc.length) {\n case 4:\n var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n | ((0x3f & cccc.charCodeAt(1)) << 12)\n | ((0x3f & cccc.charCodeAt(2)) << 6)\n | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000;\n return (_fromCC((offset >>> 10) + 0xD800)\n + _fromCC((offset & 0x3FF) + 0xDC00));\n case 3:\n return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12)\n | ((0x3f & cccc.charCodeAt(1)) << 6)\n | (0x3f & cccc.charCodeAt(2)));\n default:\n return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6)\n | (0x3f & cccc.charCodeAt(1)));\n }\n};\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-16 string\n * @returns {string} UTF-8 string\n */\nconst btou = (b) => b.replace(re_btou, cb_btou);\n/**\n * polyfill version of `atob`\n */\nconst atobPolyfill = (asc) => {\n // console.log('polyfilled');\n asc = asc.replace(/\\s+/g, '');\n if (!b64re.test(asc))\n throw new TypeError('malformed base64.');\n asc += '=='.slice(2 - (asc.length & 3));\n let u24, r1, r2;\n let binArray = []; // use array to avoid minor gc in loop\n for (let i = 0; i < asc.length;) {\n u24 = b64tab[asc.charAt(i++)] << 18\n | b64tab[asc.charAt(i++)] << 12\n | (r1 = b64tab[asc.charAt(i++)]) << 6\n | (r2 = b64tab[asc.charAt(i++)]);\n if (r1 === 64) {\n binArray.push(_fromCC(u24 >> 16 & 255));\n }\n else if (r2 === 64) {\n binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255));\n }\n else {\n binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255));\n }\n }\n return binArray.join('');\n};\n/**\n * does what `window.atob` of web browsers do.\n * @param {String} asc Base64-encoded string\n * @returns {string} binary string\n */\nconst _atob = typeof atob === 'function' ? (asc) => atob(_tidyB64(asc))\n : _hasBuffer ? (asc) => Buffer.from(asc, 'base64').toString('binary')\n : atobPolyfill;\n//\nconst _toUint8Array = _hasBuffer\n ? (a) => _U8Afrom(Buffer.from(a, 'base64'))\n : (a) => _U8Afrom(_atob(a).split('').map(c => c.charCodeAt(0)));\n/**\n * converts a Base64 string to a Uint8Array.\n */\nconst toUint8Array = (a) => _toUint8Array(_unURI(a));\n//\nconst _decode = _hasBuffer\n ? (a) => Buffer.from(a, 'base64').toString('utf8')\n : _TD\n ? (a) => _TD.decode(_toUint8Array(a))\n : (a) => btou(_atob(a));\nconst _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/'));\n/**\n * converts a Base64 string to a UTF-8 string.\n * @param {String} src Base64 string. Both normal and URL-safe are supported\n * @returns {string} UTF-8 string\n */\nconst decode = (src) => _decode(_unURI(src));\n/**\n * check if a value is a valid Base64 string\n * @param {String} src a value to check\n */\nconst isValid = (src) => {\n if (typeof src !== 'string')\n return false;\n const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n return !/[^\\s0-9a-zA-Z\\+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n};\n//\nconst _noEnum = (v) => {\n return {\n value: v, enumerable: false, writable: true, configurable: true\n };\n};\n/**\n * extend String.prototype with relevant methods\n */\nconst extendString = function () {\n const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body));\n _add('fromBase64', function () { return decode(this); });\n _add('toBase64', function (urlsafe) { return encode(this, urlsafe); });\n _add('toBase64URI', function () { return encode(this, true); });\n _add('toBase64URL', function () { return encode(this, true); });\n _add('toUint8Array', function () { return toUint8Array(this); });\n};\n/**\n * extend Uint8Array.prototype with relevant methods\n */\nconst extendUint8Array = function () {\n const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body));\n _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); });\n _add('toBase64URI', function () { return fromUint8Array(this, true); });\n _add('toBase64URL', function () { return fromUint8Array(this, true); });\n};\n/**\n * extend Builtin prototypes with relevant methods\n */\nconst extendBuiltins = () => {\n extendString();\n extendUint8Array();\n};\nconst gBase64 = {\n version: version,\n VERSION: VERSION,\n atob: _atob,\n atobPolyfill: atobPolyfill,\n btoa: _btoa,\n btoaPolyfill: btoaPolyfill,\n fromBase64: decode,\n toBase64: encode,\n encode: encode,\n encodeURI: encodeURI,\n encodeURL: encodeURI,\n utob: utob,\n btou: btou,\n decode: decode,\n isValid: isValid,\n fromUint8Array: fromUint8Array,\n toUint8Array: toUint8Array,\n extendString: extendString,\n extendUint8Array: extendUint8Array,\n extendBuiltins: extendBuiltins\n};\n// makecjs:CUT //\nexport { version };\nexport { VERSION };\nexport { _atob as atob };\nexport { atobPolyfill };\nexport { _btoa as btoa };\nexport { btoaPolyfill };\nexport { decode as fromBase64 };\nexport { encode as toBase64 };\nexport { utob };\nexport { encode };\nexport { encodeURI };\nexport { encodeURI as encodeURL };\nexport { btou };\nexport { decode };\nexport { isValid };\nexport { fromUint8Array };\nexport { toUint8Array };\nexport { extendString };\nexport { extendUint8Array };\nexport { extendBuiltins };\n// and finally,\nexport { gBase64 as Base64 };\n","function _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { Base64 } from 'js-base64';\nimport URL from 'url-parse';\nimport DetailedError from './error.js';\nimport { log } from './logger.js';\nimport uuid from './uuid.js';\nvar PROTOCOL_TUS_V1 = 'tus-v1';\nvar PROTOCOL_IETF_DRAFT_03 = 'ietf-draft-03';\nvar PROTOCOL_IETF_DRAFT_05 = 'ietf-draft-05';\nvar defaultOptions = {\n endpoint: null,\n uploadUrl: null,\n metadata: {},\n metadataForPartialUploads: {},\n fingerprint: null,\n uploadSize: null,\n onProgress: null,\n onChunkComplete: null,\n onSuccess: null,\n onError: null,\n onUploadUrlAvailable: null,\n overridePatchMethod: false,\n headers: {},\n addRequestId: false,\n onBeforeRequest: null,\n onAfterResponse: null,\n onShouldRetry: defaultOnShouldRetry,\n chunkSize: Number.POSITIVE_INFINITY,\n retryDelays: [0, 1000, 3000, 5000],\n parallelUploads: 1,\n parallelUploadBoundaries: null,\n storeFingerprintForResuming: true,\n removeFingerprintOnSuccess: false,\n uploadLengthDeferred: false,\n uploadDataDuringCreation: false,\n urlStorage: null,\n fileReader: null,\n httpStack: null,\n protocol: PROTOCOL_TUS_V1\n};\nvar BaseUpload = /*#__PURE__*/function () {\n function BaseUpload(file, options) {\n _classCallCheck(this, BaseUpload);\n // Warn about removed options from previous versions\n if ('resume' in options) {\n console.log('tus: The `resume` option has been removed in tus-js-client v2. Please use the URL storage API instead.');\n }\n\n // The default options will already be added from the wrapper classes.\n this.options = options;\n\n // Cast chunkSize to integer\n this.options.chunkSize = Number(this.options.chunkSize);\n\n // The storage module used to store URLs\n this._urlStorage = this.options.urlStorage;\n\n // The underlying File/Blob object\n this.file = file;\n\n // The URL against which the file will be uploaded\n this.url = null;\n\n // The underlying request object for the current PATCH request\n this._req = null;\n\n // The fingerpinrt for the current file (set after start())\n this._fingerprint = null;\n\n // The key that the URL storage returned when saving an URL with a fingerprint,\n this._urlStorageKey = null;\n\n // The offset used in the current PATCH request\n this._offset = null;\n\n // True if the current PATCH request has been aborted\n this._aborted = false;\n\n // The file's size in bytes\n this._size = null;\n\n // The Source object which will wrap around the given file and provides us\n // with a unified interface for getting its size and slice chunks from its\n // content allowing us to easily handle Files, Blobs, Buffers and Streams.\n this._source = null;\n\n // The current count of attempts which have been made. Zero indicates none.\n this._retryAttempt = 0;\n\n // The timeout's ID which is used to delay the next retry\n this._retryTimeout = null;\n\n // The offset of the remote upload before the latest attempt was started.\n this._offsetBeforeRetry = 0;\n\n // An array of BaseUpload instances which are used for uploading the different\n // parts, if the parallelUploads option is used.\n this._parallelUploads = null;\n\n // An array of upload URLs which are used for uploading the different\n // parts, if the parallelUploads option is used.\n this._parallelUploadUrls = null;\n }\n\n /**\n * Use the Termination extension to delete an upload from the server by sending a DELETE\n * request to the specified upload URL. This is only possible if the server supports the\n * Termination extension. If the `options.retryDelays` property is set, the method will\n * also retry if an error ocurrs.\n *\n * @param {String} url The upload's URL which will be terminated.\n * @param {object} options Optional options for influencing HTTP requests.\n * @return {Promise} The Promise will be resolved/rejected when the requests finish.\n */\n return _createClass(BaseUpload, [{\n key: \"findPreviousUploads\",\n value: function findPreviousUploads() {\n var _this = this;\n return this.options.fingerprint(this.file, this.options).then(function (fingerprint) {\n return _this._urlStorage.findUploadsByFingerprint(fingerprint);\n });\n }\n }, {\n key: \"resumeFromPreviousUpload\",\n value: function resumeFromPreviousUpload(previousUpload) {\n this.url = previousUpload.uploadUrl || null;\n this._parallelUploadUrls = previousUpload.parallelUploadUrls || null;\n this._urlStorageKey = previousUpload.urlStorageKey;\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this2 = this;\n var file = this.file;\n if (!file) {\n this._emitError(new Error('tus: no file or stream to upload provided'));\n return;\n }\n if (![PROTOCOL_TUS_V1, PROTOCOL_IETF_DRAFT_03, PROTOCOL_IETF_DRAFT_05].includes(this.options.protocol)) {\n this._emitError(new Error(\"tus: unsupported protocol \".concat(this.options.protocol)));\n return;\n }\n if (!this.options.endpoint && !this.options.uploadUrl && !this.url) {\n this._emitError(new Error('tus: neither an endpoint or an upload URL is provided'));\n return;\n }\n var retryDelays = this.options.retryDelays;\n if (retryDelays != null && Object.prototype.toString.call(retryDelays) !== '[object Array]') {\n this._emitError(new Error('tus: the `retryDelays` option must either be an array or null'));\n return;\n }\n if (this.options.parallelUploads > 1) {\n // Test which options are incompatible with parallel uploads.\n for (var _i = 0, _arr = ['uploadUrl', 'uploadSize', 'uploadLengthDeferred']; _i < _arr.length; _i++) {\n var optionName = _arr[_i];\n if (this.options[optionName]) {\n this._emitError(new Error(\"tus: cannot use the \".concat(optionName, \" option when parallelUploads is enabled\")));\n return;\n }\n }\n }\n if (this.options.parallelUploadBoundaries) {\n if (this.options.parallelUploads <= 1) {\n this._emitError(new Error('tus: cannot use the `parallelUploadBoundaries` option when `parallelUploads` is disabled'));\n return;\n }\n if (this.options.parallelUploads !== this.options.parallelUploadBoundaries.length) {\n this._emitError(new Error('tus: the `parallelUploadBoundaries` must have the same length as the value of `parallelUploads`'));\n return;\n }\n }\n this.options.fingerprint(file, this.options).then(function (fingerprint) {\n if (fingerprint == null) {\n log('No fingerprint was calculated meaning that the upload cannot be stored in the URL storage.');\n } else {\n log(\"Calculated fingerprint: \".concat(fingerprint));\n }\n _this2._fingerprint = fingerprint;\n if (_this2._source) {\n return _this2._source;\n }\n return _this2.options.fileReader.openFile(file, _this2.options.chunkSize);\n }).then(function (source) {\n _this2._source = source;\n\n // First, we look at the uploadLengthDeferred option.\n // Next, we check if the caller has supplied a manual upload size.\n // Finally, we try to use the calculated size from the source object.\n if (_this2.options.uploadLengthDeferred) {\n _this2._size = null;\n } else if (_this2.options.uploadSize != null) {\n _this2._size = Number(_this2.options.uploadSize);\n if (Number.isNaN(_this2._size)) {\n _this2._emitError(new Error('tus: cannot convert `uploadSize` option into a number'));\n return;\n }\n } else {\n _this2._size = _this2._source.size;\n if (_this2._size == null) {\n _this2._emitError(new Error(\"tus: cannot automatically derive upload's size from input. Specify it manually using the `uploadSize` option or use the `uploadLengthDeferred` option\"));\n return;\n }\n }\n\n // If the upload was configured to use multiple requests or if we resume from\n // an upload which used multiple requests, we start a parallel upload.\n if (_this2.options.parallelUploads > 1 || _this2._parallelUploadUrls != null) {\n _this2._startParallelUpload();\n } else {\n _this2._startSingleUpload();\n }\n })[\"catch\"](function (err) {\n _this2._emitError(err);\n });\n }\n\n /**\n * Initiate the uploading procedure for a parallelized upload, where one file is split into\n * multiple request which are run in parallel.\n *\n * @api private\n */\n }, {\n key: \"_startParallelUpload\",\n value: function _startParallelUpload() {\n var _this$options$paralle,\n _this3 = this;\n var totalSize = this._size;\n var totalProgress = 0;\n this._parallelUploads = [];\n var partCount = this._parallelUploadUrls != null ? this._parallelUploadUrls.length : this.options.parallelUploads;\n\n // The input file will be split into multiple slices which are uploaded in separate\n // requests. Here we get the start and end position for the slices.\n var parts = (_this$options$paralle = this.options.parallelUploadBoundaries) !== null && _this$options$paralle !== void 0 ? _this$options$paralle : splitSizeIntoParts(this._source.size, partCount);\n\n // Attach URLs from previous uploads, if available.\n if (this._parallelUploadUrls) {\n parts.forEach(function (part, index) {\n part.uploadUrl = _this3._parallelUploadUrls[index] || null;\n });\n }\n\n // Create an empty list for storing the upload URLs\n this._parallelUploadUrls = new Array(parts.length);\n\n // Generate a promise for each slice that will be resolve if the respective\n // upload is completed.\n var uploads = parts.map(function (part, index) {\n var lastPartProgress = 0;\n return _this3._source.slice(part.start, part.end).then(function (_ref) {\n var value = _ref.value;\n return new Promise(function (resolve, reject) {\n // Merge with the user supplied options but overwrite some values.\n var options = _objectSpread(_objectSpread({}, _this3.options), {}, {\n // If available, the partial upload should be resumed from a previous URL.\n uploadUrl: part.uploadUrl || null,\n // We take manually care of resuming for partial uploads, so they should\n // not be stored in the URL storage.\n storeFingerprintForResuming: false,\n removeFingerprintOnSuccess: false,\n // Reset the parallelUploads option to not cause recursion.\n parallelUploads: 1,\n // Reset this option as we are not doing a parallel upload.\n parallelUploadBoundaries: null,\n metadata: _this3.options.metadataForPartialUploads,\n // Add the header to indicate the this is a partial upload.\n headers: _objectSpread(_objectSpread({}, _this3.options.headers), {}, {\n 'Upload-Concat': 'partial'\n }),\n // Reject or resolve the promise if the upload errors or completes.\n onSuccess: resolve,\n onError: reject,\n // Based in the progress for this partial upload, calculate the progress\n // for the entire final upload.\n onProgress: function onProgress(newPartProgress) {\n totalProgress = totalProgress - lastPartProgress + newPartProgress;\n lastPartProgress = newPartProgress;\n _this3._emitProgress(totalProgress, totalSize);\n },\n // Wait until every partial upload has an upload URL, so we can add\n // them to the URL storage.\n onUploadUrlAvailable: function onUploadUrlAvailable() {\n _this3._parallelUploadUrls[index] = upload.url;\n // Test if all uploads have received an URL\n if (_this3._parallelUploadUrls.filter(function (u) {\n return Boolean(u);\n }).length === parts.length) {\n _this3._saveUploadInUrlStorage();\n }\n }\n });\n var upload = new BaseUpload(value, options);\n upload.start();\n\n // Store the upload in an array, so we can later abort them if necessary.\n _this3._parallelUploads.push(upload);\n });\n });\n });\n var req;\n // Wait until all partial uploads are finished and we can send the POST request for\n // creating the final upload.\n Promise.all(uploads).then(function () {\n req = _this3._openRequest('POST', _this3.options.endpoint);\n req.setHeader('Upload-Concat', \"final;\".concat(_this3._parallelUploadUrls.join(' ')));\n\n // Add metadata if values have been added\n var metadata = encodeMetadata(_this3.options.metadata);\n if (metadata !== '') {\n req.setHeader('Upload-Metadata', metadata);\n }\n return _this3._sendRequest(req, null);\n }).then(function (res) {\n if (!inStatusCategory(res.getStatus(), 200)) {\n _this3._emitHttpError(req, res, 'tus: unexpected response while creating upload');\n return;\n }\n var location = res.getHeader('Location');\n if (location == null) {\n _this3._emitHttpError(req, res, 'tus: invalid or missing Location header');\n return;\n }\n _this3.url = resolveUrl(_this3.options.endpoint, location);\n log(\"Created upload at \".concat(_this3.url));\n _this3._emitSuccess(res);\n })[\"catch\"](function (err) {\n _this3._emitError(err);\n });\n }\n\n /**\n * Initiate the uploading procedure for a non-parallel upload. Here the entire file is\n * uploaded in a sequential matter.\n *\n * @api private\n */\n }, {\n key: \"_startSingleUpload\",\n value: function _startSingleUpload() {\n // Reset the aborted flag when the upload is started or else the\n // _performUpload will stop before sending a request if the upload has been\n // aborted previously.\n this._aborted = false;\n\n // The upload had been started previously and we should reuse this URL.\n if (this.url != null) {\n log(\"Resuming upload from previous URL: \".concat(this.url));\n this._resumeUpload();\n return;\n }\n\n // A URL has manually been specified, so we try to resume\n if (this.options.uploadUrl != null) {\n log(\"Resuming upload from provided URL: \".concat(this.options.uploadUrl));\n this.url = this.options.uploadUrl;\n this._resumeUpload();\n return;\n }\n\n // An upload has not started for the file yet, so we start a new one\n log('Creating a new upload');\n this._createUpload();\n }\n\n /**\n * Abort any running request and stop the current upload. After abort is called, no event\n * handler will be invoked anymore. You can use the `start` method to resume the upload\n * again.\n * If `shouldTerminate` is true, the `terminate` function will be called to remove the\n * current upload from the server.\n *\n * @param {boolean} shouldTerminate True if the upload should be deleted from the server.\n * @return {Promise} The Promise will be resolved/rejected when the requests finish.\n */\n }, {\n key: \"abort\",\n value: function abort(shouldTerminate) {\n var _this4 = this;\n // Stop any parallel partial uploads, that have been started in _startParallelUploads.\n if (this._parallelUploads != null) {\n var _iterator = _createForOfIteratorHelper(this._parallelUploads),\n _step;\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var upload = _step.value;\n upload.abort(shouldTerminate);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n }\n\n // Stop any current running request.\n if (this._req !== null) {\n this._req.abort();\n // Note: We do not close the file source here, so the user can resume in the future.\n }\n this._aborted = true;\n\n // Stop any timeout used for initiating a retry.\n if (this._retryTimeout != null) {\n clearTimeout(this._retryTimeout);\n this._retryTimeout = null;\n }\n if (!shouldTerminate || this.url == null) {\n return Promise.resolve();\n }\n return BaseUpload.terminate(this.url, this.options)\n // Remove entry from the URL storage since the upload URL is no longer valid.\n .then(function () {\n return _this4._removeFromUrlStorage();\n });\n }\n }, {\n key: \"_emitHttpError\",\n value: function _emitHttpError(req, res, message, causingErr) {\n this._emitError(new DetailedError(message, causingErr, req, res));\n }\n }, {\n key: \"_emitError\",\n value: function _emitError(err) {\n var _this5 = this;\n // Do not emit errors, e.g. from aborted HTTP requests, if the upload has been stopped.\n if (this._aborted) return;\n\n // Check if we should retry, when enabled, before sending the error to the user.\n if (this.options.retryDelays != null) {\n // We will reset the attempt counter if\n // - we were already able to connect to the server (offset != null) and\n // - we were able to upload a small chunk of data to the server\n var shouldResetDelays = this._offset != null && this._offset > this._offsetBeforeRetry;\n if (shouldResetDelays) {\n this._retryAttempt = 0;\n }\n if (shouldRetry(err, this._retryAttempt, this.options)) {\n var delay = this.options.retryDelays[this._retryAttempt++];\n this._offsetBeforeRetry = this._offset;\n this._retryTimeout = setTimeout(function () {\n _this5.start();\n }, delay);\n return;\n }\n }\n if (typeof this.options.onError === 'function') {\n this.options.onError(err);\n } else {\n throw err;\n }\n }\n\n /**\n * Publishes notification if the upload has been successfully completed.\n *\n * @param {object} lastResponse Last HTTP response.\n * @api private\n */\n }, {\n key: \"_emitSuccess\",\n value: function _emitSuccess(lastResponse) {\n if (this.options.removeFingerprintOnSuccess) {\n // Remove stored fingerprint and corresponding endpoint. This causes\n // new uploads of the same file to be treated as a different file.\n this._removeFromUrlStorage();\n }\n if (typeof this.options.onSuccess === 'function') {\n this.options.onSuccess({\n lastResponse: lastResponse\n });\n }\n }\n\n /**\n * Publishes notification when data has been sent to the server. This\n * data may not have been accepted by the server yet.\n *\n * @param {number} bytesSent Number of bytes sent to the server.\n * @param {number} bytesTotal Total number of bytes to be sent to the server.\n * @api private\n */\n }, {\n key: \"_emitProgress\",\n value: function _emitProgress(bytesSent, bytesTotal) {\n if (typeof this.options.onProgress === 'function') {\n this.options.onProgress(bytesSent, bytesTotal);\n }\n }\n\n /**\n * Publishes notification when a chunk of data has been sent to the server\n * and accepted by the server.\n * @param {number} chunkSize Size of the chunk that was accepted by the server.\n * @param {number} bytesAccepted Total number of bytes that have been\n * accepted by the server.\n * @param {number} bytesTotal Total number of bytes to be sent to the server.\n * @api private\n */\n }, {\n key: \"_emitChunkComplete\",\n value: function _emitChunkComplete(chunkSize, bytesAccepted, bytesTotal) {\n if (typeof this.options.onChunkComplete === 'function') {\n this.options.onChunkComplete(chunkSize, bytesAccepted, bytesTotal);\n }\n }\n\n /**\n * Create a new upload using the creation extension by sending a POST\n * request to the endpoint. After successful creation the file will be\n * uploaded\n *\n * @api private\n */\n }, {\n key: \"_createUpload\",\n value: function _createUpload() {\n var _this6 = this;\n if (!this.options.endpoint) {\n this._emitError(new Error('tus: unable to create upload because no endpoint is provided'));\n return;\n }\n var req = this._openRequest('POST', this.options.endpoint);\n if (this.options.uploadLengthDeferred) {\n req.setHeader('Upload-Defer-Length', '1');\n } else {\n req.setHeader('Upload-Length', \"\".concat(this._size));\n }\n\n // Add metadata if values have been added\n var metadata = encodeMetadata(this.options.metadata);\n if (metadata !== '') {\n req.setHeader('Upload-Metadata', metadata);\n }\n var promise;\n if (this.options.uploadDataDuringCreation && !this.options.uploadLengthDeferred) {\n this._offset = 0;\n promise = this._addChunkToRequest(req);\n } else {\n if (this.options.protocol === PROTOCOL_IETF_DRAFT_03 || this.options.protocol === PROTOCOL_IETF_DRAFT_05) {\n req.setHeader('Upload-Complete', '?0');\n }\n promise = this._sendRequest(req, null);\n }\n promise.then(function (res) {\n if (!inStatusCategory(res.getStatus(), 200)) {\n _this6._emitHttpError(req, res, 'tus: unexpected response while creating upload');\n return;\n }\n var location = res.getHeader('Location');\n if (location == null) {\n _this6._emitHttpError(req, res, 'tus: invalid or missing Location header');\n return;\n }\n _this6.url = resolveUrl(_this6.options.endpoint, location);\n log(\"Created upload at \".concat(_this6.url));\n if (typeof _this6.options.onUploadUrlAvailable === 'function') {\n _this6.options.onUploadUrlAvailable();\n }\n if (_this6._size === 0) {\n // Nothing to upload and file was successfully created\n _this6._emitSuccess(res);\n _this6._source.close();\n return;\n }\n _this6._saveUploadInUrlStorage().then(function () {\n if (_this6.options.uploadDataDuringCreation) {\n _this6._handleUploadResponse(req, res);\n } else {\n _this6._offset = 0;\n _this6._performUpload();\n }\n });\n })[\"catch\"](function (err) {\n _this6._emitHttpError(req, null, 'tus: failed to create upload', err);\n });\n }\n\n /*\n * Try to resume an existing upload. First a HEAD request will be sent\n * to retrieve the offset. If the request fails a new upload will be\n * created. In the case of a successful response the file will be uploaded.\n *\n * @api private\n */\n }, {\n key: \"_resumeUpload\",\n value: function _resumeUpload() {\n var _this7 = this;\n var req = this._openRequest('HEAD', this.url);\n var promise = this._sendRequest(req, null);\n promise.then(function (res) {\n var status = res.getStatus();\n if (!inStatusCategory(status, 200)) {\n // If the upload is locked (indicated by the 423 Locked status code), we\n // emit an error instead of directly starting a new upload. This way the\n // retry logic can catch the error and will retry the upload. An upload\n // is usually locked for a short period of time and will be available\n // afterwards.\n if (status === 423) {\n _this7._emitHttpError(req, res, 'tus: upload is currently locked; retry later');\n return;\n }\n if (inStatusCategory(status, 400)) {\n // Remove stored fingerprint and corresponding endpoint,\n // on client errors since the file can not be found\n _this7._removeFromUrlStorage();\n }\n if (!_this7.options.endpoint) {\n // Don't attempt to create a new upload if no endpoint is provided.\n _this7._emitHttpError(req, res, 'tus: unable to resume upload (new upload cannot be created without an endpoint)');\n return;\n }\n\n // Try to create a new upload\n _this7.url = null;\n _this7._createUpload();\n return;\n }\n var offset = Number.parseInt(res.getHeader('Upload-Offset'), 10);\n if (Number.isNaN(offset)) {\n _this7._emitHttpError(req, res, 'tus: invalid or missing offset value');\n return;\n }\n var length = Number.parseInt(res.getHeader('Upload-Length'), 10);\n if (Number.isNaN(length) && !_this7.options.uploadLengthDeferred && _this7.options.protocol === PROTOCOL_TUS_V1) {\n _this7._emitHttpError(req, res, 'tus: invalid or missing length value');\n return;\n }\n if (typeof _this7.options.onUploadUrlAvailable === 'function') {\n _this7.options.onUploadUrlAvailable();\n }\n _this7._saveUploadInUrlStorage().then(function () {\n // Upload has already been completed and we do not need to send additional\n // data to the server\n if (offset === length) {\n _this7._emitProgress(length, length);\n _this7._emitSuccess(res);\n return;\n }\n _this7._offset = offset;\n _this7._performUpload();\n });\n })[\"catch\"](function (err) {\n _this7._emitHttpError(req, null, 'tus: failed to resume upload', err);\n });\n }\n\n /**\n * Start uploading the file using PATCH requests. The file will be divided\n * into chunks as specified in the chunkSize option. During the upload\n * the onProgress event handler may be invoked multiple times.\n *\n * @api private\n */\n }, {\n key: \"_performUpload\",\n value: function _performUpload() {\n var _this8 = this;\n // If the upload has been aborted, we will not send the next PATCH request.\n // This is important if the abort method was called during a callback, such\n // as onChunkComplete or onProgress.\n if (this._aborted) {\n return;\n }\n var req;\n\n // Some browser and servers may not support the PATCH method. For those\n // cases, you can tell tus-js-client to use a POST request with the\n // X-HTTP-Method-Override header for simulating a PATCH request.\n if (this.options.overridePatchMethod) {\n req = this._openRequest('POST', this.url);\n req.setHeader('X-HTTP-Method-Override', 'PATCH');\n } else {\n req = this._openRequest('PATCH', this.url);\n }\n req.setHeader('Upload-Offset', \"\".concat(this._offset));\n var promise = this._addChunkToRequest(req);\n promise.then(function (res) {\n if (!inStatusCategory(res.getStatus(), 200)) {\n _this8._emitHttpError(req, res, 'tus: unexpected response while uploading chunk');\n return;\n }\n _this8._handleUploadResponse(req, res);\n })[\"catch\"](function (err) {\n // Don't emit an error if the upload was aborted manually\n if (_this8._aborted) {\n return;\n }\n _this8._emitHttpError(req, null, \"tus: failed to upload chunk at offset \".concat(_this8._offset), err);\n });\n }\n\n /**\n * _addChunktoRequest reads a chunk from the source and sends it using the\n * supplied request object. It will not handle the response.\n *\n * @api private\n */\n }, {\n key: \"_addChunkToRequest\",\n value: function _addChunkToRequest(req) {\n var _this9 = this;\n var start = this._offset;\n var end = this._offset + this.options.chunkSize;\n req.setProgressHandler(function (bytesSent) {\n _this9._emitProgress(start + bytesSent, _this9._size);\n });\n if (this.options.protocol === PROTOCOL_TUS_V1) {\n req.setHeader('Content-Type', 'application/offset+octet-stream');\n } else if (this.options.protocol === PROTOCOL_IETF_DRAFT_05) {\n req.setHeader('Content-Type', 'application/partial-upload');\n }\n\n // The specified chunkSize may be Infinity or the calcluated end position\n // may exceed the file's size. In both cases, we limit the end position to\n // the input's total size for simpler calculations and correctness.\n if ((end === Number.POSITIVE_INFINITY || end > this._size) && !this.options.uploadLengthDeferred) {\n end = this._size;\n }\n return this._source.slice(start, end).then(function (_ref2) {\n var value = _ref2.value,\n done = _ref2.done;\n var valueSize = value !== null && value !== void 0 && value.size ? value.size : 0;\n\n // If the upload length is deferred, the upload size was not specified during\n // upload creation. So, if the file reader is done reading, we know the total\n // upload size and can tell the tus server.\n if (_this9.options.uploadLengthDeferred && done) {\n _this9._size = _this9._offset + valueSize;\n req.setHeader('Upload-Length', \"\".concat(_this9._size));\n }\n\n // The specified uploadSize might not match the actual amount of data that a source\n // provides. In these cases, we cannot successfully complete the upload, so we\n // rather error out and let the user know. If not, tus-js-client will be stuck\n // in a loop of repeating empty PATCH requests.\n // See https://community.transloadit.com/t/how-to-abort-hanging-companion-uploads/16488/13\n var newSize = _this9._offset + valueSize;\n if (!_this9.options.uploadLengthDeferred && done && newSize !== _this9._size) {\n return Promise.reject(new Error(\"upload was configured with a size of \".concat(_this9._size, \" bytes, but the source is done after \").concat(newSize, \" bytes\")));\n }\n if (value === null) {\n return _this9._sendRequest(req);\n }\n if (_this9.options.protocol === PROTOCOL_IETF_DRAFT_03 || _this9.options.protocol === PROTOCOL_IETF_DRAFT_05) {\n req.setHeader('Upload-Complete', done ? '?1' : '?0');\n }\n _this9._emitProgress(_this9._offset, _this9._size);\n return _this9._sendRequest(req, value);\n });\n }\n\n /**\n * _handleUploadResponse is used by requests that haven been sent using _addChunkToRequest\n * and already have received a response.\n *\n * @api private\n */\n }, {\n key: \"_handleUploadResponse\",\n value: function _handleUploadResponse(req, res) {\n var offset = Number.parseInt(res.getHeader('Upload-Offset'), 10);\n if (Number.isNaN(offset)) {\n this._emitHttpError(req, res, 'tus: invalid or missing offset value');\n return;\n }\n this._emitProgress(offset, this._size);\n this._emitChunkComplete(offset - this._offset, offset, this._size);\n this._offset = offset;\n if (offset === this._size) {\n // Yay, finally done :)\n this._emitSuccess(res);\n this._source.close();\n return;\n }\n this._performUpload();\n }\n\n /**\n * Create a new HTTP request object with the given method and URL.\n *\n * @api private\n */\n }, {\n key: \"_openRequest\",\n value: function _openRequest(method, url) {\n var req = openRequest(method, url, this.options);\n this._req = req;\n return req;\n }\n\n /**\n * Remove the entry in the URL storage, if it has been saved before.\n *\n * @api private\n */\n }, {\n key: \"_removeFromUrlStorage\",\n value: function _removeFromUrlStorage() {\n var _this10 = this;\n if (!this._urlStorageKey) return;\n this._urlStorage.removeUpload(this._urlStorageKey)[\"catch\"](function (err) {\n _this10._emitError(err);\n });\n this._urlStorageKey = null;\n }\n\n /**\n * Add the upload URL to the URL storage, if possible.\n *\n * @api private\n */\n }, {\n key: \"_saveUploadInUrlStorage\",\n value: function _saveUploadInUrlStorage() {\n var _this11 = this;\n // We do not store the upload URL\n // - if it was disabled in the option, or\n // - if no fingerprint was calculated for the input (i.e. a stream), or\n // - if the URL is already stored (i.e. key is set alread).\n if (!this.options.storeFingerprintForResuming || !this._fingerprint || this._urlStorageKey !== null) {\n return Promise.resolve();\n }\n var storedUpload = {\n size: this._size,\n metadata: this.options.metadata,\n creationTime: new Date().toString()\n };\n if (this._parallelUploads) {\n // Save multiple URLs if the parallelUploads option is used ...\n storedUpload.parallelUploadUrls = this._parallelUploadUrls;\n } else {\n // ... otherwise we just save the one available URL.\n storedUpload.uploadUrl = this.url;\n }\n return this._urlStorage.addUpload(this._fingerprint, storedUpload).then(function (urlStorageKey) {\n _this11._urlStorageKey = urlStorageKey;\n });\n }\n\n /**\n * Send a request with the provided body.\n *\n * @api private\n */\n }, {\n key: \"_sendRequest\",\n value: function _sendRequest(req) {\n var body = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n return sendRequest(req, body, this.options);\n }\n }], [{\n key: \"terminate\",\n value: function terminate(url) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var req = openRequest('DELETE', url, options);\n return sendRequest(req, null, options).then(function (res) {\n // A 204 response indicates a successfull request\n if (res.getStatus() === 204) {\n return;\n }\n throw new DetailedError('tus: unexpected response while terminating upload', null, req, res);\n })[\"catch\"](function (err) {\n if (!(err instanceof DetailedError)) {\n err = new DetailedError('tus: failed to terminate upload', err, req, null);\n }\n if (!shouldRetry(err, 0, options)) {\n throw err;\n }\n\n // Instead of keeping track of the retry attempts, we remove the first element from the delays\n // array. If the array is empty, all retry attempts are used up and we will bubble up the error.\n // We recursively call the terminate function will removing elements from the retryDelays array.\n var delay = options.retryDelays[0];\n var remainingDelays = options.retryDelays.slice(1);\n var newOptions = _objectSpread(_objectSpread({}, options), {}, {\n retryDelays: remainingDelays\n });\n return new Promise(function (resolve) {\n return setTimeout(resolve, delay);\n }).then(function () {\n return BaseUpload.terminate(url, newOptions);\n });\n });\n }\n }]);\n}();\nfunction encodeMetadata(metadata) {\n return Object.entries(metadata).map(function (_ref3) {\n var _ref4 = _slicedToArray(_ref3, 2),\n key = _ref4[0],\n value = _ref4[1];\n return \"\".concat(key, \" \").concat(Base64.encode(String(value)));\n }).join(',');\n}\n\n/**\n * Checks whether a given status is in the range of the expected category.\n * For example, only a status between 200 and 299 will satisfy the category 200.\n *\n * @api private\n */\nfunction inStatusCategory(status, category) {\n return status >= category && status < category + 100;\n}\n\n/**\n * Create a new HTTP request with the specified method and URL.\n * The necessary headers that are included in every request\n * will be added, including the request ID.\n *\n * @api private\n */\nfunction openRequest(method, url, options) {\n var req = options.httpStack.createRequest(method, url);\n if (options.protocol === PROTOCOL_IETF_DRAFT_03) {\n req.setHeader('Upload-Draft-Interop-Version', '5');\n } else if (options.protocol === PROTOCOL_IETF_DRAFT_05) {\n req.setHeader('Upload-Draft-Interop-Version', '6');\n } else {\n req.setHeader('Tus-Resumable', '1.0.0');\n }\n var headers = options.headers || {};\n for (var _i2 = 0, _Object$entries = Object.entries(headers); _i2 < _Object$entries.length; _i2++) {\n var _Object$entries$_i = _slicedToArray(_Object$entries[_i2], 2),\n name = _Object$entries$_i[0],\n value = _Object$entries$_i[1];\n req.setHeader(name, value);\n }\n if (options.addRequestId) {\n var requestId = uuid();\n req.setHeader('X-Request-ID', requestId);\n }\n return req;\n}\n\n/**\n * Send a request with the provided body while invoking the onBeforeRequest\n * and onAfterResponse callbacks.\n *\n * @api private\n */\nfunction sendRequest(_x, _x2, _x3) {\n return _sendRequest2.apply(this, arguments);\n}\n/**\n * Checks whether the browser running this code has internet access.\n * This function will always return true in the node.js environment\n *\n * @api private\n */\nfunction _sendRequest2() {\n _sendRequest2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(req, body, options) {\n var res;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (!(typeof options.onBeforeRequest === 'function')) {\n _context.next = 3;\n break;\n }\n _context.next = 3;\n return options.onBeforeRequest(req);\n case 3:\n _context.next = 5;\n return req.send(body);\n case 5:\n res = _context.sent;\n if (!(typeof options.onAfterResponse === 'function')) {\n _context.next = 9;\n break;\n }\n _context.next = 9;\n return options.onAfterResponse(req, res);\n case 9:\n return _context.abrupt(\"return\", res);\n case 10:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return _sendRequest2.apply(this, arguments);\n}\nfunction isOnline() {\n var online = true;\n // Note: We don't reference `window` here because the navigator object also exists\n // in a Web Worker's context.\n if (typeof navigator !== 'undefined' && navigator.onLine === false) {\n online = false;\n }\n return online;\n}\n\n/**\n * Checks whether or not it is ok to retry a request.\n * @param {Error|DetailedError} err the error returned from the last request\n * @param {number} retryAttempt the number of times the request has already been retried\n * @param {object} options tus Upload options\n *\n * @api private\n */\nfunction shouldRetry(err, retryAttempt, options) {\n // We only attempt a retry if\n // - retryDelays option is set\n // - we didn't exceed the maxium number of retries, yet, and\n // - this error was caused by a request or it's response and\n // - the error is server error (i.e. not a status 4xx except a 409 or 423) or\n // a onShouldRetry is specified and returns true\n // - the browser does not indicate that we are offline\n if (options.retryDelays == null || retryAttempt >= options.retryDelays.length || err.originalRequest == null) {\n return false;\n }\n if (options && typeof options.onShouldRetry === 'function') {\n return options.onShouldRetry(err, retryAttempt, options);\n }\n return defaultOnShouldRetry(err);\n}\n\n/**\n * determines if the request should be retried. Will only retry if not a status 4xx except a 409 or 423\n * @param {DetailedError} err\n * @returns {boolean}\n */\nfunction defaultOnShouldRetry(err) {\n var status = err.originalResponse ? err.originalResponse.getStatus() : 0;\n return (!inStatusCategory(status, 400) || status === 409 || status === 423) && isOnline();\n}\n\n/**\n * Resolve a relative link given the origin as source. For example,\n * if a HTTP request to http://example.com/files/ returns a Location\n * header with the value /upload/abc, the resolved URL will be:\n * http://example.com/upload/abc\n */\nfunction resolveUrl(origin, link) {\n return new URL(link, origin).toString();\n}\n\n/**\n * Calculate the start and end positions for the parts if an upload\n * is split into multiple parallel requests.\n *\n * @param {number} totalSize The byte size of the upload, which will be split.\n * @param {number} partCount The number in how many parts the upload will be split.\n * @return {object[]}\n * @api private\n */\nfunction splitSizeIntoParts(totalSize, partCount) {\n var partSize = Math.floor(totalSize / partCount);\n var parts = [];\n for (var i = 0; i < partCount; i++) {\n parts.push({\n start: partSize * i,\n end: partSize * (i + 1)\n });\n }\n parts[partCount - 1].end = totalSize;\n return parts;\n}\nBaseUpload.defaultOptions = defaultOptions;\nexport default BaseUpload;","/**\n * Generate a UUID v4 based on random numbers. We intentioanlly use the less\n * secure Math.random function here since the more secure crypto.getRandomNumbers\n * is not available on all platforms.\n * This is not a problem for us since we use the UUID only for generating a\n * request ID, so we can correlate server logs to client errors.\n *\n * This function is taken from following site:\n * https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\n *\n * @return {string} The generate UUID\n */\nexport default function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0;\n var v = c === 'x' ? r : r & 0x3 | 0x8;\n return v.toString(16);\n });\n}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { ReadStream } from 'fs';\nimport isStream from 'is-stream';\nimport BufferSource from './sources/BufferSource.js';\nimport getFileSource from './sources/FileSource.js';\nimport StreamSource from './sources/StreamSource.js';\nvar FileReader = /*#__PURE__*/function () {\n function FileReader() {\n _classCallCheck(this, FileReader);\n }\n return _createClass(FileReader, [{\n key: \"openFile\",\n value: function openFile(input, chunkSize) {\n if (Buffer.isBuffer(input)) {\n return Promise.resolve(new BufferSource(input));\n }\n if (input instanceof ReadStream && input.path != null) {\n return getFileSource(input);\n }\n if (isStream.readable(input)) {\n chunkSize = Number(chunkSize);\n if (!Number.isFinite(chunkSize)) {\n return Promise.reject(new Error('cannot create source for stream without a finite value for the `chunkSize` option; specify a chunkSize to control the memory consumption'));\n }\n return Promise.resolve(new StreamSource(input));\n }\n return Promise.reject(new Error('source object may only be an instance of Buffer or Readable in this environment'));\n }\n }]);\n}();\nexport { FileReader as default };","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar BufferSource = /*#__PURE__*/function () {\n function BufferSource(buffer) {\n _classCallCheck(this, BufferSource);\n this._buffer = buffer;\n this.size = buffer.length;\n }\n return _createClass(BufferSource, [{\n key: \"slice\",\n value: function slice(start, end) {\n var value = this._buffer.slice(start, end);\n value.size = value.length;\n var done = end >= this.size;\n return Promise.resolve({\n value: value,\n done: done\n });\n }\n }, {\n key: \"close\",\n value: function close() {}\n }]);\n}();\nexport { BufferSource as default };","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\nimport { createReadStream, promises as fsPromises } from 'fs';\nexport default function getFileSource(_x) {\n return _getFileSource.apply(this, arguments);\n}\nfunction _getFileSource() {\n _getFileSource = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(stream) {\n var _stream$start;\n var path, _yield$fsPromises$sta, size, start, end, actualSize;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n path = stream.path.toString();\n _context.next = 3;\n return fsPromises.stat(path);\n case 3:\n _yield$fsPromises$sta = _context.sent;\n size = _yield$fsPromises$sta.size;\n // The fs.ReadStream might be configured to not read from the beginning\n // to the end, but instead from a slice in between. In this case, we consider\n // that range to indicate the actual uploadable size.\n // This happens, for example, if a fs.ReadStream is used with the `parallelUploads`\n // option. There, the ReadStream is sliced into multiple ReadStreams to fit the number\n // of number of `parallelUploads`. Each ReadStream has `start` and `end` set.\n // Note: `stream.end` is Infinity by default, so we need the check `isFinite`.\n // Note: `stream.end` is treated inclusively, so we need to add 1 here.\n // See the comment in slice() for more context.\n start = (_stream$start = stream.start) !== null && _stream$start !== void 0 ? _stream$start : 0;\n end = Number.isFinite(stream.end) ? stream.end + 1 : size;\n actualSize = end - start;\n return _context.abrupt(\"return\", new FileSource(stream, path, actualSize));\n case 9:\n case \"end\":\n return _context.stop();\n }\n }, _callee);\n }));\n return _getFileSource.apply(this, arguments);\n}\nvar FileSource = /*#__PURE__*/function () {\n function FileSource(stream, path, size) {\n _classCallCheck(this, FileSource);\n this._stream = stream;\n this._path = path;\n this.size = size;\n }\n return _createClass(FileSource, [{\n key: \"slice\",\n value: function slice(start, end) {\n var _this$_stream$start;\n // The fs.ReadStream might be configured to not read from the beginning,\n // but instead start at a different offset. The start value from the caller\n // does not include the offset, so we need to add this offset to our range later.\n // This happens, for example, if a fs.ReadStream is used with the `parallelUploads`\n // option. First, the ReadStream is sliced into multiple ReadStreams to fit the number\n // of number of `parallelUploads`. Each ReadStream has `start` set.\n var offset = (_this$_stream$start = this._stream.start) !== null && _this$_stream$start !== void 0 ? _this$_stream$start : 0;\n var stream = createReadStream(this._path, {\n start: offset + start,\n // The `end` option for createReadStream is treated inclusively\n // (see https://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options).\n // However, the Buffer#slice(start, end) and also our Source#slice(start, end)\n // method treat the end range exclusively, so we have to subtract 1.\n // This prevents an off-by-one error when reporting upload progress.\n end: offset + end - 1,\n autoClose: true\n });\n stream.size = Math.min(end - start, this.size);\n var done = stream.size >= this.size;\n return Promise.resolve({\n value: stream,\n done: done\n });\n }\n }, {\n key: \"close\",\n value: function close() {\n this._stream.destroy();\n }\n }]);\n}();","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = \"function\" == typeof Symbol ? Symbol : {}, a = i.iterator || \"@@iterator\", c = i.asyncIterator || \"@@asyncIterator\", u = i.toStringTag || \"@@toStringTag\"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, \"\"); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, \"_invoke\", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: \"normal\", arg: t.call(e, r) }; } catch (t) { return { type: \"throw\", arg: t }; } } e.wrap = wrap; var h = \"suspendedStart\", l = \"suspendedYield\", f = \"executing\", s = \"completed\", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { [\"next\", \"throw\", \"return\"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if (\"throw\" !== c.type) { var u = c.arg, h = u.value; return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) { invoke(\"next\", t, i, a); }, function (t) { invoke(\"throw\", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke(\"throw\", t, i, a); }); } a(c.arg); } var r; o(this, \"_invoke\", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error(\"Generator is already running\"); if (o === s) { if (\"throw\" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else \"return\" === n.method && n.abrupt(\"return\", n.arg); o = f; var p = tryCatch(e, r, n); if (\"normal\" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y; var i = tryCatch(o, e.iterator, r.arg); if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = \"normal\", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: \"root\" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || \"\" === e) { var r = e[a]; if (r) return r.call(e); if (\"function\" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + \" is not iterable\"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, \"constructor\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) { var e = \"function\" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () { return this; }), define(g, \"toString\", function () { return \"[object Generator]\"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if (\"throw\" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if (\"root\" === i.tryLoc) return handle(\"end\"); if (i.tryLoc <= this.prev) { var c = n.call(i, \"catchLoc\"), u = n.call(i, \"finallyLoc\"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error(\"try statement without catch or finally\"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) { var i = o; break; } } i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if (\"throw\" === t.type) throw t.arg; return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, \"catch\": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if (\"throw\" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error(\"illegal catch attempt\"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, \"next\" === this.method && (this.arg = t), y; } }, e; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n/**\n * readChunk reads a chunk with the given size from the given\n * stream. It will wait until enough data is available to satisfy\n * the size requirement before resolving.\n * Only if the stream ends, the function may resolve with a buffer\n * smaller than the size argument.\n * Note that we rely on the stream behaving as Node.js documents:\n * https://nodejs.org/api/stream.html#readablereadsize\n */\nfunction readChunk(_x, _x2) {\n return _readChunk.apply(this, arguments);\n}\n/**\n * StreamSource provides an interface to obtain slices of a Readable stream for\n * various ranges.\n * It will buffer read data, to allow for following pattern:\n * - Call slice(startA, endA) will buffer the data of the requested range\n * - Call slice(startB, endB) will return data from the buffer if startA <= startB <= endA.\n * If endB > endA, it will also consume new data from the stream.\n * Note that it is forbidden to call with startB < startA or startB > endA. In other words,\n * the slice calls cannot seek back and must not skip data from the stream.\n */\nfunction _readChunk() {\n _readChunk = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(stream, size) {\n return _regeneratorRuntime().wrap(function _callee2$(_context2) {\n while (1) switch (_context2.prev = _context2.next) {\n case 0:\n return _context2.abrupt(\"return\", new Promise(function (resolve, reject) {\n var onError = function onError(err) {\n stream.off('readable', onReadable);\n reject(err);\n };\n var onReadable = function onReadable() {\n // TODO: Node requires size to be less than 1GB. Add a validation for that\n var chunk = stream.read(size);\n if (chunk !== null) {\n stream.off('error', onError);\n stream.off('readable', onReadable);\n resolve(chunk);\n }\n };\n stream.once('error', onError);\n stream.on('readable', onReadable);\n }));\n case 1:\n case \"end\":\n return _context2.stop();\n }\n }, _callee2);\n }));\n return _readChunk.apply(this, arguments);\n}\nvar StreamSource = /*#__PURE__*/function () {\n function StreamSource(stream) {\n var _this = this;\n _classCallCheck(this, StreamSource);\n this._stream = stream;\n\n // Setting the size to null indicates that we have no calculation available\n // for how much data this stream will emit requiring the user to specify\n // it manually (see the `uploadSize` option).\n this.size = null;\n this._buf = Buffer.alloc(0);\n this._bufPos = 0;\n this._ended = false;\n this._error = null;\n stream.pause();\n stream.on('end', function () {\n _this._ended = true;\n });\n stream.on('error', function (err) {\n _this._error = err;\n });\n }\n return _createClass(StreamSource, [{\n key: \"slice\",\n value: function () {\n var _slice = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(start, end) {\n var returnBuffer, bufStart, bufEnd, requestedSize, newChunk;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n if (!(start < this._bufPos)) {\n _context.next = 2;\n break;\n }\n throw new Error('cannot slice from position which we already seeked away');\n case 2:\n if (!(start > this._bufPos + this._buf.length)) {\n _context.next = 4;\n break;\n }\n throw new Error('slice start is outside of buffer (currently not implemented)');\n case 4:\n if (!this._error) {\n _context.next = 6;\n break;\n }\n throw this._error;\n case 6:\n // Always attempt to drain the buffer first, even if this means that we\n // return less data than the caller requested.\n if (start < this._bufPos + this._buf.length) {\n bufStart = start - this._bufPos;\n bufEnd = Math.min(this._buf.length, end - this._bufPos);\n returnBuffer = this._buf.slice(bufStart, bufEnd);\n } else {\n returnBuffer = Buffer.alloc(0);\n }\n\n // If the stream has ended already, read calls would not finish, so return early here.\n if (!this._ended) {\n _context.next = 10;\n break;\n }\n returnBuffer.size = returnBuffer.length;\n return _context.abrupt(\"return\", {\n value: returnBuffer,\n done: true\n });\n case 10:\n // If we could not satisfy the slice request from the buffer only, read more data from\n // the stream and add it to the buffer.\n requestedSize = end - start;\n if (!(requestedSize > returnBuffer.length)) {\n _context.next = 16;\n break;\n }\n _context.next = 14;\n return readChunk(this._stream, requestedSize - returnBuffer.length);\n case 14:\n newChunk = _context.sent;\n // Append the new chunk to the buffer\n returnBuffer = Buffer.concat([returnBuffer, newChunk]);\n case 16:\n // Important: Store the read data, so consecutive slice calls can access the same data.\n this._buf = returnBuffer;\n this._bufPos = start;\n returnBuffer.size = returnBuffer.length;\n return _context.abrupt(\"return\", {\n value: returnBuffer,\n done: this._ended\n });\n case 20:\n case \"end\":\n return _context.stop();\n }\n }, _callee, this);\n }));\n function slice(_x3, _x4) {\n return _slice.apply(this, arguments);\n }\n return slice;\n }()\n }, {\n key: \"close\",\n value: function close() {\n this._stream.destroy();\n }\n }]);\n}();\nexport { StreamSource as default };","import { createHash } from 'crypto';\nimport * as fs from 'fs';\nimport * as path from 'path';\n\n/**\n * Generate a fingerprint for a file which will be used the store the endpoint\n *\n * @param {File} file\n * @param {Object} options\n */\nexport default function fingerprint(file, options) {\n if (Buffer.isBuffer(file)) {\n // create MD5 hash for buffer type\n var blockSize = 64 * 1024; // 64kb\n var content = file.slice(0, Math.min(blockSize, file.length));\n var hash = createHash('md5').update(content).digest('hex');\n var ret = ['node-buffer', hash, file.length, options.endpoint].join('-');\n return Promise.resolve(ret);\n }\n if (file instanceof fs.ReadStream && file.path != null) {\n return new Promise(function (resolve, reject) {\n var name = path.resolve(file.path);\n fs.stat(file.path, function (err, info) {\n if (err) {\n reject(err);\n return;\n }\n var ret = ['node-file', name, info.size, info.mtime.getTime(), options.endpoint].join('-');\n resolve(ret);\n });\n });\n }\n\n // fingerprint cannot be computed for file input type\n return Promise.resolve(null);\n}","function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n// The url.parse method is superseeded by the url.URL constructor,\n// but it is still included in Node.js\nimport * as http from 'http';\nimport * as https from 'https';\nimport { Readable, Transform } from 'stream';\nimport { parse } from 'url';\nimport throttle from 'lodash.throttle';\nvar NodeHttpStack = /*#__PURE__*/function () {\n function NodeHttpStack() {\n var requestOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _classCallCheck(this, NodeHttpStack);\n this._requestOptions = requestOptions;\n }\n return _createClass(NodeHttpStack, [{\n key: \"createRequest\",\n value: function createRequest(method, url) {\n return new Request(method, url, this._requestOptions);\n }\n }, {\n key: \"getName\",\n value: function getName() {\n return 'NodeHttpStack';\n }\n }]);\n}();\nexport { NodeHttpStack as default };\nvar Request = /*#__PURE__*/function () {\n function Request(method, url, options) {\n _classCallCheck(this, Request);\n this._method = method;\n this._url = url;\n this._headers = {};\n this._request = null;\n this._progressHandler = function () {};\n this._requestOptions = options || {};\n }\n return _createClass(Request, [{\n key: \"getMethod\",\n value: function getMethod() {\n return this._method;\n }\n }, {\n key: \"getURL\",\n value: function getURL() {\n return this._url;\n }\n }, {\n key: \"setHeader\",\n value: function setHeader(header, value) {\n this._headers[header] = value;\n }\n }, {\n key: \"getHeader\",\n value: function getHeader(header) {\n return this._headers[header];\n }\n }, {\n key: \"setProgressHandler\",\n value: function setProgressHandler(progressHandler) {\n this._progressHandler = progressHandler;\n }\n }, {\n key: \"send\",\n value: function send() {\n var _this = this;\n var body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n return new Promise(function (resolve, reject) {\n var options = _objectSpread(_objectSpread(_objectSpread({}, parse(_this._url)), _this._requestOptions), {}, {\n method: _this._method,\n headers: _objectSpread(_objectSpread({}, _this._requestOptions.headers || {}), _this._headers)\n });\n if (body !== null && body !== void 0 && body.size) {\n options.headers['Content-Length'] = body.size;\n }\n var httpModule = options.protocol === 'https:' ? https : http;\n _this._request = httpModule.request(options);\n var req = _this._request;\n req.on('response', function (res) {\n var resChunks = [];\n res.on('data', function (data) {\n resChunks.push(data);\n });\n res.on('end', function () {\n var responseText = Buffer.concat(resChunks).toString('utf8');\n resolve(new Response(res, responseText));\n });\n });\n req.on('error', function (err) {\n reject(err);\n });\n if (body instanceof Readable) {\n // Readable stream are piped through a PassThrough instance, which\n // counts the number of bytes passed through. This is used, for example,\n // when an fs.ReadStream is provided to tus-js-client.\n body.pipe(new ProgressEmitter(_this._progressHandler)).pipe(req);\n } else if (body instanceof Uint8Array) {\n // For Buffers and Uint8Arrays (in Node.js all buffers are instances of Uint8Array),\n // we write chunks of the buffer to the stream and use that to track the progress.\n // This is used when either a Buffer or a normal readable stream is provided\n // to tus-js-client.\n writeBufferToStreamWithProgress(req, body, _this._progressHandler);\n } else {\n req.end(body);\n }\n });\n }\n }, {\n key: \"abort\",\n value: function abort() {\n if (this._request !== null) this._request.abort();\n return Promise.resolve();\n }\n }, {\n key: \"getUnderlyingObject\",\n value: function getUnderlyingObject() {\n return this._request;\n }\n }]);\n}();\nvar Response = /*#__PURE__*/function () {\n function Response(res, body) {\n _classCallCheck(this, Response);\n this._response = res;\n this._body = body;\n }\n return _createClass(Response, [{\n key: \"getStatus\",\n value: function getStatus() {\n return this._response.statusCode;\n }\n }, {\n key: \"getHeader\",\n value: function getHeader(header) {\n return this._response.headers[header.toLowerCase()];\n }\n }, {\n key: \"getBody\",\n value: function getBody() {\n return this._body;\n }\n }, {\n key: \"getUnderlyingObject\",\n value: function getUnderlyingObject() {\n return this._response;\n }\n }]);\n}(); // ProgressEmitter is a simple PassThrough-style transform stream which keeps\n// track of the number of bytes which have been piped through it and will\n// invoke the `onprogress` function whenever new number are available.\nvar ProgressEmitter = /*#__PURE__*/function (_Transform) {\n function ProgressEmitter(onprogress) {\n var _this2;\n _classCallCheck(this, ProgressEmitter);\n _this2 = _callSuper(this, ProgressEmitter);\n\n // The _onprogress property will be invoked, whenever a chunk is piped\n // through this transformer. Since chunks are usually quite small (64kb),\n // these calls can occur frequently, especially when you have a good\n // connection to the remote server. Therefore, we are throtteling them to\n // prevent accessive function calls.\n _this2._onprogress = throttle(onprogress, 100, {\n leading: true,\n trailing: false\n });\n _this2._position = 0;\n return _this2;\n }\n _inherits(ProgressEmitter, _Transform);\n return _createClass(ProgressEmitter, [{\n key: \"_transform\",\n value: function _transform(chunk, _encoding, callback) {\n this._position += chunk.length;\n this._onprogress(this._position);\n callback(null, chunk);\n }\n }]);\n}(Transform); // writeBufferToStreamWithProgress writes chunks from `source` (either a\n// Buffer or Uint8Array) to the readable stream `stream`.\n// The size of the chunk depends on the stream's highWaterMark to fill the\n// stream's internal buffer as best as possible.\n// If the internal buffer is full, the callback `onprogress` will be invoked\n// to notify about the write progress. Writing will be resumed once the internal\n// buffer is empty, as indicated by the emitted `drain` event.\n// See https://nodejs.org/docs/latest/api/stream.html#buffering for more details\n// on the buffering behavior of streams.\nvar writeBufferToStreamWithProgress = function writeBufferToStreamWithProgress(stream, source, onprogress) {\n onprogress = throttle(onprogress, 100, {\n leading: true,\n trailing: false\n });\n var offset = 0;\n function writeNextChunk() {\n // Take at most the amount of bytes from highWaterMark. This should fill the streams\n // internal buffer already.\n var chunkSize = Math.min(stream.writableHighWaterMark, source.length - offset);\n\n // Note: We use subarray instead of slice because it works without copying data for\n // Buffers and Uint8Arrays.\n var chunk = source.subarray(offset, offset + chunkSize);\n offset += chunk.length;\n\n // `write` returns true if the internal buffer is not full and we should write more.\n // If the stream is destroyed because the request is aborted, it will return false\n // and no 'drain' event is emitted, so won't continue writing data.\n var canContinue = stream.write(chunk);\n if (!canContinue) {\n // If the buffer is full, wait for the 'drain' event to write more data.\n stream.once('drain', writeNextChunk);\n onprogress(offset);\n } else if (offset < source.length) {\n // If there's still data to write and the buffer is not full, write next chunk.\n writeNextChunk();\n } else {\n // If all data has been written, close the stream if needed, and emit a 'finish' event.\n stream.end();\n }\n }\n\n // Start writing the first chunk.\n writeNextChunk();\n};","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { readFile, writeFile } from 'fs';\nimport combineErrors from 'combine-errors';\nimport * as lockfile from 'proper-lockfile';\nexport var canStoreURLs = true;\nexport var FileUrlStorage = /*#__PURE__*/function () {\n function FileUrlStorage(filePath) {\n _classCallCheck(this, FileUrlStorage);\n this.path = filePath;\n }\n return _createClass(FileUrlStorage, [{\n key: \"findAllUploads\",\n value: function findAllUploads() {\n var _this = this;\n return new Promise(function (resolve, reject) {\n _this._getItems('tus::', function (err, results) {\n if (err) reject(err);else resolve(results);\n });\n });\n }\n }, {\n key: \"findUploadsByFingerprint\",\n value: function findUploadsByFingerprint(fingerprint) {\n var _this2 = this;\n return new Promise(function (resolve, reject) {\n _this2._getItems(\"tus::\".concat(fingerprint), function (err, results) {\n if (err) reject(err);else resolve(results);\n });\n });\n }\n }, {\n key: \"removeUpload\",\n value: function removeUpload(urlStorageKey) {\n var _this3 = this;\n return new Promise(function (resolve, reject) {\n _this3._removeItem(urlStorageKey, function (err) {\n if (err) reject(err);else resolve();\n });\n });\n }\n }, {\n key: \"addUpload\",\n value: function addUpload(fingerprint, upload) {\n var _this4 = this;\n var id = Math.round(Math.random() * 1e12);\n var key = \"tus::\".concat(fingerprint, \"::\").concat(id);\n return new Promise(function (resolve, reject) {\n _this4._setItem(key, upload, function (err) {\n if (err) reject(err);else resolve(key);\n });\n });\n }\n }, {\n key: \"_setItem\",\n value: function _setItem(key, value, cb) {\n var _this5 = this;\n lockfile.lock(this.path, this._lockfileOptions()).then(function (release) {\n cb = _this5._releaseAndCb(release, cb);\n _this5._getData(function (err, data) {\n if (err) {\n cb(err);\n return;\n }\n data[key] = value;\n _this5._writeData(data, function (err2) {\n return cb(err2);\n });\n });\n })[\"catch\"](cb);\n }\n }, {\n key: \"_getItems\",\n value: function _getItems(prefix, cb) {\n this._getData(function (err, data) {\n if (err) {\n cb(err);\n return;\n }\n var results = Object.keys(data).filter(function (key) {\n return key.startsWith(prefix);\n }).map(function (key) {\n var obj = data[key];\n obj.urlStorageKey = key;\n return obj;\n });\n cb(null, results);\n });\n }\n }, {\n key: \"_removeItem\",\n value: function _removeItem(key, cb) {\n var _this6 = this;\n lockfile.lock(this.path, this._lockfileOptions()).then(function (release) {\n cb = _this6._releaseAndCb(release, cb);\n _this6._getData(function (err, data) {\n if (err) {\n cb(err);\n return;\n }\n delete data[key];\n _this6._writeData(data, function (err2) {\n return cb(err2);\n });\n });\n })[\"catch\"](cb);\n }\n }, {\n key: \"_lockfileOptions\",\n value: function _lockfileOptions() {\n return {\n realpath: false,\n retries: {\n retries: 5,\n minTimeout: 20\n }\n };\n }\n }, {\n key: \"_releaseAndCb\",\n value: function _releaseAndCb(release, cb) {\n return function (err) {\n if (err) {\n release().then(function () {\n return cb(err);\n })[\"catch\"](function (releaseErr) {\n return cb(combineErrors([err, releaseErr]));\n });\n return;\n }\n release().then(cb)[\"catch\"](cb);\n };\n }\n }, {\n key: \"_writeData\",\n value: function _writeData(data, cb) {\n var opts = {\n encoding: 'utf8',\n mode: 432,\n flag: 'w'\n };\n writeFile(this.path, JSON.stringify(data), opts, function (err) {\n return cb(err);\n });\n }\n }, {\n key: \"_getData\",\n value: function _getData(cb) {\n readFile(this.path, 'utf8', function (err, data) {\n if (err) {\n // return empty data if file does not exist\n if (err.code === 'ENOENT') cb(null, {});else cb(err);\n return;\n }\n try {\n data = !data.trim().length ? {} : JSON.parse(data);\n } catch (error) {\n cb(error);\n return;\n }\n cb(null, data);\n });\n }\n }]);\n}();","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport DetailedError from '../error.js';\nimport { enableDebugLog } from '../logger.js';\nimport NoopUrlStorage from '../noopUrlStorage.js';\nimport BaseUpload from '../upload.js';\nimport FileReader from './fileReader.js';\nimport fingerprint from './fileSignature.js';\nimport DefaultHttpStack from './httpStack.js';\nimport StreamSource from './sources/StreamSource.js';\nimport { FileUrlStorage, canStoreURLs } from './urlStorage.js';\nvar defaultOptions = _objectSpread(_objectSpread({}, BaseUpload.defaultOptions), {}, {\n httpStack: new DefaultHttpStack(),\n fileReader: new FileReader(),\n urlStorage: new NoopUrlStorage(),\n fingerprint: fingerprint\n});\nvar Upload = /*#__PURE__*/function (_BaseUpload) {\n function Upload() {\n var file = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Upload);\n options = _objectSpread(_objectSpread({}, defaultOptions), options);\n return _callSuper(this, Upload, [file, options]);\n }\n _inherits(Upload, _BaseUpload);\n return _createClass(Upload, null, [{\n key: \"terminate\",\n value: function terminate(url) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n options = _objectSpread(_objectSpread({}, defaultOptions), options);\n return BaseUpload.terminate(url, options);\n }\n }]);\n}(BaseUpload); // The Node.js environment does not have restrictions which may cause\n// tus-js-client not to function.\nvar isSupported = true;\nexport { Upload, defaultOptions, isSupported,\n// Make FileUrlStorage module available as it will not be set by default.\nFileUrlStorage, canStoreURLs, enableDebugLog, DefaultHttpStack, DetailedError, StreamSource };","/**\n * Thin, injectable wrapper around `tus-js-client` that performs the resumable\n * byte upload. Isolated here so the upload flow can be unit-tested with a fake\n * transport (no real network I/O) and so abort/resume behaviour lives in one\n * place.\n *\n * @internal\n */\n\nimport * as tus from 'tus-js-client';\nimport { UploadError, UploadSessionExpiredError } from '../errors';\nimport type { ResolvedUploadSource, TusFile } from './source';\n\n/** Default chunk size for streamed/file-path uploads, which require a finite chunk size. */\nexport const DEFAULT_STREAM_CHUNK_SIZE = 50 * 1024 * 1024;\n\n/** A persistence backend for resumable upload fingerprints (matches tus-js-client's `UrlStorage`). */\nexport interface UploadUrlStorage {\n findAllUploads(): Promise<unknown[]>;\n findUploadsByFingerprint(fingerprint: string): Promise<unknown[]>;\n removeUpload(urlStorageKey: string): Promise<void>;\n addUpload(fingerprint: string, upload: unknown): Promise<string>;\n}\n\n/** Parameters for a single byte upload. */\nexport interface TusUploadParams {\n /** The file/data passed to tus-js-client. */\n data: TusFile;\n /** Signed upload URL (already includes the short-lived upload token). */\n uploadUrl: string;\n /** Total upload size in bytes. */\n uploadSize: number;\n /** Headers to send with each request (must include `Tus-Resumable`). */\n headers: Record<string, string>;\n /** Maximum chunk size in bytes. Required for streamed inputs. */\n chunkSize?: number;\n /** Retry backoff in milliseconds. `null`/`[]` disables retries. */\n retryDelays?: number[] | null;\n /** Progress callback. */\n onProgress?: (bytesSent: number, bytesTotal: number) => void;\n /** Abort signal to cancel the upload. */\n signal?: AbortSignal;\n /** Persist a resumable fingerprint so the upload can resume later. */\n resume?: boolean;\n /** Custom storage for resumable fingerprints (defaults to the tus-js-client default for the runtime). */\n urlStorage?: UploadUrlStorage;\n}\n\n/** Performs a single resumable byte upload. Resolves on success, rejects on error/abort. */\nexport type UploadTransport = (params: TusUploadParams) => Promise<void>;\n\nconst DEFAULT_RETRY_DELAYS = [0, 1000, 3000, 5000];\n\n/** An `AbortError`-named error, consistent with the Fetch/DOM cancellation convention. */\nexport const createAbortError = (): Error => {\n const error = new Error('The upload was aborted.');\n error.name = 'AbortError';\n return error;\n};\n\n/** The default upload transport, backed by `tus-js-client`. */\nexport const tusUploadTransport: UploadTransport = (params) =>\n new Promise<void>((resolve, reject) => {\n if (params.signal?.aborted) {\n reject(createAbortError());\n return;\n }\n\n let settled = false;\n const cleanup = () => {\n if (params.signal) params.signal.removeEventListener('abort', onAbort);\n };\n const finish = (fn: () => void) => {\n if (settled) return;\n settled = true;\n cleanup();\n fn();\n };\n\n const upload = new tus.Upload(params.data as tus.Upload['file'], {\n uploadUrl: params.uploadUrl,\n uploadSize: params.uploadSize,\n headers: params.headers,\n chunkSize: params.chunkSize ?? Infinity,\n retryDelays: params.retryDelays === undefined ? DEFAULT_RETRY_DELAYS : params.retryDelays,\n storeFingerprintForResuming: params.resume ?? false,\n removeFingerprintOnSuccess: true,\n ...(params.urlStorage ? { urlStorage: params.urlStorage as never } : {}),\n onProgress: params.onProgress ?? null,\n onError: (error) => finish(() => reject(error)),\n onSuccess: () => finish(() => resolve()),\n });\n\n const onAbort = () => {\n void upload.abort();\n finish(() => reject(createAbortError()));\n };\n // `once` ensures the listener detaches after firing, even if `finish` (and\n // thus `cleanup`) never runs because the upload hangs without settling.\n if (params.signal) params.signal.addEventListener('abort', onAbort, { once: true });\n\n upload.start();\n });\n\n/** Options shared by the high-level upload entry points. */\nexport interface RunUploadOptions {\n /** Maximum chunk size in bytes. */\n chunkSize?: number;\n /** Retry backoff in milliseconds. `null`/`[]` disables retries. */\n retryDelays?: number[] | null;\n /** Progress callback. */\n onProgress?: (bytesSent: number, bytesTotal: number) => void;\n /** Abort signal to cancel the upload. */\n signal?: AbortSignal;\n /** Persist a resumable fingerprint so the upload can resume later. */\n resume?: boolean;\n /** Custom storage for resumable fingerprints. */\n urlStorage?: UploadUrlStorage;\n}\n\n/** Run a resolved upload through the given transport, applying sensible chunk-size defaults. */\nexport const runResolvedUpload = (\n transport: UploadTransport,\n uploadUrl: string,\n resolved: ResolvedUploadSource,\n options: RunUploadOptions = {},\n headers: Record<string, string> = { 'Tus-Resumable': '1.0.0' }\n): Promise<void> =>\n transport({\n data: resolved.tusFile,\n uploadUrl,\n uploadSize: resolved.size,\n headers,\n chunkSize: options.chunkSize ?? (resolved.requiresFiniteChunkSize ? DEFAULT_STREAM_CHUNK_SIZE : undefined),\n retryDelays: options.retryDelays,\n onProgress: options.onProgress,\n signal: options.signal,\n resume: options.resume,\n urlStorage: options.urlStorage,\n });\n\nconst tusStatus = (error: unknown): number | undefined => {\n const response = (error as tus.DetailedError | undefined)?.originalResponse;\n return response ? response.getStatus() : undefined;\n};\n\n/**\n * Normalise a transport-layer error into an SDK error. Aborts are re-thrown\n * as-is; auth/expiry statuses become {@link UploadSessionExpiredError}; anything\n * else becomes a generic {@link UploadError}.\n */\nexport const toUploadError = (error: unknown): never => {\n if (error instanceof Error && error.name === 'AbortError') throw error;\n const status = tusStatus(error);\n if (status === 401 || status === 403 || status === 410) {\n throw new UploadSessionExpiredError(undefined, error);\n }\n throw new UploadError(error instanceof Error ? error.message : 'The upload failed.', error);\n};\n","import type { ListQuery, Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\n\n/** A storage bucket belonging to an application. Buckets hold objects (files). */\nexport interface StorageBucket {\n /** Unique identifier (UUID). */\n id: string;\n /** The application this bucket belongs to. */\n applicationId: string;\n /** Human-readable bucket name. */\n name: string;\n /** Globally unique, hostname-safe label used to build the bucket's serving hostname. */\n slug: string;\n /** `\"public\"` buckets serve objects through the CDN hostname; `\"private\"` buckets require signed access URLs. */\n visibility: 'public' | 'private';\n /** The hostname clients use to read public objects or signed private-object URLs. */\n cdnHostname: string;\n /** The application environment this bucket is scoped to. */\n environmentId: string;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/** Input for creating a new storage bucket. */\nexport interface CreateStorageBucketInput {\n /** Human-readable name for the bucket. */\n name: string;\n /** The application environment to scope this bucket to. */\n environmentId: string;\n /** Optional hostname-safe slug used in the generated serving hostname. Auto-generated when omitted. */\n slug?: string;\n /** Bucket visibility. Defaults to `\"private\"`. */\n visibility?: 'public' | 'private';\n}\n\n/**\n * Manage storage buckets for an application.\n * Accessed via `client.applications.storage.buckets`.\n *\n * @example\n * ```ts\n * // Create a public bucket\n * const bucket = await client.applications.storage.buckets.create('app-id', {\n * name: 'User Uploads',\n * environmentId: 'env-id',\n * visibility: 'public',\n * });\n *\n * // List all buckets\n * const { items } = await client.applications.storage.buckets.list('app-id');\n * ```\n */\nexport class StorageBucketsResource extends BaseResource {\n /**\n * List all storage buckets for an application.\n *\n * @param applicationId - The application ID (UUID).\n * @param query - Optional pagination parameters.\n * @returns A paginated list of storage buckets.\n *\n * @example\n * ```ts\n * const { items, total } = await client.applications.storage.buckets.list('app-id');\n * console.log(`${total} buckets found`);\n * ```\n */\n async list(applicationId: string, query?: ListQuery): Promise<Paginated<StorageBucket>> {\n return this.httpClient.get(`/applications/${applicationId}/storage/buckets`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * Create a new storage bucket.\n *\n * @param applicationId - The application ID (UUID).\n * @param data - Bucket name, environment, and optional slug/visibility.\n * @returns The newly created bucket.\n *\n * @example\n * ```ts\n * const bucket = await client.applications.storage.buckets.create('app-id', {\n * name: 'Assets',\n * environmentId: 'env-id',\n * visibility: 'public',\n * });\n * console.log(`Bucket CDN: https://${bucket.cdnHostname}`);\n * ```\n */\n async create(applicationId: string, data: CreateStorageBucketInput): Promise<StorageBucket> {\n return this.httpClient.post(`/applications/${applicationId}/storage/buckets`, data);\n }\n\n /**\n * Get a storage bucket by ID.\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @returns The bucket details.\n *\n * @example\n * ```ts\n * const bucket = await client.applications.storage.buckets.get('app-id', 'bucket-id');\n * console.log(`${bucket.name} (${bucket.visibility})`);\n * ```\n */\n async get(applicationId: string, bucketId: string): Promise<StorageBucket> {\n return this.httpClient.get(`/applications/${applicationId}/storage/buckets/${bucketId}`);\n }\n\n /**\n * Permanently delete a storage bucket and all its objects.\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n *\n * @example\n * ```ts\n * await client.applications.storage.buckets.delete('app-id', 'bucket-id');\n * ```\n */\n async delete(applicationId: string, bucketId: string): Promise<void> {\n return this.httpClient.delete(`/applications/${applicationId}/storage/buckets/${bucketId}`);\n }\n}\n","import type { Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\n\n/** A file (object) stored in a storage bucket. */\nexport interface StorageObject {\n /** Unique identifier (UUID). */\n id: string;\n /** The bucket this object belongs to. */\n bucketId: string;\n /** The application this object belongs to. */\n applicationId: string;\n /** The upload session that created this object, or `null` for imported objects. */\n uploadSessionId: string | null;\n /** The object key (path) within the bucket (e.g. `\"images/photo.jpg\"`). */\n key: string;\n /** MIME content type (e.g. `\"image/jpeg\"`), or `null` if not set. */\n contentType: string | null;\n /** File size in bytes. */\n contentLength: number;\n /** SHA-1 checksum of the file contents, if available. */\n checksumSha1: string | null;\n /** SHA-256 checksum of the file contents, if available. */\n checksumSha256: string | null;\n /** MD5 checksum of the file contents, if available. */\n checksumMd5: string | null;\n /** ISO 8601 timestamp of when the upload was finalized. */\n uploadedAt: string;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/**\n * Access URL details for a storage object. For public buckets, the URL is a\n * stable CDN URL. For private buckets, the URL is time-limited and signed.\n */\nexport interface StorageObjectAccess {\n /** `\"public\"` for stable CDN URLs, `\"signed\"` for time-limited signed URLs. */\n accessType: 'public' | 'signed';\n /** The URL to access the object. */\n url: string;\n /** ISO 8601 expiry timestamp for signed URLs. `null` for public URLs. */\n expiresAt: string | null;\n}\n\n/** Query parameters for listing objects in a bucket. */\nexport interface ListStorageObjectsQuery {\n /** Only return objects whose key starts with this prefix. */\n prefix?: string;\n /** Group keys by this delimiter into `commonPrefixes` (virtual folders). Defaults to `\"/\"`. */\n delimiter?: string;\n /** Opaque cursor from a previous response's `nextCursor`. */\n cursor?: string;\n /** Maximum number of objects to return (1–1000, default 200). */\n limit?: number;\n}\n\n/** A page of storage objects, including any common (folder) prefixes. */\nexport interface StorageObjectList extends Paginated<StorageObject> {\n /** Virtual \"folder\" prefixes at the current level when a delimiter is used. */\n commonPrefixes: string[];\n}\n\n/**\n * Read and delete objects in storage buckets, and generate access URLs.\n * Accessed via `client.applications.storage.objects`.\n *\n * Objects are addressed by their object ID (UUID). If you only have the object\n * key, use {@link getByKey} to resolve it, or read the `id` from a listing.\n *\n * To upload objects, use `client.applications.storage.upload()`.\n *\n * @example\n * ```ts\n * // List all objects in a bucket\n * const { items } = await client.applications.storage.objects.list('app-id', 'bucket-id');\n * for (const obj of items) {\n * console.log(`${obj.key} (${obj.contentLength} bytes)`);\n * }\n *\n * // Get a signed download URL for a private object\n * const { url } = await client.applications.storage.objects.getAccessUrl('app-id', 'bucket-id', 'object-id');\n * ```\n */\nexport class StorageObjectsResource extends BaseResource {\n /**\n * List objects in a storage bucket, optionally filtered by key prefix and\n * grouped into virtual folders by a delimiter.\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @param query - Optional prefix/delimiter/cursor/limit parameters.\n * @returns A page of objects plus any common (folder) prefixes and a `nextCursor`.\n *\n * @example\n * ```ts\n * // List the \"images/\" folder, one level deep\n * const { items, commonPrefixes, nextCursor } = await client.applications.storage.objects.list(\n * 'app-id', 'bucket-id', { prefix: 'images/', limit: 100 },\n * );\n * ```\n */\n async list(applicationId: string, bucketId: string, query?: ListStorageObjectsQuery): Promise<StorageObjectList> {\n return this.httpClient.get(`/applications/${applicationId}/storage/buckets/${bucketId}/objects`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * Get metadata for a specific object by its object ID.\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @param objectId - The object ID (UUID) — not the object key. Use {@link getByKey} to resolve a key.\n * @returns The object metadata.\n *\n * @example\n * ```ts\n * const obj = await client.applications.storage.objects.get('app-id', 'bucket-id', 'object-id');\n * console.log(`${obj.key}: ${obj.contentLength} bytes, type: ${obj.contentType}`);\n * ```\n */\n async get(applicationId: string, bucketId: string, objectId: string): Promise<StorageObject> {\n return this.httpClient.get(`/applications/${applicationId}/storage/buckets/${bucketId}/objects/${objectId}`);\n }\n\n /**\n * Resolve an object by its key (path) instead of its ID. Convenience over\n * {@link list} — lists with the key as the prefix and returns the exact match,\n * paging through results until found, or `null` if no object with that key\n * exists. (The API has no get-by-key endpoint.)\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @param key - The object key/path (e.g. `\"images/photo.jpg\"`).\n * @returns The matching object, or `null` if not found.\n */\n async getByKey(applicationId: string, bucketId: string, key: string): Promise<StorageObject | null> {\n let cursor: string | undefined;\n do {\n const page = await this.list(applicationId, bucketId, { prefix: key, delimiter: '', cursor });\n const match = page.items.find((object) => object.key === key);\n if (match) return match;\n cursor = page.nextCursor;\n } while (cursor);\n return null;\n }\n\n /**\n * Permanently delete an object from a storage bucket.\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @param objectId - The object ID (UUID) — not the object key.\n *\n * @example\n * ```ts\n * await client.applications.storage.objects.delete('app-id', 'bucket-id', 'object-id');\n * ```\n */\n async delete(applicationId: string, bucketId: string, objectId: string): Promise<void> {\n return this.httpClient.delete(`/applications/${applicationId}/storage/buckets/${bucketId}/objects/${objectId}`);\n }\n\n /**\n * Get an access URL for a storage object. For objects in public buckets,\n * returns a stable CDN URL. For private buckets, returns a time-limited\n * signed URL.\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @param objectId - The object ID (UUID) — not the object key.\n * @param options - Optional `expiresInSeconds` for signed URLs (60–86400).\n * @returns The access URL and its type/expiry.\n *\n * @example\n * ```ts\n * const access = await client.applications.storage.objects.getAccessUrl('app-id', 'bucket-id', 'object-id', {\n * expiresInSeconds: 3600,\n * });\n * if (access.accessType === 'signed') {\n * console.log(`Signed URL expires at ${access.expiresAt}`);\n * }\n * console.log(`Download: ${access.url}`);\n * ```\n */\n async getAccessUrl(\n applicationId: string,\n bucketId: string,\n objectId: string,\n options?: { expiresInSeconds?: number }\n ): Promise<StorageObjectAccess> {\n return this.httpClient.get(\n `/applications/${applicationId}/storage/buckets/${bucketId}/objects/${objectId}/access-url`,\n { query: { expiresInSeconds: options?.expiresInSeconds } }\n );\n }\n}\n","import type { ListQuery, Paginated } from '../http-client';\nimport { resolveUploadSource, type NodeReadableLike, type UploadData } from '../upload/source';\nimport {\n runResolvedUpload,\n toUploadError,\n tusUploadTransport,\n type RunUploadOptions,\n type UploadTransport,\n} from '../upload/transport';\nimport { BaseResource } from './base-resource';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * Represents an upload session for a storage object. Upload sessions track the\n * lifecycle of a file upload from creation through completion.\n */\nexport interface StorageUploadSession {\n /** Unique identifier (UUID). */\n id: string;\n /** The bucket this upload targets. */\n bucketId: string;\n /** The application this upload belongs to. */\n applicationId: string;\n /** The object key/path the file will be stored at (e.g. `\"images/photo.jpg\"`). */\n key: string;\n /** MIME content type declared at creation, or `null` if not specified. */\n contentType: string | null;\n /** Expected file size in bytes declared at creation, or `null`. */\n contentLength: number | null;\n /** SHA-1 checksum for server-side verification, if provided. */\n checksumSha1: string | null;\n /** SHA-256 checksum for server-side verification, if provided. */\n checksumSha256: string | null;\n /** MD5 checksum for server-side verification, if provided. */\n checksumMd5: string | null;\n /**\n * Current session state:\n * - `\"pending\"` — Session created, awaiting the first bytes.\n * - `\"ready\"` — Receiving file data.\n * - `\"completed\"` — Upload verified and storage object created.\n * - `\"failed\"` — Upload failed or was rejected.\n * - `\"expired\"` — Session exceeded its expiration time.\n */\n state: 'pending' | 'ready' | 'completed' | 'failed' | 'expired';\n /** ISO 8601 timestamp when this session (and its upload URL) expires. */\n expiresAt: string;\n /** ISO 8601 timestamp when the upload was finalized, or `null`. */\n uploadedAt: string | null;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/** Input for creating a new upload session. */\nexport interface CreateUploadSessionInput {\n /** The object key/path the file will be stored at (e.g. `\"images/photo.jpg\"`). 1–1024 characters. */\n key: string;\n /** File size in bytes. Required. */\n contentLength: number;\n /** Lowercase hex SHA-256 checksum (64 chars) of the content. Required for server-side verification. */\n checksumSha256: string;\n /** MIME content type of the file (e.g. `\"image/jpeg\"`). */\n contentType?: string;\n /** Optional lowercase hex SHA-1 checksum (40 chars). */\n checksumSha1?: string;\n /** Optional lowercase hex MD5 checksum (32 chars). */\n checksumMd5?: string;\n}\n\n/**\n * Response from creating an upload session. Contains both the session metadata\n * and the resumable upload instructions (signed URL + headers).\n */\nexport interface CreateUploadSessionResponse {\n /** The created upload session. */\n session: StorageUploadSession;\n /** Resumable upload instructions — use these to send the file data. */\n upload: {\n /** The HTTP method for the byte upload (resumable upload protocol). */\n method: 'PATCH';\n /** Signed upload URL. Send your file data here. */\n url: string;\n /** Required headers to include with the upload request. */\n headers: Record<string, string>;\n /** The URL where the object will be accessible after upload (CDN URL for public buckets). */\n publicObjectUrl: string;\n };\n}\n\n/** A byte source for uploading directly to a known signed URL. */\nexport interface UploadByteSource {\n /** In-memory data (`File`/`Blob`/`Buffer`/`Uint8Array`/`ArrayBuffer`). */\n data?: UploadData;\n /** A filesystem path to stream from (Node.js only). */\n path?: string;\n /** A readable stream (Node.js only). Requires `contentLength`. */\n stream?: NodeReadableLike;\n /** Byte size — required for `stream` inputs, computed otherwise. */\n contentLength?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Resource\n// ---------------------------------------------------------------------------\n\n/**\n * Manage upload sessions and upload bytes to a signed upload URL using the\n * resumable upload protocol. Accessed via\n * `client.applications.storage.uploadSessions`.\n *\n * For most use cases, prefer the high-level `client.applications.storage.upload()`\n * which creates the session, computes the required checksum, uploads the bytes,\n * and returns the public URL.\n */\nexport class StorageUploadSessionsResource extends BaseResource {\n constructor(\n httpClient: ConstructorParameters<typeof BaseResource>[0],\n private readonly transport: UploadTransport = tusUploadTransport\n ) {\n super(httpClient);\n }\n\n /**\n * List upload sessions for a bucket.\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @param query - Optional pagination parameters.\n * @returns A paginated list of upload sessions.\n */\n async list(applicationId: string, bucketId: string, query?: ListQuery): Promise<Paginated<StorageUploadSession>> {\n return this.httpClient.get(`/applications/${applicationId}/storage/buckets/${bucketId}/uploads`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * Create an upload session. Returns the session metadata and a signed upload\n * URL for sending file data. This is the low-level method — for most use\n * cases prefer `client.applications.storage.upload()` which also computes the\n * required SHA-256 checksum for you.\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @param data - Object key, content length, SHA-256 checksum, and optional content type / extra checksums.\n * @returns The session and resumable upload instructions (URL, method, headers).\n */\n async create(\n applicationId: string,\n bucketId: string,\n data: CreateUploadSessionInput\n ): Promise<CreateUploadSessionResponse> {\n return this.httpClient.post(`/applications/${applicationId}/storage/buckets/${bucketId}/uploads`, data);\n }\n\n /**\n * Get an upload session by ID. Use this to track server-side processing after\n * an upload (poll until `state === 'completed'`).\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @param sessionId - The upload session ID (UUID).\n * @returns The current session state.\n */\n async get(applicationId: string, bucketId: string, sessionId: string): Promise<StorageUploadSession> {\n return this.httpClient.get(`/applications/${applicationId}/storage/buckets/${bucketId}/uploads/${sessionId}`);\n }\n\n /**\n * Upload bytes directly to a pre-existing signed upload URL — for example, a\n * URL returned by {@link create} or handed to your client by a backend. Skips\n * session creation and checksum computation.\n *\n * @param url - A signed upload URL.\n * @param source - The bytes to upload.\n * @param options - Chunk size, retry config, progress, abort signal, resume,\n * and any required `headers` returned with the upload session.\n * @throws {@link UploadError} if the upload fails after all retries.\n */\n async uploadToUrl(\n url: string,\n source: UploadByteSource,\n options?: RunUploadOptions & { headers?: Record<string, string> }\n ): Promise<void> {\n const resolved = await resolveUploadSource({ key: '', ...source }, { hash: false });\n const headers = { 'Tus-Resumable': '1.0.0', ...options?.headers };\n await runResolvedUpload(this.transport, url, resolved, options, headers).catch(toUploadError);\n }\n\n /**\n * Resume an interrupted upload to a previously issued signed upload URL. The\n * resumable protocol negotiates the current offset and continues from there.\n *\n * @param url - The signed upload URL from the original {@link create} call.\n * @param source - The full bytes to upload (the same content as the original).\n * @param options - Chunk size, retry config, progress, abort signal.\n */\n async resumeFromUrl(\n url: string,\n source: UploadByteSource,\n options?: RunUploadOptions & { headers?: Record<string, string> }\n ): Promise<void> {\n return this.uploadToUrl(url, source, { ...options, resume: true });\n }\n}\n","import { UploadError } from '../errors';\nimport type { HttpClient } from '../http-client';\nimport { resolveUploadSource, type NodeReadableLike, type UploadData } from '../upload/source';\nimport {\n runResolvedUpload,\n toUploadError,\n tusUploadTransport,\n type UploadTransport,\n type UploadUrlStorage,\n} from '../upload/transport';\nimport { StorageBucketsResource } from './storage-buckets';\nimport { StorageObjectsResource, type StorageObject } from './storage-objects';\nimport { StorageUploadSessionsResource, type StorageUploadSession } from './storage-upload-sessions';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Options controlling whether and how to wait for an upload to finalize server-side. */\nexport interface WaitForCompletionOptions {\n /** Maximum time to wait in milliseconds. Default: 60000. */\n timeoutMs?: number;\n /** How often to poll the session state, in milliseconds. Default: 1000. */\n pollIntervalMs?: number;\n}\n\n/** Input for the high-level {@link ApplicationStorageResource.upload | upload()} method. */\nexport interface UploadFileInput {\n /** The application ID (UUID). */\n applicationId: string;\n /** The target bucket ID (UUID). */\n bucketId: string;\n /** The object key/path in the bucket (e.g. `\"images/logo.png\"`). */\n key: string;\n /** In-memory data (browser `File`/`Blob`, Node `Buffer`, `Uint8Array`, `ArrayBuffer`). */\n data?: UploadData;\n /** A filesystem path to upload from (Node.js only). Size, checksum, and content type are derived automatically. */\n path?: string;\n /** A readable stream to upload from (Node.js only). Requires `contentLength` and `checksumSha256`. */\n stream?: NodeReadableLike;\n /** MIME content type. Inferred from `key` when omitted. */\n contentType?: string;\n /** Byte size. Required for `stream`; computed otherwise. */\n contentLength?: number;\n /** Pre-computed SHA-256 (skips hashing). Required for `stream`. */\n checksumSha256?: string;\n /** Also send a SHA-1 checksum. */\n checksumSha1?: string;\n /** Also send an MD5 checksum (Node.js only unless provided). */\n checksumMd5?: string;\n /** Maximum chunk size in bytes (for very large files / streams). */\n chunkSize?: number;\n /** Retry backoff in milliseconds; `null`/`[]` disables retries. */\n retryDelays?: number[] | null;\n /** Progress callback invoked during the byte upload. */\n onProgress?: (bytesSent: number, bytesTotal: number) => void;\n /** Abort signal to cancel the upload. */\n signal?: AbortSignal;\n /** Persist a resumable fingerprint so the upload can be resumed later. */\n resume?: boolean;\n /** Custom storage backend for resumable fingerprints. */\n urlStorage?: UploadUrlStorage;\n /** Wait until the object is finalized server-side before resolving. Pass options to tune polling. */\n waitForCompletion?: boolean | WaitForCompletionOptions;\n}\n\n/** Result of a successful upload. */\nexport interface UploadFileResult {\n /** The upload session. When `waitForCompletion` was set, `state` is `\"completed\"`. */\n session: StorageUploadSession;\n /** The public/CDN URL of the uploaded object. */\n url: string;\n /** The finalized storage object — present only when `waitForCompletion` was set. */\n object?: StorageObject;\n}\n\n/** Options for {@link ApplicationStorageResource.uploadBatch | uploadBatch()}. */\nexport interface UploadBatchOptions {\n /** Maximum number of concurrent uploads. Default: 4. */\n concurrency?: number;\n /** Called after each file settles, with the number completed and the total. */\n onProgress?: (completed: number, total: number) => void;\n}\n\n/** The outcome of one file within a batch upload. Errors are isolated per file. */\nexport interface UploadBatchItemResult {\n /** The input that produced this result. */\n input: UploadFileInput;\n /** The successful result, if the upload succeeded. */\n result?: UploadFileResult;\n /** The error, if this upload failed. */\n error?: unknown;\n}\n\n// ---------------------------------------------------------------------------\n// Resource\n// ---------------------------------------------------------------------------\n\nconst delay = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\n/**\n * Namespace for all storage operations on an application: bucket management,\n * object listing/access, low-level upload sessions, and the high-level\n * {@link upload} / {@link uploadBatch} helpers.\n *\n * Accessed via `client.applications.storage`.\n *\n * @example\n * ```ts\n * // High-level upload (Node.js, from a path — checksum/size/content-type inferred)\n * const { url } = await client.applications.storage.upload({\n * applicationId: 'app-id',\n * bucketId: 'bucket-id',\n * key: 'photos/cat.jpg',\n * path: './cat.jpg',\n * });\n *\n * // Browser upload from a file input, with progress and abort\n * const controller = new AbortController();\n * const { url } = await client.applications.storage.upload({\n * applicationId: 'app-id',\n * bucketId: 'bucket-id',\n * key: `uploads/${file.name}`,\n * data: file,\n * onProgress: (sent, total) => console.log(`${Math.round((sent / total) * 100)}%`),\n * signal: controller.signal,\n * });\n * ```\n */\nexport class ApplicationStorageResource {\n /** Create, list, get, and delete storage buckets. */\n readonly buckets: StorageBucketsResource;\n /** List, get, delete objects, and generate access URLs. */\n readonly objects: StorageObjectsResource;\n /** Low-level upload sessions and direct-to-URL byte uploads. */\n readonly uploadSessions: StorageUploadSessionsResource;\n\n private readonly transport: UploadTransport;\n\n constructor(httpClient: HttpClient, transport: UploadTransport = tusUploadTransport) {\n this.transport = transport;\n this.buckets = new StorageBucketsResource(httpClient);\n this.objects = new StorageObjectsResource(httpClient);\n this.uploadSessions = new StorageUploadSessionsResource(httpClient, transport);\n }\n\n /**\n * Upload a file to a storage bucket. Handles the full flow: computes the\n * required SHA-256 checksum, creates an upload session, uploads the bytes with\n * automatic retries (and optional progress/abort/resume), and returns the\n * public URL.\n *\n * Accepts browser `File`/`Blob`, Node `Buffer`/`Uint8Array`/`ArrayBuffer`, a\n * Node filesystem `path`, or a Node readable `stream` (with `contentLength`\n * and `checksumSha256`). The content type is inferred from `key` when omitted.\n *\n * @param input - What and where to upload, plus optional transfer options.\n * @returns The upload session and public object URL (and the finalized object when `waitForCompletion` is set).\n * @throws {@link UploadError} if the byte upload fails.\n * @throws {@link UploadSessionExpiredError} if the session expires mid-upload.\n *\n * @example\n * ```ts\n * const { session, url, object } = await client.applications.storage.upload({\n * applicationId, bucketId, key: 'reports/q1.pdf', path: './q1.pdf',\n * waitForCompletion: true,\n * });\n * console.log(object?.contentLength, 'bytes available at', url);\n * ```\n */\n async upload(input: UploadFileInput): Promise<UploadFileResult> {\n const resolved = await resolveUploadSource({\n key: input.key,\n data: input.data,\n path: input.path,\n stream: input.stream,\n contentType: input.contentType,\n contentLength: input.contentLength,\n checksumSha256: input.checksumSha256,\n checksumSha1: input.checksumSha1,\n checksumMd5: input.checksumMd5,\n });\n\n const { session, upload } = await this.uploadSessions.create(input.applicationId, input.bucketId, {\n key: input.key,\n contentLength: resolved.size,\n checksumSha256: resolved.checksums.sha256,\n contentType: resolved.contentType,\n checksumSha1: resolved.checksums.sha1,\n checksumMd5: resolved.checksums.md5,\n });\n\n await runResolvedUpload(\n this.transport,\n upload.url,\n resolved,\n {\n chunkSize: input.chunkSize,\n retryDelays: input.retryDelays,\n onProgress: input.onProgress,\n signal: input.signal,\n resume: input.resume,\n urlStorage: input.urlStorage,\n },\n // Forward any required headers the API issued with the session.\n { 'Tus-Resumable': '1.0.0', ...upload.headers }\n ).catch(toUploadError);\n\n if (input.waitForCompletion) {\n const options = typeof input.waitForCompletion === 'object' ? input.waitForCompletion : undefined;\n const completed = await this.waitForCompletion(input.applicationId, input.bucketId, session.id, options);\n const object = (await this.objects.getByKey(input.applicationId, input.bucketId, input.key)) ?? undefined;\n return { session: completed, url: upload.publicObjectUrl, object };\n }\n\n return { session, url: upload.publicObjectUrl };\n }\n\n /**\n * Upload many files concurrently. Each file is uploaded independently; a\n * failure for one file does not abort the others — inspect each item's\n * `error`/`result`.\n *\n * @param inputs - The files to upload.\n * @param options - Concurrency limit and an aggregated progress callback.\n * @returns One result per input, in the same order.\n *\n * @example\n * ```ts\n * const results = await client.applications.storage.uploadBatch(\n * files.map((f) => ({ applicationId, bucketId, key: `uploads/${f.name}`, data: f })),\n * { concurrency: 6, onProgress: (done, total) => console.log(`${done}/${total}`) },\n * );\n * const failed = results.filter((r) => r.error);\n * ```\n */\n async uploadBatch(inputs: UploadFileInput[], options?: UploadBatchOptions): Promise<UploadBatchItemResult[]> {\n const concurrency = Math.max(1, options?.concurrency ?? 4);\n const results: UploadBatchItemResult[] = new Array(inputs.length);\n let completed = 0;\n let next = 0;\n\n const worker = async (): Promise<void> => {\n for (;;) {\n const index = next++;\n if (index >= inputs.length) return;\n try {\n results[index] = { input: inputs[index], result: await this.upload(inputs[index]) };\n } catch (error) {\n results[index] = { input: inputs[index], error };\n }\n completed++;\n options?.onProgress?.(completed, inputs.length);\n }\n };\n\n await Promise.all(Array.from({ length: Math.min(concurrency, inputs.length) }, () => worker()));\n return results;\n }\n\n /**\n * Poll an upload session until the object is finalized server-side.\n *\n * @param applicationId - The application ID (UUID).\n * @param bucketId - The bucket ID (UUID).\n * @param sessionId - The upload session ID (UUID).\n * @param options - Timeout and polling interval.\n * @returns The completed session.\n * @throws {@link UploadError} if the session fails, expires, or the timeout elapses.\n */\n async waitForCompletion(\n applicationId: string,\n bucketId: string,\n sessionId: string,\n options?: WaitForCompletionOptions\n ): Promise<StorageUploadSession> {\n const timeoutMs = options?.timeoutMs ?? 60_000;\n const pollIntervalMs = options?.pollIntervalMs ?? 1000;\n const deadline = Date.now() + timeoutMs;\n\n for (;;) {\n const session = await this.uploadSessions.get(applicationId, bucketId, sessionId);\n if (session.state === 'completed') return session;\n if (session.state === 'failed' || session.state === 'expired') {\n throw new UploadError(`Upload session ${session.state}.`);\n }\n if (Date.now() >= deadline) {\n throw new UploadError('Timed out waiting for the upload to complete.');\n }\n await delay(pollIntervalMs);\n }\n }\n}\n","import type { ListQuery, Paginated } from '../http-client';\nimport { ApplicationEnvVarsResource } from './application-env-vars';\nimport { ApplicationRequestsResource } from './application-requests';\nimport { ApplicationStorageResource } from './application-storage';\nimport { BaseResource } from './base-resource';\nimport type { ApplicationHostnameList, HostnameAvailability, SetProductionHostnameResult } from './hostnames';\nimport type { Organization } from './organizations';\n\n/** A Gigadrive Network application, belonging to an {@link Organization}. */\nexport interface Application {\n /** Unique identifier (UUID). */\n id: string;\n /** The organization this application belongs to. */\n organization: Organization;\n /** Display name of the application. */\n name: string;\n /** Avatar / logo URL. */\n imageUrl: string;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/** Input accepted when creating a Gigadrive Network application. */\nexport interface CreateApplicationInput {\n /** Organization that will own the application. */\n organizationId: string;\n /** Display name. Surrounding whitespace is removed by the API. */\n name: string;\n /** Optional lowercase slug. Generated from {@link name} when omitted. */\n slug?: string;\n /**\n * Project directory relative to the repository root. The API normalizes\n * redundant separators and rejects absolute paths and traversal segments.\n */\n rootDirectory?: string;\n}\n\n/**\n * Application creation result used to start the first deployment without an\n * additional lookup.\n */\nexport interface CreatedApplication {\n /** Stable application UUID. */\n id: string;\n /** Owning organization UUID. */\n organizationId: string;\n /** Normalized display name. */\n name: string;\n /** Generated or caller-supplied application slug. */\n slug: string;\n /** Application icon URL. */\n imageUrl: string;\n /** Normalized project directory, or `null` for the repository root. */\n rootDirectory: string | null;\n /** Production environment slug to use for the first deployment. */\n defaultEnvironmentSlug: string;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/** Query filters for listing applications. */\nexport interface ListApplicationsQuery extends ListQuery {\n /** Only return applications belonging to this organization. */\n organizationId?: string;\n}\n\n/**\n * Manage applications. Accessed via {@link GigadriveClient.applications}.\n *\n * @example\n * ```ts\n * const { items: apps } = await client.applications.list();\n * console.log(apps.map((a) => `${a.name} (${a.organization.name})`));\n * ```\n */\nexport class ApplicationsResource extends BaseResource {\n /**\n * Manage environment variables scoped to an application.\n *\n * @example\n * ```ts\n * await client.applications.envVars.create('app-id', {\n * key: 'DATABASE_URL',\n * value: 'postgres://...',\n * sensitive: true,\n * });\n * ```\n */\n readonly envVars: ApplicationEnvVarsResource;\n\n /**\n * Manage storage buckets, objects, and file uploads for an application.\n *\n * @example\n * ```ts\n * // Upload a file\n * const { url } = await client.applications.storage.upload({\n * applicationId: 'app-id',\n * bucketId: 'bucket-id',\n * key: 'images/logo.png',\n * data: fileData,\n * });\n *\n * // List objects in a bucket\n * const { items } = await client.applications.storage.objects.list('app-id', 'bucket-id');\n * ```\n */\n readonly storage: ApplicationStorageResource;\n\n /**\n * Read observed traffic (request logs) for an application.\n *\n * @example\n * ```ts\n * const { items } = await client.applications.requests.list('app-id', { statusFamily: 5 });\n * ```\n */\n readonly requests: ApplicationRequestsResource;\n\n constructor(...args: ConstructorParameters<typeof BaseResource>) {\n super(...args);\n this.envVars = new ApplicationEnvVarsResource(this.httpClient);\n this.storage = new ApplicationStorageResource(this.httpClient);\n this.requests = new ApplicationRequestsResource(this.httpClient);\n }\n\n /**\n * List applications the authenticated actor has access to.\n *\n * Requires the `network:applications:read` scope.\n *\n * @param query - Optional organization filter and pagination.\n * @returns A paginated list of applications.\n *\n * @example\n * ```ts\n * const { items, total } = await client.applications.list({ organizationId: 'org-id' });\n * console.log(`Found ${total} applications`);\n * ```\n */\n async list(query?: ListApplicationsQuery): Promise<Paginated<Application>> {\n return this.httpClient.get('/applications', {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * Creates an application with production and preview environments.\n *\n * Requires the `network:applications:write` scope and access to the owning\n * organization. Application-, deployment-, and function-scoped tokens cannot\n * create applications.\n *\n * @param input - Ownership, display name, and optional repository layout.\n * @returns The persisted application plus the default production environment\n * slug, ready for an immediate deployment request.\n *\n * @example\n * ```ts\n * const app = await client.applications.create({\n * organizationId: 'org-id',\n * name: 'Next.js Storefront',\n * });\n * console.log(app.id, app.defaultEnvironmentSlug);\n * ```\n */\n async create(input: CreateApplicationInput): Promise<CreatedApplication> {\n return this.httpClient.post('/applications', input);\n }\n\n /**\n * List the `*.gigadrive.app` hostnames for an application (production alias\n * and per-branch aliases).\n *\n * @param applicationId - The application ID (UUID).\n * @returns The hostnames plus the production hostname `label`.\n *\n * @example\n * ```ts\n * const { items, label } = await client.applications.hostnames('app-id');\n * console.log(`Production: ${label}.gigadrive.app`);\n * ```\n */\n async hostnames(applicationId: string): Promise<ApplicationHostnameList> {\n return this.httpClient.get(`/applications/${applicationId}/hostnames`);\n }\n\n /**\n * Check whether a candidate production hostname label is allowed and globally\n * available before setting it with {@link setProductionHostname}.\n *\n * Requires the `network:applications:read` scope.\n *\n * @param applicationId - The application ID (UUID).\n * @param label - The candidate production hostname label (e.g. `\"my-app\"`).\n * @returns Whether the label is available, plus a `reason` when it is not.\n *\n * @example\n * ```ts\n * const { available, reason } = await client.applications.checkHostnameAvailability('app-id', 'my-app');\n * if (!available) console.log(`Unavailable: ${reason}`);\n * ```\n */\n async checkHostnameAvailability(applicationId: string, label: string): Promise<HostnameAvailability> {\n return this.httpClient.get(`/applications/${applicationId}/hostname/availability`, {\n query: { label },\n });\n }\n\n /**\n * Set the application's production hostname. The production alias\n * `{label}.gigadrive.app` is re-pointed to the latest production deployment.\n *\n * Requires the `network:applications:write` scope. Deployment- and\n * function-scoped tokens cannot change the production hostname.\n *\n * @param applicationId - The application ID (UUID).\n * @param label - The production hostname label (e.g. `\"my-app\"`). It is\n * normalized (slugified) server-side.\n * @returns The saved label, the resulting hostname, and whether it is live yet.\n *\n * @example\n * ```ts\n * const { hostname, live } = await client.applications.setProductionHostname('app-id', 'my-app');\n * console.log(live ? `Live at ${hostname}` : `Reserved ${hostname} (deploy to go live)`);\n * ```\n */\n async setProductionHostname(applicationId: string, label: string): Promise<SetProductionHostnameResult> {\n return this.httpClient.put(`/applications/${applicationId}/hostname`, { label });\n }\n}\n","import type { Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\nimport type { Hostname } from './hostnames';\n\n/**\n * The lifecycle status of a deployment.\n * - `\"PENDING\"` — Created, waiting for artifact upload.\n * - `\"QUEUED\"` — Queued for processing.\n * - `\"STARTING\"` — Processing is starting.\n * - `\"BUILDING\"` — Build pipeline is running.\n * - `\"PROVISIONING\"` — Infrastructure is being provisioned.\n * - `\"ACTIVE\"` — Successfully deployed and serving traffic.\n * - `\"FAILED\"` — Build or provisioning failed.\n */\nexport type DeploymentStatus = 'PENDING' | 'QUEUED' | 'STARTING' | 'BUILDING' | 'PROVISIONING' | 'ACTIVE' | 'FAILED';\n\n/** The severity level of a deployment log entry. */\nexport type DeploymentLogType = 'INFO' | 'ERROR' | 'WARN' | 'DEBUG';\n\n/** A deployment of an application to the Gigadrive Network. */\nexport interface Deployment {\n /** Unique identifier (UUID). */\n id: string;\n /** The application this deployment belongs to. */\n applicationId: string;\n /** Current lifecycle status. */\n status: DeploymentStatus;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/** A single log entry from a deployment's build or provisioning pipeline. */\nexport interface DeploymentLog {\n /** Unique identifier. */\n id: string;\n /** The log message text. */\n message: string;\n /** Severity level: `\"INFO\"`, `\"ERROR\"`, `\"WARN\"`, or `\"DEBUG\"`. */\n type: DeploymentLogType;\n /** ISO 8601 timestamp of when this log entry was created. */\n createdAt: string;\n}\n\n/** A paginated page of deployment log entries. */\nexport interface DeploymentLogPage {\n /** Total number of log entries for this deployment. */\n totalItems: number;\n /** Maximum number of entries per page. */\n limit: number;\n /** Number of entries skipped (for pagination). */\n offset: number;\n /** The log entries on this page. */\n items: DeploymentLog[];\n}\n\n/** Input for creating a new deployment. */\nexport interface CreateDeploymentInput {\n /** The application to deploy. */\n applicationId: string;\n /** Optional git source for the deployment. When omitted, the deployment expects an artifact upload. */\n gitSource?: {\n /** The git ref to deploy (e.g. `\"main\"`, `\"v1.0.0\"`). */\n ref: string;\n /** A specific commit SHA to deploy. If omitted, the HEAD of the ref is used. */\n sha?: string;\n };\n}\n\n/** Query filters for listing deployments. All fields are optional. */\nexport interface ListDeploymentsQuery {\n /** Filter by organization ID. */\n organizationId?: string;\n /** Filter by application ID. */\n applicationId?: string;\n /** Filter by deployment status. */\n status?: DeploymentStatus;\n}\n\n/** Query parameters for fetching deployment logs. */\nexport interface ListDeploymentLogsQuery {\n /** Number of log entries to skip (for pagination). */\n offset?: number;\n /** Maximum number of log entries to return per page. */\n limit?: number;\n /** Only return log entries created after this ISO 8601 timestamp. Useful for tailing logs. */\n 'createdAt[gt]'?: string;\n}\n\n/** Result from starting a multipart deployment upload. */\nexport interface StartUploadResult {\n /** The multipart upload ID. Pass this to subsequent `getPresignedUrl` and `completeUpload` calls. */\n uploadId: string;\n}\n\n/** A presigned URL for uploading a single part of a multipart deployment upload. */\nexport interface PresignedUrlResult {\n /** The presigned URL to PUT the part data to. */\n url: string;\n}\n\n/** A successfully uploaded part, used to complete the multipart upload. */\nexport interface UploadPart {\n /** The 1-based part number. */\n partNumber: number;\n /** The ETag returned by the storage provider after uploading this part. */\n etag: string;\n}\n\n/**\n * Manage deployments — create, monitor, upload artifacts, and read logs.\n * Accessed via {@link GigadriveClient.deployments}.\n *\n * ## Deployment lifecycle\n *\n * 1. **Create** a deployment with {@link create}.\n * 2. **Upload** build artifacts using the multipart upload flow\n * ({@link startUpload} → {@link getPresignedUrl} → {@link uploadPart} → {@link completeUpload}).\n * 3. **Monitor** the build with {@link get} and {@link getLogs}.\n *\n * @example\n * ```ts\n * // Create a deployment\n * const deployment = await client.deployments.create({ applicationId: 'app-id' });\n *\n * // Check status\n * const updated = await client.deployments.get(deployment.id);\n * console.log(`Status: ${updated.status}`);\n *\n * // Read build logs\n * const logs = await client.deployments.getLogs(deployment.id, { limit: 50 });\n * for (const entry of logs.items) {\n * console.log(`[${entry.type}] ${entry.message}`);\n * }\n * ```\n */\nexport class DeploymentsResource extends BaseResource {\n /**\n * List deployments, optionally filtered by organization, application, or status.\n *\n * Requires the `network:deployments:read` scope.\n *\n * @param query - Optional filters.\n * @returns A paginated list of deployments.\n *\n * @example\n * ```ts\n * // All deployments for an application\n * const { items } = await client.deployments.list({ applicationId: 'app-id' });\n *\n * // Only active deployments\n * const { items } = await client.deployments.list({ status: 'ACTIVE' });\n * ```\n */\n async list(query?: ListDeploymentsQuery): Promise<Paginated<Deployment>> {\n return this.httpClient.get('/deployments', {\n query: query as Record<string, string | undefined> | undefined,\n });\n }\n\n /**\n * Get a deployment by ID, including its current status.\n *\n * @param deploymentId - The deployment ID (UUID).\n * @returns The deployment with its current status.\n *\n * @example\n * ```ts\n * const deployment = await client.deployments.get('deployment-id');\n * if (deployment.status === 'ACTIVE') {\n * console.log('Deployment is live!');\n * }\n * ```\n */\n async get(deploymentId: string): Promise<Deployment> {\n return this.httpClient.get(`/deployments/${deploymentId}`);\n }\n\n /**\n * Create a new deployment. The deployment starts in `\"PENDING\"` status,\n * waiting for artifact upload. Use the multipart upload methods\n * ({@link startUpload}, {@link getPresignedUrl}, {@link uploadPart},\n * {@link completeUpload}) to upload build artifacts.\n *\n * Requires the `network:deployments:trigger` scope.\n *\n * @param data - The application ID and optional git source.\n * @returns The newly created deployment.\n *\n * @example\n * ```ts\n * const deployment = await client.deployments.create({\n * applicationId: 'app-id',\n * });\n * console.log(`Created deployment ${deployment.id} (${deployment.status})`);\n * ```\n */\n async create(data: CreateDeploymentInput): Promise<Deployment> {\n return this.httpClient.post('/deployments', data);\n }\n\n /**\n * Start a multipart upload for deployment artifacts. This initiates a new\n * multipart upload and returns an upload ID for subsequent part uploads.\n *\n * The deployment must be in `\"PENDING\"` status.\n *\n * @param deploymentId - The deployment ID (UUID).\n * @returns An object containing the `uploadId` for subsequent calls.\n *\n * @example\n * ```ts\n * const { uploadId } = await client.deployments.startUpload('deployment-id');\n * ```\n */\n async startUpload(deploymentId: string): Promise<StartUploadResult> {\n return this.httpClient.post(`/deployments/${deploymentId}/upload/start`);\n }\n\n /**\n * Get a presigned URL for uploading a single part of a multipart upload.\n * The URL is temporary and should be used immediately with {@link uploadPart}.\n *\n * @param deploymentId - The deployment ID (UUID).\n * @param uploadId - The multipart upload ID from {@link startUpload}.\n * @param partNumber - The 1-based part number.\n * @returns An object containing the presigned `url` to PUT the part data to.\n *\n * @example\n * ```ts\n * const { url } = await client.deployments.getPresignedUrl(\n * 'deployment-id', uploadId, 1,\n * );\n * ```\n */\n async getPresignedUrl(deploymentId: string, uploadId: string, partNumber: number): Promise<PresignedUrlResult> {\n if (!Number.isInteger(partNumber) || partNumber < 1) {\n throw new Error(`partNumber must be a positive integer, received ${partNumber}`);\n }\n return this.httpClient.post(`/deployments/${deploymentId}/upload/part`, { uploadId, partNumber });\n }\n\n /**\n * Upload a part to a presigned URL obtained from {@link getPresignedUrl}.\n * This sends the chunk data directly to the backend storage service, not\n * to the Gigadrive API. The returned `etag` is needed for\n * {@link completeUpload}.\n *\n * @param presignedUrl - The presigned URL from {@link getPresignedUrl}.\n * @param data - The chunk data to upload.\n * @param partNumber - The 1-based part number (used for error messages).\n * @returns The part number and ETag. Collect these for {@link completeUpload}.\n * @throws {@link ApiError} if the PUT request fails.\n * @throws Error if the storage provider does not return an ETag header.\n *\n * @example\n * ```ts\n * const chunk = fileBuffer.subarray(0, 10 * 1024 * 1024); // 10 MB\n * const part = await client.deployments.uploadPart(presignedUrl, chunk, 1);\n * // part = { partNumber: 1, etag: '\"abc123...\"' }\n * ```\n */\n async uploadPart(\n presignedUrl: string,\n data: ArrayBuffer | Uint8Array | Blob,\n partNumber: number\n ): Promise<UploadPart> {\n if (!Number.isInteger(partNumber) || partNumber < 1) {\n throw new Error(`partNumber must be a positive integer, received ${partNumber}`);\n }\n const response = await this.httpClient.fetchRaw(presignedUrl, {\n method: 'PUT',\n headers: {\n // Deployment artifacts are always ZIP archives.\n 'Content-Type': 'application/zip',\n 'Content-Length': String(data instanceof Blob ? data.size : data.byteLength),\n },\n body: data,\n });\n\n const etag = response.headers.get('ETag');\n if (!etag) {\n throw new Error(`No ETag received for part ${partNumber}`);\n }\n\n return { partNumber, etag };\n }\n\n /**\n * Complete a multipart upload after all parts have been uploaded via\n * {@link uploadPart}. This signals the storage provider to assemble the\n * parts into a single object and triggers the deployment build pipeline.\n *\n * @param deploymentId - The deployment ID (UUID).\n * @param uploadId - The multipart upload ID from {@link startUpload}.\n * @param parts - Array of `{ partNumber, etag }` from each {@link uploadPart} call.\n *\n * @example\n * ```ts\n * await client.deployments.completeUpload(deploymentId, uploadId, [\n * { partNumber: 1, etag: '\"abc...\"' },\n * { partNumber: 2, etag: '\"def...\"' },\n * ]);\n * ```\n */\n async completeUpload(deploymentId: string, uploadId: string, parts: UploadPart[]): Promise<void> {\n return this.httpClient.post(`/deployments/${deploymentId}/upload/complete`, { uploadId, parts });\n }\n\n /**\n * Fetch deployment logs. Supports pagination and filtering by timestamp\n * for incremental log tailing.\n *\n * @param deploymentId - The deployment ID (UUID).\n * @param query - Optional pagination and filter parameters.\n * @returns A page of log entries with total count.\n *\n * @example\n * ```ts\n * // Get the first page of logs\n * const page = await client.deployments.getLogs('deployment-id', {\n * offset: 0,\n * limit: 100,\n * });\n *\n * for (const entry of page.items) {\n * const prefix = entry.type === 'ERROR' ? 'ERR' : entry.type === 'WARN' ? 'WRN' : 'INF';\n * console.log(`[${prefix}] ${entry.message}`);\n * }\n *\n * // Tail new logs since last fetch\n * const newLogs = await client.deployments.getLogs('deployment-id', {\n * 'createdAt[gt]': lastEntry.createdAt,\n * });\n * ```\n */\n async getLogs(deploymentId: string, query?: ListDeploymentLogsQuery): Promise<DeploymentLogPage> {\n return this.httpClient.get(`/deployments/${deploymentId}/logs`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * List the immutable `*.gigadrive.app` hostnames assigned to a deployment.\n *\n * @param deploymentId - The deployment ID (UUID).\n * @returns A paginated list of hostnames.\n *\n * @example\n * ```ts\n * const { items } = await client.deployments.getHostnames('deployment-id');\n * console.log(items.map((h) => h.hostname));\n * ```\n */\n async getHostnames(deploymentId: string): Promise<Paginated<Hostname>> {\n return this.httpClient.get(`/deployments/${deploymentId}/hostnames`);\n }\n}\n","import type { NormalizedImagePolicy } from '@gigadrive/network-config';\n\nimport { BaseResource } from './base-resource';\n\nexport interface ImageCacheInspection {\n enabled: boolean;\n deploymentTag: string;\n sourceTag: string | null;\n policy: NormalizedImagePolicy | null;\n}\n\nexport interface ImageCachePurgeResult {\n purged: true;\n tag: string;\n}\n\nexport interface ManagedImageUrlOptions {\n /** Deployment or custom application origin, for example `https://app.gigadrive.app`. */\n origin: string;\n /** Local application path or approved absolute remote URL. */\n source: string;\n filename?: string;\n width?: number;\n height?: number;\n quality?: number;\n format?: 'avif' | 'webp' | 'jpeg' | 'png';\n fit?: 'contain' | 'cover' | 'fill' | 'inside' | 'outside';\n variant?: string;\n}\n\n/** Creates the stable, framework-neutral managed image URL served on an application hostname. */\nexport const createManagedImageUrl = (options: ManagedImageUrlOptions): string => {\n const inferredFilename = options.source.split('/').filter(Boolean).at(-1)?.split('?')[0] || 'image.image';\n const filename = (options.filename ?? inferredFilename).replace(/[^A-Za-z0-9._-]/g, '_') || 'image.image';\n const url = new URL(\n `/_gigadrive/image/${encodeURIComponent(options.source)}/${encodeURIComponent(filename)}`,\n options.origin\n );\n for (const [name, value] of Object.entries({\n width: options.width,\n height: options.height,\n quality: options.quality,\n format: options.format,\n fit: options.fit,\n variant: options.variant,\n })) {\n if (value !== undefined) url.searchParams.set(name, String(value));\n }\n return url.toString();\n};\n\n/** Managed image optimization cache inspection and source/deployment purge operations. */\nexport class ImageOptimizationResource extends BaseResource {\n /** Create a managed image URL without making an API request. */\n url(options: ManagedImageUrlOptions): string {\n return createManagedImageUrl(options);\n }\n\n /** Inspect the immutable deployment policy and Bunny cache tags used for a source. */\n inspect(deploymentId: string, source?: string): Promise<ImageCacheInspection> {\n return this.httpClient.get(`/deployments/${deploymentId}/image-cache`, {\n query: { source },\n });\n }\n\n /** Purge all variants for one source, or every optimized image in the deployment when omitted. */\n purge(deploymentId: string, source?: string): Promise<ImageCachePurgeResult> {\n return this.httpClient.delete(`/deployments/${deploymentId}/image-cache`, {\n query: { source },\n });\n }\n}\n","import type { HttpClient, Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** One bucket of an AI Gateway usage breakdown (by model, provider, or user). */\nexport interface AiGatewayUsageBreakdown {\n /** Bucket label (a model, provider, or user identifier). */\n label: string;\n /** Number of requests in this bucket. */\n requests: number;\n /** Total tokens in this bucket. */\n tokens: number;\n /** Input tokens in this bucket. */\n inputTokens: number;\n /** Output tokens in this bucket. */\n outputTokens: number;\n /** Billable cost in micros of USD for this bucket. */\n costMicros: number;\n}\n\n/** Aggregated AI Gateway usage over a time range, with breakdowns. */\nexport interface AiGatewayUsageSummary {\n summary: {\n requestCount: number;\n successCount: number;\n errorCount: number;\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n billableCostMicros: number;\n avgLatencyMs: number;\n };\n byModel: AiGatewayUsageBreakdown[];\n byProvider: AiGatewayUsageBreakdown[];\n byUser: AiGatewayUsageBreakdown[];\n}\n\n/** One provider attempt recorded while routing an AI Gateway request. */\nexport interface AiGatewayProviderAttempt {\n provider: string;\n error?: string;\n statusCode?: number;\n tag?: string;\n}\n\n/** A single AI Gateway request event with full telemetry. */\nexport interface AiGatewayRequestEvent {\n id: string;\n requestId: string;\n traceId: string | null;\n billingSubjectType: 'organization' | 'application';\n organizationId: string;\n applicationId: string | null;\n actorId: string | null;\n actorType: string;\n apiKeyId: string | null;\n authenticatedUserId: string | null;\n callerEndUserId: string | null;\n modelRequested: string;\n modelServed: string | null;\n provider: string | null;\n providerAttempts: AiGatewayProviderAttempt[] | null;\n status: 'pending' | 'success' | 'error' | 'cancelled';\n errorCode: string | null;\n errorType: string | null;\n inputTokens: number;\n outputTokens: number;\n cachedInputTokens: number;\n totalTokens: number;\n usageSource: 'provider' | 'estimated' | 'none';\n providerCostMicros: number;\n billableCostMicros: number;\n streaming: boolean;\n latencyMs: number | null;\n metadata: Record<string, string> | null;\n startedAt: string;\n completedAt: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\n/** An AI Gateway spend/usage budget. */\nexport interface AiGatewayBudget {\n id: string;\n organizationId: string;\n /** Application-specific target, or `null` for organization-wide. */\n applicationId: string | null;\n /** User-specific target, or `null` for all users. */\n userId: string | null;\n period: 'day' | 'month';\n maxCostMicros: number | null;\n maxRequests: number | null;\n maxTokens: number | null;\n maxRequestCostMicros: number | null;\n enabled: boolean;\n createdAt: string;\n updatedAt: string;\n}\n\n/** Input for one budget when replacing the budget set. */\nexport interface AiGatewayBudgetInput {\n applicationId?: string;\n userId?: string;\n period?: 'day' | 'month';\n maxCostMicros?: number | null;\n maxRequests?: number | null;\n maxTokens?: number | null;\n maxRequestCostMicros?: number | null;\n enabled?: boolean;\n}\n\n/** An AI Gateway governance policy. */\nexport interface AiGatewayPolicy {\n id: string;\n organizationId: string;\n /** Application-specific target, or `null` for organization-wide. */\n applicationId: string | null;\n /** Allowed model IDs, or `null` to allow all. */\n allowedModels: string[] | null;\n /** Allowed provider IDs, or `null` to allow all. */\n allowedProviders: string[] | null;\n requireZdr: boolean;\n allowFallbacks: boolean;\n maxOutputTokens: number | null;\n createdAt: string;\n updatedAt: string;\n}\n\n/** Input for creating or updating an AI Gateway policy. */\nexport interface AiGatewayPolicyInput {\n applicationId?: string;\n allowedModels?: string[] | null;\n allowedProviders?: string[] | null;\n requireZdr?: boolean;\n allowFallbacks?: boolean;\n maxOutputTokens?: number | null;\n}\n\n/** Query for usage summary. */\nexport interface AiGatewayUsageQuery {\n /** Only include usage at or after this ISO 8601 timestamp. */\n from?: string;\n /** Only include usage before or at this ISO 8601 timestamp. */\n to?: string;\n /** Restrict to one application. */\n applicationId?: string;\n}\n\n/** Query for the request-event log and CSV export. */\nexport interface AiGatewayRequestsQuery extends AiGatewayUsageQuery {\n model?: string;\n provider?: string;\n status?: 'pending' | 'success' | 'error' | 'cancelled';\n requestId?: string;\n authenticatedUserId?: string;\n callerEndUserId?: string;\n limit?: number;\n cursor?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Sub-resources\n// ---------------------------------------------------------------------------\n\n/** AI Gateway usage analytics for an organization. */\nexport class AiGatewayUsageResource extends BaseResource {\n /** Get an aggregated usage summary with breakdowns by model, provider, and user. */\n async summary(organizationId: string, query?: AiGatewayUsageQuery): Promise<AiGatewayUsageSummary> {\n return this.httpClient.get(`/organizations/${organizationId}/ai-gateway/usage/summary`, {\n query: query as Record<string, string | undefined> | undefined,\n });\n }\n\n /** List request-level usage events. */\n async requests(organizationId: string, query?: AiGatewayRequestsQuery): Promise<Paginated<AiGatewayRequestEvent>> {\n return this.httpClient.get(`/organizations/${organizationId}/ai-gateway/usage/requests`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /** Export request-level usage events as CSV text. */\n async export(organizationId: string, query?: AiGatewayRequestsQuery): Promise<string> {\n const response = await this.httpClient.requestStream(\n 'GET',\n `/organizations/${organizationId}/ai-gateway/usage/export`,\n { query: query as Record<string, string | number | undefined> | undefined }\n );\n return response.text();\n }\n}\n\n/** AI Gateway budgets for an organization. */\nexport class AiGatewayBudgetsResource extends BaseResource {\n /** List all budgets for an organization. */\n async list(organizationId: string): Promise<{ items: AiGatewayBudget[] }> {\n return this.httpClient.get(`/organizations/${organizationId}/ai-gateway/budgets`);\n }\n\n /**\n * Replace the organization's entire budget set. Pass an empty array to clear\n * all budgets.\n */\n async replace(organizationId: string, budgets: AiGatewayBudgetInput[]): Promise<{ items: AiGatewayBudget[] }> {\n return this.httpClient.put(`/organizations/${organizationId}/ai-gateway/budgets`, { budgets });\n }\n}\n\n/** AI Gateway governance policies for an organization. */\nexport class AiGatewayPoliciesResource extends BaseResource {\n /**\n * Get the governance policy for an organization, or for a specific\n * application when `applicationId` is provided. Returns `null` if no policy is set.\n */\n async get(organizationId: string, options?: { applicationId?: string }): Promise<AiGatewayPolicy | null> {\n const { policy } = await this.httpClient.get<{ policy: AiGatewayPolicy | null }>(\n `/organizations/${organizationId}/ai-gateway/policies`,\n { query: { applicationId: options?.applicationId } }\n );\n return policy;\n }\n\n /** Create or update an AI Gateway policy. */\n async put(organizationId: string, data: AiGatewayPolicyInput): Promise<AiGatewayPolicy> {\n const { policy } = await this.httpClient.put<{ policy: AiGatewayPolicy }>(\n `/organizations/${organizationId}/ai-gateway/policies`,\n data\n );\n return policy;\n }\n}\n\n/**\n * Organization-scoped AI Gateway governance: usage analytics, budgets, and\n * model/provider policies. Accessed via `client.organizations.aiGateway`.\n */\nexport class OrganizationAiGatewayResource {\n /** Usage analytics (summary, request log, CSV export). */\n readonly usage: AiGatewayUsageResource;\n /** Spend/usage budgets. */\n readonly budgets: AiGatewayBudgetsResource;\n /** Model/provider governance policies. */\n readonly policies: AiGatewayPoliciesResource;\n\n constructor(httpClient: HttpClient) {\n this.usage = new AiGatewayUsageResource(httpClient);\n this.budgets = new AiGatewayBudgetsResource(httpClient);\n this.policies = new AiGatewayPoliciesResource(httpClient);\n }\n}\n","import type { ListQuery, Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\nimport type { CreateEnvVarInput, EnvVar, UpdateEnvVarInput } from './env-vars';\n\n/**\n * Manage environment variables scoped to an organization.\n * Accessed via `client.organizations.envVars`.\n */\nexport class OrganizationEnvVarsResource extends BaseResource {\n /**\n * List all environment variables for an organization.\n *\n * @param organizationId - The organization ID (UUID).\n * @returns A paginated list of environment variables.\n *\n * @example\n * ```ts\n * const { items } = await client.organizations.envVars.list('org-id');\n * for (const v of items) {\n * console.log(`${v.key}=${v.sensitive ? '***' : v.value}`);\n * }\n * ```\n */\n async list(organizationId: string, query?: ListQuery): Promise<Paginated<EnvVar>> {\n return this.httpClient.get(`/organizations/${organizationId}/env-vars`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * Create a new environment variable for an organization.\n *\n * @param organizationId - The organization ID (UUID).\n * @param data - The variable key, value, and optional settings.\n * @returns The newly created environment variable.\n *\n * @example\n * ```ts\n * const envVar = await client.organizations.envVars.create('org-id', {\n * key: 'STRIPE_SECRET',\n * value: 'sk_live_...',\n * sensitive: true,\n * });\n * ```\n */\n async create(organizationId: string, data: CreateEnvVarInput): Promise<EnvVar> {\n return this.httpClient.post(`/organizations/${organizationId}/env-vars`, data);\n }\n\n /**\n * Update an existing environment variable. Only the fields you provide\n * will be changed; omitted fields are left unchanged.\n *\n * @param organizationId - The organization ID (UUID).\n * @param envVarId - The environment variable ID (UUID).\n * @param data - The fields to update.\n * @returns The updated environment variable.\n *\n * @example\n * ```ts\n * await client.organizations.envVars.update('org-id', 'var-id', {\n * value: 'new-value',\n * });\n * ```\n */\n async update(organizationId: string, envVarId: string, data: UpdateEnvVarInput): Promise<EnvVar> {\n return this.httpClient.patch(`/organizations/${organizationId}/env-vars/${envVarId}`, data);\n }\n\n /**\n * Permanently delete an environment variable.\n *\n * @param organizationId - The organization ID (UUID).\n * @param envVarId - The environment variable ID (UUID).\n *\n * @example\n * ```ts\n * await client.organizations.envVars.delete('org-id', 'var-id');\n * ```\n */\n async delete(organizationId: string, envVarId: string): Promise<void> {\n return this.httpClient.delete(`/organizations/${organizationId}/env-vars/${envVarId}`);\n }\n}\n","import type { ListQuery, Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\n\n/** Organization membership role used for administration privileges. */\nexport type OrganizationMembershipRole = 'OWNER' | 'ADMIN' | 'MEMBER';\n\n/** A user membership in a Gigadrive organization. */\nexport interface OrganizationMember {\n /** Unique membership identifier (UUID). */\n membershipId: string;\n /** Organization that owns this membership. */\n organizationId: string;\n /** User who belongs to the organization. */\n userId: string;\n /** Email address of the organization member. */\n email: string;\n /** Given name of the organization member, or null when unset. */\n givenName: string | null;\n /** Family name of the organization member, or null when unset. */\n familyName: string | null;\n /** Avatar URL for the organization member, or null when unset. */\n imageUrl: string | null;\n /** Organization membership role. */\n role: OrganizationMembershipRole;\n /** ISO 8601 timestamp when the user joined the organization. */\n joinedAt: string;\n}\n\n/**\n * List organization members. Accessed via {@link OrganizationsResource.members}.\n *\n * @example\n * ```ts\n * const { items } = await client.organizations.members.list('org-id');\n * console.log(items.map((m) => `${m.email} (${m.role})`));\n * ```\n */\nexport class OrganizationMembersResource extends BaseResource {\n /**\n * List the users who belong to an organization.\n *\n * @param organizationId - Organization whose members should be listed.\n * @param query - Optional pagination.\n * @returns A paginated list of organization members.\n *\n * @example\n * ```ts\n * const { items, total } = await client.organizations.members.list('org-id');\n * console.log(`Found ${total} members`);\n * ```\n */\n async list(organizationId: string, query?: ListQuery): Promise<Paginated<OrganizationMember>> {\n return this.httpClient.get(`/organizations/${organizationId}/members`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n}\n","import type { ListQuery, Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\n\n/** Product access mode from the code-defined product registry. */\nexport type ProductAccessMode = 'organization' | 'user';\n\n/** Fallback access policy when no explicit entitlement override exists. */\nexport type ProductDefaultAccessPolicy = 'granted' | 'explicit_entitlement_required';\n\n/** Lifecycle status of an explicit product entitlement override. */\nexport type ProductEntitlementStatus = 'ACTIVE' | 'SUSPENDED' | 'REVOKED';\n\n/** Lifecycle status of a local organization product subscription. */\nexport type ProductSubscriptionStatus = 'ACTIVE' | 'CANCELED';\n\n/** Whether effective access was resolved from an override or the registry default. */\nexport type ProductAccessResolutionSource = 'explicit' | 'default';\n\n/** A plan defined for a product in the product registry. */\nexport interface ProductPlan {\n /** Stable plan slug. */\n slug: string;\n /** Human-readable plan name. */\n displayName: string;\n /** Short description of the plan. */\n description: string;\n}\n\n/** Product metadata from the code-defined product registry. */\nexport interface ProductDefinition {\n /** Stable product slug (e.g. `network`, `office`). */\n slug: string;\n /** Human-readable product name. */\n displayName: string;\n /** Whether the product is granted to organizations or directly to users. */\n accessMode: ProductAccessMode;\n /** Fallback access policy when no explicit entitlement override exists. */\n defaultAccessPolicy: ProductDefaultAccessPolicy;\n /** Locally activatable plans for the product. */\n plans: ProductPlan[];\n}\n\n/** Explicit organization product entitlement override. */\nexport interface OrganizationProductEntitlement {\n /** Unique identifier (UUID). */\n id: string;\n /** Product slug this entitlement applies to. */\n product: string;\n /** Lifecycle status of the override. */\n status: ProductEntitlementStatus;\n /** User who last granted or updated the override, if known. */\n grantedByUserId: string | null;\n /** ISO 8601 timestamp when the entitlement was revoked, if revoked. */\n revokedAt: string | null;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/** Local organization product subscription / plan selection. */\nexport interface OrganizationProductSubscription {\n /** Unique identifier (UUID). */\n id: string;\n /** Product slug this subscription applies to. */\n product: string;\n /** Currently selected plan slug. */\n plan: string;\n /** Local subscription lifecycle status. */\n status: ProductSubscriptionStatus;\n /** User who activated the current plan, if known. */\n activatedByUserId: string | null;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/** Effective product access summary for an organization-scoped product. */\nexport interface OrganizationProductAccess {\n /** Product metadata from the registry. */\n product: ProductDefinition;\n /** Whether the organization currently has effective access. */\n hasAccess: boolean;\n /** Whether access was resolved from an explicit override or the default policy. */\n resolutionSource: ProductAccessResolutionSource;\n /** Explicit entitlement override when one exists. */\n explicitEntitlement: OrganizationProductEntitlement | null;\n /** Local product subscription when one exists. */\n subscription: OrganizationProductSubscription | null;\n}\n\n/** Compact yes/no entitlement check for an organization product. */\nexport interface OrganizationProductEntitlementCheck {\n /** Organization that was checked. */\n organizationId: string;\n /** Product slug that was checked. */\n product: string;\n /** Whether the organization currently has effective access. */\n hasAccess: boolean;\n}\n\n/**\n * Inspect organization product access / entitlements.\n *\n * Accessed via {@link OrganizationsResource.products}.\n *\n * Subscriptions are read-only through the public API — plan changes happen in\n * Gigadrive product surfaces, not via the SDK.\n *\n * @example\n * ```ts\n * const { items } = await client.organizations.products.list('org-id');\n * const check = await client.organizations.products.checkEntitlement('org-id', 'office');\n * console.log(check.hasAccess);\n * ```\n */\nexport class OrganizationProductsResource extends BaseResource {\n /**\n * List effective product access for every organization-scoped product.\n *\n * @param organizationId - Organization whose product access should be listed.\n * @param query - Optional pagination.\n * @returns A paginated list of product access summaries.\n *\n * @example\n * ```ts\n * const { items } = await client.organizations.products.list('org-id');\n * for (const item of items) {\n * console.log(item.product.slug, item.hasAccess);\n * }\n * ```\n */\n async list(organizationId: string, query?: ListQuery): Promise<Paginated<OrganizationProductAccess>> {\n return this.httpClient.get(`/organizations/${organizationId}/products`, {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * Get effective access for one organization-scoped product.\n *\n * @param organizationId - Organization to inspect.\n * @param product - Product slug from the product registry.\n * @returns Product access summary including entitlement and subscription state.\n *\n * @example\n * ```ts\n * const access = await client.organizations.products.get('org-id', 'office');\n * console.log(access.hasAccess, access.subscription?.plan);\n * ```\n */\n async get(organizationId: string, product: string): Promise<OrganizationProductAccess> {\n return this.httpClient.get(`/organizations/${organizationId}/products/${product}`);\n }\n\n /**\n * Check whether an organization currently has access to a product.\n *\n * @param organizationId - Organization to check.\n * @param product - Product slug from the product registry.\n * @returns Compact entitlement check result.\n *\n * @example\n * ```ts\n * const { hasAccess } = await client.organizations.products.checkEntitlement('org-id', 'network');\n * ```\n */\n async checkEntitlement(organizationId: string, product: string): Promise<OrganizationProductEntitlementCheck> {\n return this.httpClient.get(`/organizations/${organizationId}/products/${product}/entitlement`);\n }\n}\n","import type { ListQuery, Paginated } from '../http-client';\nimport { BaseResource } from './base-resource';\nimport { OrganizationAiGatewayResource } from './organization-ai-gateway';\nimport { OrganizationEnvVarsResource } from './organization-env-vars';\nimport { OrganizationMembersResource } from './organization-members';\nimport { OrganizationProductsResource } from './organization-products';\n\n/** A Gigadrive Network organization. */\nexport interface Organization {\n /** Unique identifier (UUID). */\n id: string;\n /** Display name of the organization. */\n name: string;\n /** URL-safe slug (e.g. `gigadrive`). */\n slug: string;\n /** Avatar / logo URL. */\n imageUrl: string;\n /** ISO 8601 creation timestamp. */\n createdAt: string;\n /** ISO 8601 last-updated timestamp. */\n updatedAt: string;\n}\n\n/** Input for creating an organization. */\nexport interface CreateOrganizationInput {\n /** Display name for the new organization. */\n name: string;\n /** Optional URL-safe slug. Generated from the name when omitted. */\n slug?: string;\n}\n\n/**\n * Manage organizations. Accessed via {@link GigadriveClient.organizations}.\n *\n * @example\n * ```ts\n * const { items: orgs } = await client.organizations.list();\n * console.log(orgs.map((o) => o.name));\n * ```\n */\nexport class OrganizationsResource extends BaseResource {\n /**\n * Manage environment variables scoped to an organization.\n *\n * @example\n * ```ts\n * // List all env vars for an organization\n * const { items } = await client.organizations.envVars.list('org-id');\n *\n * // Create a new env var\n * await client.organizations.envVars.create('org-id', {\n * key: 'ANALYTICS_KEY',\n * value: 'ak_live_...',\n * sensitive: true,\n * });\n * ```\n */\n readonly envVars: OrganizationEnvVarsResource;\n\n /**\n * AI Gateway governance for an organization: usage analytics, budgets, and\n * model/provider policies.\n *\n * @example\n * ```ts\n * const usage = await client.organizations.aiGateway.usage.summary('org-id', { from: '2026-06-01' });\n * console.log(usage.summary.totalTokens);\n * ```\n */\n readonly aiGateway: OrganizationAiGatewayResource;\n\n /**\n * List organization members and membership roles.\n *\n * @example\n * ```ts\n * const { items } = await client.organizations.members.list('org-id');\n * ```\n */\n readonly members: OrganizationMembersResource;\n\n /**\n * Inspect organization product entitlements. Read-only through the public\n * API — plan changes happen in Gigadrive product surfaces, not via the SDK.\n *\n * @example\n * ```ts\n * const check = await client.organizations.products.checkEntitlement('org-id', 'office');\n * ```\n */\n readonly products: OrganizationProductsResource;\n\n constructor(...args: ConstructorParameters<typeof BaseResource>) {\n super(...args);\n this.envVars = new OrganizationEnvVarsResource(this.httpClient);\n this.aiGateway = new OrganizationAiGatewayResource(this.httpClient);\n this.members = new OrganizationMembersResource(this.httpClient);\n this.products = new OrganizationProductsResource(this.httpClient);\n }\n\n /**\n * List organizations the authenticated actor has access to.\n *\n * @param query - Optional pagination.\n * @returns A paginated list of organizations.\n *\n * @example\n * ```ts\n * const { items, total } = await client.organizations.list();\n * console.log(`Found ${total} organizations`);\n * ```\n */\n async list(query?: ListQuery): Promise<Paginated<Organization>> {\n return this.httpClient.get('/organizations', {\n query: query as Record<string, string | number | undefined> | undefined,\n });\n }\n\n /**\n * Get a single organization by ID.\n *\n * @param organizationId - Organization to retrieve.\n * @returns The organization.\n *\n * @example\n * ```ts\n * const org = await client.organizations.get('org-id');\n * console.log(org.name, org.slug);\n * ```\n */\n async get(organizationId: string): Promise<Organization> {\n return this.httpClient.get(`/organizations/${organizationId}`);\n }\n\n /**\n * Create a new organization.\n *\n * Requires a user-backed token with the `platform:organizations:write` scope.\n * The authenticated user becomes the organization owner.\n *\n * @param input - Organization creation input.\n * @returns The created organization.\n *\n * @example\n * ```ts\n * const org = await client.organizations.create({ name: 'Acme Corp' });\n * console.log(org.id, org.slug);\n * ```\n */\n async create(input: CreateOrganizationInput): Promise<Organization> {\n return this.httpClient.post('/organizations', input);\n }\n}\n","import { BaseResource } from './base-resource';\n\n/** Input for minting a routing-only sticky session URL. */\nexport interface CreateStickySessionUrlInput {\n /** Opaque application key shared by callers that must reach the same instance. */\n key: string;\n /** Relative deployment route, including any application query parameters. */\n endpoint: string;\n /** HTTP method used to resolve the target route. Defaults to `GET`. */\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'HEAD' | 'OPTIONS' | 'PATCH';\n /** URL lifetime in seconds. Defaults to four hours; accepted range is 60–86,400. */\n expiresInSeconds?: number;\n}\n\n/** A signed sticky URL and its absolute ISO 8601 expiration time. */\nexport interface CreateStickySessionUrlResult {\n url: string;\n expiresAt: string;\n}\n\n/**\n * Creates protocol-independent sticky routing URLs for MicroVM functions.\n *\n * The URL selects an instance but does not authenticate an application user or\n * store application state. Reusing the same key and unexpired URL keeps HTTP,\n * streaming, and WebSocket traffic on the same function instance.\n */\nexport class StickySessionsResource extends BaseResource {\n /**\n * Mints a signed URL for an opaque application key.\n *\n * Deployed Gigadrive workloads can call this with a zero-config\n * `GigadriveClient`; the platform injects `GIGADRIVE_CLIENT_ID` and\n * `GIGADRIVE_CLIENT_SECRET` using the SDK's existing credential chain.\n */\n async createUrl(input: CreateStickySessionUrlInput): Promise<CreateStickySessionUrlResult> {\n return this.httpClient.post('/sticky-sessions/urls', {\n ...input,\n method: input.method ?? 'GET',\n });\n }\n}\n","import { readEnv, resolveCredentialProvider } from './auth/credential-provider';\nimport { TokenManager } from './auth/token-manager';\nimport { HttpClient } from './http-client';\nimport { AiGatewayResource } from './resources/ai-gateway';\nimport { ApiKeysResource } from './resources/api-keys';\nimport { ApplicationsResource } from './resources/applications';\nimport { DeploymentsResource } from './resources/deployments';\nimport { ImageOptimizationResource } from './resources/image-optimization';\nimport { OrganizationsResource } from './resources/organizations';\nimport { StickySessionsResource } from './resources/sticky-sessions';\n\nconst DEFAULT_BASE_URL = 'https://api.gigadrive.network';\n\n/**\n * Configuration for the {@link GigadriveClient}.\n *\n * Credentials are resolved in priority order: explicit config fields first,\n * then environment variables. See {@link GigadriveClient} for the full\n * resolution chain.\n */\nexport interface GigadriveClientConfig {\n /**\n * OAuth2 client ID (the API key ID from the Gigadrive dashboard).\n * Used for both client-credentials and refresh-token flows.\n * Falls back to the `GIGADRIVE_CLIENT_ID` environment variable.\n */\n clientId?: string;\n\n /**\n * OAuth2 client secret (the API key secret from the Gigadrive dashboard).\n * Used together with {@link clientId} for the client-credentials grant.\n * Falls back to the `GIGADRIVE_CLIENT_SECRET` environment variable.\n */\n clientSecret?: string;\n\n /**\n * A pre-obtained bearer token (either an IDP or Network token).\n * When set, the SDK sends this token directly without any OAuth exchange.\n * The token is never refreshed — if it expires, requests will fail.\n * Falls back to the `GIGADRIVE_BEARER_TOKEN` environment variable.\n */\n bearerToken?: string;\n\n /**\n * An IDP refresh token for automatic access-token renewal. Used together\n * with {@link clientId}. The SDK will exchange this for short-lived access\n * tokens and handle refresh-token rotation automatically.\n * Falls back to the `GIGADRIVE_REFRESH_TOKEN` environment variable.\n */\n refreshToken?: string;\n\n /**\n * The IDP issuer URL used for OIDC discovery (fetching the\n * `.well-known/openid-configuration`). Only needed for refresh-token and\n * authorization-code flows.\n * Falls back to `GIGADRIVE_IDP_ISSUER_URL`, default: `https://idp.gigadrive.de`.\n */\n idpIssuerUrl?: string;\n\n /**\n * Callback for the OAuth2 authorization code flow with PKCE. The SDK\n * builds the authorization URL and passes it to this callback. Your code\n * must present the URL to the user (e.g. open a browser), then return\n * either the full redirect URL or just the authorization code.\n *\n * Requires {@link clientId} to be set.\n *\n * @param url - The authorization URL the user should visit.\n * @returns The full redirect URL (including `?code=...&state=...`) or the\n * bare authorization code.\n *\n * @example\n * ```ts\n * const client = new GigadriveClient({\n * clientId: 'my-app',\n * onAuthorizationUrl: async (url) => {\n * console.log('Visit:', url);\n * return await readline.question('Paste the redirect URL: ');\n * },\n * });\n * ```\n */\n onAuthorizationUrl?: (url: string) => Promise<string>;\n\n /**\n * Redirect URI for the authorization code flow.\n * Default: `urn:ietf:wg:oauth:2.0:oob` (out-of-band / manual copy-paste).\n */\n redirectUri?: string;\n\n /**\n * OAuth scopes to request during the authorization-code flow, in addition to\n * the default identity scopes (`openid profile email offline_access`). Use\n * this to request API capability scopes (e.g. `network:applications:read`) so\n * the resulting token can call the corresponding endpoints.\n */\n scopes?: string[];\n\n /**\n * Base URL of the Gigadrive Network API.\n * Falls back to `GIGADRIVE_API_BASE_URL`, default: `https://api.gigadrive.network`.\n */\n baseUrl?: string;\n\n /**\n * Custom `fetch` implementation. Useful for testing (injectable mock) or\n * non-standard runtimes like Cloudflare Workers that provide their own\n * `fetch`. Defaults to `globalThis.fetch`.\n */\n fetch?: typeof globalThis.fetch;\n}\n\n/**\n * The main entry point for the Gigadrive Network SDK.\n *\n * Create an instance to interact with organizations, applications, deployments,\n * storage, and the AI gateway. Authentication is handled automatically —\n * tokens are obtained, cached, and refreshed behind the scenes.\n *\n * ## Credential resolution order\n *\n * The client resolves credentials in the following order, using the first\n * match it finds:\n *\n * 1. Explicit `bearerToken` in config\n * 2. Explicit `clientId` + `clientSecret` in config\n * 3. Explicit `clientId` + `refreshToken` in config\n * 4. Explicit `clientId` + `onAuthorizationUrl` callback in config\n * 5. `GIGADRIVE_BEARER_TOKEN` environment variable\n * 6. `GIGADRIVE_CLIENT_ID` + `GIGADRIVE_CLIENT_SECRET` environment variables\n * 7. `GIGADRIVE_CLIENT_ID` + `GIGADRIVE_REFRESH_TOKEN` environment variables\n *\n * If no credentials are found, the constructor throws an\n * {@link AuthenticationError}.\n *\n * @example\n * ```ts\n * // Credentials auto-detected from environment variables\n * const client = new GigadriveClient();\n *\n * // Explicit API key (client credentials)\n * const client = new GigadriveClient({\n * clientId: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',\n * clientSecret: 'sk_live_...',\n * });\n *\n * // Pre-obtained bearer token\n * const client = new GigadriveClient({ bearerToken: 'eyJ...' });\n *\n * // IDP refresh token — access tokens are renewed automatically\n * const client = new GigadriveClient({\n * clientId: 'my-app',\n * refreshToken: 'rt_...',\n * });\n *\n * // Use the client\n * const orgs = await client.organizations.list();\n * const deployment = await client.deployments.create({ applicationId: 'app-1' });\n * ```\n *\n * @throws {@link AuthenticationError} if no valid credentials are found.\n */\nexport class GigadriveClient {\n /** Organization management (list, environment variables). */\n readonly organizations: OrganizationsResource;\n /** Application management (list, environment variables, storage). */\n readonly applications: ApplicationsResource;\n /** Deployment lifecycle (create, upload, status, logs). */\n readonly deployments: DeploymentsResource;\n /** AI Gateway — OpenAI-compatible chat completions and model listing. */\n readonly aiGateway: AiGatewayResource;\n /** Application-scoped API key management (create, list, revoke). */\n readonly apiKeys: ApiKeysResource;\n /** Signed URLs that keep related requests on one MicroVM instance. */\n readonly stickySessions: StickySessionsResource;\n /** Managed image optimization inspection and cache purge operations. */\n readonly imageOptimization: ImageOptimizationResource;\n\n constructor(config: GigadriveClientConfig = {}) {\n const baseUrl = config.baseUrl ?? readEnv('GIGADRIVE_API_BASE_URL') ?? DEFAULT_BASE_URL;\n // Bind the default fetch to globalThis so it can be invoked as a method on\n // the HTTP client without throwing \"Illegal invocation\" in some runtimes.\n const fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis);\n\n const credentialProvider = resolveCredentialProvider({ ...config, baseUrl, fetch: fetchFn });\n const tokenManager = new TokenManager(credentialProvider);\n const httpClient = new HttpClient(baseUrl, tokenManager, fetchFn);\n\n this.organizations = new OrganizationsResource(httpClient);\n this.applications = new ApplicationsResource(httpClient);\n this.deployments = new DeploymentsResource(httpClient);\n this.aiGateway = new AiGatewayResource(httpClient);\n this.apiKeys = new ApiKeysResource(httpClient);\n this.stickySessions = new StickySessionsResource(httpClient);\n this.imageOptimization = new ImageOptimizationResource(httpClient);\n }\n}\n","import type { Paginated } from './http-client';\n\n/**\n * Lazily iterate every item across all pages of a cursor-paginated endpoint.\n * Pass a function that fetches one page for a given cursor; iteration stops when\n * the API stops returning a `nextCursor`.\n *\n * @typeParam T - The item type.\n * @param fetchPage - Fetches a single page for the given cursor (`undefined` for the first page).\n *\n * @example\n * ```ts\n * for await (const object of paginate((cursor) =>\n * client.applications.storage.objects.list('app-id', 'bucket-id', { cursor }),\n * )) {\n * console.log(object.key);\n * }\n * ```\n */\nexport async function* paginate<T>(\n fetchPage: (cursor: string | undefined) => Promise<Paginated<T>>\n): AsyncGenerator<T> {\n let cursor: string | undefined;\n do {\n const page = await fetchPage(cursor);\n for (const item of page.items) {\n yield item;\n }\n cursor = page.nextCursor;\n } while (cursor);\n}\n"],"mappings":"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","names":["decode","encode","resolve","path","parse","isStream","result","throttle","props","require_lodash","Symbol","require_lodash","Map","string","require_lodash","Symbol","Uint8Array","Map","Promise","path","othValue","require_lodash","require_lodash","require_lodash","Map","require_lodash","fs","path","err","err2","er","er2","fs","ReadStream","path","self","fs","queue","createReadStream","path","options","cb","data","src","dest","flags","go$readdir","ReadStream","mode","self","original","require_retry","process","unload","emit","load","processReallyExit","processEmit","fs","stat","err","path","fs","err","mtimePrecision","stat","lock","isOverThreshold","file","fs","resolve","lockfile","lock","path","path","fs","resolve","fs","o","self","_wrapNativeSuper","Class","t","_isNativeReflectConstruct","_setPrototypeOf","p","_getPrototypeOf","DetailedError","_typeof","o","_classCallCheck","_defineProperties","_toPropertyKey","_createClass","_toPrimitive","NoopUrlStorage","_regeneratorRuntime","t","e","r","define","n","i","a","c","o","u","h","_typeof","p","resolve","self","F","_toPropertyKey","_classCallCheck","_defineProperties","_createClass","_toPrimitive","BaseUpload","fingerprint","delay","URL","import_fs","_typeof","o","_classCallCheck","_defineProperties","_toPropertyKey","_createClass","_toPrimitive","BufferSource","_typeof","o","_regeneratorRuntime","t","e","r","define","n","i","a","c","u","h","p","_classCallCheck","_defineProperties","_toPropertyKey","_createClass","_toPrimitive","asyncGeneratorStep","resolve","_asyncToGenerator","self","path","fsPromises","FileSource","_typeof","o","_regeneratorRuntime","t","e","r","define","n","i","a","c","u","h","p","_classCallCheck","_defineProperties","_toPropertyKey","_createClass","_toPrimitive","asyncGeneratorStep","resolve","_asyncToGenerator","self","onError","onReadable","StreamSource","_typeof","o","_classCallCheck","_defineProperties","_toPropertyKey","_createClass","_toPrimitive","FileReader","isStream","resolve","ret","_callSuper","_getPrototypeOf","_possibleConstructorReturn","_isNativeReflectConstruct","self","_typeof","_assertThisInitialized","t","o","_inherits","_setPrototypeOf","p","ownKeys","r","_objectSpread","_defineProperty","_toPropertyKey","_classCallCheck","_defineProperties","_createClass","_toPrimitive","NodeHttpStack","Request","_classCallCheck","_createClass","resolve","_objectSpread","Response","ProgressEmitter","_callSuper","throttle","_inherits","writeBufferToStreamWithProgress","_typeof","o","_classCallCheck","_defineProperties","_toPropertyKey","_createClass","_callSuper","_getPrototypeOf","_possibleConstructorReturn","_isNativeReflectConstruct","self","_assertThisInitialized","t","_inherits","_setPrototypeOf","p","ownKeys","r","_objectSpread","_defineProperty","_toPrimitive","defaultOptions","Upload","resolve","resolve","DEFAULT_BASE_URL"]}