@bonginkan/maria 4.3.44 → 4.3.45

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/services/intelligent-model-selector/SecretManagerIntegration.ts","../node_modules/.pnpm/data-uri-to-buffer@4.0.1/node_modules/data-uri-to-buffer/src/index.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/utils.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/helpers/miscellaneous.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/helpers/webidl.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/simple-queue.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/abstract-ops/internal-methods.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/generic-reader.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/stub/number-isfinite.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/stub/math-trunc.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/basic.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/readable-stream.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/default-reader.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/target/es2018/stub/async-iterator-prototype.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/async-iterator.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/stub/number-isnan.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/abstract-ops/ecmascript.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/abstract-ops/miscellaneous.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/abstract-ops/queue-with-sizes.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/helpers/array-buffer-view.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/byte-stream-controller.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/reader-options.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/byob-reader.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/abstract-ops/queuing-strategy.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/queuing-strategy.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/underlying-sink.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/writable-stream.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/abort-signal.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/writable-stream.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/globals.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/stub/dom-exception.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/pipe.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/default-controller.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/tee.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/readable-stream-like.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/from.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/underlying-source.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/iterator-options.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/pipe-options.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/readable-writable-pair.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/queuing-strategy-init.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/byte-length-queuing-strategy.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/count-queuing-strategy.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/transformer.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/transform-stream.ts","../node_modules/.pnpm/fetch-blob@3.2.0/node_modules/fetch-blob/streams.cjs","../node_modules/.pnpm/fetch-blob@3.2.0/node_modules/fetch-blob/index.js","../node_modules/.pnpm/fetch-blob@3.2.0/node_modules/fetch-blob/file.js","../node_modules/.pnpm/formdata-polyfill@4.0.10/node_modules/formdata-polyfill/esm.min.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/errors/base.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/errors/fetch-error.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/utils/is.js","../node_modules/.pnpm/node-domexception@1.0.0/node_modules/node-domexception/index.js","../node_modules/.pnpm/fetch-blob@3.2.0/node_modules/fetch-blob/from.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/utils/multipart-parser.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/body.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/headers.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/utils/is-redirect.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/response.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/utils/get-search.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/utils/referrer.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/request.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/errors/abort-error.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/index.js","../src/services/media-orchestrator/image-post.ts","../src/middleware/rate-limit.ts","../src/services/media-orchestrator/types.ts","../src/services/media-orchestrator/Storage.ts","../src/providers/google/gemini-media.ts","../src/services/intelligent-model-selector/IMSFacade.ts","../src/providers/ai-provider.ts","../src/providers/google-ai-provider.ts","../src/providers/openai-provider.ts","../src/providers/anthropic-provider.ts","../src/providers/base-provider.ts","../src/providers/groq-provider.ts","../src/services/intelligent-model-selector/IMSProviderAdapter.ts","../src/services/subscription/subscription-store.ts","../src/services/subscription/stripe-webhook-service.ts","../src/server/express-server.ts"],"names":["SecretManagerServiceClient","e","r","i","noop","x","_a","resolve","F","queueMicrotask","isAbortSignal","streamBrandCheckException","defaultControllerBrandCheckException","DOMException","ReadableStream","POOL_SIZE","process","Blob","clone","size","File","f","FormData","m","port","fs","path","statSync","stat","basename","createReadStream","Body","clear","Buffer","Stream","promisify","types","toFormData","deprecate","PassThrough","http","INTERNALS","response","isIP","formatUrl","fetch","https","s","pump","zlib","getAuth","h","crypto","fsp","modelName","GoogleGenerativeAI","OpenAI","Anthropic","EventEmitter","createHmac","timingSafeEqual","express","helmet","cors","compression","compressionFilter","lower","SecretManagerIntegration","hasFtyp","isWebm","duration","header","headerStr","deadline","res","sanitizeKey","model","content","consumption"],"mappings":"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","file":"server-express.cjs","sourcesContent":["/**\n * Secret Manager Integration for IMS\n * Securely retrieves API keys from Google Secret Manager\n */\n\nimport { SecretManagerServiceClient } from '@google-cloud/secret-manager';\n\nexport interface SecretConfig {\n projectId: string;\n secrets: {\n googleAI?: string;\n openAI?: string;\n anthropic?: string;\n groq?: string;\n // Optional configuration (non-key) items\n defaultModel?: string;\n defaultProvider?: string;\n lmstudioApiBase?: string;\n ollamaApiUrl?: string;\n vllmApiUrl?: string;\n };\n}\n\nexport class SecretManagerIntegration {\n private client: SecretManagerServiceClient | null = null;\n private cache: Map<string, string> = new Map();\n private cacheExpiry: Map<string, number> = new Map();\n private readonly CACHE_TTL = 3600000; // 1 hour\n private readonly useGsm: boolean;\n private readonly MAX_RETRIES = 3;\n private readonly BASE_DELAY_MS = 200;\n \n constructor(private config: SecretConfig) {\n this.useGsm = this.shouldUseGsm();\n }\n\n /** Determine whether GSM should be used in this environment */\n private shouldUseGsm(): boolean {\n if (process.env.MARIA_DISABLE_GSM === 'true') return false;\n if (process.env.GOOGLE_APPLICATION_CREDENTIALS) return true;\n if (process.env.GOOGLE_CLOUD_PROJECT || process.env.GCLOUD_PROJECT) return true;\n if (process.env.CLOUD_RUN_SERVICE || process.env.K_SERVICE) return true;\n if (process.env.GCE_METADATA_HOST) return true;\n return false; // default: end-user machines don't require GSM\n }\n\n /** Lazily create Secret Manager client only when permitted */\n private ensureClient(): SecretManagerServiceClient | null {\n if (!this.useGsm) return null;\n if (this.client) return this.client;\n try {\n this.client = new SecretManagerServiceClient();\n } catch {\n this.client = null;\n }\n return this.client;\n }\n \n /**\n * Get API key from Secret Manager with caching\n */\n async getApiKey(provider: 'google' | 'openai' | 'anthropic' | 'groq'): Promise<string | undefined> {\n const secretName = this.getSecretName(provider);\n if (!secretName) {\n return undefined;\n }\n \n // Short-circuit when GSM is disabled/unavailable\n const client = this.ensureClient();\n if (!client) {\n return this.getFallbackFromEnv(provider);\n }\n\n // Valid cache first\n const valid = this.getCachedSecret(secretName);\n if (valid) return valid;\n\n // Try fetch with backoff\n const res = await this.accessWithBackoff(secretName).catch(() => undefined);\n if (res) {\n this.cacheSecret(secretName, res);\n return res;\n }\n\n // Stale-while-revalidate: if we ever cached a value, return it\n const stale = this.cache.get(secretName);\n if (stale) return stale;\n\n // Fallback to env var\n return this.getFallbackFromEnv(provider);\n }\n \n /**\n * Get all API keys\n */\n async getAllApiKeys(): Promise<{\n googleApiKey?: string;\n openaiApiKey?: string;\n anthropicApiKey?: string;\n groqApiKey?: string;\n }> {\n const [googleApiKey, openaiApiKey, anthropicApiKey, groqApiKey] = await Promise.all([\n this.getApiKey('google'),\n this.getApiKey('openai'),\n this.getApiKey('anthropic'),\n this.getApiKey('groq')\n ]);\n \n return {\n googleApiKey,\n openaiApiKey,\n anthropicApiKey,\n groqApiKey\n };\n }\n\n /** Fetch optional configuration values (not API keys) */\n async getOptionalConfig(): Promise<{\n defaultModel?: string;\n defaultProvider?: string;\n lmstudioApiBase?: string;\n ollamaApiUrl?: string;\n vllmApiUrl?: string;\n }> {\n const client = this.ensureClient();\n const read = async (name?: string): Promise<string | undefined> => {\n if (!name) return undefined;\n if (!client) return undefined;\n try {\n const resName = `projects/${this.config.projectId}/secrets/${name}/versions/latest`;\n const [version] = await client.accessSecretVersion({ name: resName });\n const payload = version.payload?.data;\n return payload?.toString();\n } catch {\n return undefined;\n }\n };\n\n const [defaultModel, defaultProvider, lmstudioApiBase, ollamaApiUrl, vllmApiUrl] = await Promise.all([\n read(this.config.secrets.defaultModel || 'default-model'),\n read(this.config.secrets.defaultProvider || 'default-provider'),\n read(this.config.secrets.lmstudioApiBase || 'lmstudio-api-base'),\n read(this.config.secrets.ollamaApiUrl || 'ollama-api-url'),\n read(this.config.secrets.vllmApiUrl || 'vllm-api-url'),\n ]);\n\n return { defaultModel, defaultProvider, lmstudioApiBase, ollamaApiUrl, vllmApiUrl };\n }\n \n /**\n * Verify that required secrets exist\n */\n async verifySecrets(): Promise<{\n available: string[];\n missing: string[];\n }> {\n // If GSM is disabled/unavailable, don't block CLI: report nothing\n const client = this.ensureClient();\n if (!client) {\n return { available: [], missing: [] };\n }\n\n const available: string[] = [];\n const missing: string[] = [];\n \n const providers: Array<'google' | 'openai' | 'anthropic' | 'groq'> = \n ['google', 'openai', 'anthropic', 'groq'];\n \n for (const provider of providers) {\n const secretName = this.getSecretName(provider);\n if (!secretName) continue;\n \n try {\n const name = `projects/${this.config.projectId}/secrets/${secretName}`;\n await client.getSecret({ name });\n available.push(provider);\n } catch (error) {\n missing.push(provider);\n }\n }\n \n return { available, missing };\n }\n \n /**\n * Create or update a secret\n */\n async createOrUpdateSecret(\n provider: 'google' | 'openai' | 'anthropic' | 'groq',\n apiKey: string\n ): Promise<boolean> {\n const secretName = this.getSecretName(provider);\n if (!secretName) {\n return false;\n }\n \n const client = this.ensureClient();\n if (!client) {\n // No GSM available locally\n return false;\n }\n\n const secretId = `projects/${this.config.projectId}/secrets/${secretName}`;\n \n try {\n // Check if secret exists\n let secretExists = false;\n try {\n await client.getSecret({ name: secretId });\n secretExists = true;\n } catch {\n secretExists = false;\n }\n \n if (!secretExists) {\n // Create the secret\n await client.createSecret({\n parent: `projects/${this.config.projectId}`,\n secretId: secretName,\n secret: {\n replication: {\n automatic: {}\n },\n labels: {\n service: 'ims',\n provider: provider\n }\n }\n });\n }\n \n // Add the secret version\n await client.addSecretVersion({\n parent: secretId,\n payload: {\n data: Buffer.from(apiKey, 'utf8')\n }\n });\n \n // Clear cache for this secret\n this.cache.delete(secretName);\n this.cacheExpiry.delete(secretName);\n \n return true;\n } catch (error) {\n // Silently handle create/update errors\n // console.error(`Failed to create/update secret ${secretName}:`, error);\n return false;\n }\n }\n \n /**\n * Get secret name for provider\n */\n private getSecretName(provider: 'google' | 'openai' | 'anthropic' | 'groq'): string | undefined {\n switch (provider) {\n case 'google':\n return this.config.secrets.googleAI || 'google-ai-api-key';\n case 'openai':\n return this.config.secrets.openAI || 'openai-api-key';\n case 'anthropic':\n return this.config.secrets.anthropic || 'anthropic-api-key';\n case 'groq':\n return this.config.secrets.groq || 'groq-api-key';\n default:\n return undefined;\n }\n }\n \n /**\n * Get cached secret if valid\n */\n private getCachedSecret(secretName: string): string | undefined {\n const expiry = this.cacheExpiry.get(secretName);\n if (!expiry || Date.now() > expiry) {\n // Cache expired\n this.cache.delete(secretName);\n this.cacheExpiry.delete(secretName);\n return undefined;\n }\n \n return this.cache.get(secretName);\n }\n\n /** Access a secret with retry + exponential backoff */\n private async accessWithBackoff(secretName: string): Promise<string | undefined> {\n const client = this.ensureClient();\n if (!client) return undefined;\n const name = `projects/${this.config.projectId}/secrets/${secretName}/versions/latest`;\n for (let attempt = 0; attempt < this.MAX_RETRIES; attempt++) {\n try {\n const [version] = await client.accessSecretVersion({ name });\n const payload = version.payload?.data;\n if (!payload) return undefined;\n return payload.toString();\n } catch (e) {\n if (attempt === this.MAX_RETRIES - 1) break;\n const delay = this.BASE_DELAY_MS * Math.pow(2, attempt);\n await new Promise((r) => setTimeout(r, delay));\n }\n }\n return undefined;\n }\n \n /**\n * Cache a secret\n */\n private cacheSecret(secretName: string, value: string): void {\n this.cache.set(secretName, value);\n this.cacheExpiry.set(secretName, Date.now() + this.CACHE_TTL);\n }\n \n /**\n * Get fallback from environment variable\n */\n private getFallbackFromEnv(provider: 'google' | 'openai' | 'anthropic' | 'groq'): string | undefined {\n switch (provider) {\n case 'google':\n return process.env.GOOGLE_AI_API_KEY;\n case 'openai':\n return process.env.OPENAI_API_KEY;\n case 'anthropic':\n return process.env.ANTHROPIC_API_KEY;\n case 'groq':\n return process.env.GROQ_API_KEY;\n default:\n return undefined;\n }\n }\n \n /**\n * Clear cache\n */\n clearCache(): void {\n this.cache.clear();\n this.cacheExpiry.clear();\n }\n}\n","export interface MimeBuffer extends Buffer {\n\ttype: string;\n\ttypeFull: string;\n\tcharset: string;\n}\n\n/**\n * Returns a `Buffer` instance from the given data URI `uri`.\n *\n * @param {String} uri Data URI to turn into a Buffer instance\n * @returns {Buffer} Buffer instance from Data URI\n * @api public\n */\nexport function dataUriToBuffer(uri: string): MimeBuffer {\n\tif (!/^data:/i.test(uri)) {\n\t\tthrow new TypeError(\n\t\t\t'`uri` does not appear to be a Data URI (must begin with \"data:\")'\n\t\t);\n\t}\n\n\t// strip newlines\n\turi = uri.replace(/\\r?\\n/g, '');\n\n\t// split the URI up into the \"metadata\" and the \"data\" portions\n\tconst firstComma = uri.indexOf(',');\n\tif (firstComma === -1 || firstComma <= 4) {\n\t\tthrow new TypeError('malformed data: URI');\n\t}\n\n\t// remove the \"data:\" scheme and parse the metadata\n\tconst meta = uri.substring(5, firstComma).split(';');\n\n\tlet charset = '';\n\tlet base64 = false;\n\tconst type = meta[0] || 'text/plain';\n\tlet typeFull = type;\n\tfor (let i = 1; i < meta.length; i++) {\n\t\tif (meta[i] === 'base64') {\n\t\t\tbase64 = true;\n\t\t} else if(meta[i]) {\n\t\t\ttypeFull += `;${ meta[i]}`;\n\t\t\tif (meta[i].indexOf('charset=') === 0) {\n\t\t\t\tcharset = meta[i].substring(8);\n\t\t\t}\n\t\t}\n\t}\n\t// defaults to US-ASCII only if type is not provided\n\tif (!meta[0] && !charset.length) {\n\t\ttypeFull += ';charset=US-ASCII';\n\t\tcharset = 'US-ASCII';\n\t}\n\n\t// get the encoded data portion and decode URI-encoded chars\n\tconst encoding = base64 ? 'base64' : 'ascii';\n\tconst data = unescape(uri.substring(firstComma + 1));\n\tconst buffer = Buffer.from(data, encoding) as MimeBuffer;\n\n\t// set `.type` and `.typeFull` properties to MIME type\n\tbuffer.type = type;\n\tbuffer.typeFull = typeFull;\n\n\t// set the `.charset` property\n\tbuffer.charset = charset;\n\n\treturn buffer;\n}\n\nexport default dataUriToBuffer;\n","export function noop(): undefined {\n return undefined;\n}\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n\nexport function setFunctionName(fn: Function, name: string): void {\n try {\n Object.defineProperty(fn, 'name', {\n value: name,\n configurable: true\n });\n } catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n }\n}\n","import { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\n// https://webidl.spec.whatwg.org/#a-new-promise\nexport function newPromise<T>(executor: (\n resolve: (value: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void\n) => void): Promise<T> {\n return new originalPromise(executor);\n}\n\n// https://webidl.spec.whatwg.org/#a-promise-resolved-with\nexport function promiseResolvedWith<T>(value: T | PromiseLike<T>): Promise<T> {\n return newPromise(resolve => resolve(value));\n}\n\n// https://webidl.spec.whatwg.org/#a-promise-rejected-with\nexport function promiseRejectedWith<T = never>(reason: any): Promise<T> {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n onFulfilled?: (value: T) => TResult1 | PromiseLike<TResult1>,\n onRejected?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<TResult1 | TResult2> {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise<TResult1 | TResult2>;\n}\n\n// Bluebird logs a warning when a promise is created within a fulfillment handler, but then isn't returned\n// from that handler. To prevent this, return null instead of void from all handlers.\n// http://bluebirdjs.com/docs/warning-explanations.html#warning-a-promise-was-created-in-a-handler-but-was-not-returned-from-it\nexport function uponPromise<T>(\n promise: Promise<T>,\n onFulfilled?: (value: T) => null | PromiseLike<null>,\n onRejected?: (reason: any) => null | PromiseLike<null>): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment<T>(promise: Promise<T>, onFulfilled: (value: T) => null | PromiseLike<null>): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise<unknown>, onRejected: (reason: any) => null | PromiseLike<null>): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike<TResult1>,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<TResult1 | TResult2> {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise<unknown>): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nlet _queueMicrotask: (callback: () => void) => void = callback => {\n if (typeof queueMicrotask === 'function') {\n _queueMicrotask = queueMicrotask;\n } else {\n const resolvedPromise = promiseResolvedWith(undefined);\n _queueMicrotask = cb => PerformPromiseThen(resolvedPromise, cb);\n }\n return _queueMicrotask(callback);\n};\n\nexport { _queueMicrotask as queueMicrotask };\n\nexport function reflectCall<T, A extends any[], R>(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall<T, A extends any[], R>(F: (this: T, ...fnArgs: A) => R | PromiseLike<R>,\n V: T,\n args: A): Promise<R> {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node<T> {\n _elements: T[];\n _next: Node<T> | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue<T> {\n private _front: Node<T>;\n private _back: Node<T>;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\nexport const ReleaseSteps = Symbol('[[ReleaseSteps]]');\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, type ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\nimport { ReleaseSteps } from '../abstract-ops/internal-methods';\n\nexport function ReadableStreamReaderGenericInitialize<R>(reader: ReadableStreamReader<R>, stream: ReadableStream<R>) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader<any>, reason: any): Promise<undefined> {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader<any>) {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n assert(stream._reader === reader);\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n stream._readableStreamController[ReleaseSteps]();\n\n stream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader<any>) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader<any>, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader<any>) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader<any>, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader<any>, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader<any>) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","/// <reference lib=\"es2015.core\" />\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// <reference lib=\"es2015.core\" />\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument<T>(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField<T>(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { setFunctionName, typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult<T> = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader<R>(stream: ReadableStream): ReadableStreamDefaultReader<R> {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest<R>(stream: ReadableStream<R>,\n readRequest: ReadRequest<R>): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader<R>)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest<R>(stream: ReadableStream<R>, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader<R>;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests<R>(stream: ReadableStream<R>): number {\n return (stream._reader as ReadableStreamDefaultReader<R>)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest<R> {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader<R = any> {\n /** @internal */\n _ownerReadableStream!: ReadableStream<R>;\n /** @internal */\n _closedPromise!: Promise<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue<ReadRequest<R>>;\n\n constructor(stream: ReadableStream<R>) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise<undefined> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise<void> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise<ReadableStreamDefaultReadResult<R>> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult<R>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamDefaultReadResult<R>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest<R> = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n ReadableStreamDefaultReaderRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nsetFunctionName(ReadableStreamDefaultReader.prototype.cancel, 'cancel');\nsetFunctionName(ReadableStreamDefaultReader.prototype.read, 'read');\nsetFunctionName(ReadableStreamDefaultReader.prototype.releaseLock, 'releaseLock');\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader<R = any>(x: any): x is ReadableStreamDefaultReader<R> {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead<R>(reader: ReadableStreamDefaultReader<R>,\n readRequest: ReadRequest<R>): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest<any>);\n }\n}\n\nexport function ReadableStreamDefaultReaderRelease(reader: ReadableStreamDefaultReader) {\n ReadableStreamReaderGenericRelease(reader);\n const e = new TypeError('Reader was released');\n ReadableStreamDefaultReaderErrorReadRequests(reader, e);\n}\n\nexport function ReadableStreamDefaultReaderErrorReadRequests(reader: ReadableStreamDefaultReader, e: any) {\n const readRequests = reader._readRequests;\n reader._readRequests = new SimpleQueue();\n readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// <reference lib=\"es2018.asynciterable\" />\n\n/* eslint-disable @typescript-eslint/no-empty-function */\nexport const AsyncIteratorPrototype: AsyncIterable<any> =\n Object.getPrototypeOf(Object.getPrototypeOf(async function* (): AsyncIterableIterator<any> {}).prototype);\n","/// <reference lib=\"es2018.asynciterable\" />\n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n type ReadableStreamDefaultReadResult,\n type ReadRequest\n} from './default-reader';\nimport { ReadableStreamReaderGenericCancel, ReadableStreamReaderGenericRelease } from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator<R> extends AsyncIterableIterator<R> {\n next(): Promise<IteratorResult<R, undefined>>;\n\n return(value?: any): Promise<IteratorResult<any>>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl<R> {\n private readonly _reader: ReadableStreamDefaultReader<R>;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise<ReadableStreamDefaultReadResult<R>> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader<R>, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise<ReadableStreamDefaultReadResult<R>> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise<ReadableStreamDefaultReadResult<any>> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise<ReadableStreamDefaultReadResult<R>> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n assert(reader._ownerReadableStream !== undefined);\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult<R>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamDefaultReadResult<R>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest<R> = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise<ReadableStreamDefaultReadResult<any>> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ninterface ReadableStreamAsyncIteratorInstance<R> extends ReadableStreamAsyncIterator<R> {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl<R>;\n\n next(): Promise<IteratorResult<R, undefined>>;\n\n return(value?: any): Promise<IteratorResult<any>>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance<any> = {\n next(this: ReadableStreamAsyncIteratorInstance<any>): Promise<ReadableStreamDefaultReadResult<any>> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance<any>, value: any): Promise<ReadableStreamDefaultReadResult<any>> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nObject.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator<R>(stream: ReadableStream<R>,\n preventCancel: boolean): ReadableStreamAsyncIterator<R> {\n const reader = AcquireReadableStreamDefaultReader<R>(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance<R> = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator<R = any>(x: any): x is ReadableStreamAsyncIterator<R> {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance<any>)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// <reference lib=\"es2015.core\" />\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","import { reflectCall } from 'lib/helpers/webidl';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport assert from '../../stub/assert';\n\ndeclare global {\n interface ArrayBuffer {\n readonly detached: boolean;\n\n transfer(): ArrayBuffer;\n }\n\n function structuredClone<T>(value: T, options: { transfer: ArrayBuffer[] }): T;\n}\n\nexport function CreateArrayFromList<T extends any[]>(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\nexport let TransferArrayBuffer = (O: ArrayBuffer): ArrayBuffer => {\n if (typeof O.transfer === 'function') {\n TransferArrayBuffer = buffer => buffer.transfer();\n } else if (typeof structuredClone === 'function') {\n TransferArrayBuffer = buffer => structuredClone(buffer, { transfer: [buffer] });\n } else {\n // Not implemented correctly\n TransferArrayBuffer = buffer => buffer;\n }\n return TransferArrayBuffer(O);\n};\n\nexport function CanTransferArrayBuffer(O: ArrayBuffer): boolean {\n return !IsDetachedBuffer(O);\n}\n\nexport let IsDetachedBuffer = (O: ArrayBuffer): boolean => {\n if (typeof O.detached === 'boolean') {\n IsDetachedBuffer = buffer => buffer.detached;\n } else {\n // Not implemented correctly\n IsDetachedBuffer = buffer => buffer.byteLength === 0;\n }\n return IsDetachedBuffer(O);\n};\n\nexport function ArrayBufferSlice(buffer: ArrayBuffer, begin: number, end: number): ArrayBuffer {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n\nexport type MethodName<T> = {\n [P in keyof T]: T[P] extends Function | undefined ? P : never;\n}[keyof T];\n\nexport function GetMethod<T, K extends MethodName<T>>(receiver: T, prop: K): T[K] | undefined {\n const func = receiver[prop];\n if (func === undefined || func === null) {\n return undefined;\n }\n if (typeof func !== 'function') {\n throw new TypeError(`${String(prop)} is not a function`);\n }\n return func;\n}\n\nexport interface SyncIteratorRecord<T> {\n iterator: Iterator<T>,\n nextMethod: Iterator<T>['next'],\n done: boolean;\n}\n\nexport interface AsyncIteratorRecord<T> {\n iterator: AsyncIterator<T>,\n nextMethod: AsyncIterator<T>['next'],\n done: boolean;\n}\n\nexport type SyncOrAsyncIteratorRecord<T> = SyncIteratorRecord<T> | AsyncIteratorRecord<T>;\n\nexport function CreateAsyncFromSyncIterator<T>(syncIteratorRecord: SyncIteratorRecord<T>): AsyncIteratorRecord<T> {\n // Instead of re-implementing CreateAsyncFromSyncIterator and %AsyncFromSyncIteratorPrototype%,\n // we use yield* inside an async generator function to achieve the same result.\n\n // Wrap the sync iterator inside a sync iterable, so we can use it with yield*.\n const syncIterable = {\n [Symbol.iterator]: () => syncIteratorRecord.iterator\n };\n // Create an async generator function and immediately invoke it.\n const asyncIterator = (async function* () {\n return yield* syncIterable;\n }());\n // Return as an async iterator record.\n const nextMethod = asyncIterator.next;\n return { iterator: asyncIterator, nextMethod, done: false };\n}\n\n// Aligns with core-js/modules/es.symbol.async-iterator.js\nexport const SymbolAsyncIterator: (typeof Symbol)['asyncIterator'] =\n Symbol.asyncIterator ??\n Symbol.for?.('Symbol.asyncIterator') ??\n '@@asyncIterator';\n\nexport type SyncOrAsyncIterable<T> = Iterable<T> | AsyncIterable<T>;\nexport type SyncOrAsyncIteratorMethod<T> = () => (Iterator<T> | AsyncIterator<T>);\n\nfunction GetIterator<T>(\n obj: SyncOrAsyncIterable<T>,\n hint: 'async',\n method?: SyncOrAsyncIteratorMethod<T>\n): AsyncIteratorRecord<T>;\nfunction GetIterator<T>(\n obj: Iterable<T>,\n hint: 'sync',\n method?: SyncOrAsyncIteratorMethod<T>\n): SyncIteratorRecord<T>;\nfunction GetIterator<T>(\n obj: SyncOrAsyncIterable<T>,\n hint = 'sync',\n method?: SyncOrAsyncIteratorMethod<T>\n): SyncOrAsyncIteratorRecord<T> {\n assert(hint === 'sync' || hint === 'async');\n if (method === undefined) {\n if (hint === 'async') {\n method = GetMethod(obj as AsyncIterable<T>, SymbolAsyncIterator);\n if (method === undefined) {\n const syncMethod = GetMethod(obj as Iterable<T>, Symbol.iterator);\n const syncIteratorRecord = GetIterator(obj as Iterable<T>, 'sync', syncMethod);\n return CreateAsyncFromSyncIterator(syncIteratorRecord);\n }\n } else {\n method = GetMethod(obj as Iterable<T>, Symbol.iterator);\n }\n }\n if (method === undefined) {\n throw new TypeError('The object is not iterable');\n }\n const iterator = reflectCall(method, obj, []);\n if (!typeIsObject(iterator)) {\n throw new TypeError('The iterator method must return an object');\n }\n const nextMethod = iterator.next;\n return { iterator, nextMethod, done: false } as SyncOrAsyncIteratorRecord<T>;\n}\n\nexport { GetIterator };\n\nexport function IteratorNext<T>(iteratorRecord: AsyncIteratorRecord<T>): Promise<IteratorResult<T>> {\n const result = reflectCall(iteratorRecord.nextMethod, iteratorRecord.iterator, []);\n if (!typeIsObject(result)) {\n throw new TypeError('The iterator.next() method must return an object');\n }\n return result;\n}\n\nexport function IteratorComplete<TReturn>(\n iterResult: IteratorResult<unknown, TReturn>\n): iterResult is IteratorReturnResult<TReturn> {\n assert(typeIsObject(iterResult));\n return Boolean(iterResult.done);\n}\n\nexport function IteratorValue<T>(iterResult: IteratorYieldResult<T>): T {\n assert(typeIsObject(iterResult));\n return iterResult.value;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\nimport type { NonShared } from '../helpers/array-buffer-view';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: NonShared<ArrayBufferView>): NonShared<Uint8Array> {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer) as NonShared<Uint8Array>;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer<T> {\n _queue: SimpleQueue<T>;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair<T> {\n value: T;\n size: number;\n}\n\nexport function DequeueValue<T>(container: QueueContainer<QueuePair<T>>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize<T>(container: QueueContainer<QueuePair<T>>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue<T>(container: QueueContainer<QueuePair<T>>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue<T>(container: QueueContainer<T>) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue<T>();\n container._queueTotalSize = 0;\n}\n","export type TypedArray =\n | Int8Array\n | Uint8Array\n | Uint8ClampedArray\n | Int16Array\n | Uint16Array\n | Int32Array\n | Uint32Array\n | Float32Array\n | Float64Array;\n\nexport type NonShared<T extends ArrayBufferView> = T & {\n buffer: ArrayBuffer;\n}\n\nexport interface ArrayBufferViewConstructor<T extends ArrayBufferView = ArrayBufferView> {\n new(buffer: ArrayBuffer, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n}\n\nexport interface TypedArrayConstructor<T extends TypedArray = TypedArray> extends ArrayBufferViewConstructor<T> {\n readonly BYTES_PER_ELEMENT: number;\n}\n\nexport type DataViewConstructor = ArrayBufferViewConstructor<DataView>;\n\nfunction isDataViewConstructor(ctor: Function): ctor is DataViewConstructor {\n return ctor === DataView;\n}\n\nexport function isDataView(view: ArrayBufferView): view is DataView {\n return isDataViewConstructor(view.constructor);\n}\n\nexport function arrayBufferViewElementSize<T extends ArrayBufferView>(ctor: ArrayBufferViewConstructor<T>): number {\n if (isDataViewConstructor(ctor)) {\n return 1;\n }\n return (ctor as unknown as TypedArrayConstructor).BYTES_PER_ELEMENT;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n IsReadableStreamDefaultReader,\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n type ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n type ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n type ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport type { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { setFunctionName, typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps, ReleaseSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\nimport {\n type ArrayBufferViewConstructor,\n arrayBufferViewElementSize,\n type NonShared,\n type TypedArrayConstructor\n} from '../helpers/array-buffer-view';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: NonShared<ArrayBufferView> | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: NonShared<ArrayBufferView>): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nsetFunctionName(ReadableStreamBYOBRequest.prototype.respond, 'respond');\nsetFunctionName(ReadableStreamBYOBRequest.prototype.respondWithNewView, 'respondWithNewView');\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBuffer;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor<T extends NonShared<ArrayBufferView> = NonShared<ArrayBufferView>> =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor<T>;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBuffer;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n minimumFill: number;\n elementSize: number;\n viewConstructor: TypedArrayConstructor<Uint8Array>;\n readerType: 'default' | 'none';\n}\n\ninterface BYOBPullIntoDescriptor<T extends NonShared<ArrayBufferView> = NonShared<ArrayBufferView>> {\n buffer: ArrayBuffer;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n minimumFill: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor<T>;\n readerType: 'byob' | 'none';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue<ByteQueueElement>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise<void>;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise<void>;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue<PullIntoDescriptor>;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: NonShared<ArrayBufferView>): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise<void> {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest<NonShared<Uint8Array>>): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n ReadableByteStreamControllerFillReadRequestFromQueue(this, readRequest);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n minimumFill: 1,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n\n /** @internal */\n [ReleaseSteps](): void {\n if (this._pendingPullIntos.length > 0) {\n const firstPullInto = this._pendingPullIntos.peek();\n firstPullInto.readerType = 'none';\n\n this._pendingPullIntos = new SimpleQueue();\n this._pendingPullIntos.push(firstPullInto);\n }\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nsetFunctionName(ReadableByteStreamController.prototype.close, 'close');\nsetFunctionName(ReadableByteStreamController.prototype.enqueue, 'enqueue');\nsetFunctionName(ReadableByteStreamController.prototype.error, 'error');\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n\n return null;\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n return null;\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor<T extends NonShared<ArrayBufferView>>(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor<T>\n) {\n assert(stream._state !== 'errored');\n assert(pullIntoDescriptor.readerType !== 'none');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor<T>(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as NonShared<Uint8Array>, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor<T extends NonShared<ArrayBufferView>>(\n pullIntoDescriptor: PullIntoDescriptor<T>\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBuffer,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerEnqueueClonedChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBuffer,\n byteOffset: number,\n byteLength: number) {\n let clonedChunk;\n try {\n clonedChunk = ArrayBufferSlice(buffer, byteOffset, byteOffset + byteLength);\n } catch (cloneE) {\n ReadableByteStreamControllerError(controller, cloneE);\n throw cloneE;\n }\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, clonedChunk, 0, byteLength);\n}\n\nfunction ReadableByteStreamControllerEnqueueDetachedPullIntoToQueue(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.readerType === 'none');\n if (firstDescriptor.bytesFilled > 0) {\n ReadableByteStreamControllerEnqueueClonedChunkToQueue(\n controller,\n firstDescriptor.buffer,\n firstDescriptor.byteOffset,\n firstDescriptor.bytesFilled\n );\n }\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.minimumFill);\n const remainderBytes = maxBytesFilled % pullIntoDescriptor.elementSize;\n const maxAlignedBytes = maxBytesFilled - remainderBytes;\n // A descriptor for a read() request that is not yet filled up to its minimum length will stay at the head\n // of the queue, so the underlying source can keep filling it.\n if (maxAlignedBytes >= pullIntoDescriptor.minimumFill) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.minimumFill);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n assert(pullIntoDescriptor.readerType !== 'none');\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nfunction ReadableByteStreamControllerProcessReadRequestsUsingQueue(controller: ReadableByteStreamController) {\n const reader = controller._controlledReadableByteStream._reader;\n assert(IsReadableStreamDefaultReader(reader));\n while (reader._readRequests.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n const readRequest = reader._readRequests.shift();\n ReadableByteStreamControllerFillReadRequestFromQueue(controller, readRequest);\n }\n}\n\nexport function ReadableByteStreamControllerPullInto<T extends NonShared<ArrayBufferView>>(\n controller: ReadableByteStreamController,\n view: T,\n min: number,\n readIntoRequest: ReadIntoRequest<T>\n): void {\n const stream = controller._controlledReadableByteStream;\n\n const ctor = view.constructor as ArrayBufferViewConstructor<T>;\n const elementSize = arrayBufferViewElementSize(ctor);\n\n const { byteOffset, byteLength } = view;\n\n const minimumFill = min * elementSize;\n assert(minimumFill >= elementSize && minimumFill <= byteLength);\n assert(minimumFill % elementSize === 0);\n\n let buffer: ArrayBuffer;\n try {\n buffer = TransferArrayBuffer(view.buffer);\n } catch (e) {\n readIntoRequest._errorSteps(e);\n return;\n }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor<T> = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset,\n byteLength,\n bytesFilled: 0,\n minimumFill,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor<T>(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest<T>(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled % firstDescriptor.elementSize === 0);\n\n if (firstDescriptor.readerType === 'none') {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.readerType === 'none') {\n ReadableByteStreamControllerEnqueueDetachedPullIntoToQueue(controller, pullIntoDescriptor);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n return;\n }\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.minimumFill) {\n // A descriptor for a read() request that is not yet filled up to its minimum length will stay at the head\n // of the queue, so the underlying source can keep filling it.\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n ReadableByteStreamControllerEnqueueClonedChunkToQueue(\n controller,\n pullIntoDescriptor.buffer,\n end - remainderSize,\n remainderSize\n );\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled % firstPendingPullInto.elementSize !== 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(\n controller: ReadableByteStreamController,\n chunk: NonShared<ArrayBufferView>\n) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const { buffer, byteOffset, byteLength } = chunk;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n if (firstPendingPullInto.readerType === 'none') {\n ReadableByteStreamControllerEnqueueDetachedPullIntoToQueue(controller, firstPendingPullInto);\n }\n }\n\n if (ReadableStreamHasDefaultReader(stream)) {\n ReadableByteStreamControllerProcessReadRequestsUsingQueue(controller);\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView as NonShared<Uint8Array>, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerFillReadRequestFromQueue(\n controller: ReadableByteStreamController,\n readRequest: ReadRequest<NonShared<Uint8Array>>\n) {\n assert(controller._queueTotalSize > 0);\n\n const entry = controller._queue.shift();\n controller._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n readRequest._chunkSteps(view as NonShared<Uint8Array>);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view as NonShared<Uint8Array>);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: NonShared<ArrayBufferView>) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n return null;\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n return null;\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void>;\n let pullAlgorithm: () => Promise<void>;\n let cancelAlgorithm: (reason: any) => Promise<void>;\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n } else {\n startAlgorithm = () => undefined;\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n } else {\n pullAlgorithm = () => promiseResolvedWith(undefined);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n } else {\n cancelAlgorithm = () => promiseResolvedWith(undefined);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: NonShared<ArrayBufferView>) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import { assertDictionary, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport type {\n ReadableStreamBYOBReaderReadOptions,\n ReadableStreamGetReaderOptions,\n ValidatedReadableStreamBYOBReaderReadOptions\n} from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n\nexport function convertByobReadOptions(\n options: ReadableStreamBYOBReaderReadOptions | null | undefined,\n context: string\n): ValidatedReadableStreamBYOBReaderReadOptions {\n assertDictionary(options, context);\n const min = options?.min ?? 1;\n return {\n min: convertUnsignedLongLongWithEnforceRange(\n min,\n `${context} has member 'min' that`\n )\n };\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, type ReadableByteStream, type ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { setFunctionName, typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\nimport type {\n ReadableStreamBYOBReaderReadOptions,\n ValidatedReadableStreamBYOBReaderReadOptions\n} from './reader-options';\nimport { convertByobReadOptions } from '../validators/reader-options';\nimport { isDataView, type NonShared, type TypedArray } from '../helpers/array-buffer-view';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult<T extends ArrayBufferView> = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream as ReadableStream<Uint8Array>);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest<T extends NonShared<ArrayBufferView>>(\n stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest<T>\n): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest<T extends NonShared<ArrayBufferView>> {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue<ReadIntoRequest<any>>;\n\n constructor(stream: ReadableStream<Uint8Array>) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise<undefined> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise<void> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read<T extends ArrayBufferView>(\n view: T,\n options?: ReadableStreamBYOBReaderReadOptions\n ): Promise<ReadableStreamBYOBReadResult<T>>;\n read<T extends NonShared<ArrayBufferView>>(\n view: T,\n rawOptions: ReadableStreamBYOBReaderReadOptions | null | undefined = {}\n ): Promise<ReadableStreamBYOBReadResult<T>> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n let options: ValidatedReadableStreamBYOBReaderReadOptions;\n try {\n options = convertByobReadOptions(rawOptions, 'options');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n const min = options.min;\n if (min === 0) {\n return promiseRejectedWith(new TypeError('options.min must be greater than 0'));\n }\n if (!isDataView(view)) {\n if (min > (view as unknown as TypedArray).length) {\n return promiseRejectedWith(new RangeError('options.min must be less than or equal to view\\'s length'));\n }\n } else if (min > view.byteLength) {\n return promiseRejectedWith(new RangeError('options.min must be less than or equal to view\\'s byteLength'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult<T>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamBYOBReadResult<T>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest<T> = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, min, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n ReadableStreamBYOBReaderRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nsetFunctionName(ReadableStreamBYOBReader.prototype.cancel, 'cancel');\nsetFunctionName(ReadableStreamBYOBReader.prototype.read, 'read');\nsetFunctionName(ReadableStreamBYOBReader.prototype.releaseLock, 'releaseLock');\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead<T extends NonShared<ArrayBufferView>>(\n reader: ReadableStreamBYOBReader,\n view: T,\n min: number,\n readIntoRequest: ReadIntoRequest<T>\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n min,\n readIntoRequest\n );\n }\n}\n\nexport function ReadableStreamBYOBReaderRelease(reader: ReadableStreamBYOBReader) {\n ReadableStreamReaderGenericRelease(reader);\n const e = new TypeError('Reader was released');\n ReadableStreamBYOBReaderErrorReadIntoRequests(reader, e);\n}\n\nexport function ReadableStreamBYOBReaderErrorReadIntoRequests(reader: ReadableStreamBYOBReader, e: any) {\n const readIntoRequests = reader._readIntoRequests;\n reader._readIntoRequests = new SimpleQueue();\n readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import type { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm<T>(strategy: QueuingStrategy<T>): QueuingStrategySizeCallback<T> {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import type { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy<T>(init: QueuingStrategy<T> | null | undefined,\n context: string): QueuingStrategy<T> {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize<T>(fn: QueuingStrategySizeCallback<T>,\n context: string): QueuingStrategySizeCallback<T> {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport type {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink<W>(original: UnderlyingSink<W> | null,\n context: string): ValidatedUnderlyingSink<W> {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise<void> {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise<void> {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback<W>(\n fn: UnderlyingSinkWriteCallback<W>,\n original: UnderlyingSink<W>,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise<void> {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * If aborted, returns the reason for aborting.\n */\n readonly reason?: any;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(reason?: any): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n type QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport type { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { setFunctionName, typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport type {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { type AbortController, type AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise<undefined>;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream<W = any> {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter<W> | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController<W>;\n /** @internal */\n _writeRequests!: SimpleQueue<WriteRequest>;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink<W>, strategy?: QueuingStrategy<W>);\n constructor(rawUnderlyingSink: UnderlyingSink<W> | null | undefined = {},\n rawStrategy: QueuingStrategy<W> | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise<void> {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter<W> {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nsetFunctionName(WritableStream.prototype.abort, 'abort');\nsetFunctionName(WritableStream.prototype.close, 'close');\nsetFunctionName(WritableStream.prototype.getWriter, 'getWriter');\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight\n};\n\nexport type {\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter<W>(stream: WritableStream<W>): WritableStreamDefaultWriter<W> {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream<W>(startAlgorithm: () => void | PromiseLike<void>,\n writeAlgorithm: (chunk: W) => Promise<void>,\n closeAlgorithm: () => Promise<void>,\n abortAlgorithm: (reason: any) => Promise<void>,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback<W> = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream<W> = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController<W> = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream<W>(stream: WritableStream<W>) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise<undefined> {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort(reason);\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise<undefined>((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream<any>): Promise<undefined> {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise<undefined>((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise<undefined> {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise<undefined>((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return null;\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return null;\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter<W = any> {\n /** @internal */\n _ownerWritableStream: WritableStream<W>;\n /** @internal */\n _closedPromise!: Promise<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise<undefined>;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream<W>) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise<undefined> {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise<undefined> {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise<void> {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise<void> {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise<void>;\n write(chunk: W = undefined!): Promise<void> {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nsetFunctionName(WritableStreamDefaultWriter.prototype.abort, 'abort');\nsetFunctionName(WritableStreamDefaultWriter.prototype.close, 'close');\nsetFunctionName(WritableStreamDefaultWriter.prototype.releaseLock, 'releaseLock');\nsetFunctionName(WritableStreamDefaultWriter.prototype.write, 'write');\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter<W = any>(x: any): x is WritableStreamDefaultWriter<W> {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise<undefined> {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise<undefined> {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite<W>(writer: WritableStreamDefaultWriter<W>, chunk: W): Promise<undefined> {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord<W> = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController<W = any> {\n /** @internal */\n _controlledWritableStream!: WritableStream<W>;\n /** @internal */\n _queue!: SimpleQueue<QueuePair<QueueRecord<W>>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback<W>;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise<void>;\n /** @internal */\n _closeAlgorithm!: () => Promise<void>;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise<void>;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise<void> {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController<any> {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController<W>(stream: WritableStream<W>,\n controller: WritableStreamDefaultController<W>,\n startAlgorithm: () => void | PromiseLike<void>,\n writeAlgorithm: (chunk: W) => Promise<void>,\n closeAlgorithm: () => Promise<void>,\n abortAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<W>) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n return null;\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n return null;\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink<W>(stream: WritableStream<W>,\n underlyingSink: ValidatedUnderlyingSink<W>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<W>) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void>;\n let writeAlgorithm: (chunk: W) => Promise<void>;\n let closeAlgorithm: () => Promise<void>;\n let abortAlgorithm: (reason: any) => Promise<void>;\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n } else {\n startAlgorithm = () => undefined;\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n } else {\n writeAlgorithm = () => promiseResolvedWith(undefined);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n } else {\n closeAlgorithm = () => promiseResolvedWith(undefined);\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n } else {\n abortAlgorithm = () => promiseResolvedWith(undefined);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController<any>) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose<W>(controller: WritableStreamDefaultController<W>) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize<W>(controller: WritableStreamDefaultController<W>,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController<any>): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite<W>(controller: WritableStreamDefaultController<W>,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded<W>(controller: WritableStreamDefaultController<W>) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController<any>, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController<any>) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n return null;\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n return null;\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite<W>(controller: WritableStreamDefaultController<W>, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n return null;\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n return null;\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController<any>): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController<any>, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// <reference lib=\"dom\" />\n\nfunction getGlobals(): typeof globalThis | undefined {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n } else if (typeof self !== 'undefined') {\n return self;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","/// <reference types=\"node\" />\nimport { globals } from '../globals';\nimport { setFunctionName } from '../lib/helpers/miscellaneous';\n\ninterface DOMException extends Error {\n name: string;\n message: string;\n}\n\ntype DOMExceptionConstructor = new (message?: string, name?: string) => DOMException;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n if ((ctor as DOMExceptionConstructor).name !== 'DOMException') {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Support:\n * - Web browsers\n * - Node 18 and higher (https://github.com/nodejs/node/commit/e4b1fb5e6422c1ff151234bb9de792d45dd88d87)\n */\nfunction getFromGlobal(): DOMExceptionConstructor | undefined {\n const ctor = globals?.DOMException;\n return isDOMExceptionConstructor(ctor) ? ctor : undefined;\n}\n\n/**\n * Support:\n * - All platforms\n */\nfunction createPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n setFunctionName(ctor, 'DOMException');\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nconst DOMException: DOMExceptionConstructor = getFromGlobal() || createPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { type AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo<T>(source: ReadableStream<T>,\n dest: WritableStream<T>,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise<undefined> {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader<T>(source);\n const writer = AcquireWritableStreamDefaultWriter<T>(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith<void>(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = signal.reason !== undefined ? signal.reason : new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise<void>> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise<void>((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise<boolean> {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise<boolean>((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n return null;\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n return null;\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n return null;\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise<void> {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise<void>,\n action: (reason: any) => null) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise<void>, action: () => null) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise<unknown>, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest(): null {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n return null;\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any): null {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n\n return null;\n }\n });\n}\n","import type { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, type QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n type ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport type { ValidatedUnderlyingSource } from './underlying-source';\nimport { setFunctionName, typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps, ReleaseSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController<R> {\n /** @internal */\n _controlledReadableStream!: ReadableStream<R>;\n /** @internal */\n _queue!: SimpleQueue<QueuePair<R>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback<R>;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise<void>;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise<void>;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise<void> {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest<R>): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n\n /** @internal */\n [ReleaseSteps](): void {\n // Do nothing.\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nsetFunctionName(ReadableStreamDefaultController.prototype.close, 'close');\nsetFunctionName(ReadableStreamDefaultController.prototype.enqueue, 'enqueue');\nsetFunctionName(ReadableStreamDefaultController.prototype.error, 'error');\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController<R = any>(x: any): x is ReadableStreamDefaultController<R> {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController<any>): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n\n return null;\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n return null;\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController<any>): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController<any>) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController<any>) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue<R>(\n controller: ReadableStreamDefaultController<R>,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController<any>, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController<any>\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController<any>\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController<any>\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController<R>(stream: ReadableStream<R>,\n controller: ReadableStreamDefaultController<R>,\n startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<R>) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n return null;\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n return null;\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource<R>(\n stream: ReadableStream<R>,\n underlyingSource: ValidatedUnderlyingSource<R>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<R>\n) {\n const controller: ReadableStreamDefaultController<R> = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void>;\n let pullAlgorithm: () => Promise<void>;\n let cancelAlgorithm: (reason: any) => Promise<void>;\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n } else {\n startAlgorithm = () => undefined;\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n } else {\n pullAlgorithm = () => promiseResolvedWith(undefined);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n } else {\n cancelAlgorithm = () => promiseResolvedWith(undefined);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n type DefaultReadableStream,\n IsReadableStream,\n type ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n type ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n type ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n type ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\nimport type { NonShared } from '../helpers/array-buffer-view';\n\nexport function ReadableStreamTee<R>(stream: ReadableStream<R>,\n cloneForBranch2: boolean): [ReadableStream<R>, ReadableStream<R>] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream<R>, ReadableStream<R>];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee<R>(\n stream: ReadableStream<R>,\n cloneForBranch2: boolean\n): [DefaultReadableStream<R>, DefaultReadableStream<R>] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader<R>(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: DefaultReadableStream<R>;\n let branch2: DefaultReadableStream<R>;\n\n let resolveCancelPromise: (value: undefined | Promise<undefined>) => void;\n const cancelPromise = newPromise<undefined>(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise<void> {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest<R> = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise<void> {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise<void> {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n return null;\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader<NonShared<Uint8Array>> = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise<undefined>) => void;\n const cancelPromise = newPromise<void>(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader<NonShared<Uint8Array>>) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return null;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n return null;\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest<NonShared<Uint8Array>> = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: NonShared<ArrayBufferView>, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader<NonShared<Uint8Array>>(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest<NonShared<ArrayBufferView>> = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, 1, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise<void> {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise<void> {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise<void> {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise<void> {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { typeIsObject } from '../helpers/miscellaneous';\nimport type { ReadableStreamDefaultReadResult } from './default-reader';\n\n/**\n * A common interface for a `ReadadableStream` implementation.\n *\n * @public\n */\nexport interface ReadableStreamLike<R = any> {\n readonly locked: boolean;\n\n getReader(): ReadableStreamDefaultReaderLike<R>;\n}\n\n/**\n * A common interface for a `ReadableStreamDefaultReader` implementation.\n *\n * @public\n */\nexport interface ReadableStreamDefaultReaderLike<R = any> {\n readonly closed: Promise<undefined>;\n\n cancel(reason?: any): Promise<void>;\n\n read(): Promise<ReadableStreamDefaultReadResult<R>>;\n\n releaseLock(): void;\n}\n\nexport function isReadableStreamLike<R>(stream: unknown): stream is ReadableStreamLike<R> {\n return typeIsObject(stream) && typeof (stream as ReadableStreamLike<R>).getReader !== 'undefined';\n}\n","import { CreateReadableStream, type DefaultReadableStream } from '../readable-stream';\nimport {\n isReadableStreamLike,\n type ReadableStreamDefaultReaderLike,\n type ReadableStreamLike\n} from './readable-stream-like';\nimport { ReadableStreamDefaultControllerClose, ReadableStreamDefaultControllerEnqueue } from './default-controller';\nimport { GetIterator, GetMethod, IteratorComplete, IteratorNext, IteratorValue } from '../abstract-ops/ecmascript';\nimport { promiseRejectedWith, promiseResolvedWith, reflectCall, transformPromiseWith } from '../helpers/webidl';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { noop } from '../../utils';\n\nexport function ReadableStreamFrom<R>(\n source: Iterable<R> | AsyncIterable<R> | ReadableStreamLike<R>\n): DefaultReadableStream<R> {\n if (isReadableStreamLike(source)) {\n return ReadableStreamFromDefaultReader(source.getReader());\n }\n return ReadableStreamFromIterable(source);\n}\n\nexport function ReadableStreamFromIterable<R>(asyncIterable: Iterable<R> | AsyncIterable<R>): DefaultReadableStream<R> {\n let stream: DefaultReadableStream<R>;\n const iteratorRecord = GetIterator(asyncIterable, 'async');\n\n const startAlgorithm = noop;\n\n function pullAlgorithm(): Promise<void> {\n let nextResult;\n try {\n nextResult = IteratorNext(iteratorRecord);\n } catch (e) {\n return promiseRejectedWith(e);\n }\n const nextPromise = promiseResolvedWith(nextResult);\n return transformPromiseWith(nextPromise, iterResult => {\n if (!typeIsObject(iterResult)) {\n throw new TypeError('The promise returned by the iterator.next() method must fulfill with an object');\n }\n const done = IteratorComplete(iterResult);\n if (done) {\n ReadableStreamDefaultControllerClose(stream._readableStreamController);\n } else {\n const value = IteratorValue(iterResult);\n ReadableStreamDefaultControllerEnqueue(stream._readableStreamController, value);\n }\n });\n }\n\n function cancelAlgorithm(reason: any): Promise<void> {\n const iterator = iteratorRecord.iterator;\n let returnMethod: (typeof iterator)['return'] | undefined;\n try {\n returnMethod = GetMethod(iterator, 'return');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n if (returnMethod === undefined) {\n return promiseResolvedWith(undefined);\n }\n let returnResult: IteratorResult<R> | Promise<IteratorResult<R>>;\n try {\n returnResult = reflectCall(returnMethod, iterator, [reason]);\n } catch (e) {\n return promiseRejectedWith(e);\n }\n const returnPromise = promiseResolvedWith(returnResult);\n return transformPromiseWith(returnPromise, iterResult => {\n if (!typeIsObject(iterResult)) {\n throw new TypeError('The promise returned by the iterator.return() method must fulfill with an object');\n }\n return undefined;\n });\n }\n\n stream = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, 0);\n return stream;\n}\n\nexport function ReadableStreamFromDefaultReader<R>(\n reader: ReadableStreamDefaultReaderLike<R>\n): DefaultReadableStream<R> {\n let stream: DefaultReadableStream<R>;\n\n const startAlgorithm = noop;\n\n function pullAlgorithm(): Promise<void> {\n let readPromise;\n try {\n readPromise = reader.read();\n } catch (e) {\n return promiseRejectedWith(e);\n }\n return transformPromiseWith(readPromise, readResult => {\n if (!typeIsObject(readResult)) {\n throw new TypeError('The promise returned by the reader.read() method must fulfill with an object');\n }\n if (readResult.done) {\n ReadableStreamDefaultControllerClose(stream._readableStreamController);\n } else {\n const value = readResult.value;\n ReadableStreamDefaultControllerEnqueue(stream._readableStreamController, value);\n }\n });\n }\n\n function cancelAlgorithm(reason: any): Promise<void> {\n try {\n return promiseResolvedWith(reader.cancel(reason));\n } catch (e) {\n return promiseRejectedWith(e);\n }\n }\n\n stream = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, 0);\n return stream;\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport type {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource<R>(\n source: UnderlyingSource<R> | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource<R> {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource<R> | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise<void> {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback<R>(\n fn: UnderlyingDefaultOrByteSourcePullCallback<R>,\n original: UnderlyingDefaultOrByteSource<R>,\n context: string\n): (controller: ReadableStreamController<R>) => Promise<void> {\n assertFunction(fn, context);\n return (controller: ReadableStreamController<R>) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback<R>(\n fn: UnderlyingDefaultOrByteSourceStartCallback<R>,\n original: UnderlyingDefaultOrByteSource<R>,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback<R> {\n assertFunction(fn, context);\n return (controller: ReadableStreamController<R>) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport type {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport type { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { type AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair<RS extends ReadableStream, WS extends WritableStream>(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport type { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, type ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderErrorReadRequests,\n type ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReaderErrorReadIntoRequests,\n type ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { ReadableStreamFrom } from './readable-stream/from';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport type {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { setFunctionName, typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList, SymbolAsyncIterator } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport type {\n ReadableStreamBYOBReaderReadOptions,\n ReadableStreamGetReaderOptions\n} from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport type { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport type { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport type { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\nimport type { ReadableStreamDefaultReaderLike, ReadableStreamLike } from './readable-stream/readable-stream-like';\nimport type { NonShared } from './helpers/array-buffer-view';\n\nexport type DefaultReadableStream<R = any> = ReadableStream<R> & {\n _readableStreamController: ReadableStreamDefaultController<R>\n};\n\nexport type ReadableByteStream = ReadableStream<NonShared<Uint8Array>> & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream<R = any> implements AsyncIterable<R> {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader<R> | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController<R> | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource<R>, strategy?: QueuingStrategy<R>);\n constructor(rawUnderlyingSource: UnderlyingSource<R> | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy<R> | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise<void> {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader<R>;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader<R> | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough<RS extends ReadableStream>(\n transform: { readable: RS; writable: WritableStream<R> },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough<RS extends ReadableStream>(\n rawTransform: { readable: RS; writable: WritableStream<R> } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream<R>, options?: StreamPipeOptions): Promise<void>;\n pipeTo(destination: WritableStream<R> | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise<void> {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo<R>(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream<R>, ReadableStream<R>] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator<R>;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator<R> {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator<R>(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator](options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator<R>;\n\n [SymbolAsyncIterator](options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator<R> {\n // Stub implementation, overridden below\n return this.values(options);\n }\n\n /**\n * Creates a new ReadableStream wrapping the provided iterable or async iterable.\n *\n * This can be used to adapt various kinds of objects into a readable stream,\n * such as an array, an async generator, or a Node.js readable stream.\n */\n static from<R>(asyncIterable: Iterable<R> | AsyncIterable<R> | ReadableStreamLike<R>): ReadableStream<R> {\n return ReadableStreamFrom(asyncIterable);\n }\n}\n\nObject.defineProperties(ReadableStream, {\n from: { enumerable: true }\n});\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nsetFunctionName(ReadableStream.from, 'from');\nsetFunctionName(ReadableStream.prototype.cancel, 'cancel');\nsetFunctionName(ReadableStream.prototype.getReader, 'getReader');\nsetFunctionName(ReadableStream.prototype.pipeThrough, 'pipeThrough');\nsetFunctionName(ReadableStream.prototype.pipeTo, 'pipeTo');\nsetFunctionName(ReadableStream.prototype.tee, 'tee');\nsetFunctionName(ReadableStream.prototype.values, 'values');\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nObject.defineProperty(ReadableStream.prototype, SymbolAsyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n});\n\nexport type {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n ReadableStreamBYOBReaderReadOptions,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions,\n ReadableStreamLike,\n ReadableStreamDefaultReaderLike\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream<R>(\n startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback<R> = () => 1\n): DefaultReadableStream<R> {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: DefaultReadableStream<R> = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController<R> = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel<R>(stream: ReadableStream<R>, reason: any): Promise<undefined> {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n const readIntoRequests = reader._readIntoRequests;\n reader._readIntoRequests = new SimpleQueue();\n readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose<R>(stream: ReadableStream<R>): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader<R>(reader)) {\n const readRequests = reader._readRequests;\n reader._readRequests = new SimpleQueue();\n readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n }\n}\n\nexport function ReadableStreamError<R>(stream: ReadableStream<R>, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader<R>(reader)) {\n ReadableStreamDefaultReaderErrorReadRequests(reader, e);\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n ReadableStreamBYOBReaderErrorReadIntoRequests(reader, e);\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader<R> = ReadableStreamDefaultReader<R> | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import type { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import type { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { setFunctionName, typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\nsetFunctionName(byteLengthSizeFunction, 'size');\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy<ArrayBufferView> {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import type { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { setFunctionName, typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\nsetFunctionName(countSizeFunction, 'size');\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy<any> {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport type {\n Transformer,\n TransformerCancelCallback,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer<I, O>(original: Transformer<I, O> | null,\n context: string): ValidatedTransformer<I, O> {\n assertDictionary(original, context);\n const cancel = original?.cancel;\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n cancel: cancel === undefined ?\n undefined :\n convertTransformerCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback<I, O>(\n fn: TransformerFlushCallback<O>,\n original: Transformer<I, O>,\n context: string\n): (controller: TransformStreamDefaultController<O>) => Promise<void> {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController<O>) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback<I, O>(\n fn: TransformerStartCallback<O>,\n original: Transformer<I, O>,\n context: string\n): TransformerStartCallback<O> {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController<O>) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback<I, O>(\n fn: TransformerTransformCallback<I, O>,\n original: Transformer<I, O>,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController<O>) => Promise<void> {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController<O>) => promiseCall(fn, original, [chunk, controller]);\n}\n\nfunction convertTransformerCancelCallback<I, O>(\n fn: TransformerCancelCallback,\n original: Transformer<I, O>,\n context: string\n): (reason: any) => Promise<void> {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith,\n uponPromise\n} from './helpers/webidl';\nimport { CreateReadableStream, type DefaultReadableStream, ReadableStream } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport type { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { setFunctionName, typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport type {\n Transformer,\n TransformerCancelCallback,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream<I = any, O = any> {\n /** @internal */\n _writable!: WritableStream<I>;\n /** @internal */\n _readable!: DefaultReadableStream<O>;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise<void>;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController<O>;\n\n constructor(\n transformer?: Transformer<I, O>,\n writableStrategy?: QueuingStrategy<I>,\n readableStrategy?: QueuingStrategy<O>\n );\n constructor(rawTransformer: Transformer<I, O> | null | undefined = {},\n rawWritableStrategy: QueuingStrategy<I> | null | undefined = {},\n rawReadableStrategy: QueuingStrategy<O> | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike<void>) => void;\n const startPromise = newPromise<void>(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream<O> {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream<I> {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport type {\n Transformer,\n TransformerCancelCallback,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream<I, O>(startAlgorithm: () => void | PromiseLike<void>,\n transformAlgorithm: (chunk: I) => Promise<void>,\n flushAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback<I> = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback<O> = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream<I, O> = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike<void>) => void;\n const startPromise = newPromise<void>(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController<O> = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm, cancelAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream<I, O>(stream: TransformStream<I, O>,\n startPromise: Promise<void>,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback<I>,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback<O>) {\n function startAlgorithm(): Promise<void> {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise<void> {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise<void> {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise<void> {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise<void> {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise<void> {\n return TransformStreamDefaultSourceCancelAlgorithm(stream, reason);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(stream._readable._readableStreamController, e);\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n TransformStreamUnblockWrite(stream);\n}\n\nfunction TransformStreamUnblockWrite(stream: TransformStream) {\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController<O> {\n /** @internal */\n _controlledTransformStream: TransformStream<any, O>;\n /** @internal */\n _finishPromise: Promise<undefined> | undefined;\n /** @internal */\n _finishPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _finishPromise_reject?: (reason: any) => void;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise<void>;\n /** @internal */\n _flushAlgorithm: () => Promise<void>;\n /** @internal */\n _cancelAlgorithm: (reason: any) => Promise<void>;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nsetFunctionName(TransformStreamDefaultController.prototype.enqueue, 'enqueue');\nsetFunctionName(TransformStreamDefaultController.prototype.error, 'error');\nsetFunctionName(TransformStreamDefaultController.prototype.terminate, 'terminate');\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController<O = any>(x: any): x is TransformStreamDefaultController<O> {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController<I, O>(stream: TransformStream<I, O>,\n controller: TransformStreamDefaultController<O>,\n transformAlgorithm: (chunk: I) => Promise<void>,\n flushAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._finishPromise = undefined;\n controller._finishPromise_resolve = undefined;\n controller._finishPromise_reject = undefined;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer<I, O>(stream: TransformStream<I, O>,\n transformer: ValidatedTransformer<I, O>) {\n const controller: TransformStreamDefaultController<O> = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm: (chunk: I) => Promise<void>;\n let flushAlgorithm: () => Promise<void>;\n let cancelAlgorithm: (reason: any) => Promise<void>;\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n } else {\n transformAlgorithm = chunk => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n }\n\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n } else {\n flushAlgorithm = () => promiseResolvedWith(undefined);\n }\n\n if (transformer.cancel !== undefined) {\n cancelAlgorithm = reason => transformer.cancel!(reason);\n } else {\n cancelAlgorithm = () => promiseResolvedWith(undefined);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm, cancelAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController<any>) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue<O>(controller: TransformStreamDefaultController<O>, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController<any>, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform<I, O>(controller: TransformStreamDefaultController<O>,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate<O>(controller: TransformStreamDefaultController<O>) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm<I, O>(stream: TransformStream<I, O>, chunk: I): Promise<void> {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform<I, O>(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform<I, O>(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm<I, O>(stream: TransformStream<I, O>, reason: any): Promise<void> {\n const controller = stream._transformStreamController;\n if (controller._finishPromise !== undefined) {\n return controller._finishPromise;\n }\n\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n // Assign the _finishPromise now so that if _cancelAlgorithm calls readable.cancel() internally,\n // we don't run the _cancelAlgorithm again.\n controller._finishPromise = newPromise((resolve, reject) => {\n controller._finishPromise_resolve = resolve;\n controller._finishPromise_reject = reject;\n });\n\n const cancelPromise = controller._cancelAlgorithm(reason);\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n uponPromise(cancelPromise, () => {\n if (readable._state === 'errored') {\n defaultControllerFinishPromiseReject(controller, readable._storedError);\n } else {\n ReadableStreamDefaultControllerError(readable._readableStreamController, reason);\n defaultControllerFinishPromiseResolve(controller);\n }\n return null;\n }, r => {\n ReadableStreamDefaultControllerError(readable._readableStreamController, r);\n defaultControllerFinishPromiseReject(controller, r);\n return null;\n });\n\n return controller._finishPromise;\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm<I, O>(stream: TransformStream<I, O>): Promise<void> {\n const controller = stream._transformStreamController;\n if (controller._finishPromise !== undefined) {\n return controller._finishPromise;\n }\n\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n // Assign the _finishPromise now so that if _flushAlgorithm calls readable.cancel() internally,\n // we don't also run the _cancelAlgorithm.\n controller._finishPromise = newPromise((resolve, reject) => {\n controller._finishPromise_resolve = resolve;\n controller._finishPromise_reject = reject;\n });\n\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n uponPromise(flushPromise, () => {\n if (readable._state === 'errored') {\n defaultControllerFinishPromiseReject(controller, readable._storedError);\n } else {\n ReadableStreamDefaultControllerClose(readable._readableStreamController);\n defaultControllerFinishPromiseResolve(controller);\n }\n return null;\n }, r => {\n ReadableStreamDefaultControllerError(readable._readableStreamController, r);\n defaultControllerFinishPromiseReject(controller, r);\n return null;\n });\n\n return controller._finishPromise;\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise<void> {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\nfunction TransformStreamDefaultSourceCancelAlgorithm<I, O>(stream: TransformStream<I, O>, reason: any): Promise<void> {\n const controller = stream._transformStreamController;\n if (controller._finishPromise !== undefined) {\n return controller._finishPromise;\n }\n\n // stream._writable cannot change after construction, so caching it across a call to user code is safe.\n const writable = stream._writable;\n\n // Assign the _finishPromise now so that if _flushAlgorithm calls writable.abort() or\n // writable.cancel() internally, we don't run the _cancelAlgorithm again, or also run the\n // _flushAlgorithm.\n controller._finishPromise = newPromise((resolve, reject) => {\n controller._finishPromise_resolve = resolve;\n controller._finishPromise_reject = reject;\n });\n\n const cancelPromise = controller._cancelAlgorithm(reason);\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n uponPromise(cancelPromise, () => {\n if (writable._state === 'errored') {\n defaultControllerFinishPromiseReject(controller, writable._storedError);\n } else {\n WritableStreamDefaultControllerErrorIfNeeded(writable._writableStreamController, reason);\n TransformStreamUnblockWrite(stream);\n defaultControllerFinishPromiseResolve(controller);\n }\n return null;\n }, r => {\n WritableStreamDefaultControllerErrorIfNeeded(writable._writableStreamController, r);\n TransformStreamUnblockWrite(stream);\n defaultControllerFinishPromiseReject(controller, r);\n return null;\n });\n\n return controller._finishPromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\nexport function defaultControllerFinishPromiseResolve(controller: TransformStreamDefaultController<any>) {\n if (controller._finishPromise_resolve === undefined) {\n return;\n }\n\n controller._finishPromise_resolve();\n controller._finishPromise_resolve = undefined;\n controller._finishPromise_reject = undefined;\n}\n\nexport function defaultControllerFinishPromiseReject(controller: TransformStreamDefaultController<any>, reason: any) {\n if (controller._finishPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(controller._finishPromise!);\n controller._finishPromise_reject(reason);\n controller._finishPromise_resolve = undefined;\n controller._finishPromise_reject = undefined;\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","/* c8 ignore start */\n// 64 KiB (same size chrome slice theirs blob into Uint8array's)\nconst POOL_SIZE = 65536\n\nif (!globalThis.ReadableStream) {\n // `node:stream/web` got introduced in v16.5.0 as experimental\n // and it's preferred over the polyfilled version. So we also\n // suppress the warning that gets emitted by NodeJS for using it.\n try {\n const process = require('node:process')\n const { emitWarning } = process\n try {\n process.emitWarning = () => {}\n Object.assign(globalThis, require('node:stream/web'))\n process.emitWarning = emitWarning\n } catch (error) {\n process.emitWarning = emitWarning\n throw error\n }\n } catch (error) {\n // fallback to polyfill implementation\n Object.assign(globalThis, require('web-streams-polyfill/dist/ponyfill.es2018.js'))\n }\n}\n\ntry {\n // Don't use node: prefix for this, require+node: is not supported until node v14.14\n // Only `import()` can use prefix in 12.20 and later\n const { Blob } = require('buffer')\n if (Blob && !Blob.prototype.stream) {\n Blob.prototype.stream = function name (params) {\n let position = 0\n const blob = this\n\n return new ReadableStream({\n type: 'bytes',\n async pull (ctrl) {\n const chunk = blob.slice(position, Math.min(blob.size, position + POOL_SIZE))\n const buffer = await chunk.arrayBuffer()\n position += buffer.byteLength\n ctrl.enqueue(new Uint8Array(buffer))\n\n if (position === blob.size) {\n ctrl.close()\n }\n }\n })\n }\n }\n} catch (error) {}\n/* c8 ignore end */\n","/*! fetch-blob. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */\n\n// TODO (jimmywarting): in the feature use conditional loading with top level await (requires 14.x)\n// Node has recently added whatwg stream into core\n\nimport './streams.cjs'\n\n// 64 KiB (same size chrome slice theirs blob into Uint8array's)\nconst POOL_SIZE = 65536\n\n/** @param {(Blob | Uint8Array)[]} parts */\nasync function * toIterator (parts, clone = true) {\n for (const part of parts) {\n if ('stream' in part) {\n yield * (/** @type {AsyncIterableIterator<Uint8Array>} */ (part.stream()))\n } else if (ArrayBuffer.isView(part)) {\n if (clone) {\n let position = part.byteOffset\n const end = part.byteOffset + part.byteLength\n while (position !== end) {\n const size = Math.min(end - position, POOL_SIZE)\n const chunk = part.buffer.slice(position, position + size)\n position += chunk.byteLength\n yield new Uint8Array(chunk)\n }\n } else {\n yield part\n }\n /* c8 ignore next 10 */\n } else {\n // For blobs that have arrayBuffer but no stream method (nodes buffer.Blob)\n let position = 0, b = (/** @type {Blob} */ (part))\n while (position !== b.size) {\n const chunk = b.slice(position, Math.min(b.size, position + POOL_SIZE))\n const buffer = await chunk.arrayBuffer()\n position += buffer.byteLength\n yield new Uint8Array(buffer)\n }\n }\n }\n}\n\nconst _Blob = class Blob {\n /** @type {Array.<(Blob|Uint8Array)>} */\n #parts = []\n #type = ''\n #size = 0\n #endings = 'transparent'\n\n /**\n * The Blob() constructor returns a new Blob object. The content\n * of the blob consists of the concatenation of the values given\n * in the parameter array.\n *\n * @param {*} blobParts\n * @param {{ type?: string, endings?: string }} [options]\n */\n constructor (blobParts = [], options = {}) {\n if (typeof blobParts !== 'object' || blobParts === null) {\n throw new TypeError('Failed to construct \\'Blob\\': The provided value cannot be converted to a sequence.')\n }\n\n if (typeof blobParts[Symbol.iterator] !== 'function') {\n throw new TypeError('Failed to construct \\'Blob\\': The object must have a callable @@iterator property.')\n }\n\n if (typeof options !== 'object' && typeof options !== 'function') {\n throw new TypeError('Failed to construct \\'Blob\\': parameter 2 cannot convert to dictionary.')\n }\n\n if (options === null) options = {}\n\n const encoder = new TextEncoder()\n for (const element of blobParts) {\n let part\n if (ArrayBuffer.isView(element)) {\n part = new Uint8Array(element.buffer.slice(element.byteOffset, element.byteOffset + element.byteLength))\n } else if (element instanceof ArrayBuffer) {\n part = new Uint8Array(element.slice(0))\n } else if (element instanceof Blob) {\n part = element\n } else {\n part = encoder.encode(`${element}`)\n }\n\n this.#size += ArrayBuffer.isView(part) ? part.byteLength : part.size\n this.#parts.push(part)\n }\n\n this.#endings = `${options.endings === undefined ? 'transparent' : options.endings}`\n const type = options.type === undefined ? '' : String(options.type)\n this.#type = /^[\\x20-\\x7E]*$/.test(type) ? type : ''\n }\n\n /**\n * The Blob interface's size property returns the\n * size of the Blob in bytes.\n */\n get size () {\n return this.#size\n }\n\n /**\n * The type property of a Blob object returns the MIME type of the file.\n */\n get type () {\n return this.#type\n }\n\n /**\n * The text() method in the Blob interface returns a Promise\n * that resolves with a string containing the contents of\n * the blob, interpreted as UTF-8.\n *\n * @return {Promise<string>}\n */\n async text () {\n // More optimized than using this.arrayBuffer()\n // that requires twice as much ram\n const decoder = new TextDecoder()\n let str = ''\n for await (const part of toIterator(this.#parts, false)) {\n str += decoder.decode(part, { stream: true })\n }\n // Remaining\n str += decoder.decode()\n return str\n }\n\n /**\n * The arrayBuffer() method in the Blob interface returns a\n * Promise that resolves with the contents of the blob as\n * binary data contained in an ArrayBuffer.\n *\n * @return {Promise<ArrayBuffer>}\n */\n async arrayBuffer () {\n // Easier way... Just a unnecessary overhead\n // const view = new Uint8Array(this.size);\n // await this.stream().getReader({mode: 'byob'}).read(view);\n // return view.buffer;\n\n const data = new Uint8Array(this.size)\n let offset = 0\n for await (const chunk of toIterator(this.#parts, false)) {\n data.set(chunk, offset)\n offset += chunk.length\n }\n\n return data.buffer\n }\n\n stream () {\n const it = toIterator(this.#parts, true)\n\n return new globalThis.ReadableStream({\n // @ts-ignore\n type: 'bytes',\n async pull (ctrl) {\n const chunk = await it.next()\n chunk.done ? ctrl.close() : ctrl.enqueue(chunk.value)\n },\n\n async cancel () {\n await it.return()\n }\n })\n }\n\n /**\n * The Blob interface's slice() method creates and returns a\n * new Blob object which contains data from a subset of the\n * blob on which it's called.\n *\n * @param {number} [start]\n * @param {number} [end]\n * @param {string} [type]\n */\n slice (start = 0, end = this.size, type = '') {\n const { size } = this\n\n let relativeStart = start < 0 ? Math.max(size + start, 0) : Math.min(start, size)\n let relativeEnd = end < 0 ? Math.max(size + end, 0) : Math.min(end, size)\n\n const span = Math.max(relativeEnd - relativeStart, 0)\n const parts = this.#parts\n const blobParts = []\n let added = 0\n\n for (const part of parts) {\n // don't add the overflow to new blobParts\n if (added >= span) {\n break\n }\n\n const size = ArrayBuffer.isView(part) ? part.byteLength : part.size\n if (relativeStart && size <= relativeStart) {\n // Skip the beginning and change the relative\n // start & end position as we skip the unwanted parts\n relativeStart -= size\n relativeEnd -= size\n } else {\n let chunk\n if (ArrayBuffer.isView(part)) {\n chunk = part.subarray(relativeStart, Math.min(size, relativeEnd))\n added += chunk.byteLength\n } else {\n chunk = part.slice(relativeStart, Math.min(size, relativeEnd))\n added += chunk.size\n }\n relativeEnd -= size\n blobParts.push(chunk)\n relativeStart = 0 // All next sequential parts should start at 0\n }\n }\n\n const blob = new Blob([], { type: String(type).toLowerCase() })\n blob.#size = span\n blob.#parts = blobParts\n\n return blob\n }\n\n get [Symbol.toStringTag] () {\n return 'Blob'\n }\n\n static [Symbol.hasInstance] (object) {\n return (\n object &&\n typeof object === 'object' &&\n typeof object.constructor === 'function' &&\n (\n typeof object.stream === 'function' ||\n typeof object.arrayBuffer === 'function'\n ) &&\n /^(Blob|File)$/.test(object[Symbol.toStringTag])\n )\n }\n}\n\nObject.defineProperties(_Blob.prototype, {\n size: { enumerable: true },\n type: { enumerable: true },\n slice: { enumerable: true }\n})\n\n/** @type {typeof globalThis.Blob} */\nexport const Blob = _Blob\nexport default Blob\n","import Blob from './index.js'\n\nconst _File = class File extends Blob {\n #lastModified = 0\n #name = ''\n\n /**\n * @param {*[]} fileBits\n * @param {string} fileName\n * @param {{lastModified?: number, type?: string}} options\n */// @ts-ignore\n constructor (fileBits, fileName, options = {}) {\n if (arguments.length < 2) {\n throw new TypeError(`Failed to construct 'File': 2 arguments required, but only ${arguments.length} present.`)\n }\n super(fileBits, options)\n\n if (options === null) options = {}\n\n // Simulate WebIDL type casting for NaN value in lastModified option.\n const lastModified = options.lastModified === undefined ? Date.now() : Number(options.lastModified)\n if (!Number.isNaN(lastModified)) {\n this.#lastModified = lastModified\n }\n\n this.#name = String(fileName)\n }\n\n get name () {\n return this.#name\n }\n\n get lastModified () {\n return this.#lastModified\n }\n\n get [Symbol.toStringTag] () {\n return 'File'\n }\n\n static [Symbol.hasInstance] (object) {\n return !!object && object instanceof Blob &&\n /^(File)$/.test(object[Symbol.toStringTag])\n }\n}\n\n/** @type {typeof globalThis.File} */// @ts-ignore\nexport const File = _File\nexport default File\n","/*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */\n\nimport C from 'fetch-blob'\nimport F from 'fetch-blob/file.js'\n\nvar {toStringTag:t,iterator:i,hasInstance:h}=Symbol,\nr=Math.random,\nm='append,set,get,getAll,delete,keys,values,entries,forEach,constructor'.split(','),\nf=(a,b,c)=>(a+='',/^(Blob|File)$/.test(b && b[t])?[(c=c!==void 0?c+'':b[t]=='File'?b.name:'blob',a),b.name!==c||b[t]=='blob'?new F([b],c,b):b]:[a,b+'']),\ne=(c,f)=>(f?c:c.replace(/\\r?\\n|\\r/g,'\\r\\n')).replace(/\\n/g,'%0A').replace(/\\r/g,'%0D').replace(/\"/g,'%22'),\nx=(n, a, e)=>{if(a.length<e){throw new TypeError(`Failed to execute '${n}' on 'FormData': ${e} arguments required, but only ${a.length} present.`)}}\n\nexport const File = F\n\n/** @type {typeof globalThis.FormData} */\nexport const FormData = class FormData {\n#d=[];\nconstructor(...a){if(a.length)throw new TypeError(`Failed to construct 'FormData': parameter 1 is not of type 'HTMLFormElement'.`)}\nget [t]() {return 'FormData'}\n[i](){return this.entries()}\nstatic [h](o) {return o&&typeof o==='object'&&o[t]==='FormData'&&!m.some(m=>typeof o[m]!='function')}\nappend(...a){x('append',arguments,2);this.#d.push(f(...a))}\ndelete(a){x('delete',arguments,1);a+='';this.#d=this.#d.filter(([b])=>b!==a)}\nget(a){x('get',arguments,1);a+='';for(var b=this.#d,l=b.length,c=0;c<l;c++)if(b[c][0]===a)return b[c][1];return null}\ngetAll(a,b){x('getAll',arguments,1);b=[];a+='';this.#d.forEach(c=>c[0]===a&&b.push(c[1]));return b}\nhas(a){x('has',arguments,1);a+='';return this.#d.some(b=>b[0]===a)}\nforEach(a,b){x('forEach',arguments,1);for(var [c,d]of this)a.call(b,d,c,this)}\nset(...a){x('set',arguments,2);var b=[],c=!0;a=f(...a);this.#d.forEach(d=>{d[0]===a[0]?c&&(c=!b.push(a)):b.push(d)});c&&b.push(a);this.#d=b}\n*entries(){yield*this.#d}\n*keys(){for(var[a]of this)yield a}\n*values(){for(var[,a]of this)yield a}}\n\n/** @param {FormData} F */\nexport function formDataToBlob (F,B=C){\nvar b=`${r()}${r()}`.replace(/\\./g, '').slice(-28).padStart(32, '-'),c=[],p=`--${b}\\r\\nContent-Disposition: form-data; name=\"`\nF.forEach((v,n)=>typeof v=='string'\n?c.push(p+e(n)+`\"\\r\\n\\r\\n${v.replace(/\\r(?!\\n)|(?<!\\r)\\n/g, '\\r\\n')}\\r\\n`)\n:c.push(p+e(n)+`\"; filename=\"${e(v.name, 1)}\"\\r\\nContent-Type: ${v.type||\"application/octet-stream\"}\\r\\n\\r\\n`, v, '\\r\\n'))\nc.push(`--${b}--`)\nreturn new B(c,{type:\"multipart/form-data; boundary=\"+b})}\n","export class FetchBaseError extends Error {\n\tconstructor(message, type) {\n\t\tsuper(message);\n\t\t// Hide custom error implementation details from end-users\n\t\tError.captureStackTrace(this, this.constructor);\n\n\t\tthis.type = type;\n\t}\n\n\tget name() {\n\t\treturn this.constructor.name;\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn this.constructor.name;\n\t}\n}\n","\nimport {FetchBaseError} from './base.js';\n\n/**\n * @typedef {{ address?: string, code: string, dest?: string, errno: number, info?: object, message: string, path?: string, port?: number, syscall: string}} SystemError\n*/\n\n/**\n * FetchError interface for operational errors\n */\nexport class FetchError extends FetchBaseError {\n\t/**\n\t * @param {string} message - Error message for human\n\t * @param {string} [type] - Error type for machine\n\t * @param {SystemError} [systemError] - For Node.js system error\n\t */\n\tconstructor(message, type, systemError) {\n\t\tsuper(message, type);\n\t\t// When err.type is `system`, err.erroredSysCall contains system error and err.code contains system error code\n\t\tif (systemError) {\n\t\t\t// eslint-disable-next-line no-multi-assign\n\t\t\tthis.code = this.errno = systemError.code;\n\t\t\tthis.erroredSysCall = systemError.syscall;\n\t\t}\n\t}\n}\n","/**\n * Is.js\n *\n * Object type checks.\n */\n\nconst NAME = Symbol.toStringTag;\n\n/**\n * Check if `obj` is a URLSearchParams object\n * ref: https://github.com/node-fetch/node-fetch/issues/296#issuecomment-307598143\n * @param {*} object - Object to check for\n * @return {boolean}\n */\nexport const isURLSearchParameters = object => {\n\treturn (\n\t\ttypeof object === 'object' &&\n\t\ttypeof object.append === 'function' &&\n\t\ttypeof object.delete === 'function' &&\n\t\ttypeof object.get === 'function' &&\n\t\ttypeof object.getAll === 'function' &&\n\t\ttypeof object.has === 'function' &&\n\t\ttypeof object.set === 'function' &&\n\t\ttypeof object.sort === 'function' &&\n\t\tobject[NAME] === 'URLSearchParams'\n\t);\n};\n\n/**\n * Check if `object` is a W3C `Blob` object (which `File` inherits from)\n * @param {*} object - Object to check for\n * @return {boolean}\n */\nexport const isBlob = object => {\n\treturn (\n\t\tobject &&\n\t\ttypeof object === 'object' &&\n\t\ttypeof object.arrayBuffer === 'function' &&\n\t\ttypeof object.type === 'string' &&\n\t\ttypeof object.stream === 'function' &&\n\t\ttypeof object.constructor === 'function' &&\n\t\t/^(Blob|File)$/.test(object[NAME])\n\t);\n};\n\n/**\n * Check if `obj` is an instance of AbortSignal.\n * @param {*} object - Object to check for\n * @return {boolean}\n */\nexport const isAbortSignal = object => {\n\treturn (\n\t\ttypeof object === 'object' && (\n\t\t\tobject[NAME] === 'AbortSignal' ||\n\t\t\tobject[NAME] === 'EventTarget'\n\t\t)\n\t);\n};\n\n/**\n * isDomainOrSubdomain reports whether sub is a subdomain (or exact match) of\n * the parent domain.\n *\n * Both domains must already be in canonical form.\n * @param {string|URL} original\n * @param {string|URL} destination\n */\nexport const isDomainOrSubdomain = (destination, original) => {\n\tconst orig = new URL(original).hostname;\n\tconst dest = new URL(destination).hostname;\n\n\treturn orig === dest || orig.endsWith(`.${dest}`);\n};\n\n/**\n * isSameProtocol reports whether the two provided URLs use the same protocol.\n *\n * Both domains must already be in canonical form.\n * @param {string|URL} original\n * @param {string|URL} destination\n */\nexport const isSameProtocol = (destination, original) => {\n\tconst orig = new URL(original).protocol;\n\tconst dest = new URL(destination).protocol;\n\n\treturn orig === dest;\n};\n","/*! node-domexception. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */\n\nif (!globalThis.DOMException) {\n try {\n const { MessageChannel } = require('worker_threads'),\n port = new MessageChannel().port1,\n ab = new ArrayBuffer()\n port.postMessage(ab, [ab, ab])\n } catch (err) {\n err.constructor.name === 'DOMException' && (\n globalThis.DOMException = err.constructor\n )\n }\n}\n\nmodule.exports = globalThis.DOMException\n","import { statSync, createReadStream, promises as fs } from 'node:fs'\nimport { basename } from 'node:path'\nimport DOMException from 'node-domexception'\n\nimport File from './file.js'\nimport Blob from './index.js'\n\nconst { stat } = fs\n\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n */\nconst blobFromSync = (path, type) => fromBlob(statSync(path), path, type)\n\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n * @returns {Promise<Blob>}\n */\nconst blobFrom = (path, type) => stat(path).then(stat => fromBlob(stat, path, type))\n\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n * @returns {Promise<File>}\n */\nconst fileFrom = (path, type) => stat(path).then(stat => fromFile(stat, path, type))\n\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n */\nconst fileFromSync = (path, type) => fromFile(statSync(path), path, type)\n\n// @ts-ignore\nconst fromBlob = (stat, path, type = '') => new Blob([new BlobDataItem({\n path,\n size: stat.size,\n lastModified: stat.mtimeMs,\n start: 0\n})], { type })\n\n// @ts-ignore\nconst fromFile = (stat, path, type = '') => new File([new BlobDataItem({\n path,\n size: stat.size,\n lastModified: stat.mtimeMs,\n start: 0\n})], basename(path), { type, lastModified: stat.mtimeMs })\n\n/**\n * This is a blob backed up by a file on the disk\n * with minium requirement. Its wrapped around a Blob as a blobPart\n * so you have no direct access to this.\n *\n * @private\n */\nclass BlobDataItem {\n #path\n #start\n\n constructor (options) {\n this.#path = options.path\n this.#start = options.start\n this.size = options.size\n this.lastModified = options.lastModified\n }\n\n /**\n * Slicing arguments is first validated and formatted\n * to not be out of range by Blob.prototype.slice\n */\n slice (start, end) {\n return new BlobDataItem({\n path: this.#path,\n lastModified: this.lastModified,\n size: end - start,\n start: this.#start + start\n })\n }\n\n async * stream () {\n const { mtimeMs } = await stat(this.#path)\n if (mtimeMs > this.lastModified) {\n throw new DOMException('The requested file could not be read, typically due to permission problems that have occurred after a reference to a file was acquired.', 'NotReadableError')\n }\n yield * createReadStream(this.#path, {\n start: this.#start,\n end: this.#start + this.size - 1\n })\n }\n\n get [Symbol.toStringTag] () {\n return 'Blob'\n }\n}\n\nexport default blobFromSync\nexport { File, Blob, blobFrom, blobFromSync, fileFrom, fileFromSync }\n","import {File} from 'fetch-blob/from.js';\nimport {FormData} from 'formdata-polyfill/esm.min.js';\n\nlet s = 0;\nconst S = {\n\tSTART_BOUNDARY: s++,\n\tHEADER_FIELD_START: s++,\n\tHEADER_FIELD: s++,\n\tHEADER_VALUE_START: s++,\n\tHEADER_VALUE: s++,\n\tHEADER_VALUE_ALMOST_DONE: s++,\n\tHEADERS_ALMOST_DONE: s++,\n\tPART_DATA_START: s++,\n\tPART_DATA: s++,\n\tEND: s++\n};\n\nlet f = 1;\nconst F = {\n\tPART_BOUNDARY: f,\n\tLAST_BOUNDARY: f *= 2\n};\n\nconst LF = 10;\nconst CR = 13;\nconst SPACE = 32;\nconst HYPHEN = 45;\nconst COLON = 58;\nconst A = 97;\nconst Z = 122;\n\nconst lower = c => c | 0x20;\n\nconst noop = () => {};\n\nclass MultipartParser {\n\t/**\n\t * @param {string} boundary\n\t */\n\tconstructor(boundary) {\n\t\tthis.index = 0;\n\t\tthis.flags = 0;\n\n\t\tthis.onHeaderEnd = noop;\n\t\tthis.onHeaderField = noop;\n\t\tthis.onHeadersEnd = noop;\n\t\tthis.onHeaderValue = noop;\n\t\tthis.onPartBegin = noop;\n\t\tthis.onPartData = noop;\n\t\tthis.onPartEnd = noop;\n\n\t\tthis.boundaryChars = {};\n\n\t\tboundary = '\\r\\n--' + boundary;\n\t\tconst ui8a = new Uint8Array(boundary.length);\n\t\tfor (let i = 0; i < boundary.length; i++) {\n\t\t\tui8a[i] = boundary.charCodeAt(i);\n\t\t\tthis.boundaryChars[ui8a[i]] = true;\n\t\t}\n\n\t\tthis.boundary = ui8a;\n\t\tthis.lookbehind = new Uint8Array(this.boundary.length + 8);\n\t\tthis.state = S.START_BOUNDARY;\n\t}\n\n\t/**\n\t * @param {Uint8Array} data\n\t */\n\twrite(data) {\n\t\tlet i = 0;\n\t\tconst length_ = data.length;\n\t\tlet previousIndex = this.index;\n\t\tlet {lookbehind, boundary, boundaryChars, index, state, flags} = this;\n\t\tconst boundaryLength = this.boundary.length;\n\t\tconst boundaryEnd = boundaryLength - 1;\n\t\tconst bufferLength = data.length;\n\t\tlet c;\n\t\tlet cl;\n\n\t\tconst mark = name => {\n\t\t\tthis[name + 'Mark'] = i;\n\t\t};\n\n\t\tconst clear = name => {\n\t\t\tdelete this[name + 'Mark'];\n\t\t};\n\n\t\tconst callback = (callbackSymbol, start, end, ui8a) => {\n\t\t\tif (start === undefined || start !== end) {\n\t\t\t\tthis[callbackSymbol](ui8a && ui8a.subarray(start, end));\n\t\t\t}\n\t\t};\n\n\t\tconst dataCallback = (name, clear) => {\n\t\t\tconst markSymbol = name + 'Mark';\n\t\t\tif (!(markSymbol in this)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (clear) {\n\t\t\t\tcallback(name, this[markSymbol], i, data);\n\t\t\t\tdelete this[markSymbol];\n\t\t\t} else {\n\t\t\t\tcallback(name, this[markSymbol], data.length, data);\n\t\t\t\tthis[markSymbol] = 0;\n\t\t\t}\n\t\t};\n\n\t\tfor (i = 0; i < length_; i++) {\n\t\t\tc = data[i];\n\n\t\t\tswitch (state) {\n\t\t\t\tcase S.START_BOUNDARY:\n\t\t\t\t\tif (index === boundary.length - 2) {\n\t\t\t\t\t\tif (c === HYPHEN) {\n\t\t\t\t\t\t\tflags |= F.LAST_BOUNDARY;\n\t\t\t\t\t\t} else if (c !== CR) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (index - 1 === boundary.length - 2) {\n\t\t\t\t\t\tif (flags & F.LAST_BOUNDARY && c === HYPHEN) {\n\t\t\t\t\t\t\tstate = S.END;\n\t\t\t\t\t\t\tflags = 0;\n\t\t\t\t\t\t} else if (!(flags & F.LAST_BOUNDARY) && c === LF) {\n\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t\tcallback('onPartBegin');\n\t\t\t\t\t\t\tstate = S.HEADER_FIELD_START;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (c !== boundary[index + 2]) {\n\t\t\t\t\t\tindex = -2;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (c === boundary[index + 2]) {\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase S.HEADER_FIELD_START:\n\t\t\t\t\tstate = S.HEADER_FIELD;\n\t\t\t\t\tmark('onHeaderField');\n\t\t\t\t\tindex = 0;\n\t\t\t\t\t// falls through\n\t\t\t\tcase S.HEADER_FIELD:\n\t\t\t\t\tif (c === CR) {\n\t\t\t\t\t\tclear('onHeaderField');\n\t\t\t\t\t\tstate = S.HEADERS_ALMOST_DONE;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tindex++;\n\t\t\t\t\tif (c === HYPHEN) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (c === COLON) {\n\t\t\t\t\t\tif (index === 1) {\n\t\t\t\t\t\t\t// empty header field\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdataCallback('onHeaderField', true);\n\t\t\t\t\t\tstate = S.HEADER_VALUE_START;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcl = lower(c);\n\t\t\t\t\tif (cl < A || cl > Z) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase S.HEADER_VALUE_START:\n\t\t\t\t\tif (c === SPACE) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tmark('onHeaderValue');\n\t\t\t\t\tstate = S.HEADER_VALUE;\n\t\t\t\t\t// falls through\n\t\t\t\tcase S.HEADER_VALUE:\n\t\t\t\t\tif (c === CR) {\n\t\t\t\t\t\tdataCallback('onHeaderValue', true);\n\t\t\t\t\t\tcallback('onHeaderEnd');\n\t\t\t\t\t\tstate = S.HEADER_VALUE_ALMOST_DONE;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase S.HEADER_VALUE_ALMOST_DONE:\n\t\t\t\t\tif (c !== LF) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tstate = S.HEADER_FIELD_START;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S.HEADERS_ALMOST_DONE:\n\t\t\t\t\tif (c !== LF) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback('onHeadersEnd');\n\t\t\t\t\tstate = S.PART_DATA_START;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S.PART_DATA_START:\n\t\t\t\t\tstate = S.PART_DATA;\n\t\t\t\t\tmark('onPartData');\n\t\t\t\t\t// falls through\n\t\t\t\tcase S.PART_DATA:\n\t\t\t\t\tpreviousIndex = index;\n\n\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t// boyer-moore derrived algorithm to safely skip non-boundary data\n\t\t\t\t\t\ti += boundaryEnd;\n\t\t\t\t\t\twhile (i < bufferLength && !(data[i] in boundaryChars)) {\n\t\t\t\t\t\t\ti += boundaryLength;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ti -= boundaryEnd;\n\t\t\t\t\t\tc = data[i];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (index < boundary.length) {\n\t\t\t\t\t\tif (boundary[index] === c) {\n\t\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\t\tdataCallback('onPartData', true);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (index === boundary.length) {\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tif (c === CR) {\n\t\t\t\t\t\t\t// CR = part boundary\n\t\t\t\t\t\t\tflags |= F.PART_BOUNDARY;\n\t\t\t\t\t\t} else if (c === HYPHEN) {\n\t\t\t\t\t\t\t// HYPHEN = end boundary\n\t\t\t\t\t\t\tflags |= F.LAST_BOUNDARY;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (index - 1 === boundary.length) {\n\t\t\t\t\t\tif (flags & F.PART_BOUNDARY) {\n\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t\tif (c === LF) {\n\t\t\t\t\t\t\t\t// unset the PART_BOUNDARY flag\n\t\t\t\t\t\t\t\tflags &= ~F.PART_BOUNDARY;\n\t\t\t\t\t\t\t\tcallback('onPartEnd');\n\t\t\t\t\t\t\t\tcallback('onPartBegin');\n\t\t\t\t\t\t\t\tstate = S.HEADER_FIELD_START;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (flags & F.LAST_BOUNDARY) {\n\t\t\t\t\t\t\tif (c === HYPHEN) {\n\t\t\t\t\t\t\t\tcallback('onPartEnd');\n\t\t\t\t\t\t\t\tstate = S.END;\n\t\t\t\t\t\t\t\tflags = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\t// when matching a possible boundary, keep a lookbehind reference\n\t\t\t\t\t\t// in case it turns out to be a false lead\n\t\t\t\t\t\tlookbehind[index - 1] = c;\n\t\t\t\t\t} else if (previousIndex > 0) {\n\t\t\t\t\t\t// if our boundary turned out to be rubbish, the captured lookbehind\n\t\t\t\t\t\t// belongs to partData\n\t\t\t\t\t\tconst _lookbehind = new Uint8Array(lookbehind.buffer, lookbehind.byteOffset, lookbehind.byteLength);\n\t\t\t\t\t\tcallback('onPartData', 0, previousIndex, _lookbehind);\n\t\t\t\t\t\tpreviousIndex = 0;\n\t\t\t\t\t\tmark('onPartData');\n\n\t\t\t\t\t\t// reconsider the current character even so it interrupted the sequence\n\t\t\t\t\t\t// it could be the beginning of a new sequence\n\t\t\t\t\t\ti--;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase S.END:\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unexpected state entered: ${state}`);\n\t\t\t}\n\t\t}\n\n\t\tdataCallback('onHeaderField');\n\t\tdataCallback('onHeaderValue');\n\t\tdataCallback('onPartData');\n\n\t\t// Update properties for the next call\n\t\tthis.index = index;\n\t\tthis.state = state;\n\t\tthis.flags = flags;\n\t}\n\n\tend() {\n\t\tif ((this.state === S.HEADER_FIELD_START && this.index === 0) ||\n\t\t\t(this.state === S.PART_DATA && this.index === this.boundary.length)) {\n\t\t\tthis.onPartEnd();\n\t\t} else if (this.state !== S.END) {\n\t\t\tthrow new Error('MultipartParser.end(): stream ended unexpectedly');\n\t\t}\n\t}\n}\n\nfunction _fileName(headerValue) {\n\t// matches either a quoted-string or a token (RFC 2616 section 19.5.1)\n\tconst m = headerValue.match(/\\bfilename=(\"(.*?)\"|([^()<>@,;:\\\\\"/[\\]?={}\\s\\t]+))($|;\\s)/i);\n\tif (!m) {\n\t\treturn;\n\t}\n\n\tconst match = m[2] || m[3] || '';\n\tlet filename = match.slice(match.lastIndexOf('\\\\') + 1);\n\tfilename = filename.replace(/%22/g, '\"');\n\tfilename = filename.replace(/&#(\\d{4});/g, (m, code) => {\n\t\treturn String.fromCharCode(code);\n\t});\n\treturn filename;\n}\n\nexport async function toFormData(Body, ct) {\n\tif (!/multipart/i.test(ct)) {\n\t\tthrow new TypeError('Failed to fetch');\n\t}\n\n\tconst m = ct.match(/boundary=(?:\"([^\"]+)\"|([^;]+))/i);\n\n\tif (!m) {\n\t\tthrow new TypeError('no or bad content-type header, no multipart boundary');\n\t}\n\n\tconst parser = new MultipartParser(m[1] || m[2]);\n\n\tlet headerField;\n\tlet headerValue;\n\tlet entryValue;\n\tlet entryName;\n\tlet contentType;\n\tlet filename;\n\tconst entryChunks = [];\n\tconst formData = new FormData();\n\n\tconst onPartData = ui8a => {\n\t\tentryValue += decoder.decode(ui8a, {stream: true});\n\t};\n\n\tconst appendToFile = ui8a => {\n\t\tentryChunks.push(ui8a);\n\t};\n\n\tconst appendFileToFormData = () => {\n\t\tconst file = new File(entryChunks, filename, {type: contentType});\n\t\tformData.append(entryName, file);\n\t};\n\n\tconst appendEntryToFormData = () => {\n\t\tformData.append(entryName, entryValue);\n\t};\n\n\tconst decoder = new TextDecoder('utf-8');\n\tdecoder.decode();\n\n\tparser.onPartBegin = function () {\n\t\tparser.onPartData = onPartData;\n\t\tparser.onPartEnd = appendEntryToFormData;\n\n\t\theaderField = '';\n\t\theaderValue = '';\n\t\tentryValue = '';\n\t\tentryName = '';\n\t\tcontentType = '';\n\t\tfilename = null;\n\t\tentryChunks.length = 0;\n\t};\n\n\tparser.onHeaderField = function (ui8a) {\n\t\theaderField += decoder.decode(ui8a, {stream: true});\n\t};\n\n\tparser.onHeaderValue = function (ui8a) {\n\t\theaderValue += decoder.decode(ui8a, {stream: true});\n\t};\n\n\tparser.onHeaderEnd = function () {\n\t\theaderValue += decoder.decode();\n\t\theaderField = headerField.toLowerCase();\n\n\t\tif (headerField === 'content-disposition') {\n\t\t\t// matches either a quoted-string or a token (RFC 2616 section 19.5.1)\n\t\t\tconst m = headerValue.match(/\\bname=(\"([^\"]*)\"|([^()<>@,;:\\\\\"/[\\]?={}\\s\\t]+))/i);\n\n\t\t\tif (m) {\n\t\t\t\tentryName = m[2] || m[3] || '';\n\t\t\t}\n\n\t\t\tfilename = _fileName(headerValue);\n\n\t\t\tif (filename) {\n\t\t\t\tparser.onPartData = appendToFile;\n\t\t\t\tparser.onPartEnd = appendFileToFormData;\n\t\t\t}\n\t\t} else if (headerField === 'content-type') {\n\t\t\tcontentType = headerValue;\n\t\t}\n\n\t\theaderValue = '';\n\t\theaderField = '';\n\t};\n\n\tfor await (const chunk of Body) {\n\t\tparser.write(chunk);\n\t}\n\n\tparser.end();\n\n\treturn formData;\n}\n","\n/**\n * Body.js\n *\n * Body interface provides common methods for Request and Response\n */\n\nimport Stream, {PassThrough} from 'node:stream';\nimport {types, deprecate, promisify} from 'node:util';\nimport {Buffer} from 'node:buffer';\n\nimport Blob from 'fetch-blob';\nimport {FormData, formDataToBlob} from 'formdata-polyfill/esm.min.js';\n\nimport {FetchError} from './errors/fetch-error.js';\nimport {FetchBaseError} from './errors/base.js';\nimport {isBlob, isURLSearchParameters} from './utils/is.js';\n\nconst pipeline = promisify(Stream.pipeline);\nconst INTERNALS = Symbol('Body internals');\n\n/**\n * Body mixin\n *\n * Ref: https://fetch.spec.whatwg.org/#body\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nexport default class Body {\n\tconstructor(body, {\n\t\tsize = 0\n\t} = {}) {\n\t\tlet boundary = null;\n\n\t\tif (body === null) {\n\t\t\t// Body is undefined or null\n\t\t\tbody = null;\n\t\t} else if (isURLSearchParameters(body)) {\n\t\t\t// Body is a URLSearchParams\n\t\t\tbody = Buffer.from(body.toString());\n\t\t} else if (isBlob(body)) {\n\t\t\t// Body is blob\n\t\t} else if (Buffer.isBuffer(body)) {\n\t\t\t// Body is Buffer\n\t\t} else if (types.isAnyArrayBuffer(body)) {\n\t\t\t// Body is ArrayBuffer\n\t\t\tbody = Buffer.from(body);\n\t\t} else if (ArrayBuffer.isView(body)) {\n\t\t\t// Body is ArrayBufferView\n\t\t\tbody = Buffer.from(body.buffer, body.byteOffset, body.byteLength);\n\t\t} else if (body instanceof Stream) {\n\t\t\t// Body is stream\n\t\t} else if (body instanceof FormData) {\n\t\t\t// Body is FormData\n\t\t\tbody = formDataToBlob(body);\n\t\t\tboundary = body.type.split('=')[1];\n\t\t} else {\n\t\t\t// None of the above\n\t\t\t// coerce to string then buffer\n\t\t\tbody = Buffer.from(String(body));\n\t\t}\n\n\t\tlet stream = body;\n\n\t\tif (Buffer.isBuffer(body)) {\n\t\t\tstream = Stream.Readable.from(body);\n\t\t} else if (isBlob(body)) {\n\t\t\tstream = Stream.Readable.from(body.stream());\n\t\t}\n\n\t\tthis[INTERNALS] = {\n\t\t\tbody,\n\t\t\tstream,\n\t\t\tboundary,\n\t\t\tdisturbed: false,\n\t\t\terror: null\n\t\t};\n\t\tthis.size = size;\n\n\t\tif (body instanceof Stream) {\n\t\t\tbody.on('error', error_ => {\n\t\t\t\tconst error = error_ instanceof FetchBaseError ?\n\t\t\t\t\terror_ :\n\t\t\t\t\tnew FetchError(`Invalid response body while trying to fetch ${this.url}: ${error_.message}`, 'system', error_);\n\t\t\t\tthis[INTERNALS].error = error;\n\t\t\t});\n\t\t}\n\t}\n\n\tget body() {\n\t\treturn this[INTERNALS].stream;\n\t}\n\n\tget bodyUsed() {\n\t\treturn this[INTERNALS].disturbed;\n\t}\n\n\t/**\n\t * Decode response as ArrayBuffer\n\t *\n\t * @return Promise\n\t */\n\tasync arrayBuffer() {\n\t\tconst {buffer, byteOffset, byteLength} = await consumeBody(this);\n\t\treturn buffer.slice(byteOffset, byteOffset + byteLength);\n\t}\n\n\tasync formData() {\n\t\tconst ct = this.headers.get('content-type');\n\n\t\tif (ct.startsWith('application/x-www-form-urlencoded')) {\n\t\t\tconst formData = new FormData();\n\t\t\tconst parameters = new URLSearchParams(await this.text());\n\n\t\t\tfor (const [name, value] of parameters) {\n\t\t\t\tformData.append(name, value);\n\t\t\t}\n\n\t\t\treturn formData;\n\t\t}\n\n\t\tconst {toFormData} = await import('./utils/multipart-parser.js');\n\t\treturn toFormData(this.body, ct);\n\t}\n\n\t/**\n\t * Return raw response as Blob\n\t *\n\t * @return Promise\n\t */\n\tasync blob() {\n\t\tconst ct = (this.headers && this.headers.get('content-type')) || (this[INTERNALS].body && this[INTERNALS].body.type) || '';\n\t\tconst buf = await this.arrayBuffer();\n\n\t\treturn new Blob([buf], {\n\t\t\ttype: ct\n\t\t});\n\t}\n\n\t/**\n\t * Decode response as json\n\t *\n\t * @return Promise\n\t */\n\tasync json() {\n\t\tconst text = await this.text();\n\t\treturn JSON.parse(text);\n\t}\n\n\t/**\n\t * Decode response as text\n\t *\n\t * @return Promise\n\t */\n\tasync text() {\n\t\tconst buffer = await consumeBody(this);\n\t\treturn new TextDecoder().decode(buffer);\n\t}\n\n\t/**\n\t * Decode response as buffer (non-spec api)\n\t *\n\t * @return Promise\n\t */\n\tbuffer() {\n\t\treturn consumeBody(this);\n\t}\n}\n\nBody.prototype.buffer = deprecate(Body.prototype.buffer, 'Please use \\'response.arrayBuffer()\\' instead of \\'response.buffer()\\'', 'node-fetch#buffer');\n\n// In browsers, all properties are enumerable.\nObject.defineProperties(Body.prototype, {\n\tbody: {enumerable: true},\n\tbodyUsed: {enumerable: true},\n\tarrayBuffer: {enumerable: true},\n\tblob: {enumerable: true},\n\tjson: {enumerable: true},\n\ttext: {enumerable: true},\n\tdata: {get: deprecate(() => {},\n\t\t'data doesn\\'t exist, use json(), text(), arrayBuffer(), or body instead',\n\t\t'https://github.com/node-fetch/node-fetch/issues/1000 (response)')}\n});\n\n/**\n * Consume and convert an entire Body to a Buffer.\n *\n * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body\n *\n * @return Promise\n */\nasync function consumeBody(data) {\n\tif (data[INTERNALS].disturbed) {\n\t\tthrow new TypeError(`body used already for: ${data.url}`);\n\t}\n\n\tdata[INTERNALS].disturbed = true;\n\n\tif (data[INTERNALS].error) {\n\t\tthrow data[INTERNALS].error;\n\t}\n\n\tconst {body} = data;\n\n\t// Body is null\n\tif (body === null) {\n\t\treturn Buffer.alloc(0);\n\t}\n\n\t/* c8 ignore next 3 */\n\tif (!(body instanceof Stream)) {\n\t\treturn Buffer.alloc(0);\n\t}\n\n\t// Body is stream\n\t// get ready to actually consume the body\n\tconst accum = [];\n\tlet accumBytes = 0;\n\n\ttry {\n\t\tfor await (const chunk of body) {\n\t\t\tif (data.size > 0 && accumBytes + chunk.length > data.size) {\n\t\t\t\tconst error = new FetchError(`content size at ${data.url} over limit: ${data.size}`, 'max-size');\n\t\t\t\tbody.destroy(error);\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\taccumBytes += chunk.length;\n\t\t\taccum.push(chunk);\n\t\t}\n\t} catch (error) {\n\t\tconst error_ = error instanceof FetchBaseError ? error : new FetchError(`Invalid response body while trying to fetch ${data.url}: ${error.message}`, 'system', error);\n\t\tthrow error_;\n\t}\n\n\tif (body.readableEnded === true || body._readableState.ended === true) {\n\t\ttry {\n\t\t\tif (accum.every(c => typeof c === 'string')) {\n\t\t\t\treturn Buffer.from(accum.join(''));\n\t\t\t}\n\n\t\t\treturn Buffer.concat(accum, accumBytes);\n\t\t} catch (error) {\n\t\t\tthrow new FetchError(`Could not create Buffer from response body for ${data.url}: ${error.message}`, 'system', error);\n\t\t}\n\t} else {\n\t\tthrow new FetchError(`Premature close of server response while trying to fetch ${data.url}`);\n\t}\n}\n\n/**\n * Clone body given Res/Req instance\n *\n * @param Mixed instance Response or Request instance\n * @param String highWaterMark highWaterMark for both PassThrough body streams\n * @return Mixed\n */\nexport const clone = (instance, highWaterMark) => {\n\tlet p1;\n\tlet p2;\n\tlet {body} = instance[INTERNALS];\n\n\t// Don't allow cloning a used body\n\tif (instance.bodyUsed) {\n\t\tthrow new Error('cannot clone body after it is used');\n\t}\n\n\t// Check that body is a stream and not form-data object\n\t// note: we can't clone the form-data object without having it as a dependency\n\tif ((body instanceof Stream) && (typeof body.getBoundary !== 'function')) {\n\t\t// Tee instance body\n\t\tp1 = new PassThrough({highWaterMark});\n\t\tp2 = new PassThrough({highWaterMark});\n\t\tbody.pipe(p1);\n\t\tbody.pipe(p2);\n\t\t// Set instance body to teed body and return the other teed body\n\t\tinstance[INTERNALS].stream = p1;\n\t\tbody = p2;\n\t}\n\n\treturn body;\n};\n\nconst getNonSpecFormDataBoundary = deprecate(\n\tbody => body.getBoundary(),\n\t'form-data doesn\\'t follow the spec and requires special treatment. Use alternative package',\n\t'https://github.com/node-fetch/node-fetch/issues/1167'\n);\n\n/**\n * Performs the operation \"extract a `Content-Type` value from |object|\" as\n * specified in the specification:\n * https://fetch.spec.whatwg.org/#concept-bodyinit-extract\n *\n * This function assumes that instance.body is present.\n *\n * @param {any} body Any options.body input\n * @returns {string | null}\n */\nexport const extractContentType = (body, request) => {\n\t// Body is null or undefined\n\tif (body === null) {\n\t\treturn null;\n\t}\n\n\t// Body is string\n\tif (typeof body === 'string') {\n\t\treturn 'text/plain;charset=UTF-8';\n\t}\n\n\t// Body is a URLSearchParams\n\tif (isURLSearchParameters(body)) {\n\t\treturn 'application/x-www-form-urlencoded;charset=UTF-8';\n\t}\n\n\t// Body is blob\n\tif (isBlob(body)) {\n\t\treturn body.type || null;\n\t}\n\n\t// Body is a Buffer (Buffer, ArrayBuffer or ArrayBufferView)\n\tif (Buffer.isBuffer(body) || types.isAnyArrayBuffer(body) || ArrayBuffer.isView(body)) {\n\t\treturn null;\n\t}\n\n\tif (body instanceof FormData) {\n\t\treturn `multipart/form-data; boundary=${request[INTERNALS].boundary}`;\n\t}\n\n\t// Detect form data input from form-data module\n\tif (body && typeof body.getBoundary === 'function') {\n\t\treturn `multipart/form-data;boundary=${getNonSpecFormDataBoundary(body)}`;\n\t}\n\n\t// Body is stream - can't really do much about this\n\tif (body instanceof Stream) {\n\t\treturn null;\n\t}\n\n\t// Body constructor defaults other things to string\n\treturn 'text/plain;charset=UTF-8';\n};\n\n/**\n * The Fetch Standard treats this as if \"total bytes\" is a property on the body.\n * For us, we have to explicitly get it with a function.\n *\n * ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes\n *\n * @param {any} obj.body Body object from the Body instance.\n * @returns {number | null}\n */\nexport const getTotalBytes = request => {\n\tconst {body} = request[INTERNALS];\n\n\t// Body is null or undefined\n\tif (body === null) {\n\t\treturn 0;\n\t}\n\n\t// Body is Blob\n\tif (isBlob(body)) {\n\t\treturn body.size;\n\t}\n\n\t// Body is Buffer\n\tif (Buffer.isBuffer(body)) {\n\t\treturn body.length;\n\t}\n\n\t// Detect form data input from form-data module\n\tif (body && typeof body.getLengthSync === 'function') {\n\t\treturn body.hasKnownLength && body.hasKnownLength() ? body.getLengthSync() : null;\n\t}\n\n\t// Body is stream\n\treturn null;\n};\n\n/**\n * Write a Body to a Node.js WritableStream (e.g. http.Request) object.\n *\n * @param {Stream.Writable} dest The stream to write to.\n * @param obj.body Body object from the Body instance.\n * @returns {Promise<void>}\n */\nexport const writeToStream = async (dest, {body}) => {\n\tif (body === null) {\n\t\t// Body is null\n\t\tdest.end();\n\t} else {\n\t\t// Body is stream\n\t\tawait pipeline(body, dest);\n\t}\n};\n","/**\n * Headers.js\n *\n * Headers class offers convenient helpers\n */\n\nimport {types} from 'node:util';\nimport http from 'node:http';\n\n/* c8 ignore next 9 */\nconst validateHeaderName = typeof http.validateHeaderName === 'function' ?\n\thttp.validateHeaderName :\n\tname => {\n\t\tif (!/^[\\^`\\-\\w!#$%&'*+.|~]+$/.test(name)) {\n\t\t\tconst error = new TypeError(`Header name must be a valid HTTP token [${name}]`);\n\t\t\tObject.defineProperty(error, 'code', {value: 'ERR_INVALID_HTTP_TOKEN'});\n\t\t\tthrow error;\n\t\t}\n\t};\n\n/* c8 ignore next 9 */\nconst validateHeaderValue = typeof http.validateHeaderValue === 'function' ?\n\thttp.validateHeaderValue :\n\t(name, value) => {\n\t\tif (/[^\\t\\u0020-\\u007E\\u0080-\\u00FF]/.test(value)) {\n\t\t\tconst error = new TypeError(`Invalid character in header content [\"${name}\"]`);\n\t\t\tObject.defineProperty(error, 'code', {value: 'ERR_INVALID_CHAR'});\n\t\t\tthrow error;\n\t\t}\n\t};\n\n/**\n * @typedef {Headers | Record<string, string> | Iterable<readonly [string, string]> | Iterable<Iterable<string>>} HeadersInit\n */\n\n/**\n * This Fetch API interface allows you to perform various actions on HTTP request and response headers.\n * These actions include retrieving, setting, adding to, and removing.\n * A Headers object has an associated header list, which is initially empty and consists of zero or more name and value pairs.\n * You can add to this using methods like append() (see Examples.)\n * In all methods of this interface, header names are matched by case-insensitive byte sequence.\n *\n */\nexport default class Headers extends URLSearchParams {\n\t/**\n\t * Headers class\n\t *\n\t * @constructor\n\t * @param {HeadersInit} [init] - Response headers\n\t */\n\tconstructor(init) {\n\t\t// Validate and normalize init object in [name, value(s)][]\n\t\t/** @type {string[][]} */\n\t\tlet result = [];\n\t\tif (init instanceof Headers) {\n\t\t\tconst raw = init.raw();\n\t\t\tfor (const [name, values] of Object.entries(raw)) {\n\t\t\t\tresult.push(...values.map(value => [name, value]));\n\t\t\t}\n\t\t} else if (init == null) { // eslint-disable-line no-eq-null, eqeqeq\n\t\t\t// No op\n\t\t} else if (typeof init === 'object' && !types.isBoxedPrimitive(init)) {\n\t\t\tconst method = init[Symbol.iterator];\n\t\t\t// eslint-disable-next-line no-eq-null, eqeqeq\n\t\t\tif (method == null) {\n\t\t\t\t// Record<ByteString, ByteString>\n\t\t\t\tresult.push(...Object.entries(init));\n\t\t\t} else {\n\t\t\t\tif (typeof method !== 'function') {\n\t\t\t\t\tthrow new TypeError('Header pairs must be iterable');\n\t\t\t\t}\n\n\t\t\t\t// Sequence<sequence<ByteString>>\n\t\t\t\t// Note: per spec we have to first exhaust the lists then process them\n\t\t\t\tresult = [...init]\n\t\t\t\t\t.map(pair => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttypeof pair !== 'object' || types.isBoxedPrimitive(pair)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthrow new TypeError('Each header pair must be an iterable object');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [...pair];\n\t\t\t\t\t}).map(pair => {\n\t\t\t\t\t\tif (pair.length !== 2) {\n\t\t\t\t\t\t\tthrow new TypeError('Each header pair must be a name/value tuple');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [...pair];\n\t\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('Failed to construct \\'Headers\\': The provided value is not of type \\'(sequence<sequence<ByteString>> or record<ByteString, ByteString>)');\n\t\t}\n\n\t\t// Validate and lowercase\n\t\tresult =\n\t\t\tresult.length > 0 ?\n\t\t\t\tresult.map(([name, value]) => {\n\t\t\t\t\tvalidateHeaderName(name);\n\t\t\t\t\tvalidateHeaderValue(name, String(value));\n\t\t\t\t\treturn [String(name).toLowerCase(), String(value)];\n\t\t\t\t}) :\n\t\t\t\tundefined;\n\n\t\tsuper(result);\n\n\t\t// Returning a Proxy that will lowercase key names, validate parameters and sort keys\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn new Proxy(this, {\n\t\t\tget(target, p, receiver) {\n\t\t\t\tswitch (p) {\n\t\t\t\t\tcase 'append':\n\t\t\t\t\tcase 'set':\n\t\t\t\t\t\treturn (name, value) => {\n\t\t\t\t\t\t\tvalidateHeaderName(name);\n\t\t\t\t\t\t\tvalidateHeaderValue(name, String(value));\n\t\t\t\t\t\t\treturn URLSearchParams.prototype[p].call(\n\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\tString(name).toLowerCase(),\n\t\t\t\t\t\t\t\tString(value)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t};\n\n\t\t\t\t\tcase 'delete':\n\t\t\t\t\tcase 'has':\n\t\t\t\t\tcase 'getAll':\n\t\t\t\t\t\treturn name => {\n\t\t\t\t\t\t\tvalidateHeaderName(name);\n\t\t\t\t\t\t\treturn URLSearchParams.prototype[p].call(\n\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\tString(name).toLowerCase()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t};\n\n\t\t\t\t\tcase 'keys':\n\t\t\t\t\t\treturn () => {\n\t\t\t\t\t\t\ttarget.sort();\n\t\t\t\t\t\t\treturn new Set(URLSearchParams.prototype.keys.call(target)).keys();\n\t\t\t\t\t\t};\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn Reflect.get(target, p, receiver);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t/* c8 ignore next */\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn this.constructor.name;\n\t}\n\n\ttoString() {\n\t\treturn Object.prototype.toString.call(this);\n\t}\n\n\tget(name) {\n\t\tconst values = this.getAll(name);\n\t\tif (values.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet value = values.join(', ');\n\t\tif (/^content-encoding$/i.test(name)) {\n\t\t\tvalue = value.toLowerCase();\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tforEach(callback, thisArg = undefined) {\n\t\tfor (const name of this.keys()) {\n\t\t\tReflect.apply(callback, thisArg, [this.get(name), name, this]);\n\t\t}\n\t}\n\n\t* values() {\n\t\tfor (const name of this.keys()) {\n\t\t\tyield this.get(name);\n\t\t}\n\t}\n\n\t/**\n\t * @type {() => IterableIterator<[string, string]>}\n\t */\n\t* entries() {\n\t\tfor (const name of this.keys()) {\n\t\t\tyield [name, this.get(name)];\n\t\t}\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.entries();\n\t}\n\n\t/**\n\t * Node-fetch non-spec method\n\t * returning all headers and their values as array\n\t * @returns {Record<string, string[]>}\n\t */\n\traw() {\n\t\treturn [...this.keys()].reduce((result, key) => {\n\t\t\tresult[key] = this.getAll(key);\n\t\t\treturn result;\n\t\t}, {});\n\t}\n\n\t/**\n\t * For better console.log(headers) and also to convert Headers into Node.js Request compatible format\n\t */\n\t[Symbol.for('nodejs.util.inspect.custom')]() {\n\t\treturn [...this.keys()].reduce((result, key) => {\n\t\t\tconst values = this.getAll(key);\n\t\t\t// Http.request() only supports string as Host header.\n\t\t\t// This hack makes specifying custom Host header possible.\n\t\t\tif (key === 'host') {\n\t\t\t\tresult[key] = values[0];\n\t\t\t} else {\n\t\t\t\tresult[key] = values.length > 1 ? values : values[0];\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}, {});\n\t}\n}\n\n/**\n * Re-shaping object for Web IDL tests\n * Only need to do it for overridden methods\n */\nObject.defineProperties(\n\tHeaders.prototype,\n\t['get', 'entries', 'forEach', 'values'].reduce((result, property) => {\n\t\tresult[property] = {enumerable: true};\n\t\treturn result;\n\t}, {})\n);\n\n/**\n * Create a Headers object from an http.IncomingMessage.rawHeaders, ignoring those that do\n * not conform to HTTP grammar productions.\n * @param {import('http').IncomingMessage['rawHeaders']} headers\n */\nexport function fromRawHeaders(headers = []) {\n\treturn new Headers(\n\t\theaders\n\t\t\t// Split into pairs\n\t\t\t.reduce((result, value, index, array) => {\n\t\t\t\tif (index % 2 === 0) {\n\t\t\t\t\tresult.push(array.slice(index, index + 2));\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}, [])\n\t\t\t.filter(([name, value]) => {\n\t\t\t\ttry {\n\t\t\t\t\tvalidateHeaderName(name);\n\t\t\t\t\tvalidateHeaderValue(name, String(value));\n\t\t\t\t\treturn true;\n\t\t\t\t} catch {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t})\n\n\t);\n}\n","const redirectStatus = new Set([301, 302, 303, 307, 308]);\n\n/**\n * Redirect code matching\n *\n * @param {number} code - Status code\n * @return {boolean}\n */\nexport const isRedirect = code => {\n\treturn redirectStatus.has(code);\n};\n","/**\n * Response.js\n *\n * Response class provides content decoding\n */\n\nimport Headers from './headers.js';\nimport Body, {clone, extractContentType} from './body.js';\nimport {isRedirect} from './utils/is-redirect.js';\n\nconst INTERNALS = Symbol('Response internals');\n\n/**\n * Response class\n *\n * Ref: https://fetch.spec.whatwg.org/#response-class\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nexport default class Response extends Body {\n\tconstructor(body = null, options = {}) {\n\t\tsuper(body, options);\n\n\t\t// eslint-disable-next-line no-eq-null, eqeqeq, no-negated-condition\n\t\tconst status = options.status != null ? options.status : 200;\n\n\t\tconst headers = new Headers(options.headers);\n\n\t\tif (body !== null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(body, this);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tthis[INTERNALS] = {\n\t\t\ttype: 'default',\n\t\t\turl: options.url,\n\t\t\tstatus,\n\t\t\tstatusText: options.statusText || '',\n\t\t\theaders,\n\t\t\tcounter: options.counter,\n\t\t\thighWaterMark: options.highWaterMark\n\t\t};\n\t}\n\n\tget type() {\n\t\treturn this[INTERNALS].type;\n\t}\n\n\tget url() {\n\t\treturn this[INTERNALS].url || '';\n\t}\n\n\tget status() {\n\t\treturn this[INTERNALS].status;\n\t}\n\n\t/**\n\t * Convenience property representing if the request ended normally\n\t */\n\tget ok() {\n\t\treturn this[INTERNALS].status >= 200 && this[INTERNALS].status < 300;\n\t}\n\n\tget redirected() {\n\t\treturn this[INTERNALS].counter > 0;\n\t}\n\n\tget statusText() {\n\t\treturn this[INTERNALS].statusText;\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS].headers;\n\t}\n\n\tget highWaterMark() {\n\t\treturn this[INTERNALS].highWaterMark;\n\t}\n\n\t/**\n\t * Clone this response\n\t *\n\t * @return Response\n\t */\n\tclone() {\n\t\treturn new Response(clone(this, this.highWaterMark), {\n\t\t\ttype: this.type,\n\t\t\turl: this.url,\n\t\t\tstatus: this.status,\n\t\t\tstatusText: this.statusText,\n\t\t\theaders: this.headers,\n\t\t\tok: this.ok,\n\t\t\tredirected: this.redirected,\n\t\t\tsize: this.size,\n\t\t\thighWaterMark: this.highWaterMark\n\t\t});\n\t}\n\n\t/**\n\t * @param {string} url The URL that the new response is to originate from.\n\t * @param {number} status An optional status code for the response (e.g., 302.)\n\t * @returns {Response} A Response object.\n\t */\n\tstatic redirect(url, status = 302) {\n\t\tif (!isRedirect(status)) {\n\t\t\tthrow new RangeError('Failed to execute \"redirect\" on \"response\": Invalid status code');\n\t\t}\n\n\t\treturn new Response(null, {\n\t\t\theaders: {\n\t\t\t\tlocation: new URL(url).toString()\n\t\t\t},\n\t\t\tstatus\n\t\t});\n\t}\n\n\tstatic error() {\n\t\tconst response = new Response(null, {status: 0, statusText: ''});\n\t\tresponse[INTERNALS].type = 'error';\n\t\treturn response;\n\t}\n\n\tstatic json(data = undefined, init = {}) {\n\t\tconst body = JSON.stringify(data);\n\n\t\tif (body === undefined) {\n\t\t\tthrow new TypeError('data is not JSON serializable');\n\t\t}\n\n\t\tconst headers = new Headers(init && init.headers);\n\n\t\tif (!headers.has('content-type')) {\n\t\t\theaders.set('content-type', 'application/json');\n\t\t}\n\n\t\treturn new Response(body, {\n\t\t\t...init,\n\t\t\theaders\n\t\t});\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn 'Response';\n\t}\n}\n\nObject.defineProperties(Response.prototype, {\n\ttype: {enumerable: true},\n\turl: {enumerable: true},\n\tstatus: {enumerable: true},\n\tok: {enumerable: true},\n\tredirected: {enumerable: true},\n\tstatusText: {enumerable: true},\n\theaders: {enumerable: true},\n\tclone: {enumerable: true}\n});\n","export const getSearch = parsedURL => {\n\tif (parsedURL.search) {\n\t\treturn parsedURL.search;\n\t}\n\n\tconst lastOffset = parsedURL.href.length - 1;\n\tconst hash = parsedURL.hash || (parsedURL.href[lastOffset] === '#' ? '#' : '');\n\treturn parsedURL.href[lastOffset - hash.length] === '?' ? '?' : '';\n};\n","import {isIP} from 'node:net';\n\n/**\n * @external URL\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/URL|URL}\n */\n\n/**\n * @module utils/referrer\n * @private\n */\n\n/**\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#strip-url|Referrer Policy §8.4. Strip url for use as a referrer}\n * @param {string} URL\n * @param {boolean} [originOnly=false]\n */\nexport function stripURLForUseAsAReferrer(url, originOnly = false) {\n\t// 1. If url is null, return no referrer.\n\tif (url == null) { // eslint-disable-line no-eq-null, eqeqeq\n\t\treturn 'no-referrer';\n\t}\n\n\turl = new URL(url);\n\n\t// 2. If url's scheme is a local scheme, then return no referrer.\n\tif (/^(about|blob|data):$/.test(url.protocol)) {\n\t\treturn 'no-referrer';\n\t}\n\n\t// 3. Set url's username to the empty string.\n\turl.username = '';\n\n\t// 4. Set url's password to null.\n\t// Note: `null` appears to be a mistake as this actually results in the password being `\"null\"`.\n\turl.password = '';\n\n\t// 5. Set url's fragment to null.\n\t// Note: `null` appears to be a mistake as this actually results in the fragment being `\"#null\"`.\n\turl.hash = '';\n\n\t// 6. If the origin-only flag is true, then:\n\tif (originOnly) {\n\t\t// 6.1. Set url's path to null.\n\t\t// Note: `null` appears to be a mistake as this actually results in the path being `\"/null\"`.\n\t\turl.pathname = '';\n\n\t\t// 6.2. Set url's query to null.\n\t\t// Note: `null` appears to be a mistake as this actually results in the query being `\"?null\"`.\n\t\turl.search = '';\n\t}\n\n\t// 7. Return url.\n\treturn url;\n}\n\n/**\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#enumdef-referrerpolicy|enum ReferrerPolicy}\n */\nexport const ReferrerPolicy = new Set([\n\t'',\n\t'no-referrer',\n\t'no-referrer-when-downgrade',\n\t'same-origin',\n\t'origin',\n\t'strict-origin',\n\t'origin-when-cross-origin',\n\t'strict-origin-when-cross-origin',\n\t'unsafe-url'\n]);\n\n/**\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#default-referrer-policy|default referrer policy}\n */\nexport const DEFAULT_REFERRER_POLICY = 'strict-origin-when-cross-origin';\n\n/**\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#referrer-policies|Referrer Policy §3. Referrer Policies}\n * @param {string} referrerPolicy\n * @returns {string} referrerPolicy\n */\nexport function validateReferrerPolicy(referrerPolicy) {\n\tif (!ReferrerPolicy.has(referrerPolicy)) {\n\t\tthrow new TypeError(`Invalid referrerPolicy: ${referrerPolicy}`);\n\t}\n\n\treturn referrerPolicy;\n}\n\n/**\n * @see {@link https://w3c.github.io/webappsec-secure-contexts/#is-origin-trustworthy|Referrer Policy §3.2. Is origin potentially trustworthy?}\n * @param {external:URL} url\n * @returns `true`: \"Potentially Trustworthy\", `false`: \"Not Trustworthy\"\n */\nexport function isOriginPotentiallyTrustworthy(url) {\n\t// 1. If origin is an opaque origin, return \"Not Trustworthy\".\n\t// Not applicable\n\n\t// 2. Assert: origin is a tuple origin.\n\t// Not for implementations\n\n\t// 3. If origin's scheme is either \"https\" or \"wss\", return \"Potentially Trustworthy\".\n\tif (/^(http|ws)s:$/.test(url.protocol)) {\n\t\treturn true;\n\t}\n\n\t// 4. If origin's host component matches one of the CIDR notations 127.0.0.0/8 or ::1/128 [RFC4632], return \"Potentially Trustworthy\".\n\tconst hostIp = url.host.replace(/(^\\[)|(]$)/g, '');\n\tconst hostIPVersion = isIP(hostIp);\n\n\tif (hostIPVersion === 4 && /^127\\./.test(hostIp)) {\n\t\treturn true;\n\t}\n\n\tif (hostIPVersion === 6 && /^(((0+:){7})|(::(0+:){0,6}))0*1$/.test(hostIp)) {\n\t\treturn true;\n\t}\n\n\t// 5. If origin's host component is \"localhost\" or falls within \".localhost\", and the user agent conforms to the name resolution rules in [let-localhost-be-localhost], return \"Potentially Trustworthy\".\n\t// We are returning FALSE here because we cannot ensure conformance to\n\t// let-localhost-be-loalhost (https://tools.ietf.org/html/draft-west-let-localhost-be-localhost)\n\tif (url.host === 'localhost' || url.host.endsWith('.localhost')) {\n\t\treturn false;\n\t}\n\n\t// 6. If origin's scheme component is file, return \"Potentially Trustworthy\".\n\tif (url.protocol === 'file:') {\n\t\treturn true;\n\t}\n\n\t// 7. If origin's scheme component is one which the user agent considers to be authenticated, return \"Potentially Trustworthy\".\n\t// Not supported\n\n\t// 8. If origin has been configured as a trustworthy origin, return \"Potentially Trustworthy\".\n\t// Not supported\n\n\t// 9. Return \"Not Trustworthy\".\n\treturn false;\n}\n\n/**\n * @see {@link https://w3c.github.io/webappsec-secure-contexts/#is-url-trustworthy|Referrer Policy §3.3. Is url potentially trustworthy?}\n * @param {external:URL} url\n * @returns `true`: \"Potentially Trustworthy\", `false`: \"Not Trustworthy\"\n */\nexport function isUrlPotentiallyTrustworthy(url) {\n\t// 1. If url is \"about:blank\" or \"about:srcdoc\", return \"Potentially Trustworthy\".\n\tif (/^about:(blank|srcdoc)$/.test(url)) {\n\t\treturn true;\n\t}\n\n\t// 2. If url's scheme is \"data\", return \"Potentially Trustworthy\".\n\tif (url.protocol === 'data:') {\n\t\treturn true;\n\t}\n\n\t// Note: The origin of blob: and filesystem: URLs is the origin of the context in which they were\n\t// created. Therefore, blobs created in a trustworthy origin will themselves be potentially\n\t// trustworthy.\n\tif (/^(blob|filesystem):$/.test(url.protocol)) {\n\t\treturn true;\n\t}\n\n\t// 3. Return the result of executing §3.2 Is origin potentially trustworthy? on url's origin.\n\treturn isOriginPotentiallyTrustworthy(url);\n}\n\n/**\n * Modifies the referrerURL to enforce any extra security policy considerations.\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer|Referrer Policy §8.3. Determine request's Referrer}, step 7\n * @callback module:utils/referrer~referrerURLCallback\n * @param {external:URL} referrerURL\n * @returns {external:URL} modified referrerURL\n */\n\n/**\n * Modifies the referrerOrigin to enforce any extra security policy considerations.\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer|Referrer Policy §8.3. Determine request's Referrer}, step 7\n * @callback module:utils/referrer~referrerOriginCallback\n * @param {external:URL} referrerOrigin\n * @returns {external:URL} modified referrerOrigin\n */\n\n/**\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer|Referrer Policy §8.3. Determine request's Referrer}\n * @param {Request} request\n * @param {object} o\n * @param {module:utils/referrer~referrerURLCallback} o.referrerURLCallback\n * @param {module:utils/referrer~referrerOriginCallback} o.referrerOriginCallback\n * @returns {external:URL} Request's referrer\n */\nexport function determineRequestsReferrer(request, {referrerURLCallback, referrerOriginCallback} = {}) {\n\t// There are 2 notes in the specification about invalid pre-conditions. We return null, here, for\n\t// these cases:\n\t// > Note: If request's referrer is \"no-referrer\", Fetch will not call into this algorithm.\n\t// > Note: If request's referrer policy is the empty string, Fetch will not call into this\n\t// > algorithm.\n\tif (request.referrer === 'no-referrer' || request.referrerPolicy === '') {\n\t\treturn null;\n\t}\n\n\t// 1. Let policy be request's associated referrer policy.\n\tconst policy = request.referrerPolicy;\n\n\t// 2. Let environment be request's client.\n\t// not applicable to node.js\n\n\t// 3. Switch on request's referrer:\n\tif (request.referrer === 'about:client') {\n\t\treturn 'no-referrer';\n\t}\n\n\t// \"a URL\": Let referrerSource be request's referrer.\n\tconst referrerSource = request.referrer;\n\n\t// 4. Let request's referrerURL be the result of stripping referrerSource for use as a referrer.\n\tlet referrerURL = stripURLForUseAsAReferrer(referrerSource);\n\n\t// 5. Let referrerOrigin be the result of stripping referrerSource for use as a referrer, with the\n\t// origin-only flag set to true.\n\tlet referrerOrigin = stripURLForUseAsAReferrer(referrerSource, true);\n\n\t// 6. If the result of serializing referrerURL is a string whose length is greater than 4096, set\n\t// referrerURL to referrerOrigin.\n\tif (referrerURL.toString().length > 4096) {\n\t\treferrerURL = referrerOrigin;\n\t}\n\n\t// 7. The user agent MAY alter referrerURL or referrerOrigin at this point to enforce arbitrary\n\t// policy considerations in the interests of minimizing data leakage. For example, the user\n\t// agent could strip the URL down to an origin, modify its host, replace it with an empty\n\t// string, etc.\n\tif (referrerURLCallback) {\n\t\treferrerURL = referrerURLCallback(referrerURL);\n\t}\n\n\tif (referrerOriginCallback) {\n\t\treferrerOrigin = referrerOriginCallback(referrerOrigin);\n\t}\n\n\t// 8.Execute the statements corresponding to the value of policy:\n\tconst currentURL = new URL(request.url);\n\n\tswitch (policy) {\n\t\tcase 'no-referrer':\n\t\t\treturn 'no-referrer';\n\n\t\tcase 'origin':\n\t\t\treturn referrerOrigin;\n\n\t\tcase 'unsafe-url':\n\t\t\treturn referrerURL;\n\n\t\tcase 'strict-origin':\n\t\t\t// 1. If referrerURL is a potentially trustworthy URL and request's current URL is not a\n\t\t\t// potentially trustworthy URL, then return no referrer.\n\t\t\tif (isUrlPotentiallyTrustworthy(referrerURL) && !isUrlPotentiallyTrustworthy(currentURL)) {\n\t\t\t\treturn 'no-referrer';\n\t\t\t}\n\n\t\t\t// 2. Return referrerOrigin.\n\t\t\treturn referrerOrigin.toString();\n\n\t\tcase 'strict-origin-when-cross-origin':\n\t\t\t// 1. If the origin of referrerURL and the origin of request's current URL are the same, then\n\t\t\t// return referrerURL.\n\t\t\tif (referrerURL.origin === currentURL.origin) {\n\t\t\t\treturn referrerURL;\n\t\t\t}\n\n\t\t\t// 2. If referrerURL is a potentially trustworthy URL and request's current URL is not a\n\t\t\t// potentially trustworthy URL, then return no referrer.\n\t\t\tif (isUrlPotentiallyTrustworthy(referrerURL) && !isUrlPotentiallyTrustworthy(currentURL)) {\n\t\t\t\treturn 'no-referrer';\n\t\t\t}\n\n\t\t\t// 3. Return referrerOrigin.\n\t\t\treturn referrerOrigin;\n\n\t\tcase 'same-origin':\n\t\t\t// 1. If the origin of referrerURL and the origin of request's current URL are the same, then\n\t\t\t// return referrerURL.\n\t\t\tif (referrerURL.origin === currentURL.origin) {\n\t\t\t\treturn referrerURL;\n\t\t\t}\n\n\t\t\t// 2. Return no referrer.\n\t\t\treturn 'no-referrer';\n\n\t\tcase 'origin-when-cross-origin':\n\t\t\t// 1. If the origin of referrerURL and the origin of request's current URL are the same, then\n\t\t\t// return referrerURL.\n\t\t\tif (referrerURL.origin === currentURL.origin) {\n\t\t\t\treturn referrerURL;\n\t\t\t}\n\n\t\t\t// Return referrerOrigin.\n\t\t\treturn referrerOrigin;\n\n\t\tcase 'no-referrer-when-downgrade':\n\t\t\t// 1. If referrerURL is a potentially trustworthy URL and request's current URL is not a\n\t\t\t// potentially trustworthy URL, then return no referrer.\n\t\t\tif (isUrlPotentiallyTrustworthy(referrerURL) && !isUrlPotentiallyTrustworthy(currentURL)) {\n\t\t\t\treturn 'no-referrer';\n\t\t\t}\n\n\t\t\t// 2. Return referrerURL.\n\t\t\treturn referrerURL;\n\n\t\tdefault:\n\t\t\tthrow new TypeError(`Invalid referrerPolicy: ${policy}`);\n\t}\n}\n\n/**\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#parse-referrer-policy-from-header|Referrer Policy §8.1. Parse a referrer policy from a Referrer-Policy header}\n * @param {Headers} headers Response headers\n * @returns {string} policy\n */\nexport function parseReferrerPolicyFromHeader(headers) {\n\t// 1. Let policy-tokens be the result of extracting header list values given `Referrer-Policy`\n\t// and response’s header list.\n\tconst policyTokens = (headers.get('referrer-policy') || '').split(/[,\\s]+/);\n\n\t// 2. Let policy be the empty string.\n\tlet policy = '';\n\n\t// 3. For each token in policy-tokens, if token is a referrer policy and token is not the empty\n\t// string, then set policy to token.\n\t// Note: This algorithm loops over multiple policy values to allow deployment of new policy\n\t// values with fallbacks for older user agents, as described in § 11.1 Unknown Policy Values.\n\tfor (const token of policyTokens) {\n\t\tif (token && ReferrerPolicy.has(token)) {\n\t\t\tpolicy = token;\n\t\t}\n\t}\n\n\t// 4. Return policy.\n\treturn policy;\n}\n","/**\n * Request.js\n *\n * Request class contains server only options\n *\n * All spec algorithm step numbers are based on https://fetch.spec.whatwg.org/commit-snapshots/ae716822cb3a61843226cd090eefc6589446c1d2/.\n */\n\nimport {format as formatUrl} from 'node:url';\nimport {deprecate} from 'node:util';\nimport Headers from './headers.js';\nimport Body, {clone, extractContentType, getTotalBytes} from './body.js';\nimport {isAbortSignal} from './utils/is.js';\nimport {getSearch} from './utils/get-search.js';\nimport {\n\tvalidateReferrerPolicy, determineRequestsReferrer, DEFAULT_REFERRER_POLICY\n} from './utils/referrer.js';\n\nconst INTERNALS = Symbol('Request internals');\n\n/**\n * Check if `obj` is an instance of Request.\n *\n * @param {*} object\n * @return {boolean}\n */\nconst isRequest = object => {\n\treturn (\n\t\ttypeof object === 'object' &&\n\t\ttypeof object[INTERNALS] === 'object'\n\t);\n};\n\nconst doBadDataWarn = deprecate(() => {},\n\t'.data is not a valid RequestInit property, use .body instead',\n\t'https://github.com/node-fetch/node-fetch/issues/1000 (request)');\n\n/**\n * Request class\n *\n * Ref: https://fetch.spec.whatwg.org/#request-class\n *\n * @param Mixed input Url or Request instance\n * @param Object init Custom options\n * @return Void\n */\nexport default class Request extends Body {\n\tconstructor(input, init = {}) {\n\t\tlet parsedURL;\n\n\t\t// Normalize input and force URL to be encoded as UTF-8 (https://github.com/node-fetch/node-fetch/issues/245)\n\t\tif (isRequest(input)) {\n\t\t\tparsedURL = new URL(input.url);\n\t\t} else {\n\t\t\tparsedURL = new URL(input);\n\t\t\tinput = {};\n\t\t}\n\n\t\tif (parsedURL.username !== '' || parsedURL.password !== '') {\n\t\t\tthrow new TypeError(`${parsedURL} is an url with embedded credentials.`);\n\t\t}\n\n\t\tlet method = init.method || input.method || 'GET';\n\t\tif (/^(delete|get|head|options|post|put)$/i.test(method)) {\n\t\t\tmethod = method.toUpperCase();\n\t\t}\n\n\t\tif (!isRequest(init) && 'data' in init) {\n\t\t\tdoBadDataWarn();\n\t\t}\n\n\t\t// eslint-disable-next-line no-eq-null, eqeqeq\n\t\tif ((init.body != null || (isRequest(input) && input.body !== null)) &&\n\t\t\t(method === 'GET' || method === 'HEAD')) {\n\t\t\tthrow new TypeError('Request with GET/HEAD method cannot have body');\n\t\t}\n\n\t\tconst inputBody = init.body ?\n\t\t\tinit.body :\n\t\t\t(isRequest(input) && input.body !== null ?\n\t\t\t\tclone(input) :\n\t\t\t\tnull);\n\n\t\tsuper(inputBody, {\n\t\t\tsize: init.size || input.size || 0\n\t\t});\n\n\t\tconst headers = new Headers(init.headers || input.headers || {});\n\n\t\tif (inputBody !== null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(inputBody, this);\n\t\t\tif (contentType) {\n\t\t\t\theaders.set('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tlet signal = isRequest(input) ?\n\t\t\tinput.signal :\n\t\t\tnull;\n\t\tif ('signal' in init) {\n\t\t\tsignal = init.signal;\n\t\t}\n\n\t\t// eslint-disable-next-line no-eq-null, eqeqeq\n\t\tif (signal != null && !isAbortSignal(signal)) {\n\t\t\tthrow new TypeError('Expected signal to be an instanceof AbortSignal or EventTarget');\n\t\t}\n\n\t\t// §5.4, Request constructor steps, step 15.1\n\t\t// eslint-disable-next-line no-eq-null, eqeqeq\n\t\tlet referrer = init.referrer == null ? input.referrer : init.referrer;\n\t\tif (referrer === '') {\n\t\t\t// §5.4, Request constructor steps, step 15.2\n\t\t\treferrer = 'no-referrer';\n\t\t} else if (referrer) {\n\t\t\t// §5.4, Request constructor steps, step 15.3.1, 15.3.2\n\t\t\tconst parsedReferrer = new URL(referrer);\n\t\t\t// §5.4, Request constructor steps, step 15.3.3, 15.3.4\n\t\t\treferrer = /^about:(\\/\\/)?client$/.test(parsedReferrer) ? 'client' : parsedReferrer;\n\t\t} else {\n\t\t\treferrer = undefined;\n\t\t}\n\n\t\tthis[INTERNALS] = {\n\t\t\tmethod,\n\t\t\tredirect: init.redirect || input.redirect || 'follow',\n\t\t\theaders,\n\t\t\tparsedURL,\n\t\t\tsignal,\n\t\t\treferrer\n\t\t};\n\n\t\t// Node-fetch-only options\n\t\tthis.follow = init.follow === undefined ? (input.follow === undefined ? 20 : input.follow) : init.follow;\n\t\tthis.compress = init.compress === undefined ? (input.compress === undefined ? true : input.compress) : init.compress;\n\t\tthis.counter = init.counter || input.counter || 0;\n\t\tthis.agent = init.agent || input.agent;\n\t\tthis.highWaterMark = init.highWaterMark || input.highWaterMark || 16384;\n\t\tthis.insecureHTTPParser = init.insecureHTTPParser || input.insecureHTTPParser || false;\n\n\t\t// §5.4, Request constructor steps, step 16.\n\t\t// Default is empty string per https://fetch.spec.whatwg.org/#concept-request-referrer-policy\n\t\tthis.referrerPolicy = init.referrerPolicy || input.referrerPolicy || '';\n\t}\n\n\t/** @returns {string} */\n\tget method() {\n\t\treturn this[INTERNALS].method;\n\t}\n\n\t/** @returns {string} */\n\tget url() {\n\t\treturn formatUrl(this[INTERNALS].parsedURL);\n\t}\n\n\t/** @returns {Headers} */\n\tget headers() {\n\t\treturn this[INTERNALS].headers;\n\t}\n\n\tget redirect() {\n\t\treturn this[INTERNALS].redirect;\n\t}\n\n\t/** @returns {AbortSignal} */\n\tget signal() {\n\t\treturn this[INTERNALS].signal;\n\t}\n\n\t// https://fetch.spec.whatwg.org/#dom-request-referrer\n\tget referrer() {\n\t\tif (this[INTERNALS].referrer === 'no-referrer') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (this[INTERNALS].referrer === 'client') {\n\t\t\treturn 'about:client';\n\t\t}\n\n\t\tif (this[INTERNALS].referrer) {\n\t\t\treturn this[INTERNALS].referrer.toString();\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tget referrerPolicy() {\n\t\treturn this[INTERNALS].referrerPolicy;\n\t}\n\n\tset referrerPolicy(referrerPolicy) {\n\t\tthis[INTERNALS].referrerPolicy = validateReferrerPolicy(referrerPolicy);\n\t}\n\n\t/**\n\t * Clone this request\n\t *\n\t * @return Request\n\t */\n\tclone() {\n\t\treturn new Request(this);\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn 'Request';\n\t}\n}\n\nObject.defineProperties(Request.prototype, {\n\tmethod: {enumerable: true},\n\turl: {enumerable: true},\n\theaders: {enumerable: true},\n\tredirect: {enumerable: true},\n\tclone: {enumerable: true},\n\tsignal: {enumerable: true},\n\treferrer: {enumerable: true},\n\treferrerPolicy: {enumerable: true}\n});\n\n/**\n * Convert a Request to Node.js http request options.\n *\n * @param {Request} request - A Request instance\n * @return The options object to be passed to http.request\n */\nexport const getNodeRequestOptions = request => {\n\tconst {parsedURL} = request[INTERNALS];\n\tconst headers = new Headers(request[INTERNALS].headers);\n\n\t// Fetch step 1.3\n\tif (!headers.has('Accept')) {\n\t\theaders.set('Accept', '*/*');\n\t}\n\n\t// HTTP-network-or-cache fetch steps 2.4-2.7\n\tlet contentLengthValue = null;\n\tif (request.body === null && /^(post|put)$/i.test(request.method)) {\n\t\tcontentLengthValue = '0';\n\t}\n\n\tif (request.body !== null) {\n\t\tconst totalBytes = getTotalBytes(request);\n\t\t// Set Content-Length if totalBytes is a number (that is not NaN)\n\t\tif (typeof totalBytes === 'number' && !Number.isNaN(totalBytes)) {\n\t\t\tcontentLengthValue = String(totalBytes);\n\t\t}\n\t}\n\n\tif (contentLengthValue) {\n\t\theaders.set('Content-Length', contentLengthValue);\n\t}\n\n\t// 4.1. Main fetch, step 2.6\n\t// > If request's referrer policy is the empty string, then set request's referrer policy to the\n\t// > default referrer policy.\n\tif (request.referrerPolicy === '') {\n\t\trequest.referrerPolicy = DEFAULT_REFERRER_POLICY;\n\t}\n\n\t// 4.1. Main fetch, step 2.7\n\t// > If request's referrer is not \"no-referrer\", set request's referrer to the result of invoking\n\t// > determine request's referrer.\n\tif (request.referrer && request.referrer !== 'no-referrer') {\n\t\trequest[INTERNALS].referrer = determineRequestsReferrer(request);\n\t} else {\n\t\trequest[INTERNALS].referrer = 'no-referrer';\n\t}\n\n\t// 4.5. HTTP-network-or-cache fetch, step 6.9\n\t// > If httpRequest's referrer is a URL, then append `Referer`/httpRequest's referrer, serialized\n\t// > and isomorphic encoded, to httpRequest's header list.\n\tif (request[INTERNALS].referrer instanceof URL) {\n\t\theaders.set('Referer', request.referrer);\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.11\n\tif (!headers.has('User-Agent')) {\n\t\theaders.set('User-Agent', 'node-fetch');\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.15\n\tif (request.compress && !headers.has('Accept-Encoding')) {\n\t\theaders.set('Accept-Encoding', 'gzip, deflate, br');\n\t}\n\n\tlet {agent} = request;\n\tif (typeof agent === 'function') {\n\t\tagent = agent(parsedURL);\n\t}\n\n\t// HTTP-network fetch step 4.2\n\t// chunked encoding is handled by Node.js\n\n\tconst search = getSearch(parsedURL);\n\n\t// Pass the full URL directly to request(), but overwrite the following\n\t// options:\n\tconst options = {\n\t\t// Overwrite search to retain trailing ? (issue #776)\n\t\tpath: parsedURL.pathname + search,\n\t\t// The following options are not expressed in the URL\n\t\tmethod: request.method,\n\t\theaders: headers[Symbol.for('nodejs.util.inspect.custom')](),\n\t\tinsecureHTTPParser: request.insecureHTTPParser,\n\t\tagent\n\t};\n\n\treturn {\n\t\t/** @type {URL} */\n\t\tparsedURL,\n\t\toptions\n\t};\n};\n","import {FetchBaseError} from './base.js';\n\n/**\n * AbortError interface for cancelled requests\n */\nexport class AbortError extends FetchBaseError {\n\tconstructor(message, type = 'aborted') {\n\t\tsuper(message, type);\n\t}\n}\n","/**\n * Index.js\n *\n * a request API compatible with window.fetch\n *\n * All spec algorithm step numbers are based on https://fetch.spec.whatwg.org/commit-snapshots/ae716822cb3a61843226cd090eefc6589446c1d2/.\n */\n\nimport http from 'node:http';\nimport https from 'node:https';\nimport zlib from 'node:zlib';\nimport Stream, {PassThrough, pipeline as pump} from 'node:stream';\nimport {Buffer} from 'node:buffer';\n\nimport dataUriToBuffer from 'data-uri-to-buffer';\n\nimport {writeToStream, clone} from './body.js';\nimport Response from './response.js';\nimport Headers, {fromRawHeaders} from './headers.js';\nimport Request, {getNodeRequestOptions} from './request.js';\nimport {FetchError} from './errors/fetch-error.js';\nimport {AbortError} from './errors/abort-error.js';\nimport {isRedirect} from './utils/is-redirect.js';\nimport {FormData} from 'formdata-polyfill/esm.min.js';\nimport {isDomainOrSubdomain, isSameProtocol} from './utils/is.js';\nimport {parseReferrerPolicyFromHeader} from './utils/referrer.js';\nimport {\n\tBlob,\n\tFile,\n\tfileFromSync,\n\tfileFrom,\n\tblobFromSync,\n\tblobFrom\n} from 'fetch-blob/from.js';\n\nexport {FormData, Headers, Request, Response, FetchError, AbortError, isRedirect};\nexport {Blob, File, fileFromSync, fileFrom, blobFromSync, blobFrom};\n\nconst supportedSchemas = new Set(['data:', 'http:', 'https:']);\n\n/**\n * Fetch function\n *\n * @param {string | URL | import('./request').default} url - Absolute url or Request instance\n * @param {*} [options_] - Fetch options\n * @return {Promise<import('./response').default>}\n */\nexport default async function fetch(url, options_) {\n\treturn new Promise((resolve, reject) => {\n\t\t// Build request object\n\t\tconst request = new Request(url, options_);\n\t\tconst {parsedURL, options} = getNodeRequestOptions(request);\n\t\tif (!supportedSchemas.has(parsedURL.protocol)) {\n\t\t\tthrow new TypeError(`node-fetch cannot load ${url}. URL scheme \"${parsedURL.protocol.replace(/:$/, '')}\" is not supported.`);\n\t\t}\n\n\t\tif (parsedURL.protocol === 'data:') {\n\t\t\tconst data = dataUriToBuffer(request.url);\n\t\t\tconst response = new Response(data, {headers: {'Content-Type': data.typeFull}});\n\t\t\tresolve(response);\n\t\t\treturn;\n\t\t}\n\n\t\t// Wrap http.request into fetch\n\t\tconst send = (parsedURL.protocol === 'https:' ? https : http).request;\n\t\tconst {signal} = request;\n\t\tlet response = null;\n\n\t\tconst abort = () => {\n\t\t\tconst error = new AbortError('The operation was aborted.');\n\t\t\treject(error);\n\t\t\tif (request.body && request.body instanceof Stream.Readable) {\n\t\t\t\trequest.body.destroy(error);\n\t\t\t}\n\n\t\t\tif (!response || !response.body) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresponse.body.emit('error', error);\n\t\t};\n\n\t\tif (signal && signal.aborted) {\n\t\t\tabort();\n\t\t\treturn;\n\t\t}\n\n\t\tconst abortAndFinalize = () => {\n\t\t\tabort();\n\t\t\tfinalize();\n\t\t};\n\n\t\t// Send request\n\t\tconst request_ = send(parsedURL.toString(), options);\n\n\t\tif (signal) {\n\t\t\tsignal.addEventListener('abort', abortAndFinalize);\n\t\t}\n\n\t\tconst finalize = () => {\n\t\t\trequest_.abort();\n\t\t\tif (signal) {\n\t\t\t\tsignal.removeEventListener('abort', abortAndFinalize);\n\t\t\t}\n\t\t};\n\n\t\trequest_.on('error', error => {\n\t\t\treject(new FetchError(`request to ${request.url} failed, reason: ${error.message}`, 'system', error));\n\t\t\tfinalize();\n\t\t});\n\n\t\tfixResponseChunkedTransferBadEnding(request_, error => {\n\t\t\tif (response && response.body) {\n\t\t\t\tresponse.body.destroy(error);\n\t\t\t}\n\t\t});\n\n\t\t/* c8 ignore next 18 */\n\t\tif (process.version < 'v14') {\n\t\t\t// Before Node.js 14, pipeline() does not fully support async iterators and does not always\n\t\t\t// properly handle when the socket close/end events are out of order.\n\t\t\trequest_.on('socket', s => {\n\t\t\t\tlet endedWithEventsCount;\n\t\t\t\ts.prependListener('end', () => {\n\t\t\t\t\tendedWithEventsCount = s._eventsCount;\n\t\t\t\t});\n\t\t\t\ts.prependListener('close', hadError => {\n\t\t\t\t\t// if end happened before close but the socket didn't emit an error, do it now\n\t\t\t\t\tif (response && endedWithEventsCount < s._eventsCount && !hadError) {\n\t\t\t\t\t\tconst error = new Error('Premature close');\n\t\t\t\t\t\terror.code = 'ERR_STREAM_PREMATURE_CLOSE';\n\t\t\t\t\t\tresponse.body.emit('error', error);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\trequest_.on('response', response_ => {\n\t\t\trequest_.setTimeout(0);\n\t\t\tconst headers = fromRawHeaders(response_.rawHeaders);\n\n\t\t\t// HTTP fetch step 5\n\t\t\tif (isRedirect(response_.statusCode)) {\n\t\t\t\t// HTTP fetch step 5.2\n\t\t\t\tconst location = headers.get('Location');\n\n\t\t\t\t// HTTP fetch step 5.3\n\t\t\t\tlet locationURL = null;\n\t\t\t\ttry {\n\t\t\t\t\tlocationURL = location === null ? null : new URL(location, request.url);\n\t\t\t\t} catch {\n\t\t\t\t\t// error here can only be invalid URL in Location: header\n\t\t\t\t\t// do not throw when options.redirect == manual\n\t\t\t\t\t// let the user extract the errorneous redirect URL\n\t\t\t\t\tif (request.redirect !== 'manual') {\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// HTTP fetch step 5.5\n\t\t\t\tswitch (request.redirect) {\n\t\t\t\t\tcase 'error':\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase 'manual':\n\t\t\t\t\t\t// Nothing to do\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'follow': {\n\t\t\t\t\t\t// HTTP-redirect fetch step 2\n\t\t\t\t\t\tif (locationURL === null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 5\n\t\t\t\t\t\tif (request.counter >= request.follow) {\n\t\t\t\t\t\t\treject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 6 (counter increment)\n\t\t\t\t\t\t// Create a new Request object.\n\t\t\t\t\t\tconst requestOptions = {\n\t\t\t\t\t\t\theaders: new Headers(request.headers),\n\t\t\t\t\t\t\tfollow: request.follow,\n\t\t\t\t\t\t\tcounter: request.counter + 1,\n\t\t\t\t\t\t\tagent: request.agent,\n\t\t\t\t\t\t\tcompress: request.compress,\n\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\tbody: clone(request),\n\t\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t\t\tsize: request.size,\n\t\t\t\t\t\t\treferrer: request.referrer,\n\t\t\t\t\t\t\treferrerPolicy: request.referrerPolicy\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// when forwarding sensitive headers like \"Authorization\",\n\t\t\t\t\t\t// \"WWW-Authenticate\", and \"Cookie\" to untrusted targets,\n\t\t\t\t\t\t// headers will be ignored when following a redirect to a domain\n\t\t\t\t\t\t// that is not a subdomain match or exact match of the initial domain.\n\t\t\t\t\t\t// For example, a redirect from \"foo.com\" to either \"foo.com\" or \"sub.foo.com\"\n\t\t\t\t\t\t// will forward the sensitive headers, but a redirect to \"bar.com\" will not.\n\t\t\t\t\t\t// headers will also be ignored when following a redirect to a domain using\n\t\t\t\t\t\t// a different protocol. For example, a redirect from \"https://foo.com\" to \"http://foo.com\"\n\t\t\t\t\t\t// will not forward the sensitive headers\n\t\t\t\t\t\tif (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) {\n\t\t\t\t\t\t\tfor (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {\n\t\t\t\t\t\t\t\trequestOptions.headers.delete(name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 9\n\t\t\t\t\t\tif (response_.statusCode !== 303 && request.body && options_.body instanceof Stream.Readable) {\n\t\t\t\t\t\t\treject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 11\n\t\t\t\t\t\tif (response_.statusCode === 303 || ((response_.statusCode === 301 || response_.statusCode === 302) && request.method === 'POST')) {\n\t\t\t\t\t\t\trequestOptions.method = 'GET';\n\t\t\t\t\t\t\trequestOptions.body = undefined;\n\t\t\t\t\t\t\trequestOptions.headers.delete('content-length');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 14\n\t\t\t\t\t\tconst responseReferrerPolicy = parseReferrerPolicyFromHeader(headers);\n\t\t\t\t\t\tif (responseReferrerPolicy) {\n\t\t\t\t\t\t\trequestOptions.referrerPolicy = responseReferrerPolicy;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 15\n\t\t\t\t\t\tresolve(fetch(new Request(locationURL, requestOptions)));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn reject(new TypeError(`Redirect option '${request.redirect}' is not a valid value of RequestRedirect`));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Prepare response\n\t\t\tif (signal) {\n\t\t\t\tresponse_.once('end', () => {\n\t\t\t\t\tsignal.removeEventListener('abort', abortAndFinalize);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet body = pump(response_, new PassThrough(), error => {\n\t\t\t\tif (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\t\t\t});\n\t\t\t// see https://github.com/nodejs/node/pull/29376\n\t\t\t/* c8 ignore next 3 */\n\t\t\tif (process.version < 'v12.10') {\n\t\t\t\tresponse_.on('aborted', abortAndFinalize);\n\t\t\t}\n\n\t\t\tconst responseOptions = {\n\t\t\t\turl: request.url,\n\t\t\t\tstatus: response_.statusCode,\n\t\t\t\tstatusText: response_.statusMessage,\n\t\t\t\theaders,\n\t\t\t\tsize: request.size,\n\t\t\t\tcounter: request.counter,\n\t\t\t\thighWaterMark: request.highWaterMark\n\t\t\t};\n\n\t\t\t// HTTP-network fetch step 12.1.1.3\n\t\t\tconst codings = headers.get('Content-Encoding');\n\n\t\t\t// HTTP-network fetch step 12.1.1.4: handle content codings\n\n\t\t\t// in following scenarios we ignore compression support\n\t\t\t// 1. compression support is disabled\n\t\t\t// 2. HEAD request\n\t\t\t// 3. no Content-Encoding header\n\t\t\t// 4. no content response (204)\n\t\t\t// 5. content not modified response (304)\n\t\t\tif (!request.compress || request.method === 'HEAD' || codings === null || response_.statusCode === 204 || response_.statusCode === 304) {\n\t\t\t\tresponse = new Response(body, responseOptions);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For Node v6+\n\t\t\t// Be less strict when decoding compressed responses, since sometimes\n\t\t\t// servers send slightly invalid responses that are still accepted\n\t\t\t// by common browsers.\n\t\t\t// Always using Z_SYNC_FLUSH is what cURL does.\n\t\t\tconst zlibOptions = {\n\t\t\t\tflush: zlib.Z_SYNC_FLUSH,\n\t\t\t\tfinishFlush: zlib.Z_SYNC_FLUSH\n\t\t\t};\n\n\t\t\t// For gzip\n\t\t\tif (codings === 'gzip' || codings === 'x-gzip') {\n\t\t\t\tbody = pump(body, zlib.createGunzip(zlibOptions), error => {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tresponse = new Response(body, responseOptions);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For deflate\n\t\t\tif (codings === 'deflate' || codings === 'x-deflate') {\n\t\t\t\t// Handle the infamous raw deflate response from old servers\n\t\t\t\t// a hack for old IIS and Apache servers\n\t\t\t\tconst raw = pump(response_, new PassThrough(), error => {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\traw.once('data', chunk => {\n\t\t\t\t\t// See http://stackoverflow.com/questions/37519828\n\t\t\t\t\tif ((chunk[0] & 0x0F) === 0x08) {\n\t\t\t\t\t\tbody = pump(body, zlib.createInflate(), error => {\n\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = pump(body, zlib.createInflateRaw(), error => {\n\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tresponse = new Response(body, responseOptions);\n\t\t\t\t\tresolve(response);\n\t\t\t\t});\n\t\t\t\traw.once('end', () => {\n\t\t\t\t\t// Some old IIS servers return zero-length OK deflate responses, so\n\t\t\t\t\t// 'data' is never emitted. See https://github.com/node-fetch/node-fetch/pull/903\n\t\t\t\t\tif (!response) {\n\t\t\t\t\t\tresponse = new Response(body, responseOptions);\n\t\t\t\t\t\tresolve(response);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For br\n\t\t\tif (codings === 'br') {\n\t\t\t\tbody = pump(body, zlib.createBrotliDecompress(), error => {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tresponse = new Response(body, responseOptions);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Otherwise, use response as-is\n\t\t\tresponse = new Response(body, responseOptions);\n\t\t\tresolve(response);\n\t\t});\n\n\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\twriteToStream(request_, request).catch(reject);\n\t});\n}\n\nfunction fixResponseChunkedTransferBadEnding(request, errorCallback) {\n\tconst LAST_CHUNK = Buffer.from('0\\r\\n\\r\\n');\n\n\tlet isChunkedTransfer = false;\n\tlet properLastChunkReceived = false;\n\tlet previousChunk;\n\n\trequest.on('response', response => {\n\t\tconst {headers} = response;\n\t\tisChunkedTransfer = headers['transfer-encoding'] === 'chunked' && !headers['content-length'];\n\t});\n\n\trequest.on('socket', socket => {\n\t\tconst onSocketClose = () => {\n\t\t\tif (isChunkedTransfer && !properLastChunkReceived) {\n\t\t\t\tconst error = new Error('Premature close');\n\t\t\t\terror.code = 'ERR_STREAM_PREMATURE_CLOSE';\n\t\t\t\terrorCallback(error);\n\t\t\t}\n\t\t};\n\n\t\tconst onData = buf => {\n\t\t\tproperLastChunkReceived = Buffer.compare(buf.slice(-5), LAST_CHUNK) === 0;\n\n\t\t\t// Sometimes final 0-length chunk and end of message code are in separate packets\n\t\t\tif (!properLastChunkReceived && previousChunk) {\n\t\t\t\tproperLastChunkReceived = (\n\t\t\t\t\tBuffer.compare(previousChunk.slice(-3), LAST_CHUNK.slice(0, 3)) === 0 &&\n\t\t\t\t\tBuffer.compare(buf.slice(-2), LAST_CHUNK.slice(3)) === 0\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tpreviousChunk = buf;\n\t\t};\n\n\t\tsocket.prependListener('close', onSocketClose);\n\t\tsocket.on('data', onData);\n\n\t\trequest.on('close', () => {\n\t\t\tsocket.removeListener('close', onSocketClose);\n\t\t\tsocket.removeListener('data', onData);\n\t\t});\n\t});\n}\n","// Optional sharp-based post-processing (sRGB/EXIF/format)\n// Dynamic import guarded by MARIA_SHARP to avoid hard dependency\n\nexport async function processImageOptional(\n bytes: Buffer,\n format: 'png'|'webp'|'jpg',\n keepExif?: boolean,\n targetSize?: { width: number; height: number },\n): Promise<Buffer> {\n try {\n // dynamic import (no env gate): try sharp, fall back silently if unavailable\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const sharp = (await import('sharp')).default;\n let img = sharp(bytes).toColourspace('srgb');\n if (targetSize && Number.isFinite(targetSize.width) && Number.isFinite(targetSize.height)) {\n const width = Math.max(1, Math.floor(targetSize.width));\n const height = Math.max(1, Math.floor(targetSize.height));\n img = img.resize(width, height, { fit: 'cover' });\n }\n if (keepExif) img = img.withMetadata();\n const qEnv = Number(process.env.MARIA_SHARP_QUALITY || '80');\n const quality = Number.isFinite(qEnv) ? Math.max(1, Math.min(100, Math.floor(qEnv))) : 80;\n const alphaMode = String(process.env.MARIA_SHARP_ALPHA || '').toLowerCase();\n if (format === 'jpg' && alphaMode !== 'preserve') {\n img = img.flatten({ background: { r: 255, g: 255, b: 255 } });\n }\n switch (format) {\n case 'png': return await img.png().toBuffer();\n case 'webp': return await img.webp({ quality }).toBuffer();\n case 'jpg': return await img.jpeg({ mozjpeg: true, quality }).toBuffer();\n }\n return bytes;\n } catch {\n return bytes;\n }\n}\n","/**\n * Production-ready Rate Limit Middleware\n * Fixes: First-call false positive, Infinity/Invalid Date errors\n */\n\nimport type { Request, Response, NextFunction } from 'express';\nimport { getAuth } from 'firebase-admin/auth';\n\n// In-memory store (TODO: Replace with Redis for multi-instance)\nconst rateLimitStore = new Map<string, { lastAt: number }>();\n\n// Rate limit configurations per endpoint and plan\ninterface RateLimitConfig {\n windowMs: number;\n requests: number;\n}\n\nconst RATE_LIMITS: Record<string, RateLimitConfig> = {\n '/image:FREE': { windowMs: 3000, requests: 1 }, // 1 req per 3s\n '/video:FREE': { windowMs: 15000, requests: 1 }, // 1 req per 15s\n '/code:FREE': { windowMs: 1000, requests: 1 }, // 1 req per 1s\n '/chat:FREE': { windowMs: 500, requests: 1 }, // 2 req per sec\n \n '/image:STARTER': { windowMs: 1000, requests: 1 }, // 1 req per 1s\n '/video:STARTER': { windowMs: 5000, requests: 1 }, // 1 req per 5s\n '/code:STARTER': { windowMs: 500, requests: 1 }, // 2 req per sec\n \n '/image:PRO': { windowMs: 100, requests: 1 }, // 10 req per sec\n '/video:PRO': { windowMs: 1000, requests: 1 }, // 1 req per sec\n '/code:PRO': { windowMs: 100, requests: 1 }, // 10 req per sec\n \n 'default': { windowMs: 1000, requests: 1 } // Fallback\n};\n\n/**\n * Get rate limit config for specific endpoint and plan\n */\nfunction getRateLimitConfig(endpoint: string, plan: string): RateLimitConfig {\n const key = `${endpoint}:${plan.toUpperCase()}`;\n return RATE_LIMITS[key] || RATE_LIMITS.default;\n}\n\n/**\n * Extract endpoint category from request path\n */\nfunction getEndpointCategory(path: string): string {\n if (path.includes('/image')) return '/image';\n if (path.includes('/video')) return '/video';\n if (path.includes('/code')) return '/code';\n if (path.includes('/chat')) return '/chat';\n return 'default';\n}\n\n/**\n * Main rate limit middleware\n */\nexport async function rateLimitMiddleware(\n req: Request,\n res: Response,\n next: NextFunction\n): Promise<void> {\n try {\n // 1. Identify user (from JWT or API key)\n const authHeader = req.headers.authorization;\n const bearer = authHeader?.split(' ')[1];\n \n let userId = 'anonymous';\n let userPlan = 'FREE';\n \n if (bearer) {\n try {\n const decodedToken = await getAuth().verifyIdToken(bearer);\n userId = decodedToken.uid;\n // Resolve plan from Firestore (fallback to FREE)\n userPlan = await getFirestorePlan(userId);\n } catch {\n // Invalid token, treat as anonymous\n }\n } else if (req.headers['x-api-key']) {\n userId = `apikey:${req.headers['x-api-key']}`;\n // TODO: Resolve plan from API key\n }\n \n // 2. Determine endpoint category\n const endpoint = getEndpointCategory(req.path);\n \n // 3. Get rate limit config\n const config = getRateLimitConfig(endpoint, userPlan);\n \n // 4. Build unique key for this user-endpoint combination\n const rateLimitKey = `${userId}:${endpoint}`;\n \n // 5. Check rate limit\n const now = Date.now();\n const userRecord = rateLimitStore.get(rateLimitKey);\n \n // First request - always allow\n if (!userRecord || typeof userRecord.lastAt !== 'number') {\n rateLimitStore.set(rateLimitKey, { lastAt: now });\n next();\n return;\n }\n \n // Calculate time elapsed since last request\n const elapsedMs = now - userRecord.lastAt;\n const remainingMs = Math.max(0, config.windowMs - elapsedMs);\n \n // If window hasn't passed, reject\n if (remainingMs > 0) {\n // Ensure clean, bounded values for response\n const retryAfterSeconds = Math.max(1, Math.ceil(remainingMs / 1000));\n const resetAt = new Date(now + remainingMs);\n\n // Standard rate-limit headers for client backoff\n try {\n res.setHeader('Retry-After', String(retryAfterSeconds));\n res.setHeader('X-RateLimit-Reset', String(resetAt.getTime()));\n res.setHeader('RateLimit-Reset', String(resetAt.getTime()));\n } catch {}\n\n res.status(429).json({\n error: 'rate_limit_exceeded',\n message: `Rate limit exceeded for ${endpoint} endpoint`,\n details: {\n endpoint,\n plan: userPlan,\n limit: `${config.requests} request per ${config.windowMs / 1000} seconds`,\n retryAfterSeconds,\n resetAt: resetAt.toISOString()\n },\n hint: userPlan === 'FREE' \n ? `Free plan limit: ${config.requests} request per ${config.windowMs / 1000}s. Upgrade at https://maria-code.ai/manage`\n : `Please wait ${retryAfterSeconds} seconds before retrying.`\n });\n return;\n }\n \n // Window has passed - allow and update timestamp\n rateLimitStore.set(rateLimitKey, { lastAt: now });\n next();\n return;\n \n } catch (error) {\n // Fail open - don't block users on rate limiter errors\n console.error('[RateLimit] Error in middleware:', error);\n next();\n return;\n }\n}\n\n/**\n * Clear rate limit for specific user (e.g., after upgrade)\n */\nexport function clearUserRateLimit(userId: string): void {\n const keysToDelete: string[] = [];\n \n rateLimitStore.forEach((_, key) => {\n if (key.startsWith(`${userId}:`)) {\n keysToDelete.push(key);\n }\n });\n \n keysToDelete.forEach(key => rateLimitStore.delete(key));\n}\n\n/**\n * Periodic cleanup of old entries (prevent memory leak)\n */\nexport function startRateLimitCleanup(): void {\n setInterval(() => {\n const now = Date.now();\n const maxAge = 60 * 60 * 1000; // 1 hour\n \n rateLimitStore.forEach((value, key) => {\n if (now - value.lastAt > maxAge) {\n rateLimitStore.delete(key);\n }\n });\n }, 10 * 60 * 1000); // Run every 10 minutes\n}\nasync function getFirestorePlan(uid: string): Promise<string> {\n try {\n const admin = await import('firebase-admin');\n if (!(admin as any).apps?.length) { try { (admin as any).initializeApp(); } catch {} }\n const { getFirestore } = await import('firebase-admin/firestore');\n const db = getFirestore();\n const doc = await db.doc(`projects/default/users/${uid}`).get();\n const plan = (doc.exists && (doc.data() as any)?.plan) || 'FREE';\n return String(plan).toUpperCase();\n } catch {\n return 'FREE';\n }\n}\n","// Media orchestrator types and helpers (named exports only)\n\nimport * as crypto from 'node:crypto';\n\nexport type MediaKind = 'image' | 'video';\n\nexport type PixelSize = [number, number];\nexport type Seconds = number;\n\nexport type ImageFormat = 'png' | 'webp' | 'jpg';\nexport type VideoFormat = 'mp4' | 'webm';\n\nexport interface BaseParams {\n prompt: string;\n model: string;\n seed?: number;\n trace?: string;\n}\n\nexport interface ImageParams extends BaseParams {\n size: PixelSize;\n format: ImageFormat;\n count: number;\n}\n\nexport interface VideoParams extends BaseParams {\n duration: Seconds;\n fps: number;\n size: PixelSize;\n format: VideoFormat;\n}\n\nexport type NormalizedParams = ImageParams | VideoParams;\n\nexport interface ProviderCaps {\n provider: 'google';\n model: string;\n kind: MediaKind;\n // Image caps\n maxImageSize?: PixelSize;\n supportedImageFormats?: ImageFormat[];\n maxBatch?: number;\n // Video caps\n maxVideoSize?: PixelSize;\n maxDuration?: Seconds;\n maxFps?: number;\n supportedVideoFormats?: VideoFormat[];\n // SLA\n maxRps?: number;\n timeoutMs?: number;\n}\n\nexport const PROVIDER_MATRIX: ProviderCaps[] = [\n {\n provider: 'google',\n model: 'gemini-2.5-flash-image-preview',\n kind: 'image',\n maxImageSize: [2048, 2048],\n supportedImageFormats: ['png', 'webp', 'jpg'],\n maxBatch: 8,\n maxRps: 4,\n timeoutMs: 60_000,\n },\n {\n provider: 'google',\n model: 'veo3',\n kind: 'video',\n maxVideoSize: [1920, 1080],\n maxDuration: 30,\n maxFps: 30,\n supportedVideoFormats: ['mp4', 'webm'],\n maxRps: 2,\n timeoutMs: 120_000,\n },\n];\n\nexport interface ManifestV1 {\n manifestVersion: 1;\n kind: MediaKind;\n request: {\n promptHash: string;\n seed?: number;\n params: Record<string, unknown>;\n model: string;\n provider: 'google';\n };\n artifacts: Array<{\n file: string;\n hash: string;\n size?: PixelSize;\n frames?: number;\n }>;\n metrics: {\n durationMs: number;\n retries: number;\n fallbacks: number;\n };\n trace?: string;\n createdAt: string;\n}\n\nexport function hashPrompt(prompt: string): string {\n const h = crypto.createHash('sha256').update(prompt, 'utf8').digest('hex');\n return `sha256:${h}`;\n}\n\nexport function hashBytes(buf: Buffer): string {\n const h = crypto.createHash('sha256').update(buf).digest('hex');\n return `sha256:${h}`;\n}\n\nexport function datePath(d: Date = new Date()): string {\n const y = d.getUTCFullYear();\n const m = String(d.getUTCMonth() + 1).padStart(2, '0');\n const day = String(d.getUTCDate()).padStart(2, '0');\n return `${y}/${m}/${day}`;\n}\n\nexport function hashPrefix(hash: string, n: number = 6): string {\n return hash.replace(/^sha256:/, '').slice(0, n);\n}\n\n","// Atomic artifact storage for media orchestrator\n// Named exports only\n\nimport * as fs from 'node:fs';\nimport * as fsp from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { datePath, hashBytes, hashPrefix, type ManifestV1 } from './types';\n\nexport interface SaveContext {\n root: string;\n kind: 'image' | 'video';\n baseDir?: string; // default based on kind\n trace?: string;\n flat?: boolean; // when true, save directly under baseDir/root without date/hash segments\n skipManifest?: boolean; // when true, do not write manifest.json\n}\n\nexport interface SaveItem {\n bytes: Buffer;\n ext: string; // '.webp' | '.png' | '.mp4' etc\n logicalName?: string; // optional label e.g., 'frame-0001'\n}\n\nexport interface SaveResult {\n files: string[]; // relative to root\n manifestPath: string; // relative to root (empty when skipManifest)\n}\n\nfunction ensureDirSync(p: string): void {\n fs.mkdirSync(p, { recursive: true });\n}\n\nfunction safeJoin(root: string, ...segs: string[]): { full: string; rel: string } {\n const full = path.resolve(root, ...segs);\n const rel = path.relative(root, full);\n if (rel.startsWith('..') || path.isAbsolute(rel)) {\n throw new Error(`path escapes root: ${segs.join('/')}`);\n }\n return { full, rel };\n}\n\nfunction stageDir(root: string, trace: string): string {\n return path.join(root, `.stage/${trace}`);\n}\n\nasync function existsSameHash(destFull: string): Promise<boolean> {\n try {\n await fsp.access(destFull);\n return true;\n } catch {\n return false;\n }\n}\n\nconst WINDOWS_RESERVED = new Set(['con','prn','aux','nul','com1','lpt1']);\nfunction validateWinPathEdge(fullPath: string) {\n if (process.platform === 'win32') {\n if (fullPath.length > 240) throw new Error('path too long for Windows');\n const base = fullPath.split(/[/\\\\]/).pop()?.toLowerCase() || '';\n if (WINDOWS_RESERVED.has(base.split('.')[0])) throw new Error('reserved filename on Windows');\n }\n}\n\nasync function hasCaseInsensitiveCollision(dirFull: string, targetFile: string): Promise<boolean> {\n try {\n const list = await fsp.readdir(dirFull);\n const set = new Set(list.map((n) => n.toLowerCase()));\n return set.has(targetFile.toLowerCase()) && !list.includes(targetFile);\n } catch {\n return false;\n }\n}\n\nasync function atomicRename(stage: string, dest: string): Promise<void> {\n try {\n await fsp.rename(stage, dest);\n try {\n const fd = await fsp.open(dest, 'r');\n try { await fd.sync(); } finally { await fd.close(); }\n } catch {}\n } catch (e: any) {\n if (e && e.code === 'EXDEV') {\n await fsp.copyFile(stage, dest);\n const fd = await fsp.open(dest, 'r');\n try {\n await fd.sync();\n } finally {\n await fd.close();\n }\n await fsp.unlink(stage);\n } else {\n throw e;\n }\n }\n}\n\nexport async function saveArtifacts(\n ctx: SaveContext,\n items: SaveItem[],\n manifest: Omit<ManifestV1, 'createdAt' | 'manifestVersion'> & { createdAt?: string },\n): Promise<SaveResult> {\n const root = ctx.root;\n // default to project root when not specified\n const base = typeof ctx.baseDir === 'string' ? ctx.baseDir : '';\n\n const trace = ctx.trace || Math.random().toString(36).slice(2, 10).toUpperCase();\n const stage = stageDir(root, trace);\n ensureDirSync(stage);\n\n try {\n const dateSeg = datePath(new Date());\n const reqHash = (manifest.request && (manifest.request as any).promptHash) || 'sha256:unknown';\n const slug = hashPrefix(reqHash, 6);\n const outDirSeg = ctx.flat ? (base || '') : `${base ? base + '/' : ''}${dateSeg}/${slug}`;\n const outDir = safeJoin(root, outDirSeg).full;\n ensureDirSync(outDir);\n\n const saved: string[] = [];\n for (let i = 0; i < items.length; i++) {\n const it = items[i];\n const contentHash = hashBytes(it.bytes).replace(/^sha256:/, '');\n const ext = it.ext.startsWith('.') ? it.ext : `.${it.ext}`;\n // Prefer logicalName if provided to preserve ordering (e.g., frames)\n const baseName = it.logicalName ? `${it.logicalName}` : `${contentHash}`;\n const fname = `${baseName}${ext}`;\n const relPath = outDirSeg ? `${outDirSeg}/${fname}` : `${fname}`;\n const dest = safeJoin(root, relPath);\n validateWinPathEdge(dest.full);\n if (await hasCaseInsensitiveCollision(path.dirname(dest.full), path.basename(dest.full))) {\n throw new Error('case-insensitive filename collision');\n }\n const stg = path.join(stage, `${fname}.part`);\n\n // Diagnostic logging – size and signature\n try {\n const sig = it.bytes.slice(0, 8).toString('hex');\n const looksJson = it.bytes.length >= 1 && it.bytes[0] === 0x7b /* '{' */;\n console.log(`[store] writing ${dest.rel} (${it.bytes.length} bytes, sig=${sig}${looksJson ? ', WARN:json-like' : ''})`);\n } catch {}\n\n if (await existsSameHash(dest.full)) {\n // duplicate; reference existing\n saved.push(dest.rel);\n continue;\n }\n\n await fsp.writeFile(stg, it.bytes);\n await atomicRename(stg, dest.full);\n const relPosix = dest.rel.replace(/\\\\/g, '/');\n saved.push(relPosix);\n }\n\n if (!ctx.skipManifest) {\n const manifestObj: ManifestV1 = {\n manifestVersion: 1,\n ...(manifest as any),\n createdAt: manifest.createdAt || new Date().toISOString(),\n artifacts: (manifest.artifacts && manifest.artifacts.length > 0)\n ? manifest.artifacts\n : saved.map((file) => ({ file, hash: `sha256:${path.basename(file).split('.')[0]}` })),\n };\n\n const manifestPathRel = `${outDirSeg ? outDirSeg + '/' : ''}manifest.json`;\n const manifestStage = path.join(stage, 'manifest.json.part');\n const manifestFull = safeJoin(root, manifestPathRel).full;\n\n await fsp.writeFile(manifestStage, JSON.stringify(manifestObj, null, 2), 'utf8');\n try { console.log(`[store] manifest -> ${manifestPathRel}`); } catch {}\n await atomicRename(manifestStage, manifestFull);\n\n await fsp.rm(stage, { recursive: true, force: true });\n return { files: saved, manifestPath: manifestPathRel.replace(/\\\\/g, '/') };\n } else {\n await fsp.rm(stage, { recursive: true, force: true });\n return { files: saved, manifestPath: '' };\n }\n } catch (e) {\n await fsp.rm(stage, { recursive: true, force: true });\n throw e;\n }\n}\n","// Real Gemini provider using @google/genai — no mock fallback\nimport type { MediaProvider, ImageRequestCommon, VideoRequestCommon, ImageResult, VideoFramesResult } from '../ProviderTypes';\n\nexport class GeminiMediaProvider implements MediaProvider {\n private ai: any;\n private primaryModel: string;\n\n constructor(opts?: { model?: string }) {\n const apiKey = process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY;\n if (!apiKey) {\n const hasGoogle = Boolean(process.env.GOOGLE_API_KEY);\n const hasGemini = Boolean(process.env.GEMINI_API_KEY);\n throw new Error(\n `GeminiMediaProvider: missing API key (GOOGLE_API_KEY=${hasGoogle ? 'set' : 'unset'}, GEMINI_API_KEY=${hasGemini ? 'set' : 'unset'})`\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { GoogleGenAI } = require('@google/genai');\n this.ai = new GoogleGenAI({ apiKey });\n this.primaryModel = opts?.model || process.env.MARIA_IMAGE_MODEL || 'gemini-2.5-flash-image-preview';\n }\n\n async generateImage(req: ImageRequestCommon): Promise<ImageResult> {\n const modelName = this.primaryModel;\n const promptPreview = String(req.prompt ?? '').replace(/\\s+/g, ' ').slice(0, 200);\n const targetMime = (() => {\n const fmt = (req.format || 'png').toLowerCase();\n if (fmt === 'jpg') return 'image/jpeg';\n if (fmt === 'jpeg') return 'image/jpeg';\n if (fmt === 'png') return 'image/png';\n if (fmt === 'webp') return 'image/webp';\n return 'image/png';\n })();\n let resp: any;\n try {\n resp = await this.ai.models.generateContent({\n model: modelName,\n contents: [{ role: 'user', parts: [{ text: String(req.prompt) }]}],\n generationConfig: {\n responseModalities: ['IMAGE'],\n responseMimeType: targetMime,\n },\n });\n } catch (err: any) {\n const errMsg = err?.message || String(err);\n throw new Error(\n `GeminiMediaProvider.generateImage request failed: model=${modelName}; prompt=\"${promptPreview}\"; error=${errMsg}`\n );\n }\n const feedback = resp?.response?.promptFeedback;\n const blockReason = feedback?.blockReason || feedback?.block_reason;\n if (blockReason) {\n const modelName = this.primaryModel;\n const reason = String(blockReason);\n throw new Error(`GeminiMediaProvider.policy_violation: model=${modelName}; reason=${reason}`);\n }\n const parts = resp?.response?.candidates?.[0]?.content?.parts || [];\n for (const p of parts) {\n const data = (p?.inlineData?.data) || (p?.inline_data?.data);\n const mime = (p?.inlineData?.mimeType) || (p?.inline_data?.mime_type) || (p?.inline_data?.mimeType) || (p?.inlineData?.mime_type);\n if (data) {\n const buf = Buffer.from(String(data), 'base64');\n if (buf.length > 0) return { bytes: buf, mime: typeof mime === 'string' ? mime : targetMime };\n }\n }\n // Fallback path: try Imagen models if Gemini preview returned no inline data\n try {\n const imagenModel = process.env.MARIA_IMAGE_FALLBACK_MODEL || 'imagen-4.0-generate-001';\n const r2 = await this.ai.models.generateImages({\n model: imagenModel,\n prompt: String(req.prompt),\n });\n const img0 = r2?.generatedImages?.[0]?.image;\n const bytesB64 = img0?.imageBytes || img0?.bytesBase64Encoded;\n if (bytesB64) {\n const buf = Buffer.from(String(bytesB64), 'base64');\n if (buf.length > 0) return { bytes: buf, mime: targetMime };\n }\n } catch {}\n\n const candidatesLen = resp?.response?.candidates?.length ?? 0;\n const finish = resp?.response?.candidates?.[0]?.finishReason || resp?.response?.promptFeedback?.blockReason || 'unknown';\n const firstPartKeys = parts[0] ? Object.keys(parts[0]).join(',') : 'n/a';\n throw new Error(\n `GeminiMediaProvider.generateImage: no inline image returned; model=${modelName}; prompt=\"${promptPreview}\"; candidates=${candidatesLen}; parts=${parts.length}; firstPartKeys=${firstPartKeys}; finish=${finish}`\n );\n }\n\n async generateVideoFrames(req: VideoRequestCommon): Promise<VideoFramesResult> {\n // Not supported in local provider. Use server Veo 3 path.\n const fps = typeof req?.fps === 'number' ? req.fps : 'n/a';\n const duration = typeof req?.duration === 'number' ? req.duration : 'n/a';\n throw new Error(\n `GeminiMediaProvider.generateVideoFrames is not supported locally. Use server /api/v1/video (veo-3.0-generate-001). requested_fps=${fps}; requested_duration=${duration}`\n );\n }\n}\n","import { SecretManagerIntegration } from './SecretManagerIntegration.js';\nimport { IMSProviderAdapter } from './IMSProviderAdapter.js';\nimport type { GenerationParameters, ModelDefinition } from './types/ModelPool.js';\nimport type { Message } from '../../providers/ai-provider.js';\n\nexport interface IMSFacadeOptions {\n projectId?: string;\n defaultPolicyId?: string;\n}\n\nexport interface IMSChatRequest {\n prompt: string;\n systemPrompt?: string;\n context?: {\n kind?: 'chat' | 'code';\n latencyBudgetMs?: number;\n costTier?: 'low' | 'mid' | 'high';\n userPlan?: 'free' | 'starter' | 'pro';\n };\n}\n\nexport interface IMSChatResponse {\n success: boolean;\n content: string;\n meta: {\n provider: string;\n model: string;\n traceId: string;\n reasons: string[];\n };\n}\n\n/**\n * Minimal IMS Facade for API integration\n * - Uses Secret Manager for API keys and optional defaults\n * - Performs simple provider/model selection (dev-friendly)\n * - Delegates provider calls through IMSProviderAdapter (unified interface)\n */\nexport class IMSFacade {\n private readonly secrets: SecretManagerIntegration;\n\n constructor(private readonly options: IMSFacadeOptions = {}) {\n const projectId = options.projectId || process.env.GCLOUD_PROJECT || process.env.GOOGLE_CLOUD_PROJECT || 'maria-code-470602';\n // Provide explicit secret name mapping so GEMINI/Google key is surfaced as googleApiKey\n this.secrets = new SecretManagerIntegration({\n projectId,\n secrets: {\n openAI: 'openai-api-key',\n googleAI: 'google-ai-api-key',\n anthropic: 'anthropic-api-key',\n groq: 'groq-api-key',\n }\n });\n }\n\n /** Route a simple chat request through IMS selection + providers */\n async routeChat(req: IMSChatRequest): Promise<IMSChatResponse> {\n const traceId = `ims_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;\n\n // 1) Load optional defaults from Secret Manager\n const optional = await this.secrets.getOptionalConfig().catch(() => ({} as any));\n\n // 2) Load API keys (fail-safe). Prefer Secret Manager's unified getter\n const allKeys = await this.secrets.getAllApiKeys().catch(() => ({}) as any);\n const openaiApiKey = allKeys.openaiApiKey || process.env.OPENAI_API_KEY;\n const groqApiKey = allKeys.groqApiKey || process.env.GROQ_API_KEY;\n const anthropicApiKey = allKeys.anthropicApiKey || process.env.ANTHROPIC_API_KEY;\n // Ensure GEMINI/GOOGLE_AI is honored (user said GEMINI_API_KEY is present in secrets)\n const googleApiKey = allKeys.googleApiKey || process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY || process.env.GOOGLE_AI_API_KEY;\n\n // 3) Decide provider/model\n const selection = this.selectProviderAndModel({\n defaultProvider: optional.defaultProvider,\n defaultModel: optional.defaultModel,\n keys: { openaiApiKey, groqApiKey, anthropicApiKey, googleApiKey }\n });\n\n // 4) If no keys at all, short-circuit with a graceful local reply\n const anyKey = openaiApiKey || groqApiKey || anthropicApiKey || googleApiKey;\n if (!anyKey) {\n const fallback = this.buildPoliteFallback(req.prompt);\n return {\n success: true,\n content: fallback,\n meta: { provider: 'none', model: 'none', traceId, reasons: ['no-keys-detected'] }\n };\n }\n\n // 4) Initialize provider adapter (with retries and fallback)\n const adapter = new IMSProviderAdapter({\n openaiApiKey,\n groqApiKey,\n anthropicApiKey,\n googleApiKey,\n enableMetrics: true,\n enableFallback: true,\n maxRetries: 2\n });\n try { await adapter.initialize(); } catch {\n const fallback = this.buildPoliteFallback(req.prompt);\n return { success: true, content: fallback, meta: { provider: 'none', model: 'none', traceId, reasons: ['adapter-init-failed'] } };\n }\n\n // 5) Build minimal ModelDefinition and generation params\n const modelDef: ModelDefinition = {\n id: `${selection.provider}:${selection.model}`,\n providerId: selection.provider,\n modelName: selection.model,\n modality: 'text',\n contextWindow: 128000,\n performance: { estimatedTTFBMs: 250, estimatedThroughput: 200, qualityScore: 0.9 },\n cost: { inputTokensPPM: 0.5, outputTokensPPM: 1.5 },\n capabilities: { languages: ['en', 'ja'], functionCalling: false, toolUse: false, codeExecution: false, streaming: true, maxOutputTokens: 4096 },\n defaultParams: { temperature: 0.7, topP: 0.9, maxTokens: 1024 }\n } as any;\n\n const gen: GenerationParameters = {\n temperature: modelDef.defaultParams.temperature,\n topP: modelDef.defaultParams.topP,\n maxTokens: modelDef.defaultParams.maxTokens,\n stop: []\n };\n\n const routeResult = {\n routing: { success: true, estimatedTTFBMs: modelDef.performance.estimatedTTFBMs, estimatedCostUsd: 0.001, confidence: 0.8 },\n generationParams: gen,\n trace: { traceId, routedAt: new Date().toISOString(), policyUsed: this.options.defaultPolicyId || 'dev', fallbackChain: [] }\n };\n\n const sys = (req.systemPrompt && String(req.systemPrompt).trim()) || 'You are a concise assistant. Make sure you answer in plain text, as a natural chat.';\n const messages: Message[] = [\n { role: 'system', content: sys },\n { role: 'user', content: req.prompt }\n ];\n\n // 6) Execute via adapter (graceful fallback on provider/network errors)\n let content = '';\n try {\n ({ content } = await adapter.executeModelCall(messages, routeResult as any, modelDef as any));\n } catch {\n content = this.buildPoliteFallback(req.prompt);\n }\n\n return {\n success: true,\n content,\n meta: {\n provider: selection.provider,\n model: selection.model,\n traceId,\n reasons: selection.reasons\n }\n };\n }\n\n private buildPoliteFallback(prompt: string): string {\n const p = (prompt || '').trim();\n return p\n ? `Sorry, I can't reach the AI service right now.\\nYour request: \"${p}\"\\nI can still help summarize, clarify, or suggest next steps. Try again in a moment, or ask me to rephrase.`\n : 'Sorry, I can\\'t reach the AI service right now. Please try again in a moment.';\n }\n\n private selectProviderAndModel(input: {\n defaultProvider?: string;\n defaultModel?: string;\n keys: { openaiApiKey?: string; groqApiKey?: string; anthropicApiKey?: string; googleApiKey?: string };\n }): { provider: 'openai'|'groq'|'anthropic'|'google'; model: string; reasons: string[] } {\n const reasons: string[] = [];\n // Use defaults if compatible\n if (input.defaultProvider && input.defaultModel) {\n const p = input.defaultProvider.toLowerCase();\n if (this.hasKey(p, input.keys)) {\n reasons.push('selected: secret-defaults');\n return { provider: p as any, model: input.defaultModel, reasons };\n }\n reasons.push('override: default-provider has no key');\n }\n\n // Priority order by key availability (dev-friendly)\n if (input.keys.openaiApiKey) return { provider: 'openai', model: 'gpt-5-mini', reasons: [...reasons, 'fallback: openai key present'] };\n if (input.keys.googleApiKey) return { provider: 'google', model: 'gemini-2.5-flash', reasons: [...reasons, 'fallback: google key present'] };\n if (input.keys.groqApiKey) return { provider: 'groq', model: 'llama-3.1-70b-versatile', reasons: [...reasons, 'fallback: groq key present'] };\n if (input.keys.anthropicApiKey) return { provider: 'anthropic', model: 'claude-sonnet-4-20250514', reasons: [...reasons, 'fallback: anthropic key present'] };\n\n // Last resort\n return { provider: 'openai', model: 'gpt-5-mini', reasons: [...reasons, 'last-resort: no keys detected'] };\n }\n\n private hasKey(provider: string, keys: { openaiApiKey?: string; groqApiKey?: string; anthropicApiKey?: string; googleApiKey?: string }): boolean {\n switch (provider) {\n case 'openai': return !!keys.openaiApiKey || !!process.env.OPENAI_API_KEY;\n case 'groq': return !!keys.groqApiKey || !!process.env.GROQ_API_KEY;\n case 'anthropic': return !!keys.anthropicApiKey || !!process.env.ANTHROPIC_API_KEY;\n case 'google': return !!keys.googleApiKey || !!process.env.GEMINI_API_KEY || !!process.env.GOOGLE_API_KEY || !!process.env.GOOGLE_AI_API_KEY;\n default: return false;\n }\n }\n}\n\nexport default IMSFacade;\n\n","/**\n * Common AI Provider Interface\n * All AI providers must implement this interface\n */\n\nexport interface Message {\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n}\n\nexport interface StreamOptions {\n onToken?: (_token: string) => void;\n signal?: AbortSignal;\n}\n\nexport interface CompletionOptions {\n temperature?: number;\n maxTokens?: number;\n topP?: number;\n stopSequences?: string[];\n stream?: boolean;\n streamOptions?: StreamOptions;\n}\n\nexport interface CodeReviewResult {\n issues: Array<{\n line: number;\n severity: \"error\" | \"warning\" | \"info\";\n message: string;\n suggestion?: string;\n }>;\n summary: string;\n improvements: string[];\n}\n\nexport interface VisionResponse {\n description: string;\n objects?: Array<{\n name: string;\n confidence: number;\n location?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n }>;\n text?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface ModelInfo {\n name: string;\n description?: string;\n contextWindow?: number;\n maxTokens?: number;\n pricing?: {\n input: number;\n output: number;\n };\n capabilities: {\n vision?: boolean;\n streaming?: boolean;\n codeGeneration?: boolean;\n embeddings?: boolean;\n };\n}\n\nexport interface IAIProvider {\n readonly name: string;\n readonly models: string[];\n\n /**\n * Initialize the provider with API key and configuration\n */\n initialize(_apiKey: string, config?: Record<string, unknown>): Promise<void>;\n\n /**\n * Chat completion\n */\n chat(\n _messages: Message[],\n model?: string,\n options?: CompletionOptions,\n ): Promise<string>;\n\n /**\n * Streaming chat completion\n */\n chatStream(\n messages: Message[],\n model?: string,\n options?: CompletionOptions,\n ): AsyncGenerator<string>;\n\n /**\n * Generate code based on prompt\n */\n generateCode(\n _prompt: string,\n language?: string,\n model?: string,\n ): Promise<string>;\n\n /**\n * Review code and provide feedback\n */\n reviewCode(\n _code: string,\n language?: string,\n model?: string,\n ): Promise<CodeReviewResult>;\n\n /**\n * Vision understanding (optional)\n */\n vision?(\n _image: Buffer,\n prompt: string,\n model?: string,\n ): Promise<VisionResponse>;\n\n /**\n * Generate embeddings (optional)\n */\n embeddings?(_text: string, model?: string): Promise<number[]>;\n\n /**\n * Validate connection to the provider\n */\n validateConnection?(): Promise<boolean>;\n\n /**\n * Get model information\n */\n getModelInfo?(model?: string): Promise<ModelInfo>;\n\n /**\n * Estimate cost for tokens\n */\n estimateCost?(_tokens: number, model?: string): number;\n\n /**\n * Check if the provider is properly initialized\n */\n isInitialized(): boolean;\n\n /**\n * Get available models\n */\n getModels(): string[];\n\n /**\n * Get default model\n */\n getDefaultModel(): string;\n}\n\n/**\n * Base abstract class for AI providers\n */\nexport abstract class BaseAIProvider implements IAIProvider {\n protected _apiKey: string = \"\";\n protected config: Record<string, unknown> = {};\n protected initialized: boolean = false;\n\n abstract readonly name: string;\n abstract readonly models: string[];\n\n async initialize(\n _apiKey: string,\n config?: Record<string, unknown>,\n ): Promise<void> {\n this._apiKey = _apiKey;\n this.config = config || {};\n this.initialized = true;\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n getModels(): string[] {\n return this.models;\n }\n\n getDefaultModel(): string {\n if (this.models.length === 0) {\n throw new Error(`No models available for ${this.name} provider`);\n }\n const _defaultModel = this.models[0];\n if (!_defaultModel) {\n throw new Error(`Invalid default model for ${this.name} provider`);\n }\n return _defaultModel;\n }\n\n protected validateModel(model?: string): string {\n const _selectedModel = model || this.getDefaultModel();\n if (!this.models.includes(_selectedModel)) {\n throw new Error(\n `Model ${_selectedModel} is not supported by ${this.name} provider`,\n );\n }\n return _selectedModel;\n }\n\n protected ensureInitialized(): void {\n if (!this.initialized) {\n throw new Error(\n `${this.name} provider is not initialized. Call initialize() first.`,\n );\n }\n }\n\n abstract chat(\n _messages: Message[],\n _model?: string,\n _options?: CompletionOptions,\n ): Promise<string>;\n abstract chatStream(\n _messages: Message[],\n _model?: string,\n _options?: CompletionOptions,\n ): AsyncGenerator<string>;\n abstract generateCode(\n _prompt: string,\n _language?: string,\n _model?: string,\n ): Promise<string>;\n abstract reviewCode(\n _code: string,\n _language?: string,\n _model?: string,\n ): Promise<CodeReviewResult>;\n}\n\n/**\n * Provider Registry\n */\nexport class AIProviderRegistry {\n private static providers = new Map<string, IAIProvider>();\n private static defaultProvider: string | null = null;\n\n static register(provider: IAIProvider): void {\n this.providers.set(provider.name.toLowerCase(), provider);\n }\n\n static get(name: string): IAIProvider | undefined {\n return this.providers.get(name.toLowerCase());\n }\n\n static getAll(): IAIProvider[] {\n return Array.from(this.providers.values());\n }\n\n static setDefault(name: string): void {\n if (!this.providers.has(name.toLowerCase())) {\n throw new Error(`Provider ${name} is not registered`);\n }\n this.defaultProvider = name.toLowerCase();\n }\n\n static getDefault(): IAIProvider | undefined {\n if (!this.defaultProvider) {\n // Return the first registered provider as default\n const _firstProvider = this.providers.values().next().value;\n return _firstProvider;\n }\n return this.providers.get(this.defaultProvider);\n }\n\n static clear(): void {\n this.providers.clear();\n this.defaultProvider = null;\n }\n}\n","import {\n Content,\n GenerativeModel,\n GoogleGenerativeAI,\n} from \"@google/generative-ai\";\nimport {\n BaseAIProvider,\n CodeReviewResult,\n CompletionOptions,\n Message,\n} from \"./ai-provider.js\";\n\nexport class GoogleAIProvider extends BaseAIProvider {\n id = \"google-aiprovider\";\n version = \"1.0.0\";\n\n readonly name = \"GoogleAI\";\n readonly models = [\n \"gemini-2.5-pro\",\n \"gemini-2.5-flash\",\n \"gemini-2.5-flash-lite\",\n \"gemini-2.5-flash-image-preview\",\n \"gemini-2.0-flash-exp\",\n \"gemini-1.5-pro\",\n \"gemini-1.5-pro-002\",\n \"gemini-1.5-flash\",\n \"gemini-1.5-flash-002\",\n \"gemini-1.5-flash-8b\",\n \"gemini-1.0-pro\",\n ];\n\n private client?: GoogleGenerativeAI;\n\n override async initialize(\n _apiKey: string,\n config?: Record<string, unknown>,\n ): Promise<void> {\n await super.initialize(_apiKey, config);\n\n this.client = new GoogleGenerativeAI(_apiKey);\n }\n\n private convertMessages(messages: Message[]): Content[] {\n // Extract system message to use as initial context\n const _systemMessage = messages.find((m) => m.role === \"system\");\n const _conversationMessages = messages.filter((m) => m.role !== \"system\");\n\n const _contents: Content[] = [];\n\n // Add system message as first user message if present\n if (_systemMessage) {\n _contents.push({\n role: \"user\",\n parts: [{ _text: `System: ${_systemMessage.content}` }],\n });\n _contents.push({\n role: \"model\",\n parts: [{ _text: \"Understood. I will follow these instructions.\" }],\n });\n }\n\n // Add conversation messages\n _conversationMessages.forEach((msg) => {\n _contents.push({\n role: msg.role === \"user\" ? \"user\" : \"model\",\n parts: [{ _text: msg.content }],\n });\n });\n\n return _contents;\n }\n\n private getModel(modelName: string): GenerativeModel {\n if (!this.client) {\n throw new Error(\"Client not initialized\");\n }\n\n return this.client.getGenerativeModel({\n model: modelName,\n generationConfig: {\n candidateCount: 1,\n },\n });\n }\n\n async _chat(\n _messages: Message[],\n model?: string,\n options?: CompletionOptions,\n ): Promise<string> {\n this.ensureInitialized();\n const _selectedModel = this.validateModel(model);\n\n const _genModel = this.getModel(_selectedModel);\n const _contents = this.convertMessages(_messages);\n\n // Create _chat session with history\n const _chat = _genModel.startChat({\n history: _contents.slice(0, -1), // All messages except the last one\n generationConfig: {\n temperature: options?.temperature || 0.7,\n maxOutputTokens: options?.maxTokens,\n topP: options?.topP,\n stopSequences: options?.stopSequences,\n },\n });\n\n // Send the last message\n const _lastMessage = _contents[_contents.length - 1];\n if (!_lastMessage || !_lastMessage.parts || !_lastMessage.parts[0]) {\n throw new Error(\"Invalid message format\");\n }\n const _result = await _chat.sendMessage((_lastMessage.parts[0] as any)._text || \"\");\n const _response = await _result.response;\n\n return response.text();\n }\n\n async *chatStream(\n messages: Message[],\n model?: string,\n options?: CompletionOptions,\n ): AsyncGenerator<string> {\n this.ensureInitialized();\n const _selectedModel = this.validateModel(model);\n\n const _genModel = this.getModel(_selectedModel);\n const _contents = this.convertMessages(messages);\n\n // Create _chat session with history\n const _chat = _genModel.startChat({\n history: _contents.slice(0, -1),\n generationConfig: {\n temperature: options?.temperature || 0.7,\n maxOutputTokens: options?.maxTokens,\n topP: options?.topP,\n stopSequences: options?.stopSequences,\n },\n });\n\n // Send the last message with streaming\n const _lastMessage = _contents[_contents.length - 1];\n if (!_lastMessage || !_lastMessage.parts || !_lastMessage.parts[0]) {\n throw new Error(\"Invalid message format\");\n }\n const _result = await _chat.sendMessageStream(\n (_lastMessage.parts[0] as any)._text || \"\",\n );\n\n for await (const chunk of _result.stream) {\n const text = chunk.text();\n if (text) {\n yield text;\n\n if (options?.streamOptions?.onToken) {\n options.streamOptions.onToken(text);\n }\n }\n\n // Check for abort signal\n if (options?.streamOptions?.signal?.aborted) {\n break;\n }\n }\n }\n\n async generateCode(\n prompt: string,\n language: string = \"typescript\",\n model?: string,\n ): Promise<string> {\n const messages: Message[] = [\n {\n role: \"system\",\n content: `You are an expert ${language} developer. Generate clean, well-commented code based on the user's request. Only return the code without any explanations or markdown formatting.`,\n },\n {\n role: \"user\",\n content: prompt,\n },\n ];\n\n return this.chat(messages, model, { temperature: 0.2 });\n }\n\n async reviewCode(\n code: string,\n language: string = \"typescript\",\n model?: string,\n ): Promise<CodeReviewResult> {\n const messages: Message[] = [\n {\n role: \"system\",\n content: `You are an expert code reviewer. Analyze the following ${language} code and provide a detailed review. Format your _response as JSON with the following structure:\n{\n \"issues\": [\n {\n \"line\": <line_number>,\n \"severity\": \"error\" | \"warning\" | \"info\",\n \"message\": \"<issue description>\",\n \"suggestion\": \"<optional fix suggestion>\"\n\n }\n ],\n \"summary\": \"<overall code quality summary>\",\n \"improvements\": [\"<improvement suggestion 1>\", \"<improvement suggestion 2>\", ...]\n}`,\n },\n {\n role: \"user\",\n content: code,\n },\n ];\n\n const _response = await this.chat(messages, model, { temperature: 0.1 });\n\n try {\n return JSON.parse(_response) as CodeReviewResult;\n } catch {\n // Fallback if JSON parsing fails\n return {\n issues: [],\n summary: _response,\n improvements: [],\n };\n }\n }\n}\n","import OpenAI from \"openai\";\nimport {\n BaseAIProvider,\n CodeReviewResult,\n CompletionOptions,\n Message,\n} from \"./ai-provider.js\";\n\nexport class OpenAIProvider extends BaseAIProvider {\n readonly name = \"OpenAI\";\n readonly models = [\n \"gpt-5-mini-2025-08-07\",\n \"gpt-5-mini\",\n \"gpt-5\",\n \"gpt-4o\",\n \"gpt-4o-mini\",\n \"gpt-4-turbo\",\n \"gpt-4\",\n \"gpt-3.5-turbo\",\n \"o1-preview\",\n \"o1-mini\",\n ];\n\n private client?: OpenAI;\n\n override async initialize(\n _apiKey: string,\n config?: Record<string, unknown>,\n ): Promise<void> {\n await super.initialize(_apiKey, config);\n\n this.client = new OpenAI({\n apiKey: this._apiKey,\n baseURL: config?.[\"baseURL\"] as string | undefined,\n organization: config?.[\"organization\"] as string | undefined,\n maxRetries: (config?.[\"maxRetries\"] as number) || 3,\n });\n }\n\n async chat(\n _messages: Message[],\n model?: string,\n options?: CompletionOptions,\n ): Promise<string> {\n this.ensureInitialized();\n const _selectedModel = this.validateModel(model);\n\n // o1 and gpt-5 models only support _temperature=1\n const _isRestrictedModel =\n _selectedModel.includes(\"o1\") || _selectedModel.includes(\"gpt-5\");\n const temperature = _isRestrictedModel ? 1.0 : (options?.temperature ?? 0.7);\n\n const completionParams: any = {\n model: _selectedModel,\n messages: _messages.map((m) => ({\n role: m.role,\n _content: m.content,\n })),\n top_p: options?.topP,\n stop: options?.stopSequences,\n };\n\n // GPT-5 models have special requirements\n if (_selectedModel.includes(\"gpt-5\")) {\n // GPT-5 only supports _temperature=1.0 (no need to send it)\n // Use max_completion_tokens instead of max_tokens\n completionParams.max_completion_tokens = options?.maxTokens || 32000;\n } else {\n // Non-GPT-5 models use standard parameters\n completionParams.temperature = temperature;\n completionParams.max_tokens = options?.maxTokens;\n }\n\n const _completion = await this.client!.chat.completions.create(completionParams);\n\n return _completion.choices[0]?.message?.content || \"\";\n }\n\n // Add complete method for UnifiedAIProviderManager compatibility\n async complete(\n prompt: string,\n req: { model?: string; _temperature?: number; maxTokens?: number },\n ): Promise<{ _content: string }> {\n const messages: Message[] = [\n {\n role: \"user\",\n _content: prompt,\n },\n ];\n\n const _content = await this.chat(messages, req.model, {\n _temperature: req._temperature,\n maxTokens: req.maxTokens,\n });\n\n return { _content };\n }\n\n async *chatStream(\n messages: Message[],\n model?: string,\n options?: CompletionOptions,\n ): AsyncGenerator<string> {\n this.ensureInitialized();\n const _selectedModel = this.validateModel(model);\n\n // o1 and gpt-5 models only support _temperature=1\n const _isRestrictedModel =\n _selectedModel.includes(\"o1\") || _selectedModel.includes(\"gpt-5\");\n const temperature = _isRestrictedModel ? 1.0 : (options?.temperature ?? 0.7);\n\n const streamParams: any = {\n model: _selectedModel,\n messages: messages.map((m) => ({\n role: m.role,\n _content: m.content,\n })),\n top_p: options?.topP,\n stop: options?.stopSequences,\n _stream: true,\n };\n\n // GPT-5 models have special requirements\n if (_selectedModel.includes(\"gpt-5\")) {\n // GPT-5 only supports _temperature=1.0 (no need to send it)\n // Use max_completion_tokens instead of max_tokens\n streamParams.max_completion_tokens = options?.maxTokens || 32000;\n } else {\n // Non-GPT-5 models use standard parameters\n streamParams.temperature = temperature;\n streamParams.max_tokens = options?.maxTokens;\n }\n\n const _stream = await this.client!.chat.completions.create(streamParams);\n\n for await (const chunk of _stream) {\n const _content = chunk.choices[0]?.delta?._content;\n if (_content) {\n yield _content;\n if (options?.streamOptions?.onToken) {\n options.streamOptions.onToken(_content);\n }\n }\n\n // Check for abort signal\n if (options?.streamOptions?.signal?.aborted) {\n break;\n }\n }\n }\n\n async generateCode(\n prompt: string,\n language: string = \"typescript\",\n model?: string,\n ): Promise<string> {\n const messages: Message[] = [\n {\n role: \"system\",\n _content: `You are an expert ${language} developer. Generate clean, well-commented code based on the user's request. Only return the code without any explanations or markdown formatting.`,\n },\n {\n role: \"user\",\n _content: prompt,\n },\n ];\n\n return this.chat(messages, model, { _temperature: 0.2 });\n }\n\n async reviewCode(\n code: string,\n language: string = \"typescript\",\n model?: string,\n ): Promise<CodeReviewResult> {\n const messages: Message[] = [\n {\n role: \"system\",\n _content: `You are an expert code reviewer. Analyze the following ${language} code and provide a detailed review. Format your response as JSON with the following structure:\n{\n \"issues\": [\n {\n \"line\": <line_number>,\n \"severity\": \"error\" | \"warning\" | \"info\",\n \"message\": \"<issue description>\",\n \"suggestion\": \"<optional fix suggestion>\"\n }\n ],\n \"summary\": \"<overall code quality summary>\",\n \"improvements\": [\"<improvement suggestion 1>\", \"<improvement suggestion 2>\", ...]\n}`,\n },\n {\n role: \"user\",\n _content: code,\n },\n ];\n\n const response = await this.chat(messages, model, { _temperature: 0.1 });\n\n try {\n return JSON.parse(response) as CodeReviewResult;\n } catch {\n // Fallback if JSON parsing fails\n return {\n issues: [],\n summary: response,\n improvements: [],\n };\n }\n }\n}\n","import Anthropic from \"@anthropic-ai/sdk\";\nimport {\n BaseAIProvider,\n CodeReviewResult,\n CompletionOptions,\n Message,\n} from \"./ai-provider.js\";\n\nexport class AnthropicProvider extends BaseAIProvider {\n readonly name = \"Anthropic\";\n readonly models = [\n \"claude-4.1\",\n \"claude-3-5-sonnet-20241022\",\n \"claude-3-5-haiku-20241022\",\n \"claude-3-opus-20240229\",\n \"claude-3-sonnet-20240229\",\n \"claude-3-haiku-20240307\",\n ];\n\n private client?: Anthropic;\n\n override async initialize(\n _apiKey: string,\n config?: Record<string, unknown>,\n ): Promise<void> {\n await super.initialize(_apiKey, config);\n\n this.client = new Anthropic({\n _apiKey: this._apiKey,\n baseURL: config?.[\"baseURL\"] as string | undefined,\n maxRetries: (config?.[\"maxRetries\"] as number) || 3,\n });\n }\n\n private convertMessages(messages: Message[]): Anthropic.MessageParam[] {\n // Extract system message if present (unused for now but kept for future use)\n const _systemMessage = messages.find((m) => m.role === \"system\");\n void _systemMessage; // Will be used in future implementation\n const _conversationMessages = messages.filter((m) => m.role !== \"system\");\n\n return _conversationMessages.map((m) => ({\n role: m.role as \"user\" | \"assistant\",\n _content: m.content,\n }));\n }\n\n private getSystemMessage(messages: Message[]): string | undefined {\n const _systemMessage = messages.find((m) => m.role === \"system\");\n return _systemMessage?.content;\n }\n\n async chat(\n _messages: Message[],\n model?: string,\n options?: CompletionOptions,\n ): Promise<string> {\n this.ensureInitialized();\n const _selectedModel = this.validateModel(model);\n\n const _response = await this.client!.messages.create({\n model: _selectedModel,\n _messages: this.convertMessages(_messages),\n system: this.getSystemMessage(_messages),\n maxtokens: options?.maxTokens || 4096,\n temperature: options?.temperature || 0.7,\n topp: options?.topP,\n stopsequences: options?.stopSequences,\n });\n\n // Handle different _content types\n const _content = _response._content[0];\n if (_content && _content.type === \"_text\" && \"_text\" in _content) {\n return _content._text;\n }\n\n return \"\";\n }\n\n async *chatStream(\n messages: Message[],\n model?: string,\n options?: CompletionOptions,\n ): AsyncGenerator<string> {\n this.ensureInitialized();\n const _selectedModel = this.validateModel(model);\n\n const _stream = await this.client!.messages.create({\n model: _selectedModel,\n messages: this.convertMessages(messages),\n system: this.getSystemMessage(messages),\n maxtokens: options?.maxTokens || 4096,\n temperature: options?.temperature || 0.7,\n topp: options?.topP,\n stopsequences: options?.stopSequences,\n _stream: true,\n });\n\n for await (const event of _stream) {\n if (\n event.type === \"content_block_delta\" &&\n event.delta.type === \"text_delta\"\n ) {\n const _text = event.delta._text;\n yield _text;\n\n if (options?.streamOptions?.onToken) {\n options.streamOptions.onToken(_text);\n }\n }\n\n // Check for abort signal\n if (options?.streamOptions?.signal?.aborted) {\n break;\n }\n }\n }\n\n async generateCode(\n prompt: string,\n language: string = \"typescript\",\n model?: string,\n ): Promise<string> {\n const messages: Message[] = [\n {\n role: \"system\",\n _content: `You are an expert ${language} developer. Generate clean, well-commented code based on the user's request. Only return the code without any explanations or markdown formatting.`,\n },\n {\n role: \"user\",\n _content: prompt,\n },\n ];\n\n return this.chat(messages, model, { temperature: 0.2 });\n }\n\n async reviewCode(\n code: string,\n language: string = \"typescript\",\n model?: string,\n ): Promise<CodeReviewResult> {\n const messages: Message[] = [\n {\n role: \"system\",\n _content: `You are an expert code reviewer. Analyze the following ${language} code and provide a detailed review. Format your _response as JSON with the following structure:\n{\n \"issues\": [\n {\n \"line\": <line_number>,\n \"severity\": \"error\" | \"warning\" | \"info\",\n \"message\": \"<issue description>\",\n \"suggestion\": \"<optional fix suggestion>\"\n }\n ],\n \"summary\": \"<overall code quality summary>\",\n \"improvements\": [\"<improvement suggestion 1>\", \"<improvement suggestion 2>\", ...]\n}`,\n },\n {\n role: \"user\",\n _content: code,\n },\n ];\n\n const _response = await this.chat(messages, model, { temperature: 0.1 });\n\n try {\n return JSON.parse(_response) as CodeReviewResult;\n } catch {\n // Fallback if JSON parsing fails\n return {\n issues: [],\n summary: _response,\n improvements: [],\n };\n }\n }\n}\n","/**\n * Unified Base Provider v2.0\n * Abstract base class for all AI providers with legacy compatibility\n */\n\nimport type {\n IUnifiedAIProvider,\n ProviderId,\n ProviderRequest,\n ProviderStream,\n ProviderResponse,\n ProviderHealth,\n} from \"./config\";\n\nexport abstract class UnifiedBaseProvider implements IUnifiedAIProvider {\n abstract id: ProviderId;\n abstract name: string;\n\n protected apiKey?: string;\n protected apiBase?: string;\n protected initialized: boolean = false;\n protected availableModels: string[] = [];\n\n constructor(config: { apiKey?: string; apiBase?: string } = {}) {\n this.apiKey = config.apiKey;\n this.apiBase = config.apiBase;\n }\n\n // Abstract methods that must be implemented by providers\n abstract isAvailable(): Promise<boolean>;\n abstract complete(\n prompt: string,\n req: ProviderRequest,\n ): Promise<ProviderResponse>;\n abstract stream(\n prompt: string,\n req: ProviderRequest,\n ): Promise<ProviderStream>;\n abstract getModels(): Promise<string[]>;\n\n // Default health check implementation\n async health(): Promise<ProviderHealth> {\n const startTime = Date.now();\n try {\n const isHealthy = await this.isAvailable();\n const latencyMs = Date.now() - startTime;\n\n return {\n ok: isHealthy,\n latencyMs,\n timestamp: Date.now(),\n };\n } catch (error) {\n return {\n ok: false,\n latencyMs: Date.now() - startTime,\n reason: error instanceof Error ? error.message : \"Unknown error\",\n timestamp: Date.now(),\n };\n }\n }\n\n // Helper method for HTTP requests\n protected async makeRequest(\n url: string,\n options: Record<string, unknown>,\n ): Promise<unknown> {\n const fetch = (await import(\"node-fetch\")).default;\n const timeoutMs = (options.timeout as number) || 30000;\n\n // Create abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(options.headers as Record<string, string>),\n },\n body: JSON.stringify(options.body),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `${this.name} API error: ${response.status} ${errorText}`,\n );\n }\n\n return response.json();\n } catch (error) {\n clearTimeout(timeoutId);\n throw error;\n }\n }\n\n // Helper method for streaming requests\n protected async makeStreamRequest(\n url: string,\n options: Record<string, unknown>,\n ): Promise<AsyncGenerator<string>> {\n const fetch = (await import(\"node-fetch\")).default;\n const timeoutMs = (options.timeout as number) || 30000;\n\n // Create abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(options.headers as Record<string, string>),\n },\n body: JSON.stringify(options.body),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `${this.name} API error: ${response.status} ${errorText}`,\n );\n }\n\n return this.parseStreamResponse(response);\n } catch (error) {\n clearTimeout(timeoutId);\n throw error;\n }\n }\n\n // Default stream parsing - override in subclasses for provider-specific logic\n private async *parseStreamResponse(\n response: unknown,\n ): AsyncGenerator<string> {\n const typedResponse = response as {\n body?: { getReader(): ReadableStreamDefaultReader<Uint8Array> };\n };\n\n const reader = typedResponse.body?.getReader();\n if (!reader) return;\n\n const decoder = new TextDecoder();\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n const chunk = decoder.decode(value);\n const lines = chunk.split(\"\\n\").filter((line) => line.trim());\n\n for (const line of lines) {\n if (line.startsWith(\"data: \")) {\n const data = line.slice(6);\n if (data === \"[DONE]\") return;\n\n try {\n const parsed = JSON.parse(data) as Record<string, unknown>;\n const content = this.extractStreamContent(parsed);\n if (content) yield content;\n } catch {\n // Skip invalid JSON\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n // Override in subclasses for provider-specific content extraction\n protected extractStreamContent(data: Record<string, unknown>): string | null {\n const choices = data.choices as Array<{ delta?: { content?: string } }>;\n return choices?.[0]?.delta?.content || null;\n }\n\n // Retry logic for API calls\n protected async withRetry<T>(\n operation: () => Promise<T>,\n maxRetries: number = 3,\n ): Promise<T> {\n let lastError: Error;\n\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n return await operation();\n } catch (error) {\n lastError = error as Error;\n\n // Don't retry on certain errors\n if (this.isNonRetryableError(error)) {\n throw error;\n }\n\n // Exponential backoff\n if (attempt < maxRetries - 1) {\n const delay = Math.pow(2, attempt) * 1000;\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n }\n\n throw lastError!;\n }\n\n // Check if error should not be retried\n protected isNonRetryableError(error: unknown): boolean {\n const message = (error as Error)?.message?.toLowerCase() || \"\";\n return (\n message.includes(\"invalid api key\") ||\n message.includes(\"unauthorized\") ||\n message.includes(\"forbidden\") ||\n message.includes(\"not found\")\n );\n }\n}\n\n// 互換エクスポート(既存コードが { BaseProvider } を期待するため)\nexport { UnifiedBaseProvider as BaseProvider };\nexport default UnifiedBaseProvider;\n","/**\n * Groq Provider Implementation (Fast Inference)\n */\n\nimport { BaseProvider } from \"./base-provider\";\nimport { AIRequest, AIResponse, ModelInfo } from \"../types\";\nimport type { ProviderId, ProviderRequest, ProviderResponse, ProviderStream } from \"./config\";\n\nexport class GroqProvider extends BaseProvider {\n id: ProviderId = \"groq\";\n name = \"groq\";\n private modelsCache?: ModelInfo[];\n\n constructor(apiKey?: string) {\n super({\n apiKey,\n apiBase: \"https://api.groq.com/openai/v1\",\n });\n }\n\n async isAvailable(): Promise<boolean> {\n if (!this.apiKey || this.apiKey.startsWith(\"gsk_your-groq-\")) {\n return false;\n }\n\n try {\n await this.makeRequest(`${this.apiBase}/models`, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n },\n });\n return true;\n } catch {\n return false;\n }\n }\n\n async getModels(): Promise<string[]> {\n const models = [\n \"llama-3.3-70b-versatile\",\n \"llama-3.2-90b-vision-preview\",\n \"mixtral-8x7b-32768\",\n \"gemma2-9b-it\",\n ];\n return models;\n }\n\n async getModelInfo(): Promise<ModelInfo[]> {\n if (this.modelsCache) {\n return this.modelsCache;\n }\n\n const models: ModelInfo[] = [\n {\n id: \"llama-3.3-70b-versatile\",\n name: \"Llama 3.3 70B\",\n provider: this.name,\n description: \"Most capable Llama _model with versatile performance\",\n contextLength: 32768,\n capabilities: [\"text\", \"reasoning\", \"code\"],\n _pricing: { input: 0.00059, output: 0.00079 },\n available: await this.isAvailable(),\n recommendedFor: [\"complex_reasoning\", \"coding\", \"analysis\"],\n },\n {\n id: \"llama-3.2-90b-vision-preview\",\n name: \"Llama 3.2 90B Vision\",\n provider: this.name,\n description: \"Vision-capable Llama _model for multimodal tasks\",\n contextLength: 128000,\n capabilities: [\"text\", \"vision\", \"reasoning\"],\n _pricing: { input: 0.0009, output: 0.0009 },\n available: await this.isAvailable(),\n recommendedFor: [\"vision_tasks\", \"multimodal\", \"analysis\"],\n },\n {\n id: \"mixtral-8x7b-32768\",\n name: \"Mixtral 8x7B\",\n provider: this.name,\n description: \"Mixture of experts _model for balanced performance\",\n contextLength: 32768,\n capabilities: [\"text\", \"reasoning\", \"code\"],\n _pricing: { input: 0.00024, output: 0.00024 },\n available: await this.isAvailable(),\n recommendedFor: [\"balanced_performance\", \"multilingual\"],\n },\n {\n id: \"gemma2-9b-it\",\n name: \"Gemma 2 9B\",\n provider: this.name,\n description: \"Google's efficient open _model\",\n contextLength: 8192,\n capabilities: [\"text\", \"reasoning\"],\n _pricing: { input: 0.0002, output: 0.0002 },\n available: await this.isAvailable(),\n recommendedFor: [\"quick_tasks\", \"cost_effective\"],\n },\n ];\n\n this.modelsCache = models;\n return models;\n }\n\n async complete(prompt: string, req: ProviderRequest): Promise<ProviderResponse> {\n if (!(await this.isAvailable())) {\n throw new Error(\"Groq API not available\");\n }\n\n const model = req.model || \"mixtral-8x7b-32768\";\n\n const _payload = {\n model,\n messages: [{ role: \"user\", content: prompt }],\n temperature: req.temperature || 0.7,\n max_tokens: req.maxTokens || 4000,\n stream: false,\n };\n\n const _response = (await this.makeRequest(\n `${this.apiBase}/chat/completions`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n ...req.headers,\n },\n body: _payload,\n timeout: req.timeoutMs,\n },\n )) as {\n choices: Array<{ message?: { content?: string }; finish_reason?: string }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n };\n };\n\n return {\n content: _response.choices[0]?.message?.content || \"\",\n model,\n usage: {\n promptTokens: _response.usage?.prompt_tokens || 0,\n completionTokens: _response.usage?.completion_tokens || 0,\n totalTokens: _response.usage?.total_tokens || 0,\n },\n finishReason: (_response.choices[0]?.finish_reason as ProviderResponse[\"finishReason\"]) || \"stop\",\n };\n }\n\n async stream(prompt: string, req: ProviderRequest): Promise<ProviderStream> {\n if (!(await this.isAvailable())) {\n throw new Error(\"Groq API not available\");\n }\n\n const model = req.model || \"mixtral-8x7b-32768\";\n\n const _payload = {\n model,\n messages: [{ role: \"user\", content: prompt }],\n temperature: req.temperature || 0.7,\n max_tokens: req.maxTokens || 4000,\n stream: true,\n };\n\n const stream = await this.makeStreamRequest(\n `${this.apiBase}/chat/completions`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n ...req.headers,\n },\n body: _payload,\n timeout: req.timeoutMs,\n },\n );\n\n // Convert the string stream to ProviderResponseChunk stream\n async function* chunkGenerator(): AsyncGenerator<{ content: string; delta?: string; finishReason?: string }> {\n for await (const chunk of stream) {\n yield {\n content: chunk,\n delta: chunk,\n };\n }\n }\n\n return chunkGenerator();\n }\n\n async chat(request: AIRequest): Promise<AIResponse> {\n if (!(await this.isAvailable())) {\n throw new Error(\"Groq API not available\");\n }\n\n const model = request.model || \"mixtral-8x7b-32768\";\n const _startTime = Date.now();\n\n const _payload = {\n model,\n messages: request.messages,\n temperature: request.temperature || 0.7,\n max_tokens: request.maxTokens || 4000,\n stream: request.stream || false,\n };\n\n if (request.stream) {\n const stream = await this.makeStreamRequest(\n `${this.apiBase}/chat/completions`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: _payload,\n },\n );\n\n return {\n stream,\n model,\n provider: this.name,\n responseTime: Date.now() - _startTime,\n };\n }\n\n const _response = (await this.makeRequest(\n `${this.apiBase}/chat/completions`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: _payload,\n },\n )) as {\n choices: Array<{ message?: { content?: string } }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n };\n };\n\n return {\n content: _response.choices[0]?.message?.content || \"\",\n model,\n provider: this.name,\n usage: {\n promptTokens: _response.usage?.prompt_tokens || 0,\n completionTokens: _response.usage?.completion_tokens || 0,\n totalTokens: _response.usage?.total_tokens || 0,\n },\n responseTime: Date.now() - _startTime,\n };\n }\n\n async vision(_image: Buffer, prompt: string): Promise<AIResponse> {\n if (!(await this.isAvailable())) {\n throw new Error(\"Groq API not available\");\n }\n\n const _base64Image = _image.toString(\"base64\");\n const _startTime = Date.now();\n\n const _payload = {\n model: \"llama-3.2-90b-vision-preview\",\n messages: [\n {\n role: \"user\",\n content: [\n { type: \"text\", text: prompt },\n {\n type: \"image_url\",\n imageurl: {\n url: `data:image/jpeg;base64,${_base64Image}`,\n },\n },\n ],\n },\n ],\n max_tokens: 4000,\n };\n\n const _response = (await this.makeRequest(\n `${this.apiBase}/chat/completions`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: _payload,\n },\n )) as {\n choices: Array<{ message?: { content?: string } }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n };\n };\n\n return {\n content: _response.choices[0]?.message?.content || \"\",\n model: \"llama-3.2-90b-vision-preview\",\n provider: this.name,\n usage: {\n promptTokens: _response.usage?.prompt_tokens || 0,\n completionTokens: _response.usage?.completion_tokens || 0,\n totalTokens: _response.usage?.total_tokens || 0,\n },\n responseTime: Date.now() - _startTime,\n };\n }\n\n estimateCost(\n _tokens: number,\n _model = \"mixtral-8x7b-32768\",\n ): number {\n const _pricing = {\n \"llama-3.3-70b-versatile\": { input: 0.00059, output: 0.00079 },\n \"llama-3.2-90b-vision-preview\": { input: 0.0009, output: 0.0009 },\n \"mixtral-8x7b-32768\": { input: 0.00024, output: 0.00024 },\n \"gemma2-9b-it\": { input: 0.0002, output: 0.0002 },\n };\n\n const _modelPricing =\n _pricing[_model as keyof typeof _pricing] ||\n _pricing[\"mixtral-8x7b-32768\"];\n return (\n _tokens * 0.75 * _modelPricing.input +\n _tokens * 0.25 * _modelPricing.output\n );\n }\n\n // Note: complete() and stream() methods are already implemented above (lines 105-200)\n}\n","/**\n * IMS Provider Adapter - Connects IMS routing decisions to actual AI providers\n * Handles provider-specific transformations and metrics collection\n */\n\nimport { EventEmitter } from 'events';\nimport type { Message } from '../../providers/ai-provider.js';\nimport type { RouteResult, ProviderCallInfo } from './IMSRouter.js';\nimport type { ModelConfig } from './types/ModelPool.js';\nimport { GoogleAIProvider } from '../../providers/google-ai-provider.js';\nimport { OpenAIProvider } from '../../providers/openai-provider.js';\nimport { AnthropicProvider } from '../../providers/anthropic-provider.js';\nimport { GroqProvider } from '../../providers/groq-provider.js';\nimport { BaseAIProvider } from '../../providers/ai-provider.js';\n\nexport interface ProviderMetrics {\n modelId: string;\n providerId: string;\n requestStartTime: number;\n firstTokenTime?: number;\n completionTime?: number;\n tokensGenerated?: number;\n errorOccurred?: boolean;\n errorCode?: string;\n statusCode?: number;\n}\n\nexport interface IMSProviderAdapterConfig {\n googleApiKey?: string;\n openaiApiKey?: string;\n anthropicApiKey?: string;\n groqApiKey?: string;\n enableMetrics: boolean;\n enableFallback: boolean;\n maxRetries: number;\n}\n\nexport class IMSProviderAdapter extends EventEmitter {\n private providers: Map<string, BaseAIProvider> = new Map();\n private metricsBuffer: ProviderMetrics[] = [];\n private initialized = false;\n \n constructor(private config: IMSProviderAdapterConfig) {\n super();\n }\n \n /**\n * Initialize all configured providers\n */\n async initialize(): Promise<void> {\n if (this.initialized) return;\n \n // Initialize Google AI Provider\n if (this.config.googleApiKey) {\n const googleProvider = new GoogleAIProvider();\n await googleProvider.initialize(this.config.googleApiKey);\n this.providers.set('google', googleProvider);\n this.emit('provider:initialized', { provider: 'google' });\n }\n \n // Initialize OpenAI Provider\n if (this.config.openaiApiKey) {\n const openaiProvider = new OpenAIProvider();\n await openaiProvider.initialize(this.config.openaiApiKey);\n this.providers.set('openai', openaiProvider);\n this.emit('provider:initialized', { provider: 'openai' });\n }\n \n // Initialize Anthropic Provider\n if (this.config.anthropicApiKey) {\n const anthropicProvider = new AnthropicProvider();\n await anthropicProvider.initialize(this.config.anthropicApiKey);\n this.providers.set('anthropic', anthropicProvider);\n this.emit('provider:initialized', { provider: 'anthropic' });\n }\n \n // Initialize Groq Provider (optional; guard against legacy implementation)\n if (this.config.groqApiKey) {\n try {\n const groqProvider: any = new GroqProvider();\n if (typeof groqProvider.initialize === 'function') {\n await groqProvider.initialize(this.config.groqApiKey);\n this.providers.set('groq', groqProvider);\n this.emit('provider:initialized', { provider: 'groq' });\n } else {\n // Skip silently if provider does not support initialize (legacy class)\n this.emit('provider:skipped', { provider: 'groq', reason: 'no-initialize' });\n }\n } catch (e) {\n // Do not fail adapter initialization due to optional provider\n this.emit('provider:error', { provider: 'groq', error: (e as Error)?.message || String(e) });\n }\n }\n \n this.initialized = true;\n this.emit('adapter:ready', { providers: Array.from(this.providers.keys()) });\n }\n \n /**\n * Execute a model call based on IMS routing decision\n */\n async executeModelCall(\n messages: Message[],\n routeResult: RouteResult,\n modelConfig: ModelConfig\n ): Promise<{ content: string; metrics: ProviderMetrics }> {\n const startTime = Date.now();\n const metrics: ProviderMetrics = {\n modelId: modelConfig.id,\n providerId: this.extractProviderId(modelConfig.id),\n requestStartTime: startTime\n };\n \n try {\n const provider = this.getProviderForModel(modelConfig.id);\n if (!provider) {\n throw new Error(`No provider available for model ${modelConfig.id}`);\n }\n \n // Record first token time (approximate for non-streaming)\n const firstTokenTimer = setTimeout(() => {\n metrics.firstTokenTime = Date.now();\n }, 50);\n \n // Execute the actual model call\n const content = await provider.chat(\n messages,\n this.extractModelName(modelConfig.id),\n {\n temperature: routeResult.generationParams.temperature,\n topP: routeResult.generationParams.topP,\n maxTokens: routeResult.generationParams.maxTokens,\n stopSequences: routeResult.generationParams.stop\n }\n );\n \n clearTimeout(firstTokenTimer);\n \n // Record completion metrics\n metrics.completionTime = Date.now();\n metrics.tokensGenerated = this.estimateTokenCount(content);\n \n // Store metrics if enabled\n if (this.config.enableMetrics) {\n this.metricsBuffer.push(metrics);\n this.emit('metrics:collected', metrics);\n }\n \n return { content, metrics };\n \n } catch (error) {\n metrics.errorOccurred = true;\n metrics.errorCode = error instanceof Error ? error.message : 'unknown';\n metrics.completionTime = Date.now();\n \n if (this.config.enableMetrics) {\n this.metricsBuffer.push(metrics);\n this.emit('metrics:error', metrics);\n }\n \n throw error;\n }\n }\n \n /**\n * Execute streaming model call\n */\n async *executeStreamingCall(\n messages: Message[],\n routeResult: RouteResult,\n modelConfig: ModelConfig\n ): AsyncGenerator<string> {\n const startTime = Date.now();\n const metrics: ProviderMetrics = {\n modelId: modelConfig.id,\n providerId: this.extractProviderId(modelConfig.id),\n requestStartTime: startTime\n };\n \n let firstTokenRecorded = false;\n let totalContent = '';\n \n try {\n const provider = this.getProviderForModel(modelConfig.id);\n if (!provider) {\n throw new Error(`No provider available for model ${modelConfig.id}`);\n }\n \n const stream = provider.chatStream(\n messages,\n this.extractModelName(modelConfig.id),\n {\n temperature: routeResult.generationParams.temperature,\n topP: routeResult.generationParams.topP,\n maxTokens: routeResult.generationParams.maxTokens,\n stopSequences: routeResult.generationParams.stop\n }\n );\n \n for await (const chunk of stream) {\n if (!firstTokenRecorded) {\n metrics.firstTokenTime = Date.now();\n firstTokenRecorded = true;\n this.emit('metrics:first-token', metrics);\n }\n \n totalContent += chunk;\n yield chunk;\n }\n \n // Record completion metrics\n metrics.completionTime = Date.now();\n metrics.tokensGenerated = this.estimateTokenCount(totalContent);\n \n if (this.config.enableMetrics) {\n this.metricsBuffer.push(metrics);\n this.emit('metrics:collected', metrics);\n }\n \n } catch (error) {\n metrics.errorOccurred = true;\n metrics.errorCode = error instanceof Error ? error.message : 'unknown';\n metrics.completionTime = Date.now();\n \n if (this.config.enableMetrics) {\n this.metricsBuffer.push(metrics);\n this.emit('metrics:error', metrics);\n }\n \n throw error;\n }\n }\n \n /**\n * Get provider instance for a model ID\n */\n private getProviderForModel(modelId: string): BaseAIProvider | undefined {\n const providerId = this.extractProviderId(modelId);\n return this.providers.get(providerId);\n }\n \n /**\n * Extract provider ID from model ID (e.g., \"google:gemini-2.5-flash\" -> \"google\")\n */\n private extractProviderId(modelId: string): string {\n const parts = modelId.split(':');\n if (parts.length < 2) {\n // Default mapping for models without prefix\n if (modelId.startsWith('gpt') || modelId.startsWith('o1')) return 'openai';\n if (modelId.startsWith('claude')) return 'anthropic';\n if (modelId.startsWith('gemini')) return 'google';\n if (modelId.startsWith('llama') || modelId.startsWith('mixtral')) return 'groq';\n return 'unknown';\n }\n return parts[0];\n }\n \n /**\n * Extract model name from model ID (e.g., \"google:gemini-2.5-flash\" -> \"gemini-2.5-flash\")\n */\n private extractModelName(modelId: string): string {\n const parts = modelId.split(':');\n return parts.length > 1 ? parts.slice(1).join(':') : modelId;\n }\n \n /**\n * Estimate token count for metrics (rough approximation)\n */\n private estimateTokenCount(content: string): number {\n // Rough estimate: 1 token ≈ 4 characters\n return Math.ceil(content.length / 4);\n }\n \n /**\n * Get collected metrics\n */\n getMetrics(): ProviderMetrics[] {\n return [...this.metricsBuffer];\n }\n \n /**\n * Clear metrics buffer\n */\n clearMetrics(): void {\n this.metricsBuffer = [];\n this.emit('metrics:cleared');\n }\n \n /**\n * Get average latency by model\n */\n getAverageLatencyByModel(): Map<string, { ttfb: number; total: number }> {\n const latencyMap = new Map<string, { ttfbSum: number; totalSum: number; count: number }>();\n \n for (const metric of this.metricsBuffer) {\n if (!metric.errorOccurred && metric.firstTokenTime && metric.completionTime) {\n const existing = latencyMap.get(metric.modelId) || { ttfbSum: 0, totalSum: 0, count: 0 };\n existing.ttfbSum += metric.firstTokenTime - metric.requestStartTime;\n existing.totalSum += metric.completionTime - metric.requestStartTime;\n existing.count++;\n latencyMap.set(metric.modelId, existing);\n }\n }\n \n const result = new Map<string, { ttfb: number; total: number }>();\n for (const [modelId, data] of latencyMap) {\n result.set(modelId, {\n ttfb: Math.round(data.ttfbSum / data.count),\n total: Math.round(data.totalSum / data.count)\n });\n }\n \n return result;\n }\n \n /**\n * Get error rate by model\n */\n getErrorRateByModel(): Map<string, number> {\n const errorMap = new Map<string, { errors: number; total: number }>();\n \n for (const metric of this.metricsBuffer) {\n const existing = errorMap.get(metric.modelId) || { errors: 0, total: 0 };\n existing.total++;\n if (metric.errorOccurred) {\n existing.errors++;\n }\n errorMap.set(metric.modelId, existing);\n }\n \n const result = new Map<string, number>();\n for (const [modelId, data] of errorMap) {\n result.set(modelId, data.total > 0 ? data.errors / data.total : 0);\n }\n \n return result;\n }\n}","import fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport type SubscriptionPlanId = 'free' | 'starter' | 'pro' | 'ultra';\n\nexport interface SubscriptionEventRecord {\n id: string;\n type: string;\n status: 'received' | 'processed' | 'failed' | 'skipped';\n receivedAt: string;\n stripeCreatedAt?: string;\n processedAt?: string;\n error?: string;\n}\n\nexport interface CustomerRecord {\n id: string;\n uid?: string;\n email?: string;\n metadata?: Record<string, string>;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface SubscriptionRecord {\n id: string;\n customerId: string;\n uid?: string;\n status: string;\n planId: SubscriptionPlanId;\n pendingPlanId?: SubscriptionPlanId | null;\n pendingPlanEffectiveAt?: string | null;\n cancelAt?: string | null;\n cancelAtPeriodEnd?: boolean;\n canceledAt?: string | null;\n currentPeriodStart: string;\n currentPeriodEnd: string;\n trialEnd?: string | null;\n latestInvoiceId?: string;\n latestInvoiceStatus?: 'succeeded' | 'failed' | 'pending';\n latestInvoiceAmount?: number;\n metadata?: Record<string, string>;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface InvoiceRecord {\n id: string;\n subscriptionId?: string;\n customerId?: string;\n amountPaid: number;\n currency: string;\n status: 'succeeded' | 'failed';\n paidAt: string;\n createdAt: string;\n periodStart?: string;\n periodEnd?: string;\n hostedInvoiceUrl?: string;\n}\n\nexport interface EntitlementRecord {\n uid: string;\n planId: SubscriptionPlanId;\n features: string[];\n updatedAt: string;\n}\n\nexport interface UsageRecord {\n uid: string;\n planId: SubscriptionPlanId;\n periodId: string;\n limits: QuotaSnapshot;\n used: QuotaSnapshot;\n remaining: QuotaSnapshot;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface QuotaSnapshot {\n requests: number;\n tokens: number;\n code: number;\n attachment: number;\n}\n\ninterface SubscriptionState {\n events: Record<string, SubscriptionEventRecord>;\n customers: Record<string, CustomerRecord>;\n subscriptions: Record<string, SubscriptionRecord>;\n invoices: Record<string, InvoiceRecord>;\n entitlements: Record<string, EntitlementRecord>;\n usage: Record<string, UsageRecord>;\n}\n\nconst DEFAULT_STATE: SubscriptionState = {\n events: {},\n customers: {},\n subscriptions: {},\n invoices: {},\n entitlements: {},\n usage: {}\n};\n\nexport class SubscriptionStore {\n private readonly filePath: string;\n private state: SubscriptionState | null = null;\n private loadPromise: Promise<void> | null = null;\n private queue: Promise<void> = Promise.resolve();\n\n constructor(filePath?: string) {\n this.filePath = filePath ?? path.resolve(process.cwd(), 'data', 'subscription-state.json');\n }\n\n private async ensureLoaded(): Promise<void> {\n if (this.state) {\n return;\n }\n if (!this.loadPromise) {\n this.loadPromise = this.loadStateFromDisk();\n }\n await this.loadPromise;\n }\n\n private async loadStateFromDisk(): Promise<void> {\n try {\n const raw = await fs.readFile(this.filePath, 'utf8');\n const parsed = JSON.parse(raw) as SubscriptionState;\n this.state = {\n events: parsed.events ?? {},\n customers: parsed.customers ?? {},\n subscriptions: parsed.subscriptions ?? {},\n invoices: parsed.invoices ?? {},\n entitlements: parsed.entitlements ?? {},\n usage: parsed.usage ?? {}\n };\n } catch (error: any) {\n if (error?.code === 'ENOENT') {\n this.state = { ...DEFAULT_STATE };\n await this.persist();\n return;\n }\n throw error;\n }\n }\n\n private async persist(): Promise<void> {\n if (!this.state) {\n return;\n }\n const directory = path.dirname(this.filePath);\n await fs.mkdir(directory, { recursive: true });\n const payload = JSON.stringify(this.state, null, 2);\n await fs.writeFile(this.filePath, payload, 'utf8');\n }\n\n private runExclusive<T>(task: () => Promise<T>): Promise<T> {\n const result = this.queue.then(task);\n this.queue = result.then(() => undefined).catch(() => undefined);\n return result;\n }\n\n async markEventReceived(event: { id: string; type: string; created?: number }): Promise<'new' | 'duplicate' | 'pending'> {\n return this.runExclusive(async () => {\n await this.ensureLoaded();\n const now = new Date().toISOString();\n const state = this.state!;\n const existing = state.events[event.id];\n\n if (!existing) {\n state.events[event.id] = {\n id: event.id,\n type: event.type,\n status: 'received',\n receivedAt: now,\n stripeCreatedAt: event.created ? new Date(event.created * 1000).toISOString() : undefined\n };\n await this.persist();\n return 'new';\n }\n\n if (existing.status === 'processed') {\n return 'duplicate';\n }\n\n state.events[event.id] = {\n ...existing,\n type: event.type,\n status: existing.status === 'failed' ? 'received' : existing.status,\n receivedAt: existing.receivedAt ?? now\n };\n await this.persist();\n return 'pending';\n });\n }\n\n async markEventProcessed(eventId: string): Promise<void> {\n await this.runExclusive(async () => {\n await this.ensureLoaded();\n const state = this.state!;\n const existing = state.events[eventId];\n if (!existing) {\n return;\n }\n state.events[eventId] = {\n ...existing,\n status: 'processed',\n processedAt: new Date().toISOString(),\n error: undefined\n };\n await this.persist();\n });\n }\n\n async markEventFailed(eventId: string, error: unknown): Promise<void> {\n await this.runExclusive(async () => {\n await this.ensureLoaded();\n const state = this.state!;\n const existing = state.events[eventId];\n if (!existing) {\n return;\n }\n state.events[eventId] = {\n ...existing,\n status: 'failed',\n error: error instanceof Error ? error.message : String(error)\n };\n await this.persist();\n });\n }\n\n async upsertCustomer(record: Omit<CustomerRecord, 'createdAt' | 'updatedAt'> & Partial<Pick<CustomerRecord, 'createdAt' | 'updatedAt'>>): Promise<CustomerRecord> {\n return this.runExclusive(async () => {\n await this.ensureLoaded();\n const now = new Date().toISOString();\n const state = this.state!;\n const existing = state.customers[record.id];\n const createdAt = existing?.createdAt ?? record.createdAt ?? now;\n\n const nextRecord: CustomerRecord = {\n id: record.id,\n uid: record.uid ?? existing?.uid,\n email: record.email ?? existing?.email,\n metadata: {\n ...(existing?.metadata ?? {}),\n ...(record.metadata ?? {})\n },\n createdAt,\n updatedAt: record.updatedAt ?? now\n };\n\n state.customers[record.id] = nextRecord;\n await this.persist();\n return nextRecord;\n });\n }\n\n async getCustomer(customerId: string): Promise<CustomerRecord | undefined> {\n await this.ensureLoaded();\n const state = this.state!;\n const record = state.customers[customerId];\n return record ? { ...record, metadata: record.metadata ? { ...record.metadata } : undefined } : undefined;\n }\n\n async upsertSubscription(record: Omit<SubscriptionRecord, 'createdAt' | 'updatedAt'> & Partial<Pick<SubscriptionRecord, 'createdAt' | 'updatedAt'>>): Promise<SubscriptionRecord> {\n return this.runExclusive(async () => {\n await this.ensureLoaded();\n const now = new Date().toISOString();\n const state = this.state!;\n const existing = state.subscriptions[record.id];\n const createdAt = existing?.createdAt ?? record.createdAt ?? now;\n\n const nextRecord: SubscriptionRecord = {\n id: record.id,\n customerId: record.customerId,\n uid: record.uid ?? existing?.uid,\n status: record.status,\n planId: record.planId,\n pendingPlanId: record.pendingPlanId !== undefined\n ? record.pendingPlanId\n : existing?.pendingPlanId ?? null,\n pendingPlanEffectiveAt: record.pendingPlanEffectiveAt !== undefined\n ? record.pendingPlanEffectiveAt\n : existing?.pendingPlanEffectiveAt ?? null,\n cancelAt: record.cancelAt ?? null,\n cancelAtPeriodEnd: record.cancelAtPeriodEnd ?? false,\n canceledAt: record.canceledAt ?? null,\n currentPeriodStart: record.currentPeriodStart,\n currentPeriodEnd: record.currentPeriodEnd,\n trialEnd: record.trialEnd ?? null,\n latestInvoiceId: record.latestInvoiceId ?? existing?.latestInvoiceId,\n latestInvoiceStatus: record.latestInvoiceStatus ?? existing?.latestInvoiceStatus,\n latestInvoiceAmount: record.latestInvoiceAmount ?? existing?.latestInvoiceAmount,\n metadata: {\n ...(existing?.metadata ?? {}),\n ...(record.metadata ?? {})\n },\n createdAt,\n updatedAt: record.updatedAt ?? now\n };\n\n state.subscriptions[record.id] = nextRecord;\n await this.persist();\n return nextRecord;\n });\n }\n\n async getSubscription(subscriptionId: string): Promise<SubscriptionRecord | undefined> {\n await this.ensureLoaded();\n const state = this.state!;\n const record = state.subscriptions[subscriptionId];\n if (!record) {\n return undefined;\n }\n return {\n ...record,\n metadata: record.metadata ? { ...record.metadata } : undefined\n };\n }\n\n async findSubscriptionByCustomer(customerId: string): Promise<SubscriptionRecord | undefined> {\n await this.ensureLoaded();\n const state = this.state!;\n return Object.values(state.subscriptions).find((sub) => sub.customerId === customerId);\n }\n\n async recordInvoice(record: InvoiceRecord): Promise<InvoiceRecord> {\n return this.runExclusive(async () => {\n await this.ensureLoaded();\n const state = this.state!;\n state.invoices[record.id] = { ...record };\n await this.persist();\n return state.invoices[record.id];\n });\n }\n\n async setEntitlements(uid: string, planId: SubscriptionPlanId, features: string[]): Promise<EntitlementRecord> {\n return this.runExclusive(async () => {\n await this.ensureLoaded();\n const now = new Date().toISOString();\n const state = this.state!;\n const record: EntitlementRecord = {\n uid,\n planId,\n features: [...features],\n updatedAt: now\n };\n state.entitlements[uid] = record;\n await this.persist();\n return record;\n });\n }\n\n async setUsage(params: {\n uid: string;\n planId: SubscriptionPlanId;\n periodId: string;\n limits: QuotaSnapshot;\n }): Promise<UsageRecord> {\n return this.runExclusive(async () => {\n await this.ensureLoaded();\n const now = new Date().toISOString();\n const state = this.state!;\n const key = `${params.uid}:${params.periodId}`;\n const existing = state.usage[key];\n const used: QuotaSnapshot = existing?.used ?? {\n requests: 0,\n tokens: 0,\n code: 0,\n attachment: 0\n };\n const remaining: QuotaSnapshot = {\n requests: Math.max(0, params.limits.requests - used.requests),\n tokens: Math.max(0, params.limits.tokens - used.tokens),\n code: Math.max(0, params.limits.code - used.code),\n attachment: Math.max(0, params.limits.attachment - used.attachment)\n };\n\n const record: UsageRecord = {\n uid: params.uid,\n planId: params.planId,\n periodId: params.periodId,\n limits: { ...params.limits },\n used,\n remaining,\n createdAt: existing?.createdAt ?? now,\n updatedAt: now\n };\n\n state.usage[key] = record;\n await this.persist();\n return record;\n });\n }\n\n async getUsage(uid: string, periodId: string): Promise<UsageRecord | undefined> {\n await this.ensureLoaded();\n const key = `${uid}:${periodId}`;\n const record = this.state!.usage[key];\n if (!record) {\n return undefined;\n }\n return {\n ...record,\n limits: { ...record.limits },\n used: { ...record.used },\n remaining: { ...record.remaining }\n };\n }\n\n async getEntitlements(uid: string): Promise<EntitlementRecord | undefined> {\n await this.ensureLoaded();\n const record = this.state!.entitlements[uid];\n if (!record) {\n return undefined;\n }\n return {\n ...record,\n features: [...record.features]\n };\n }\n\n async snapshot(): Promise<SubscriptionState> {\n await this.ensureLoaded();\n const state = this.state!;\n return JSON.parse(JSON.stringify(state)) as SubscriptionState;\n }\n}\n\nexport default SubscriptionStore;\n","import { createHmac, timingSafeEqual } from 'node:crypto';\nimport SubscriptionStore, {\n CustomerRecord,\n QuotaSnapshot,\n SubscriptionPlanId\n} from './subscription-store.js';\n\nexport type StripeEventType =\n | 'checkout.session.completed'\n | 'customer.subscription.created'\n | 'customer.subscription.updated'\n | 'customer.subscription.deleted'\n | 'invoice.payment_succeeded'\n | 'invoice.payment_failed';\n\ninterface StripeEvent<T = unknown> {\n id: string;\n type: StripeEventType | string;\n created: number;\n data: {\n object: T;\n };\n livemode?: boolean;\n}\n\ninterface StripeSubscriptionItem {\n price?: {\n id?: string;\n nickname?: string | null;\n product?: string | { id?: string } | null;\n metadata?: Record<string, string | undefined>;\n };\n plan?: {\n product?: string | { id?: string } | null;\n metadata?: Record<string, string | undefined>;\n } | null;\n metadata?: Record<string, string | undefined>;\n}\n\ninterface StripeSubscription {\n id: string;\n status: string;\n customer: string | { id?: string; email?: string | null };\n items?: {\n data?: StripeSubscriptionItem[];\n };\n metadata?: Record<string, string | undefined>;\n cancel_at?: number | null;\n cancel_at_period_end?: boolean;\n canceled_at?: number | null;\n current_period_start: number;\n current_period_end: number;\n trial_end?: number | null;\n latest_invoice?: string | { id?: string } | null;\n}\n\ninterface StripeInvoiceLine {\n period?: {\n start?: number;\n end?: number;\n };\n plan?: {\n id?: string;\n metadata?: Record<string, string | undefined>;\n } | null;\n price?: {\n id?: string;\n product?: string | { id?: string } | null;\n metadata?: Record<string, string | undefined>;\n } | null;\n metadata?: Record<string, string | undefined>;\n}\n\ninterface StripeInvoice {\n id: string;\n status?: 'draft' | 'open' | 'paid' | 'uncollectible' | 'void';\n amount_paid?: number;\n currency?: string;\n customer?: string | { id?: string } | null;\n subscription?: string | { id?: string } | null;\n hosted_invoice_url?: string | null;\n created?: number;\n paid?: boolean;\n lines?: {\n data?: StripeInvoiceLine[];\n };\n period_start?: number;\n period_end?: number;\n}\n\ninterface StripeCheckoutSession {\n id: string;\n customer?: string | { id?: string } | null;\n customer_email?: string | null;\n metadata?: Record<string, string | undefined>;\n client_reference_id?: string | null;\n subscription?: string | null;\n mode?: string;\n}\n\ninterface StripeWebhookServiceOptions {\n secret: string;\n store?: SubscriptionStore;\n toleranceSeconds?: number;\n priceIdMap?: Record<string, SubscriptionPlanId>;\n productIdMap?: Record<string, SubscriptionPlanId>;\n}\n\nconst PLAN_PRIORITY: Record<SubscriptionPlanId, number> = {\n free: 0,\n starter: 1,\n pro: 2,\n ultra: 3\n};\n\nconst PLAN_CONFIG: Record<SubscriptionPlanId, { entitlements: string[]; quota: QuotaSnapshot }> = {\n free: {\n entitlements: [\n 'core.cli.basic',\n 'ai.chat.basic',\n 'usage.metrics.basic'\n ],\n quota: {\n requests: 100,\n tokens: 50000,\n code: 30,\n attachment: 10\n }\n },\n starter: {\n entitlements: [\n 'core.cli.basic',\n 'ai.chat.basic',\n 'ai.chat.priority',\n 'usage.metrics.expanded',\n 'workspace.multi-device'\n ],\n quota: {\n requests: 500,\n tokens: 250000,\n code: 200,\n attachment: 50\n }\n },\n pro: {\n entitlements: [\n 'core.cli.basic',\n 'ai.chat.priority',\n 'ai.code.advanced',\n 'orchestrator.code',\n 'usage.metrics.expanded',\n 'workspace.multi-device',\n 'api.webhooks'\n ],\n quota: {\n requests: 2000,\n tokens: 1000000,\n code: 1000,\n attachment: 200\n }\n },\n ultra: {\n entitlements: [\n 'core.cli.basic',\n 'ai.chat.priority',\n 'ai.code.advanced',\n 'orchestrator.code',\n 'orchestrator.media',\n 'monitoring.analytics',\n 'api.webhooks',\n 'support.priority'\n ],\n quota: {\n requests: 10000,\n tokens: 5000000,\n code: 5000,\n attachment: 1000\n }\n }\n};\n\nconst PLAN_ALIAS_MAP: Record<string, SubscriptionPlanId> = {\n starterannual: 'starter',\n 'starter-annual': 'starter',\n 'starter_yearly': 'starter',\n 'starter-yearly': 'starter',\n starteryearly: 'starter',\n proannual: 'pro',\n 'pro-annual': 'pro',\n 'pro_yearly': 'pro',\n 'pro-yearly': 'pro',\n proyearly: 'pro',\n ultraannual: 'ultra',\n 'ultra-annual': 'ultra',\n 'ultra_yearly': 'ultra',\n 'ultra-yearly': 'ultra',\n ultrayearly: 'ultra'\n};\n\nfunction sanitizeKey(value: string): string {\n return value.trim().toLowerCase().replace(/[^a-z0-9-]/g, '');\n}\n\nfunction toIso(timestamp?: number | null): string | null {\n if (!timestamp) {\n return null;\n }\n return new Date(timestamp * 1000).toISOString();\n}\n\nfunction formatPeriodId(date: Date | number): string {\n const instance = typeof date === 'number' ? new Date(date) : date;\n const year = instance.getUTCFullYear();\n const month = String(instance.getUTCMonth() + 1).padStart(2, '0');\n return `${year}${month}`;\n}\n\nfunction extractId(value: string | { id?: string } | null | undefined): string | undefined {\n if (!value) {\n return undefined;\n }\n if (typeof value === 'string') {\n return value;\n }\n return value.id ?? undefined;\n}\n\nfunction extractMetadataPlan(metadata?: Record<string, string | undefined>): string | undefined {\n if (!metadata) {\n return undefined;\n }\n const keys = ['planId', 'plan_id', 'plan', 'plan-id', 'plan_name'];\n for (const key of keys) {\n const value = metadata[key];\n if (value && value.trim()) {\n return value.trim();\n }\n }\n return undefined;\n}\n\nfunction extractUidFromMetadata(metadata?: Record<string, string | undefined>): string | undefined {\n if (!metadata) {\n return undefined;\n }\n const keys = ['uid', 'userId', 'user_id', 'customer_uid'];\n for (const key of keys) {\n const value = metadata[key];\n if (value && value.trim()) {\n return value.trim();\n }\n }\n return undefined;\n}\n\nexport class StripeWebhookService {\n private readonly secret: string;\n private readonly toleranceSeconds: number;\n private readonly store: SubscriptionStore;\n private readonly pricePlanMap: Map<string, SubscriptionPlanId> = new Map();\n private readonly productPlanMap: Map<string, SubscriptionPlanId> = new Map();\n\n constructor(options: StripeWebhookServiceOptions) {\n if (!options.secret) {\n throw new Error('Stripe webhook secret must be provided');\n }\n this.secret = options.secret;\n this.toleranceSeconds = options.toleranceSeconds ?? 300;\n this.store = options.store ?? new SubscriptionStore();\n this.registerEnvPlanMappings();\n\n if (options.priceIdMap) {\n for (const [id, plan] of Object.entries(options.priceIdMap)) {\n this.pricePlanMap.set(sanitizeKey(id), plan);\n }\n }\n\n if (options.productIdMap) {\n for (const [id, plan] of Object.entries(options.productIdMap)) {\n this.productPlanMap.set(sanitizeKey(id), plan);\n }\n }\n }\n\n verifySignature(rawBody: Buffer, signatureHeader: string | string[] | undefined): void {\n if (!signatureHeader) {\n throw new Error('Stripe signature header is missing');\n }\n const header = Array.isArray(signatureHeader) ? signatureHeader.join(',') : signatureHeader;\n const { timestamp, signatures } = this.parseSignatureHeader(header);\n if (!timestamp || signatures.length === 0) {\n throw new Error('Stripe signature header is invalid');\n }\n\n const timestampSeconds = Number(timestamp);\n if (!Number.isFinite(timestampSeconds)) {\n throw new Error('Stripe signature timestamp is invalid');\n }\n\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (Math.abs(nowSeconds - timestampSeconds) > this.toleranceSeconds) {\n throw new Error('Stripe signature timestamp outside of tolerance window');\n }\n\n const signedPayload = `${timestamp}.${rawBody.toString('utf8')}`;\n const expected = createHmac('sha256', this.secret).update(signedPayload).digest('hex');\n const expectedBuffer = Buffer.from(expected, 'hex');\n\n const isValid = signatures.some((signature) => {\n const signatureBuffer = Buffer.from(signature, 'hex');\n if (signatureBuffer.length !== expectedBuffer.length) {\n return false;\n }\n return timingSafeEqual(signatureBuffer, expectedBuffer);\n });\n\n if (!isValid) {\n throw new Error('Stripe signature verification failed');\n }\n }\n\n parseEvent<T = unknown>(rawBody: Buffer): StripeEvent<T> {\n try {\n const parsed = JSON.parse(rawBody.toString('utf8')) as StripeEvent<T>;\n if (!parsed || typeof parsed !== 'object' || !parsed.id || !parsed.type) {\n throw new Error('Invalid event payload');\n }\n return parsed;\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n throw new Error(`Failed to parse Stripe event payload: ${message}`);\n }\n }\n\n async processEvent(event: StripeEvent): Promise<void> {\n const receipt = await this.store.markEventReceived({\n id: event.id,\n type: event.type,\n created: event.created\n });\n\n if (receipt === 'duplicate') {\n return;\n }\n\n try {\n switch (event.type) {\n case 'checkout.session.completed':\n await this.handleCheckoutSession(event as StripeEvent<StripeCheckoutSession>);\n break;\n case 'customer.subscription.created':\n await this.handleSubscriptionCreated(event as StripeEvent<StripeSubscription>);\n break;\n case 'customer.subscription.updated':\n await this.handleSubscriptionUpdated(event as StripeEvent<StripeSubscription>);\n break;\n case 'customer.subscription.deleted':\n await this.handleSubscriptionDeleted(event as StripeEvent<StripeSubscription>);\n break;\n case 'invoice.payment_succeeded':\n await this.handleInvoicePayment(event as StripeEvent<StripeInvoice>, true);\n break;\n case 'invoice.payment_failed':\n await this.handleInvoicePayment(event as StripeEvent<StripeInvoice>, false);\n break;\n default:\n // Mark unhandled events as processed to avoid replays\n console.info(`Unhandled Stripe event type: ${event.type}`);\n }\n await this.store.markEventProcessed(event.id);\n } catch (error) {\n await this.store.markEventFailed(event.id, error);\n throw error;\n }\n }\n\n private parseSignatureHeader(signatureHeader: string): { timestamp?: string; signatures: string[] } {\n const parts = signatureHeader.split(',');\n let timestamp: string | undefined;\n const signatures: string[] = [];\n\n for (const part of parts) {\n const [key, value] = part.trim().split('=');\n if (key === 't') {\n timestamp = value;\n } else if (key.startsWith('v')) {\n signatures.push(value);\n }\n }\n\n return { timestamp, signatures };\n }\n\n private registerEnvPlanMappings(): void {\n const mapping: Array<[string | undefined, SubscriptionPlanId]> = [\n [process.env.STRIPE_PRICE_STARTER, 'starter'],\n [process.env.STRIPE_PRICE_STARTER_ANNUAL, 'starter'],\n [process.env.STRIPE_PRICE_PRO, 'pro'],\n [process.env.STRIPE_PRICE_PRO_ANNUAL, 'pro'],\n [process.env.STRIPE_PRICE_ULTRA, 'ultra'],\n [process.env.STRIPE_PRICE_ULTRA_ANNUAL, 'ultra']\n ];\n\n mapping.forEach(([id, plan]) => {\n if (id && id.trim()) {\n this.pricePlanMap.set(sanitizeKey(id), plan);\n }\n });\n\n const productMapping: Array<[string | undefined, SubscriptionPlanId]> = [\n [process.env.STRIPE_PRODUCT_STARTER, 'starter'],\n [process.env.STRIPE_PRODUCT_PRO, 'pro'],\n [process.env.STRIPE_PRODUCT_ULTRA, 'ultra']\n ];\n\n productMapping.forEach(([id, plan]) => {\n if (id && id.trim()) {\n this.productPlanMap.set(sanitizeKey(id), plan);\n }\n });\n }\n\n private normalizePlanId(planId: string | undefined | null): SubscriptionPlanId {\n if (!planId) {\n return 'free';\n }\n const key = sanitizeKey(planId);\n if (PLAN_CONFIG[key as SubscriptionPlanId]) {\n return key as SubscriptionPlanId;\n }\n const alias = PLAN_ALIAS_MAP[key];\n if (alias) {\n return alias;\n }\n return 'free';\n }\n\n private resolvePlanFromSubscription(subscription: StripeSubscription): SubscriptionPlanId {\n const metadataPlan = extractMetadataPlan(subscription.metadata);\n if (metadataPlan) {\n return this.normalizePlanId(metadataPlan);\n }\n\n const items = subscription.items?.data ?? [];\n for (const item of items) {\n const itemMetadataPlan = extractMetadataPlan(item.metadata);\n if (itemMetadataPlan) {\n return this.normalizePlanId(itemMetadataPlan);\n }\n const priceMetadataPlan = extractMetadataPlan(item.price?.metadata);\n if (priceMetadataPlan) {\n return this.normalizePlanId(priceMetadataPlan);\n }\n const planMetadataPlan = extractMetadataPlan(item.plan?.metadata);\n if (planMetadataPlan) {\n return this.normalizePlanId(planMetadataPlan);\n }\n\n const priceId = item.price?.id;\n if (priceId) {\n const mapped = this.pricePlanMap.get(sanitizeKey(priceId));\n if (mapped) {\n return mapped;\n }\n }\n\n const productId = extractId(item.price?.product ?? item.plan?.product ?? null);\n if (productId) {\n const mapped = this.productPlanMap.get(sanitizeKey(productId));\n if (mapped) {\n return mapped;\n }\n }\n\n const nickname = item.price?.nickname;\n if (nickname) {\n const candidate = this.normalizePlanId(nickname);\n if (candidate !== 'free') {\n return candidate;\n }\n }\n }\n\n return 'free';\n }\n\n private getPlanConfig(planId: SubscriptionPlanId) {\n return PLAN_CONFIG[planId] ?? PLAN_CONFIG.free;\n }\n\n private async applyPlanEntitlements(uid: string, planId: SubscriptionPlanId, subscription: StripeSubscription | null, overridePeriod?: { start?: number; end?: number }): Promise<void> {\n const config = this.getPlanConfig(planId);\n await this.store.setEntitlements(uid, planId, config.entitlements);\n\n const periodStart = overridePeriod?.start ?? subscription?.current_period_start;\n const periodEnd = overridePeriod?.end ?? subscription?.current_period_end;\n const periodId = periodStart ? formatPeriodId(new Date(periodStart * 1000)) : formatPeriodId(Date.now());\n\n await this.store.setUsage({\n uid,\n planId,\n periodId,\n limits: config.quota\n });\n }\n\n private comparePlanPriority(a: SubscriptionPlanId, b: SubscriptionPlanId): number {\n return PLAN_PRIORITY[a] - PLAN_PRIORITY[b];\n }\n\n private async resolveUid(customerId: string | undefined, ...metadataSources: Array<Record<string, string | undefined> | undefined>): Promise<string | undefined> {\n for (const metadata of metadataSources) {\n const uidFromMetadata = extractUidFromMetadata(metadata);\n if (uidFromMetadata) {\n return uidFromMetadata;\n }\n }\n if (customerId) {\n const customer = await this.store.getCustomer(customerId);\n return customer?.uid;\n }\n return undefined;\n }\n\n private async handleCheckoutSession(event: StripeEvent<StripeCheckoutSession>): Promise<void> {\n const session = event.data.object;\n const customerId = extractId(session.customer ?? null);\n const uid = await this.resolveUid(customerId, session.metadata);\n\n if (!customerId) {\n console.warn('checkout.session.completed received without customer id', { sessionId: session.id });\n return;\n }\n\n const metadata: Record<string, string> = {};\n if (session.metadata) {\n for (const [key, value] of Object.entries(session.metadata)) {\n if (typeof value === 'string') {\n metadata[key] = value;\n }\n }\n }\n\n await this.store.upsertCustomer({\n id: customerId,\n uid,\n email: session.customer_email ?? undefined,\n metadata: {\n ...metadata,\n lastCheckoutSessionId: session.id,\n lastCheckoutMode: session.mode ?? undefined\n }\n });\n }\n\n private async handleSubscriptionCreated(event: StripeEvent<StripeSubscription>): Promise<void> {\n const subscription = event.data.object;\n const customerId = extractId(subscription.customer);\n if (!customerId) {\n throw new Error(`Subscription ${subscription.id} missing customer id`);\n }\n\n const planId = this.resolvePlanFromSubscription(subscription);\n const uid = await this.resolveUid(customerId, subscription.metadata);\n\n const customerRecord: CustomerRecord = {\n id: customerId,\n uid,\n email: typeof subscription.customer === 'object' ? subscription.customer.email ?? undefined : undefined,\n metadata: subscription.metadata && Object.keys(subscription.metadata).length > 0 ? { ...subscription.metadata } : undefined,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString()\n };\n\n await this.store.upsertCustomer(customerRecord);\n\n await this.store.upsertSubscription({\n id: subscription.id,\n customerId,\n uid,\n status: subscription.status,\n planId,\n pendingPlanId: null,\n pendingPlanEffectiveAt: null,\n cancelAt: toIso(subscription.cancel_at),\n cancelAtPeriodEnd: subscription.cancel_at_period_end ?? false,\n canceledAt: toIso(subscription.canceled_at),\n currentPeriodStart: toIso(subscription.current_period_start) ?? new Date().toISOString(),\n currentPeriodEnd: toIso(subscription.current_period_end) ?? new Date().toISOString(),\n trialEnd: toIso(subscription.trial_end),\n metadata: subscription.metadata && Object.keys(subscription.metadata).length > 0 ? { ...subscription.metadata } : undefined\n });\n\n if (uid) {\n await this.applyPlanEntitlements(uid, planId, subscription);\n }\n }\n\n private async handleSubscriptionUpdated(event: StripeEvent<StripeSubscription>): Promise<void> {\n const subscription = event.data.object;\n const customerId = extractId(subscription.customer);\n if (!customerId) {\n throw new Error(`Subscription ${subscription.id} missing customer id`);\n }\n\n const existing = await this.store.getSubscription(subscription.id);\n const resolvedPlan = this.resolvePlanFromSubscription(subscription);\n const uid = await this.resolveUid(customerId, subscription.metadata, existing?.metadata);\n const planChange = existing ? this.comparePlanPriority(resolvedPlan, existing.planId) : 0;\n\n let effectivePlan = resolvedPlan;\n let pendingPlan: SubscriptionPlanId | null = existing?.pendingPlanId ?? null;\n let pendingEffectiveAt: string | null = existing?.pendingPlanEffectiveAt ?? null;\n\n if (existing) {\n if (planChange < 0) {\n // Downgrade scheduled: keep current plan active until invoice confirms\n effectivePlan = existing.planId;\n pendingPlan = resolvedPlan;\n pendingEffectiveAt = toIso(subscription.current_period_end) ?? toIso(subscription.cancel_at) ?? existing.currentPeriodEnd;\n } else {\n pendingPlan = null;\n pendingEffectiveAt = null;\n if (planChange > 0 && uid) {\n // Upgrade: apply entitlements immediately\n await this.applyPlanEntitlements(uid, resolvedPlan, subscription);\n }\n }\n } else if (uid) {\n await this.applyPlanEntitlements(uid, resolvedPlan, subscription);\n }\n\n await this.store.upsertSubscription({\n id: subscription.id,\n customerId,\n uid,\n status: subscription.status,\n planId: effectivePlan,\n pendingPlanId: pendingPlan,\n pendingPlanEffectiveAt: pendingEffectiveAt,\n cancelAt: toIso(subscription.cancel_at),\n cancelAtPeriodEnd: subscription.cancel_at_period_end ?? false,\n canceledAt: toIso(subscription.canceled_at),\n currentPeriodStart: toIso(subscription.current_period_start) ?? existing?.currentPeriodStart ?? new Date().toISOString(),\n currentPeriodEnd: toIso(subscription.current_period_end) ?? existing?.currentPeriodEnd ?? new Date().toISOString(),\n trialEnd: toIso(subscription.trial_end),\n metadata: subscription.metadata && Object.keys(subscription.metadata).length > 0 ? { ...subscription.metadata } : undefined\n });\n\n if (uid) {\n await this.store.upsertCustomer({\n id: customerId,\n uid,\n metadata: subscription.metadata && Object.keys(subscription.metadata).length > 0 ? { ...subscription.metadata } : undefined\n });\n }\n }\n\n private async handleSubscriptionDeleted(event: StripeEvent<StripeSubscription>): Promise<void> {\n const subscription = event.data.object;\n const customerId = extractId(subscription.customer);\n const existing = await this.store.getSubscription(subscription.id);\n const uid = await this.resolveUid(customerId, subscription.metadata, existing?.metadata);\n\n await this.store.upsertSubscription({\n id: subscription.id,\n customerId: customerId ?? existing?.customerId ?? 'unknown',\n uid: uid ?? existing?.uid,\n status: 'canceled',\n planId: 'free',\n pendingPlanId: null,\n pendingPlanEffectiveAt: null,\n cancelAt: toIso(subscription.cancel_at),\n cancelAtPeriodEnd: subscription.cancel_at_period_end ?? false,\n canceledAt: toIso(subscription.canceled_at) ?? new Date().toISOString(),\n currentPeriodStart: toIso(subscription.current_period_start) ?? existing?.currentPeriodStart ?? new Date().toISOString(),\n currentPeriodEnd: toIso(subscription.current_period_end) ?? existing?.currentPeriodEnd ?? new Date().toISOString(),\n trialEnd: toIso(subscription.trial_end),\n metadata: subscription.metadata && Object.keys(subscription.metadata).length > 0 ? { ...subscription.metadata } : undefined\n });\n\n if (uid) {\n await this.applyPlanEntitlements(uid, 'free', subscription);\n }\n }\n\n private async handleInvoicePayment(event: StripeEvent<StripeInvoice>, succeeded: boolean): Promise<void> {\n const invoice = event.data.object;\n const subscriptionId = extractId(invoice.subscription ?? null);\n if (!subscriptionId) {\n console.warn('Invoice received without subscription id', { invoiceId: invoice.id });\n return;\n }\n\n const subscription = await this.store.getSubscription(subscriptionId);\n if (!subscription) {\n console.warn('Invoice received for unknown subscription', { invoiceId: invoice.id, subscriptionId });\n return;\n }\n\n const customerId = extractId(invoice.customer ?? subscription.customerId);\n\n await this.store.recordInvoice({\n id: invoice.id,\n subscriptionId,\n customerId,\n amountPaid: (invoice.amount_paid ?? 0) / 100,\n currency: invoice.currency ?? 'usd',\n status: succeeded ? 'succeeded' : 'failed',\n paidAt: invoice.created ? new Date(invoice.created * 1000).toISOString() : new Date().toISOString(),\n createdAt: new Date().toISOString(),\n periodStart: toIso(invoice.lines?.data?.[0]?.period?.start ?? invoice.period_start ?? null),\n periodEnd: toIso(invoice.lines?.data?.[0]?.period?.end ?? invoice.period_end ?? null),\n hostedInvoiceUrl: invoice.hosted_invoice_url ?? undefined\n });\n\n if (!succeeded) {\n await this.store.upsertSubscription({\n id: subscription.id,\n customerId: subscription.customerId,\n uid: subscription.uid,\n status: subscription.status,\n planId: subscription.planId,\n pendingPlanId: subscription.pendingPlanId ?? null,\n pendingPlanEffectiveAt: subscription.pendingPlanEffectiveAt ?? null,\n cancelAt: subscription.cancelAt ?? null,\n cancelAtPeriodEnd: subscription.cancelAtPeriodEnd ?? false,\n canceledAt: subscription.canceledAt ?? null,\n currentPeriodStart: subscription.currentPeriodStart,\n currentPeriodEnd: subscription.currentPeriodEnd,\n trialEnd: subscription.trialEnd ?? null,\n latestInvoiceId: invoice.id,\n latestInvoiceStatus: 'failed',\n latestInvoiceAmount: (invoice.amount_paid ?? 0) / 100\n });\n return;\n }\n\n const fallbackPeriodStart = subscription.currentPeriodStart ? Date.parse(subscription.currentPeriodStart) / 1000 : undefined;\n const fallbackPeriodEnd = subscription.currentPeriodEnd ? Date.parse(subscription.currentPeriodEnd) / 1000 : undefined;\n\n const periodStart = invoice.lines?.data?.[0]?.period?.start\n ?? invoice.period_start\n ?? fallbackPeriodStart;\n const periodEnd = invoice.lines?.data?.[0]?.period?.end\n ?? invoice.period_end\n ?? fallbackPeriodEnd;\n\n let nextPlanId = subscription.planId;\n let pendingPlanId = subscription.pendingPlanId ?? null;\n let pendingEffectiveAt = subscription.pendingPlanEffectiveAt ?? null;\n\n if (subscription.pendingPlanId) {\n nextPlanId = subscription.pendingPlanId;\n pendingPlanId = null;\n pendingEffectiveAt = null;\n if (subscription.uid) {\n await this.applyPlanEntitlements(subscription.uid, nextPlanId, null, { start: periodStart, end: periodEnd });\n }\n } else if (subscription.uid) {\n await this.applyPlanEntitlements(subscription.uid, subscription.planId, null, { start: periodStart, end: periodEnd });\n }\n\n await this.store.upsertSubscription({\n id: subscription.id,\n customerId: subscription.customerId,\n uid: subscription.uid,\n status: subscription.status,\n planId: nextPlanId,\n pendingPlanId,\n pendingPlanEffectiveAt: pendingEffectiveAt,\n cancelAt: subscription.cancelAt ?? null,\n cancelAtPeriodEnd: subscription.cancelAtPeriodEnd ?? false,\n canceledAt: subscription.canceledAt ?? null,\n currentPeriodStart: periodStart ? toIso(periodStart) ?? subscription.currentPeriodStart : subscription.currentPeriodStart,\n currentPeriodEnd: periodEnd ? toIso(periodEnd) ?? subscription.currentPeriodEnd : subscription.currentPeriodEnd,\n trialEnd: subscription.trialEnd ?? null,\n latestInvoiceId: invoice.id,\n latestInvoiceStatus: 'succeeded',\n latestInvoiceAmount: (invoice.amount_paid ?? 0) / 100\n });\n }\n}\n\nexport default StripeWebhookService;\n","/**\n * Express Server for MARIA CODE API\n * With Rate Limiting and API Endpoints\n */\n\nimport express, { Request, Response, NextFunction } from 'express';\nimport cors from 'cors';\nimport helmet from 'helmet';\nimport compression, { filter as compressionFilter } from 'compression';\nimport { rateLimitMiddleware, startRateLimitCleanup } from '../middleware/rate-limit';\nimport { saveArtifacts } from '../services/media-orchestrator/Storage';\nimport { GeminiMediaProvider } from '../providers/google/gemini-media';\nimport { hasFfmpeg, muxFramesToMp4 } from '../services/media-orchestrator/ffmpeg';\nimport { hashPrompt, type ManifestV1 } from '../services/media-orchestrator/types';\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport freePlan from '../config/plans/free-plan.json';\nimport IMSFacade from '../services/intelligent-model-selector/IMSFacade';\nimport SubscriptionStore from '../services/subscription/subscription-store';\nimport StripeWebhookService from '../services/subscription/stripe-webhook-service';\n\n// Simple in-memory job registry (ephemeral). For production, persist to DB.\ntype JobStatus = 'queued' | 'running' | 'completed' | 'failed';\ntype JobKind = 'image' | 'video';\ninterface JobInfo {\n id: string;\n status: JobStatus;\n kind: JobKind;\n manifestPath?: string;\n error?: string;\n createdAt: string;\n updatedAt: string;\n uid?: string;\n}\nconst jobIndex: Map<string, JobInfo> = new Map();\n\nconst app: express.Express = express();\nconst port = process.env.PORT || 8080;\n\nconst subscriptionStore = new SubscriptionStore();\nconst stripeWebhookSecret = process.env.STRIPE_WEBHOOK_SECRET;\nlet stripeWebhookService: StripeWebhookService | null = null;\n\nif (stripeWebhookSecret) {\n try {\n stripeWebhookService = new StripeWebhookService({\n secret: stripeWebhookSecret,\n store: subscriptionStore\n });\n } catch (error) {\n stripeWebhookService = null;\n console.error('Failed to initialize Stripe webhook service:', error);\n }\n} else {\n console.warn('STRIPE_WEBHOOK_SECRET is not configured; Stripe webhook endpoint will be disabled.');\n}\n\n// Security middleware\napp.use(helmet());\napp.use(cors());\n// Disable compression for media files to avoid any chance of corrupting binary transfers\napp.use(compression({\n filter: (req, res) => {\n if (/\\.(mp4|webm|mov)$/i.test(req.url)) return false;\n return compressionFilter(req, res);\n }\n}));\napp.use('/api/stripe/webhook', express.raw({ type: 'application/json' }));\n// Increase body limit to comfortably accept base64 attachments (images, PDFs)\napp.use(express.json({ limit: '50mb' }));\napp.use(express.urlencoded({ extended: true }));\n\n// Serve artifacts statically (read-only). In production, protect via CDN or auth middleware.\ntry {\n const artifactsDir = path.resolve(process.cwd(), 'artifacts');\n app.use('/artifacts', express.static(artifactsDir, { fallthrough: true, extensions: ['json','png','jpg','webp','mp4','webm','mov'] }));\n} catch {}\n\n// Request logging\napp.use((req: Request, res: Response, next: NextFunction) => {\n console.log(`[${new Date().toISOString()}] ${req.method} ${req.path}`);\n next();\n});\n\n// Health check (no rate limit)\napp.get('/health', (req: Request, res: Response) => {\n res.status(200).send('OK');\n});\n\napp.get('/api/status', (req: Request, res: Response) => {\n res.json({\n status: 'healthy',\n version: '4.3.9',\n uptime: process.uptime(),\n memory: process.memoryUsage(),\n platform: process.platform,\n node: process.version,\n timestamp: new Date().toISOString()\n });\n});\n\n// Root endpoint\napp.get('/', (req: Request, res: Response) => {\n res.json({\n name: 'MARIA CODE API',\n version: '4.3.44',\n status: 'running',\n environment: process.env.NODE_ENV || 'development',\n endpoints: {\n health: '/health',\n status: '/api/status',\n ai: '/api/ai',\n image: '/api/v1/image',\n video: '/api/v1/video',\n code: '/api/v1/code',\n chat: '/api/v1/chat'\n },\n timestamp: new Date().toISOString()\n });\n});\n\napp.post('/api/stripe/webhook', async (req: Request, res: Response) => {\n if (!stripeWebhookService) {\n return res.status(503).json({ error: 'Stripe webhook processing is not configured' });\n }\n\n const signature = req.headers['stripe-signature'];\n const rawBody = Buffer.isBuffer(req.body)\n ? req.body\n : Buffer.from(typeof req.body === 'string' ? req.body : JSON.stringify(req.body ?? {}), 'utf8');\n\n try {\n stripeWebhookService.verifySignature(rawBody, signature);\n } catch (error) {\n console.error('Stripe webhook signature verification failed:', error);\n return res.status(400).json({ error: 'Invalid Stripe signature' });\n }\n\n let event;\n try {\n event = stripeWebhookService.parseEvent(rawBody);\n } catch (error) {\n console.error('Stripe webhook payload parsing failed:', error);\n return res.status(400).json({ error: 'Invalid Stripe payload' });\n }\n\n stripeWebhookService.processEvent(event).catch((error) => {\n console.error('Stripe webhook processing error:', error);\n });\n\n return res.sendStatus(200);\n});\n\n// ---- Error classification helpers (provider/auth/policy) ----\nfunction classifyMediaError(err: unknown): { status: number; code: string; message: string; hint?: string } {\n const raw = (err as any);\n const msg: string = String(raw?.message || raw || 'unknown error');\n const lower = msg.toLowerCase();\n // Auth / key issues\n if (lower.includes('missing api key') || lower.includes('api key') && lower.includes('missing')) {\n return { status: 503, code: 'provider_unavailable', message: 'Provider API key is not configured', hint: 'Set GOOGLE_API_KEY or GEMINI_API_KEY on the server' };\n }\n if (lower.includes('invalid api key') || lower.includes('permission denied') || lower.includes('unauthorized')) {\n return { status: 502, code: 'provider_auth_failed', message: 'Provider authentication failed', hint: 'Verify your Google AI Studio API key' };\n }\n // Policy / moderation blocks from Gemini\n if (lower.includes('blockreason') || lower.includes('safety') || lower.includes('blocked') || lower.includes('policy')) {\n return { status: 422, code: 'policy_violation', message: 'Request was blocked by provider policy', hint: 'Modify the prompt to comply with safety policies' };\n }\n // No content returned (model refusal or empty)\n if (lower.includes('no inline image returned') || lower.includes('no video returned') || lower.includes('refus')) {\n return { status: 422, code: 'content_refused', message: 'Model refused or returned no content', hint: 'Try rephrasing the prompt' };\n }\n // Timeouts / rate limits\n if (lower.includes('timeout')) {\n return { status: 504, code: 'timeout', message: 'Generation timed out', hint: 'Please retry later' };\n }\n if (lower.includes('rate limit') || lower.includes('429')) {\n return { status: 429, code: 'rate_limited', message: 'Rate limit exceeded', hint: 'Slow down requests or try again shortly' };\n }\n // Fallback\n return { status: 500, code: 'internal_error', message: 'Failed to generate media' };\n}\n\n// Helper: verify Firebase ID token if firebase-admin is available; otherwise decode payload best-effort\nasync function decodeFirebaseToken(token: string): Promise<any | null> {\n try {\n // Dynamic import to avoid hard dep at build time\n const admin: any = await import('firebase-admin').catch(() => null);\n if (admin) {\n if (!admin.apps || admin.apps.length === 0) {\n try { admin.initializeApp(); } catch { /* ignore double init */ }\n }\n const decoded = await admin.auth().verifyIdToken(token, true);\n return decoded;\n }\n } catch {\n // ignore and fallback to unsafe decode\n }\n try {\n const parts = token.split('.');\n if (parts.length !== 3) return null;\n const payload = JSON.parse(Buffer.from(parts[1], 'base64').toString('utf8'));\n return payload;\n } catch {\n return null;\n }\n}\n\n// ---- Plan/Usage helpers (Firestore) ----\nfunction getCurrentPeriodId(): string {\n const now = new Date();\n return `${now.getUTCFullYear()}${String(now.getUTCMonth() + 1).padStart(2, '0')}`;\n}\n\nfunction nextMonthResetISO(): string {\n const d = new Date();\n d.setUTCMonth(d.getUTCMonth() + 1, 1);\n d.setUTCHours(0, 0, 0, 0);\n return d.toISOString();\n}\n\nconst PLAN_LIMITS: Record<string, { req: number; tokens: number; code: number; attachment: number }> = {\n free: { req: 300, tokens: 50000, code: 40, attachment: 5 },\n starter: { req: 1400, tokens: 1000000, code: 300, attachment: 50 },\n 'starter-annual': { req: 1400, tokens: 1000000, code: 300, attachment: 50 },\n pro: { req: 5000, tokens: 3500000, code: 1200, attachment: 200 },\n 'pro-annual': { req: 5000, tokens: 3500000, code: 1200, attachment: 200 },\n ultra: { req: 10000, tokens: 5000000, code: 5000, attachment: 500 },\n 'ultra-annual': { req: 10000, tokens: 5000000, code: 5000, attachment: 500 },\n enterprise: { req: -1, tokens: -1, code: -1, attachment: -1 },\n};\n\nfunction planName(planId: string): string {\n const names: Record<string, string> = {\n free: 'Free', starter: 'Starter', 'starter-annual': 'Starter (Annual)',\n pro: 'Pro', 'pro-annual': 'Pro (Annual)', ultra: 'Ultra', 'ultra-annual': 'Ultra (Annual)', enterprise: 'Enterprise'\n };\n return names[planId] || 'Free';\n}\n\nasync function getUserPlanAndLimits(uid: string): Promise<{ planId: string; limits: { req: number; tokens: number; code: number; attachment: number } }> {\n const db = await getFirestoreSafe();\n const fallback = { planId: 'free', limits: PLAN_LIMITS.free };\n if (!db) return fallback;\n try {\n const snap = await db.collection('user_subscriptions').doc(uid).get();\n const pid = (snap.exists && (snap.data() as any)?.planId) ? String((snap.data() as any).planId) : 'free';\n return { planId: pid, limits: PLAN_LIMITS[pid] || PLAN_LIMITS.free };\n } catch {\n return fallback;\n }\n}\n\nasync function ensureUsageDoc(uid: string): Promise<{ ref: any; data: any; planId: string; limits: { req: number; tokens: number; code: number; attachment: number } }> {\n const db = await getFirestoreSafe();\n if (!db) return { ref: null, data: null, planId: 'free', limits: PLAN_LIMITS.free };\n const periodId = getCurrentPeriodId();\n const { planId: pid, limits } = await getUserPlanAndLimits(uid);\n const ref = db.collection('users').doc(uid).collection('usage').doc(periodId);\n const snap = await ref.get();\n if (!snap.exists) {\n const nowISO = new Date().toISOString();\n const init = {\n periodId,\n createdAt: nowISO,\n updatedAt: nowISO,\n resetAt: nextMonthResetISO(),\n limits,\n remain: limits,\n used: { req: 0, tokens: 0, code: 0, attachment: 0 },\n };\n await ref.set(init, { merge: true });\n return { ref, data: init, planId: pid, limits };\n }\n return { ref, data: snap.data(), planId: pid, limits };\n}\n\nasync function applyConsumption(uid: string, consumption: Record<string, number>, idemKey?: string): Promise<any> {\n const db = await getFirestoreSafe();\n if (!db) return null;\n const { ref, data, planId: pid, limits } = await ensureUsageDoc(uid);\n const nowISO = new Date().toISOString();\n // Optional idempotency per-period\n if (idemKey) {\n const idemRef = ref.collection('consumptions').doc(idemKey);\n const idemSnap = await idemRef.get();\n if (!idemSnap.exists) await idemRef.set({ createdAt: nowISO, consumption });\n else return data; // already applied\n }\n const toNum = (v: unknown) => (typeof v === 'number' && isFinite(v) ? v : 0);\n const incReq = toNum(consumption.requests) + toNum((consumption as any).req);\n const incTokens = toNum((consumption as any).tokens);\n const incCode = toNum((consumption as any).code) + toNum((consumption as any).image) + toNum((consumption as any).video);\n const incAttachment = toNum((consumption as any).attachment);\n const used = data?.used || { req: 0, tokens: 0, code: 0, attachment: 0 };\n const newUsed = {\n req: Math.max(0, used.req + incReq),\n tokens: Math.max(0, used.tokens + incTokens),\n code: Math.max(0, used.code + incCode),\n attachment: Math.max(0, used.attachment + incAttachment),\n };\n const remain = {\n req: limits.req < 0 ? -1 : Math.max(0, limits.req - newUsed.req),\n tokens: limits.tokens < 0 ? -1 : Math.max(0, limits.tokens - newUsed.tokens),\n code: limits.code < 0 ? -1 : Math.max(0, limits.code - newUsed.code),\n attachment: limits.attachment < 0 ? -1 : Math.max(0, limits.attachment - newUsed.attachment),\n };\n await ref.set({ used: newUsed, remain, updatedAt: nowISO }, { merge: true });\n return { ...(data || {}), used: newUsed, remain, limits, periodId: getCurrentPeriodId(), updatedAt: nowISO };\n}\n\n/**\n * Auth: Get current user profile\n * Mirrors expected CLI contract at GET /api/user/profile\n */\napp.get('/api/user/profile', async (req: Request, res: Response) => {\n try {\n const authHeader = req.headers.authorization || '';\n if (!authHeader.startsWith('Bearer ')) {\n return res.status(401).json({ error: 'unauthorized' });\n }\n\n const idToken = authHeader.substring('Bearer '.length).trim();\n\n const decoded = await decodeFirebaseToken(idToken);\n if (!decoded) {\n return res.status(401).json({ error: 'invalid_token' });\n }\n\n // Extract identity\n const uid = decoded.uid || decoded.sub || 'unknown';\n const email = decoded.email || '';\n const displayName = decoded.name || decoded.displayName || (email ? String(email).split('@')[0] : 'User');\n let provider = decoded.firebase?.sign_in_provider as string | undefined;\n if (!provider && decoded.firebase?.identities) {\n const ids = decoded.firebase.identities as Record<string, unknown>;\n if (Array.isArray(ids['github.com']) && ids['github.com'].length > 0) provider = 'github';\n else if (Array.isArray(ids['google.com']) && ids['google.com'].length > 0) provider = 'google';\n }\n\n const { planId: pid, limits } = await getUserPlanAndLimits(uid);\n const periodRef = await ensureUsageDoc(uid);\n const currentUsedReq = Number(periodRef?.data?.used?.req || 0);\n const response = {\n id: uid,\n email,\n name: displayName,\n provider: provider || 'unknown',\n plan: String(pid).toUpperCase(),\n usage: {\n requests: currentUsedReq,\n requestLimit: limits.req < 0 ? Number.MAX_SAFE_INTEGER : limits.req,\n tokens: Number(periodRef?.data?.used?.tokens || 0),\n tokenLimit: limits.tokens < 0 ? Number.MAX_SAFE_INTEGER : limits.tokens,\n resetDate: periodRef?.data?.resetAt || nextMonthResetISO()\n },\n models: ['gpt-5', 'gemini-2.5-pro']\n };\n\n return res.status(200).json(response);\n } catch (error) {\n console.error('[User Profile] Error:', error);\n return res.status(500).json({ error: 'PROFILE_FETCH_FAILED' });\n }\n});\n\n/**\n * Minimal AI Proxy Endpoint\n * - Accepts { prompt, model?, provider? }\n * - Uses Secret Manager (ADC) to fetch API keys\n * - Currently supports provider: 'openai' (default)\n */\napp.post('/api/ai', rateLimitMiddleware, async (req: Request, res: Response) => {\n try {\n const { prompt, systemPrompt } = req.body || {};\n if (!prompt || typeof prompt !== 'string') {\n return res.status(400).json({ error: 'bad_request', message: 'prompt is required' });\n }\n if (process.env.MARIA_TELEMETRY === '1') {\n try { console.log(JSON.stringify({ ev: 'api_ai_request', promptLen: String(prompt).length, hasSystem: !!systemPrompt })); } catch {}\n }\n // Ensure provider keys are loaded from Secret Manager into cache/env before routing\n try { await loadProviderKeys(); } catch {}\n const ims = new IMSFacade();\n const resp = await ims.routeChat({ prompt, systemPrompt });\n if (process.env.MARIA_TELEMETRY === '1') {\n try {\n console.log(JSON.stringify({\n ev: 'api_ai_route',\n provider: (resp as any)?.meta?.provider || 'unknown',\n model: (resp as any)?.meta?.model || 'unknown',\n traceId: (resp as any)?.meta?.traceId,\n reasons: (resp as any)?.meta?.reasons || [],\n success: !!(resp as any)?.success\n }));\n } catch {}\n }\n return res.json(resp);\n } catch (error: any) {\n console.error('[AI API] Error:', error?.message || error);\n if (process.env.MARIA_TELEMETRY === '1') {\n try { console.log(JSON.stringify({ ev: 'api_ai_error', message: (error as any)?.message || String(error) })); } catch {}\n }\n // Graceful, natural-language fallback to keep UX coherent\n const polite = typeof (req.body?.prompt) === 'string'\n ? `Sorry, I couldn't reach the AI service right now. Here’s a quick human-style reply to keep you moving:\\n\\n${String(req.body.prompt)}\\n\\nIf you want, I can try again in a moment or help you rephrase.`\n : `Sorry, I couldn't reach the AI service right now. Please try again in a moment.`;\n return res.status(200).json({ success: true, data: { content: polite } as any });\n }\n});\n\n/**\n * Research Endpoint with Gemini Grounding and Web Scraping\n * Body: { query?: string; url?: string; topK?: number }\n * Returns: { success, data: { summary, sources: [{ url, title? }] } }\n */\napp.post('/api/v1/research', rateLimitMiddleware, async (req: Request, res: Response) => {\n try {\n await loadProviderKeys();\n\n const auth = req.headers.authorization;\n if (!auth || !auth.startsWith('Bearer ')) {\n return res.status(401).json({ error: 'unauthorized', message: 'Login required' });\n }\n\n const body = (req.body || {}) as { query?: string; url?: string; topK?: number };\n const query = typeof body.query === 'string' ? body.query.trim() : '';\n const url = typeof body.url === 'string' ? body.url.trim() : '';\n const topK = Number.isFinite(body.topK) ? Math.max(1, Math.min(5, Math.floor(body.topK as number))) : 5;\n\n if (!query && !url) {\n return res.status(400).json({ error: 'bad_request', message: 'query or url required' });\n }\n\n // Helper: basic HTML -> text extraction (no external deps)\n const extractText = (html: string): string => {\n try {\n const withoutScripts = html.replace(/<script[\\s\\S]*?<\\/script>/gi, ' ').replace(/<style[\\s\\S]*?<\\/style>/gi, ' ');\n const noTags = withoutScripts.replace(/<[^>]+>/g, ' ');\n const unescaped = noTags\n .replace(/&nbsp;/g, ' ')\n .replace(/&amp;/g, '&')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\");\n return unescaped.replace(/\\s+/g, ' ').trim();\n } catch {\n return html;\n }\n };\n\n // Helper: fetch URL to text (with timeout)\n const fetchText = async (targetUrl: string): Promise<{ url: string; title?: string; text: string } | null> => {\n try {\n const ctrl = new AbortController();\n const to = setTimeout(() => ctrl.abort(), 20000);\n const r = await fetch(targetUrl, { method: 'GET', signal: ctrl.signal } as any);\n clearTimeout(to);\n if (!r.ok) return null;\n const html = await r.text();\n const titleMatch = /<title>([\\s\\S]*?)<\\/title>/i.exec(html);\n return { url: targetUrl, title: titleMatch ? titleMatch[1].trim() : undefined, text: extractText(html).slice(0, 120_000) };\n } catch {\n return null;\n }\n };\n\n // Resolve candidate sources\n let sources: Array<{ url: string; title?: string }> = [];\n let seedSummary = '';\n\n if (url) {\n sources = [{ url }];\n } else {\n // Use Gemini with grounding to get top web results\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { GoogleGenAI } = require('@google/genai');\n const apiKey = process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY;\n if (!apiKey) {\n return res.status(503).json({ error: 'provider_unavailable', message: 'Provider API key is not configured' });\n }\n const ai = new GoogleGenAI({ apiKey });\n const groundingTool = { googleSearch: {} };\n const config = { tools: [groundingTool] } as any;\n const modelName = process.env.MARIA_RESEARCH_MODEL || 'gemini-2.5-flash';\n const response: any = await ai.models.generateContent({ model: modelName, contents: String(query), config });\n const textOut: string = String((response?.text) || (response?.response?.candidates?.[0]?.content?.parts?.[0]?.text || ''));\n seedSummary = textOut;\n const chunks: any[] = (response?.response?.candidates?.[0]?.groundingMetadata?.groundingChunks || []) as any[];\n const urls = chunks\n .map((c: any) => ({ url: String(c?.web?.uri || '').trim(), title: String(c?.web?.title || '').trim() }))\n .filter((c: any) => c.url && /^https?:\\/\\//i.test(c.url));\n // De-duplicate by URL\n const seen = new Set<string>();\n const deduped: Array<{ url: string; title?: string }> = [];\n for (const c of urls) { if (!seen.has(c.url)) { seen.add(c.url); deduped.push(c); } }\n sources = deduped.slice(0, topK);\n }\n\n // Scrape top sources (or the single URL)\n const scraped: Array<{ url: string; title?: string; text: string }> = [];\n for (const s of sources) {\n const got = await fetchText(s.url);\n if (got) scraped.push({ url: got.url, title: got.title || s.title, text: got.text });\n }\n\n // Summarize scraped content in English plaintext\n const summarize = async (inputText: string): Promise<string> => {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { GoogleGenAI } = require('@google/genai');\n const apiKey = process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY;\n if (!apiKey) return '';\n const ai = new GoogleGenAI({ apiKey });\n const modelName = process.env.MARIA_RESEARCH_MODEL || 'gemini-2.5-flash';\n const prompt = `Summarize the following web research into concise English plaintext.\\n- Focus on verifiable facts and key takeaways.\\n- Keep it under 12 sentences.\\n- Do not include markdown, just plain text.\\n\\nCONTENT BEGIN\\n${inputText}\\nCONTENT END`;\n const resp: any = await ai.models.generateContent({ model: modelName, contents: prompt });\n return String(resp?.text || resp?.response?.candidates?.[0]?.content?.parts?.[0]?.text || '').trim();\n };\n\n const combined = [seedSummary, ...scraped.map(s => `${s.title ? `${s.title}\\n` : ''}${s.text}`)]\n .filter(Boolean)\n .join('\\n\\n')\n .slice(0, 180_000);\n\n const summary = (await summarize(combined)) || (scraped[0]?.text?.slice(0, 600) || seedSummary || '');\n\n // Record usage minimally\n try {\n const idToken = auth.substring('Bearer '.length).trim();\n const decoded = await decodeFirebaseToken(idToken).catch(() => null as any);\n const uid = decoded?.uid || decoded?.sub || 'current';\n const idemKey = (req.headers['idempotency-key'] as string | undefined) || undefined;\n await applyConsumption(uid, { requests: 1 }, idemKey);\n } catch {}\n\n return res.json({ success: true, data: { summary, sources } });\n } catch (error) {\n console.error('[Research API] Error:', error);\n const mapped = classifyMediaError(error);\n return res.status(mapped.status).json({ error: mapped.code, message: mapped.message, hint: mapped.hint });\n }\n});\n\n/**\n * Auth: Revoke tokens\n * Expected by CLI at POST /api/auth/revoke\n */\napp.post('/api/auth/revoke', async (req: Request, res: Response) => {\n try {\n const authHeader = req.headers.authorization || '';\n if (!authHeader.startsWith('Bearer ')) {\n return res.status(401).json({ error: 'unauthorized' });\n }\n\n // Accept both fields used by CLI\n const { refresh_token, all_devices } = req.body || {};\n // TODO: Integrate with real session store/token revocation\n return res.status(200).json({ success: true, allDevices: Boolean(all_devices) });\n } catch (error) {\n console.error('[Auth Revoke] Error:', error);\n return res.status(500).json({ error: 'REVOCATION_FAILED' });\n }\n});\n\n// ===========================================\n// API ENDPOINTS WITH RATE LIMITING\n// ===========================================\n\n// ---- Secret Manager integration (lazy, cached) ----\nlet _keysCache: { openaiApiKey?: string; googleApiKey?: string } | null = null;\nasync function loadProviderKeys(): Promise<{ openaiApiKey?: string; googleApiKey?: string }> {\n if (_keysCache) return _keysCache;\n try {\n const { SecretManagerIntegration } = await import('../services/intelligent-model-selector/SecretManagerIntegration');\n const sm = new SecretManagerIntegration({\n projectId: process.env.GOOGLE_CLOUD_PROJECT || process.env.GCLOUD_PROJECT || 'maria-code-470602',\n secrets: {\n openAI: 'openai-api-key',\n googleAI: 'google-ai-api-key',\n },\n });\n const keys = await sm.getAllApiKeys().catch(() => ({} as any));\n _keysCache = {\n openaiApiKey: keys.openaiApiKey,\n googleApiKey: keys.googleApiKey,\n };\n if (_keysCache.googleApiKey && !process.env.GEMINI_API_KEY && !process.env.GOOGLE_API_KEY) {\n process.env.GEMINI_API_KEY = _keysCache.googleApiKey;\n }\n if (_keysCache.openaiApiKey && !process.env.OPENAI_API_KEY) {\n process.env.OPENAI_API_KEY = _keysCache.openaiApiKey;\n }\n } catch {\n _keysCache = {\n openaiApiKey: process.env.OPENAI_API_KEY,\n googleApiKey: process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY,\n };\n }\n return _keysCache;\n}\n\n/**\n * Image Generation Endpoint\n */\napp.post('/api/v1/image', rateLimitMiddleware, async (req: Request, res: Response) => {\n try {\n await loadProviderKeys();\n const auth = req.headers.authorization;\n if (!auth || !auth.startsWith('Bearer ')) return res.status(401).json({ error: 'unauthorized', message: 'Login required', hint: 'Sign in and retry' });\n const idToken = auth.substring('Bearer '.length).trim();\n const decoded = await decodeFirebaseToken(idToken).catch(() => null as any);\n if (!decoded) return res.status(401).json({ error: 'unauthorized', message: 'Invalid login session', hint: 'Re-login to continue' });\n const uid = decoded?.uid || decoded?.sub || 'current';\n const { prompt, model, size = '1024x1024', format: formatRaw = 'png', count = 1, seed } = req.body || {};\n const fmt0 = String(formatRaw || 'png').toLowerCase();\n const format = (fmt0 === 'jpeg') ? 'jpg' : (['png','jpg','webp'].includes(fmt0) ? (fmt0 as 'png'|'jpg'|'webp') : 'png');\n if (!prompt) return res.status(400).json({ error: 'bad_request', message: 'prompt required' });\n const m = /^(\\d{2,4})x(\\d{2,4})$/.exec(String(size));\n if (!m) return res.status(400).json({ error: 'bad_request', message: 'size must be WxH' });\n const w = +m[1], h = +m[2];\n\n const provider = new GeminiMediaProvider();\n const started = Date.now();\n const buffers: Buffer[] = [];\n for (let i = 0; i < Math.max(1, Math.min(8, Number(count || 1))); i++) {\n const r = await provider.generateImage({ prompt, width: w, height: h, format, seed: (seed ?? 0) + i });\n // Align output to requested size/format using optional post-processing\n const processed = await (await import('../services/media-orchestrator/image-post')).processImageOptional(\n r.bytes,\n (String(format) as 'png'|'webp'|'jpg'),\n false,\n { width: w, height: h }\n );\n buffers.push(processed);\n }\n const promptHash = hashPrompt(prompt);\n const manifest: Omit<ManifestV1, 'manifestVersion'|'createdAt'> = {\n kind: 'image',\n request: { promptHash, seed, params: { size: [w,h], format, count }, model: model || 'gemini-2.5-flash-image-preview', provider: 'google' },\n artifacts: [],\n metrics: { durationMs: Date.now() - started, retries: 0, fallbacks: 0 },\n trace: Math.random().toString(36).slice(2,8).toUpperCase(),\n };\n const saved = await saveArtifacts({ root: process.cwd(), kind: 'image' }, buffers.map(b => ({ bytes: b, ext: `.${format}` })), manifest);\n jobIndex.set(String(manifest.trace), {\n id: String(manifest.trace),\n status: 'completed',\n kind: 'image',\n manifestPath: saved.manifestPath,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n uid,\n });\n // Record usage: 1 request, image count mapped into command bucket\n const idemKey = (req.headers['idempotency-key'] as string | undefined) || undefined;\n await applyConsumption(uid, { requests: 1, image: Math.max(1, buffers.length) }, idemKey);\n // Inline small payloads for direct client save\n const filesInline = buffers.map((b, idx) => ({\n file: saved.files[idx] || '',\n mime: format === 'jpg' ? 'image/jpeg' : `image/${format}`,\n bytesBase64: b.toString('base64'),\n }));\n return res.json({ success: true, data: { url: saved.manifestPath, files: saved.files, filesInline, jobId: manifest.trace } });\n } catch (error) {\n console.error('[Image API] Error:', error);\n const mapped = classifyMediaError(error);\n return res.status(mapped.status).json({ error: mapped.code, message: mapped.message, hint: mapped.hint });\n }\n});\n\n/**\n * Video Generation Endpoint\n */\napp.post('/api/v1/video', rateLimitMiddleware, async (req: Request, res: Response) => {\n try {\n await loadProviderKeys();\n const auth = req.headers.authorization;\n if (!auth || !auth.startsWith('Bearer ')) return res.status(401).json({ error: 'unauthorized', message: 'Login required', hint: 'Sign in and retry' });\n const { prompt, duration = 8, fps = 24, res: resStr = '1280x720', aspect: aspectStr, format = 'mp4', model, seed } = req.body || {};\n if (!prompt) return res.status(400).json({ error: 'bad_request', message: 'prompt required' });\n // Accept WxH (legacy) or 720|1080 with optional aspect 16:9|9:16\n let w: number, h: number;\n const aspect = (typeof aspectStr === 'string' && (aspectStr === '16:9' || aspectStr === '9:16')) ? aspectStr : undefined;\n const sv = String(resStr).toLowerCase().replace(/p$/, '');\n const m = /^(\\d{2,4})x(\\d{2,4})$/.exec(String(resStr));\n if (m) {\n w = +m[1]; h = +m[2];\n } else if (sv === '720') {\n if (aspect === '9:16') { w = 720; h = 1280; } else { w = 1280; h = 720; }\n } else if (sv === '1080') {\n if (aspect === '9:16') { w = 1080; h = 1920; } else { w = 1920; h = 1080; }\n } else {\n return res.status(400).json({ error: 'bad_request', message: 'res must be WxH or 720|1080' });\n }\n\n // Use Google GenAI Veo 3 for video generation\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { GoogleGenAI } = require('@google/genai');\n const apiKey = process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY;\n if (!apiKey) return res.status(503).json({ error: 'provider_unavailable', message: 'Provider API key is not configured', hint: 'Set GOOGLE_API_KEY or GEMINI_API_KEY on the server' });\n const ai = new GoogleGenAI({ apiKey });\n const veoModel = (model && String(model).trim()) || process.env.MARIA_VIDEO_MODEL || 'veo-3.0-generate-001';\n // Map size to aspect ratio per Veo spec (resolution parameter is not supported by SDK)\n const aspectRatio = '16:9'; //aspect || (w >= h ? '16:9' : '9:16'); not supported in veo3\n\n const startedMs = Date.now();\n // Veo 3 currently requires 8s clips; adjust if caller requested different\n const requestedDuration = Number(duration);\n const effectiveDuration = (Number.isFinite(requestedDuration) && requestedDuration === 8) ? 8 : 8;\n // Frame rate sanity (clamp 1..60, default 24)\n const requestedFps = Number(fps);\n const effectiveFps = Number.isFinite(requestedFps) ? Math.min(60, Math.max(1, Math.floor(requestedFps))) : 24;\n\n // Map requested size to discrete provider resolution\n const resolution = Math.max(w, h) >= 1920 ? '1080p' : '720p';\n let operation = await ai.models.generateVideos({\n model: veoModel,\n prompt: String(prompt),\n // Pass aspect + resolution + duration/fps explicitly -> resolution is not supported in veo3\n config: { aspectRatio, /* resolution: resolution, */ durationSeconds: effectiveDuration, frameRate: effectiveFps }\n });\n\n // Poll until done (official guidance ~ up to 6 minutes; use a safe cap)\n const deadline = Date.now() + 720_000;\n while (!(operation as any)?.done) {\n if (Date.now() > deadline) {\n return res.status(504).json({ error: 'timeout', message: 'video generation timed out' });\n }\n await new Promise(r => setTimeout(r, 10000));\n operation = await ai.operations.getVideosOperation({ operation });\n }\n // Give the file service a short settle time before first download attempt\n await new Promise(r => setTimeout(r, 2500));\n\n const videoRef = (operation as any)?.response?.generatedVideos?.[0]?.video;\n const videoMime: string | undefined = (videoRef && (videoRef.mimeType || videoRef.mime_type)) ? String(videoRef.mimeType || videoRef.mime_type) : undefined;\n if (!videoRef) {\n return res.status(500).json({ error: 'internal_error', message: 'no video returned by provider' });\n }\n\n const traceId = Math.random().toString(36).slice(2,8).toUpperCase();\n const tmpDir = path.join(process.cwd(), '.stage', traceId);\n await fs.mkdir(tmpDir, { recursive: true });\n const tmpOut = path.join(tmpDir, 'video.bin');\n\n // Robust download with SDK first, then manual fetch fallback\n const dlApiKey = process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY || '';\n\n const isLikelyValidVideo = async (buf: Buffer): Promise<boolean> => {\n if (!buf || buf.length < 16) return false;\n const head = buf.subarray(0, Math.min(256, buf.length));\n const headStr = head.toString('latin1');\n const hasFtyp = headStr.indexOf('ftyp') >= 0 || head.includes(Buffer.from('ftyp', 'ascii'));\n const isWebm = head[0] === 0x1A && head[1] === 0x45 && head[2] === 0xDF && head[3] === 0xA3;\n const looksHtml = headStr.includes('<!doctype') || headStr.includes('<html') || headStr.includes('<?xml');\n return (hasFtyp || isWebm) && !looksHtml;\n };\n\n const readUint32BE = (buf: Buffer, off: number): number => ((buf[off] << 24) | (buf[off+1] << 16) | (buf[off+2] << 8) | buf[off+3]) >>> 0;\n const readUint64BE = (buf: Buffer, off: number): number => {\n const hi = readUint32BE(buf, off);\n const lo = readUint32BE(buf, off + 4);\n // clamp to Number max safe\n return hi * 2 ** 32 + lo;\n };\n const tryParseMp4DurationSec = (buf: Buffer): number | null => {\n try {\n // Scan for 'mvhd' atom (Movie Header Box)\n for (let i = 0; i + 8 < buf.length; ) {\n const size = readUint32BE(buf, i);\n const type = buf.subarray(i + 4, i + 8).toString('latin1');\n if (!size || size < 8) break;\n if (type === 'moov') {\n // dive inside moov\n const end = Math.min(buf.length, i + size);\n let j = i + 8;\n while (j + 8 < end) {\n const sz = readUint32BE(buf, j);\n const tp = buf.subarray(j + 4, j + 8).toString('latin1');\n if (!sz || sz < 8) break;\n if (tp === 'mvhd') {\n const ver = buf[j + 8];\n if (ver === 1) {\n const timescale = readUint32BE(buf, j + 28);\n const duration = readUint64BE(buf, j + 32);\n if (timescale > 0) return duration / timescale;\n } else {\n const timescale = readUint32BE(buf, j + 20);\n const duration = readUint32BE(buf, j + 24);\n if (timescale > 0) return duration / timescale;\n }\n break;\n }\n j += sz;\n }\n break;\n }\n i += size;\n }\n } catch {}\n return null;\n };\n\n const hasAtom = (buf: Buffer, atom: string): boolean => {\n const tgt = Buffer.from(atom, 'latin1');\n return buf.indexOf(tgt) !== -1;\n };\n\n const validateVideoBytes = (buf: Buffer): { kind: 'mp4'|'mov'|'webm'|'unknown'; ok: boolean; durationSec: number | null; reason?: string } => {\n if (!buf || buf.length < 1024) return { kind: 'unknown', ok: false, durationSec: null, reason: 'too_small' };\n const header = buf.subarray(0, 256);\n const headerStr = header.toString('latin1');\n const hasFtyp = headerStr.indexOf('ftyp') >= 0 || header.includes(Buffer.from('ftyp', 'ascii'));\n const isWebm = header[0] === 0x1A && header[1] === 0x45 && header[2] === 0xDF && header[3] === 0xA3;\n if (isWebm) {\n // Accept WebM when header matches and size appears reasonable\n return { kind: 'webm', ok: buf.length > 200_000, durationSec: null };\n }\n if (hasFtyp) {\n const majorBrand = header.subarray(8, 12).toString('latin1').toLowerCase();\n const kind: 'mp4'|'mov' = majorBrand.startsWith('qt') ? 'mov' : 'mp4';\n // Require 'moov' atom present and duration near requested\n const hasMoov = hasAtom(buf, 'moov');\n const dur = tryParseMp4DurationSec(buf);\n const nearTarget = typeof dur === 'number' ? (dur + 0.75 /*slack*/ >= effectiveDuration) : false;\n const ok = hasMoov && nearTarget;\n return { kind, ok, durationSec: dur, reason: ok ? undefined : (!hasMoov ? 'missing_moov' : 'short_duration') };\n }\n return { kind: 'unknown', ok: false, durationSec: null, reason: 'unknown_header' };\n };\n\n const ensureFileMaterialized = async (p: string, waitMs = 45000): Promise<void> => {\n const deadline = Date.now() + waitMs;\n let lastSize = -1;\n let stableCount = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n const st = await fs.stat(p);\n if (st && st.size > 0) {\n if (st.size === lastSize) {\n stableCount++;\n if (stableCount >= 5) return; // ~1s stability at 200ms interval\n } else {\n stableCount = 0;\n lastSize = st.size;\n }\n }\n } catch {}\n if (Date.now() > deadline) throw new Error(`video file not fully materialized: ${p}`);\n await new Promise(r => setTimeout(r, 200));\n }\n };\n\n const trySdkDownloadOnce = async (): Promise<Buffer | null> => {\n try {\n await ai.files.download({ file: videoRef, downloadPath: tmpOut });\n await ensureFileMaterialized(tmpOut, 45000);\n const bytes = await fs.readFile(tmpOut);\n if (await isLikelyValidVideo(bytes)) return bytes;\n } catch {}\n return null;\n };\n\n // Manual fetch fallback using direct URI when SDK path fails\n const tryManualDownload = async (): Promise<Buffer | null> => {\n try {\n const fileObj: any = videoRef as any;\n const direct = fileObj?.uri || fileObj?.url || fileObj?.downloadUri || fileObj?.downloadUrl || '';\n if (!direct || typeof direct !== 'string') return null;\n const res = await fetch(direct, {\n method: 'GET',\n headers: dlApiKey ? { 'x-goog-api-key': dlApiKey } as any : undefined,\n redirect: 'follow',\n } as any);\n if (!res.ok) return null;\n const lenHeader = res.headers?.get?.('content-length');\n const expectedLen = lenHeader ? Number(lenHeader) : undefined;\n const ab = await res.arrayBuffer();\n const buf = Buffer.from(ab);\n if (typeof expectedLen === 'number' && Number.isFinite(expectedLen) && expectedLen > 0 && buf.length !== expectedLen) {\n // size mismatch -> treat as invalid\n return null;\n }\n await fs.writeFile(tmpOut, buf);\n if (await isLikelyValidVideo(buf)) return buf;\n } catch {}\n return null;\n };\n\n // Robust acquire loop: prefer SDK, fallback to manual, validate duration/moov\n let videoBytes: Buffer | null = null;\n const maxAttempts = 10;\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n let bytes: Buffer | null = await trySdkDownloadOnce();\n if (!bytes) bytes = await tryManualDownload();\n if (bytes && await isLikelyValidVideo(bytes)) {\n const v = validateVideoBytes(bytes);\n if (v.ok) { videoBytes = bytes; break; }\n }\n // backoff then retry\n await new Promise(r => setTimeout(r, Math.min(8000, 1500 * attempt)));\n }\n if (!videoBytes) throw new Error('failed to obtain fully materialized video');\n // Detect container & decide extension\n const header = videoBytes.subarray(0, 256);\n const headerStr = header.toString('latin1');\n let outExt = '.mp4';\n let outMime = 'video/mp4';\n // MP4 typically contains 'ftyp' at bytes 4-7\n // Detect 'ftyp' anywhere in the first 256 bytes to determine MP4\n const hasFtyp = headerStr.indexOf('ftyp') >= 0 || header.includes(Buffer.from('ftyp', 'ascii'));\n // WebM/Matroska starts with 0x1A 0x45 0xDF 0xA3\n const isWebm = header[0] === 0x1A && header[1] === 0x45 && header[2] === 0xDF && header[3] === 0xA3;\n if (videoMime && /webm/i.test(videoMime)) { outExt = '.webm'; outMime = 'video/webm'; }\n else if (videoMime && /quicktime/i.test(videoMime)) { outExt = '.mov'; outMime = 'video/quicktime'; }\n else if (isWebm) { outExt = '.webm'; outMime = 'video/webm'; }\n else if (hasFtyp) {\n // Inspect major brand to distinguish MOV vs MP4\n const majorBrand = header.subarray(8, 12).toString('latin1');\n if ((majorBrand || '').toLowerCase().startsWith('qt')) { outExt = '.mov'; outMime = 'video/quicktime'; }\n else { outExt = '.mp4'; outMime = 'video/mp4'; }\n }\n await fs.rm(tmpDir, { recursive: true, force: true });\n\n const promptHash = hashPrompt(prompt);\n const manifest: Omit<ManifestV1, 'manifestVersion'|'createdAt'> = {\n kind: 'video',\n request: { promptHash, seed, params: { size: [w,h], fps: effectiveFps, duration: effectiveDuration, format: outExt.replace('.', '') }, model: veoModel, provider: 'google' },\n artifacts: [],\n metrics: { durationMs: Date.now() - startedMs, retries: 0, fallbacks: 0 },\n trace: traceId,\n };\n\n // Save shallow path: artifacts/media/videos/{traceId}/<file>\n const baseDir = path.join('artifacts', 'media', 'videos', traceId);\n const saved = await saveArtifacts({ root: process.cwd(), kind: 'video', baseDir, flat: true }, [{ bytes: videoBytes, ext: outExt }], manifest);\n const idemKey = (req.headers['idempotency-key'] as string | undefined) || undefined;\n const idToken = auth.substring('Bearer '.length).trim();\n const decoded = await decodeFirebaseToken(idToken).catch(() => null as any);\n const uid = decoded?.uid || decoded?.sub || 'current';\n await applyConsumption(uid, { requests: 1, video: 1 }, idemKey);\n jobIndex.set(String(manifest.trace), {\n id: String(manifest.trace),\n status: 'completed',\n kind: 'video',\n manifestPath: saved.manifestPath,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n uid,\n });\n return res.json({ success: true, data: { url: saved.manifestPath || (saved.files[0] ? `/${saved.files[0]}` : undefined), files: saved.files, jobId: manifest.trace, applied: { durationSeconds: effectiveDuration, frameRate: effectiveFps } } });\n } catch (error) {\n console.error('[Video API] Error:', error);\n const mapped = classifyMediaError(error);\n return res.status(mapped.status).json({ error: mapped.code, message: mapped.message, hint: mapped.hint });\n }\n});\n\n/**\n * Job Status Endpoint\n * GET /api/v1/jobs/:id -> { id, status, kind, manifestPath, manifest? }\n */\napp.get('/api/v1/jobs/:id', async (req: Request, res: Response) => {\n try {\n const auth = req.headers.authorization;\n if (!auth || !auth.startsWith('Bearer ')) return res.status(401).json({ error: 'unauthorized' });\n const idToken = auth.substring('Bearer '.length).trim();\n const decoded = await decodeFirebaseToken(idToken).catch(() => null as any);\n const uid = decoded?.uid || decoded?.sub || 'current';\n const id = String(req.params.id || '').trim();\n if (!id) return res.status(400).json({ error: 'bad_request', message: 'id required' });\n const info = jobIndex.get(id);\n if (!info || (info.uid && info.uid !== uid)) return res.status(404).json({ error: 'not_found', message: 'job not found' });\n\n let manifest: any | undefined;\n if (info.manifestPath) {\n try {\n const full = path.resolve(process.cwd(), info.manifestPath);\n const txt = await fs.readFile(full, 'utf8');\n manifest = JSON.parse(txt);\n } catch {\n // ignore\n }\n }\n\n return res.json({\n id: info.id,\n status: info.status,\n kind: info.kind,\n manifestPath: info.manifestPath,\n manifest,\n createdAt: info.createdAt,\n updatedAt: info.updatedAt,\n });\n } catch (error) {\n console.error('[Jobs API] Error:', error);\n return res.status(500).json({ error: 'internal_error', message: 'failed to fetch job' });\n }\n});\n\n/**\n * Code Generation Endpoint\n */\napp.post('/api/v1/code', rateLimitMiddleware, async (req: Request, res: Response) => {\n try {\n const auth = req.headers.authorization;\n if (!auth || !auth.startsWith('Bearer ')) return res.status(401).json({ error: 'unauthorized' });\n const idToken = auth.substring('Bearer '.length).trim();\n const decoded = await decodeFirebaseToken(idToken).catch(() => null as any);\n if (!decoded) return res.status(401).json({ error: 'unauthorized' });\n const uid = decoded?.uid || decoded?.sub;\n\n const { prompt, language = 'typescript', model = 'gpt-4' } = req.body;\n \n if (!prompt) {\n return res.status(400).json({\n error: 'bad_request',\n message: 'Prompt is required'\n });\n }\n \n // TODO: Implement actual code generation logic\n // Record usage: count as one request and one code command\n const idemKey = (req.headers['idempotency-key'] as string | undefined) || undefined;\n await applyConsumption(uid, { requests: 1, code: 1 }, idemKey);\n\n return res.json({\n success: true,\n data: {\n code: `// Generated code for: ${prompt}\\nfunction example() {\\n return \"Generated by MARIA CODE\";\\n}`,\n language,\n model,\n prompt,\n createdAt: new Date().toISOString()\n }\n });\n } catch (error) {\n console.error('[Code API] Error:', error);\n return res.status(500).json({\n error: 'internal_error',\n message: 'Failed to generate code'\n });\n }\n});\n\n/**\n * Chat Endpoint\n */\napp.post('/api/v1/chat', rateLimitMiddleware, async (req: Request, res: Response) => {\n try {\n const auth = req.headers.authorization;\n if (!auth || !auth.startsWith('Bearer ')) return res.status(401).json({ error: 'unauthorized' });\n const idToken = auth.substring('Bearer '.length).trim();\n const decoded = await decodeFirebaseToken(idToken).catch(() => null as any);\n if (!decoded) return res.status(401).json({ error: 'unauthorized' });\n const uid = decoded?.uid || decoded?.sub;\n\n const { message, model = 'gemini-2.5-flash', messages } = req.body || {};\n // Accept both single message and array of messages (OpenAI-like)\n let effectiveMessage: string | undefined = undefined;\n if (typeof message === 'string' && message.trim()) {\n effectiveMessage = String(message).trim();\n } else if (Array.isArray(messages)) {\n try {\n // Prefer last user message content; fallback to join all\n const lastUser = [...messages].reverse().find((m: any) => (m?.role || '').toLowerCase() === 'user');\n effectiveMessage = (lastUser?.content && String(lastUser.content)) || messages.map((m: any) => String(m?.content || '')).filter(Boolean).join('\\n');\n } catch {}\n }\n if (!effectiveMessage) {\n return res.status(400).json({ error: 'bad_request', message: 'message or messages is required' });\n }\n \n // TODO: Implement actual chat logic (proxy to provider)\n // Record usage: 1 request. If token usage is known, include tokens\n const idemKey = (req.headers['idempotency-key'] as string | undefined) || undefined;\n await applyConsumption(uid, { requests: 1 }, idemKey);\n\n return res.json({\n success: true,\n data: {\n response: `Echo: ${effectiveMessage}`,\n model,\n createdAt: new Date().toISOString()\n }\n });\n } catch (error) {\n console.error('[Chat API] Error:', error);\n return res.status(500).json({\n error: 'internal_error',\n message: 'Failed to process chat'\n });\n }\n});\n\n// AI proxy for /code using OpenAI GPT (server-side OPENAI_API_KEY)\napp.post('/v1/ai-proxy', rateLimitMiddleware, async (req: Request, res: Response) => {\n try {\n const auth = req.headers.authorization;\n if (!auth || !auth.startsWith('Bearer ')) return res.status(401).json({ error: 'unauthorized' });\n const { prompt, taskType, research, messages } = req.body || {};\n // Derive effective prompt\n let effectivePrompt: string | undefined = undefined;\n if (typeof prompt === 'string' && prompt.trim()) {\n effectivePrompt = String(prompt).trim();\n } else if (Array.isArray(messages)) {\n try {\n const lastUser = [...messages].reverse().find((m: any) => (m?.role || '').toLowerCase() === 'user');\n effectivePrompt = (lastUser?.content && String(lastUser.content)) || messages.map((m: any) => String(m?.content || '')).filter(Boolean).join('\\n');\n } catch {}\n }\n if (!effectivePrompt && !(taskType === 'research' && research?.query)) return res.status(400).json({ error: 'bad_request', message: 'prompt or messages or research.query required' });\n const idToken = auth.substring('Bearer '.length).trim();\n const decoded = await decodeFirebaseToken(idToken).catch(() => null as any);\n if (!decoded) return res.status(401).json({ error: 'unauthorized' });\n const uid = decoded?.uid || decoded?.sub;\n const idemKey = (req.headers['idempotency-key'] as string | undefined) || undefined;\n if (process.env.MARIA_TELEMETRY === '1') {\n try { console.log(JSON.stringify({ ev: 'ai_proxy_request', taskType: taskType || 'unknown', promptLen: String(effectivePrompt || research?.query || '').length })); } catch {}\n }\n // Helper: sanitize API keys (trim, strip quotes/Bearer prefix)\n const sanitizeKey = (v?: string | null): string | undefined => {\n if (!v) return undefined;\n let k = String(v).trim();\n if (!k) return undefined;\n // Remove surrounding quotes often present in env\n if ((k.startsWith('\"') && k.endsWith('\"')) || (k.startsWith(\"'\") && k.endsWith(\"'\"))) {\n k = k.slice(1, -1);\n }\n // Strip accidental Bearer prefix\n if (/^Bearer\\s+/i.test(k)) k = k.replace(/^Bearer\\s+/i, '');\n // Reject placeholders\n if (/your_.*key|example|placeholder/i.test(k)) return undefined;\n // Disallow whitespace/newlines in header values\n if (/\\s/.test(k)) k = k.replace(/\\s+/g, '');\n return k || undefined;\n };\n\n // Prefer Gemini when valid key provided; fallback to OpenAI only when its key is valid\n const keys = await (async () => {\n try { return await (global as any).___maria_keys ?? await (async () => { const k = await (await import('../services/intelligent-model-selector/SecretManagerIntegration')).SecretManagerIntegration; const sm = new k({ projectId: process.env.GOOGLE_CLOUD_PROJECT || process.env.GCLOUD_PROJECT || 'maria-code-470602', secrets: { openAI: 'openai-api-key', googleAI: 'google-ai-api-key' } }); const all = await sm.getAllApiKeys().catch(() => ({} as any)); (global as any).___maria_keys = all; return all; })(); } catch { return {}; } })();\n const gemKey = sanitizeKey((keys as any)?.googleApiKey || process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY);\n if (gemKey) {\n try {\n const { GoogleGenerativeAI } = await import('@google/generative-ai');\n const ai = new GoogleGenerativeAI(gemKey);\n const modelName = process.env.MARIA_CODE_MODEL || 'gemini-2.5-flash';\n const model = ai.getGenerativeModel({ model: modelName });\n let content = '';\n\n if (taskType === 'research' && research?.query) {\n // Use Gemini grounding via googleSearch tool\n const tool = { googleSearch: {} } as any;\n const r: any = await (ai as any).models.generateContent({ model: modelName, contents: String(research.query), config: { tools: [tool] } });\n content = String((r?.text?.()) || r?.text || r?.response?.candidates?.[0]?.content?.parts?.[0]?.text || '');\n } else {\n // Standard prompt path with optional attachments\n const attachments = Array.isArray((req.body?.metadata || {}).attachments)\n ? ((req.body.metadata.attachments as any[]) || []).filter(Boolean)\n : [];\n const parts: any[] = [{ text: String(effectivePrompt || '') }];\n for (const a of attachments) {\n try {\n const b64 = String(a.data_base64 || '');\n const mime = String(a.mime || 'application/octet-stream');\n if (!b64) continue;\n parts.push({ inlineData: { data: b64, mimeType: mime } });\n } catch {}\n }\n const resp = await model.generateContent({ contents: [{ role: 'user', parts }] });\n content = resp?.response?.text?.() || resp?.response?.candidates?.[0]?.content?.parts?.[0]?.text || '';\n }\n if (process.env.MARIA_TELEMETRY === '1') {\n try { console.log(JSON.stringify({ ev: 'ai_proxy_route', vendor: 'google', model: modelName, empty: !content })); } catch {}\n }\n // Usage: 1 request; tokens unknown for Gemini SDK. Count code when taskType suggests code/evaluation\n const consumption: Record<string, number> = { requests: 1 };\n if (taskType === 'code' || taskType === 'evaluation') consumption.code = 1;\n try { await applyConsumption(uid, consumption, idemKey); } catch {}\n return res.json({ data: { content, routedModel: { vendor: 'google', family: 'gemini', name: modelName, reason: taskType || 'code' } } });\n } catch (e) {\n console.warn('[AI Proxy] Gemini path failed, falling back to OpenAI:', (e as Error)?.message || e);\n if (process.env.MARIA_TELEMETRY === '1') {\n try { console.log(JSON.stringify({ ev: 'ai_proxy_google_error', message: (e as any)?.message || String(e) })); } catch {}\n }\n }\n }\n\n const openaiKey = sanitizeKey((keys as any)?.openaiApiKey || process.env.OPENAI_API_KEY);\n if (!openaiKey) {\n if (process.env.MARIA_TELEMETRY === '1') {\n try { console.log(JSON.stringify({ ev: 'ai_proxy_no_keys' })); } catch {}\n }\n return res.status(503).json({ error: 'provider_unavailable', message: 'No valid provider key (set GEMINI_API_KEY/GOOGLE_API_KEY or OPENAI_API_KEY)' });\n }\n // Use OpenAI Responses API for gpt-5-mini (fallback gpt-4o-mini)\n const OpenAI = (await import('openai')).default;\n const client = new OpenAI({ apiKey: openaiKey });\n let model = process.env.MARIA_CODE_MODEL || 'gpt-5-mini';\n let content = '';\n let totalTokens = 0;\n try {\n const r = await client.responses.create({\n model,\n input: [\n { role: 'system', content: 'You output only code blocks when asked for code.' },\n { role: 'user', content: effectivePrompt || '' },\n ] as any,\n } as any);\n content = (r as any)?.output_text || (r as any)?.content?.[0]?.text || '';\n const u: any = (r as any)?.usage;\n if (u) {\n const inTok = Number(u.input_tokens || u.inputTokens || 0);\n const outTok = Number(u.output_tokens || u.outputTokens || 0);\n totalTokens = Number(u.total_tokens || u.totalTokens || (inTok + outTok) || 0);\n }\n } catch (_e) {\n model = 'gpt-4o-mini';\n const r2 = await client.chat.completions.create({\n model,\n messages: [\n { role: 'system', content: 'You output only code blocks when asked for code.' },\n { role: 'user', content: effectivePrompt || '' },\n ],\n });\n content = r2.choices?.[0]?.message?.content || '';\n const u2: any = (r2 as any)?.usage;\n if (u2) totalTokens = Number(u2.total_tokens || 0);\n }\n if (process.env.MARIA_TELEMETRY === '1') {\n try { console.log(JSON.stringify({ ev: 'ai_proxy_route', vendor: 'openai', model, empty: !content })); } catch {}\n }\n\n // Usage: 1 request; include tokens when available; count code when taskType suggests code/evaluation\n const consumption: Record<string, number> = { requests: 1 };\n if (totalTokens > 0) consumption.tokens = totalTokens;\n if (taskType === 'code' || taskType === 'evaluation') consumption.code = 1;\n try { await applyConsumption(uid, consumption, idemKey); } catch {}\n\n return res.json({ data: { content, routedModel: { vendor: 'openai', family: 'gpt', name: model, reason: taskType || 'code' } } });\n } catch (error) {\n console.error('[AI Proxy] Error:', error);\n if (process.env.MARIA_TELEMETRY === '1') {\n try { console.log(JSON.stringify({ ev: 'ai_proxy_error', message: (error as any)?.message || String(error) })); } catch {}\n }\n return res.status(500).json({ error: 'internal_error', message: 'AI proxy failed' });\n }\n});\n\n// ===== Usage endpoints (Firestore-backed when available) =====\nasync function getFirestoreSafe(): Promise<any|null> {\n try {\n const admin = await import('firebase-admin');\n if (!admin.apps?.length) { try { (admin as any).initializeApp(); } catch {} }\n const { getFirestore } = await import('firebase-admin/firestore');\n return getFirestore();\n } catch { return null; }\n}\n\nfunction calcNextReset(): string {\n const d = new Date();\n d.setUTCMonth(d.getUTCMonth() + 1, 1); // next month 1st day\n d.setUTCHours(0,0,0,0);\n return d.toISOString();\n}\n\nasync function recordConsumption(uid: string, consumption: Record<string, number>, idempotencyKey?: string) {\n const db = await getFirestoreSafe();\n if (!db) return;\n const docPath = `projects/default/usage/${uid}`;\n const usageRef = db.doc(docPath);\n const nowISO = new Date().toISOString();\n\n // Idempotency handling: if provided, ensure it is unique per user\n if (idempotencyKey) {\n const idemRef = db.doc(`projects/default/usage/${uid}/consumptions/${idempotencyKey}`);\n const idemSnap = await idemRef.get();\n if (idemSnap.exists) return; // already processed\n await idemRef.set({ createdAt: nowISO, consumption });\n }\n\n const snap = await usageRef.get();\n let data = snap.exists ? snap.data() : null;\n if (!data) {\n data = {\n plan: { name: 'FREE', limits: { requests: freePlan.buckets.req } },\n monthly: {\n requests: { used: 0, limit: freePlan.buckets.req },\n image: { used: 0, limit: freePlan.buckets.image },\n video: { used: 0, limit: freePlan.buckets.video },\n code: { used: 0, limit: freePlan.buckets.code },\n resetAt: calcNextReset(),\n },\n updatedAt: nowISO,\n };\n }\n const m = data.monthly || {};\n if (consumption?.requests) m.requests.used = Math.max(0, (m.requests.used || 0) + Number(consumption.requests));\n if (consumption?.image) m.image.used = Math.max(0, (m.image.used || 0) + Number(consumption.image));\n if (consumption?.video) m.video.used = Math.max(0, (m.video.used || 0) + Number(consumption.video));\n if (consumption?.code) m.code.used = Math.max(0, (m.code.used || 0) + Number(consumption.code));\n data.monthly = m; data.updatedAt = nowISO;\n await usageRef.set(data, { merge: true });\n}\n\napp.get('/api/v1/usage', rateLimitMiddleware, async (req: Request, res: Response) => {\n try {\n const auth = req.headers.authorization;\n if (!auth || !auth.startsWith('Bearer ')) return res.status(401).json({ error: 'unauthorized' });\n const idToken = auth.substring('Bearer '.length).trim();\n const decoded = await decodeFirebaseToken(idToken).catch(() => null as any);\n if (!decoded) return res.status(401).json({ error: 'unauthorized' });\n const uid = decoded?.uid || decoded?.sub;\n const { planId: pid, limits } = await getUserPlanAndLimits(uid);\n const { data } = await ensureUsageDoc(uid);\n const periodId = getCurrentPeriodId();\n const used = data?.used || { req: 0, tokens: 0, code: 0, attachment: 0 };\n const remain = data?.remain || limits;\n const percentage = {\n req: limits.req > 0 ? Math.round((used.req / limits.req) * 100) : 0,\n tokens: limits.tokens > 0 ? Math.round((used.tokens / limits.tokens) * 100) : 0,\n code: limits.code > 0 ? Math.round((used.code / limits.code) * 100) : 0,\n attachment: limits.attachment > 0 ? Math.round((used.attachment / limits.attachment) * 100) : 0,\n };\n return res.json({\n periodId,\n planCode: pid,\n planName: planName(pid),\n used,\n remain,\n limits,\n percentage,\n resetAt: data?.resetAt || nextMonthResetISO(),\n });\n } catch (e) {\n console.error('[Usage] GET error', e);\n return res.status(500).json({ error: 'internal_error' });\n }\n});\n\napp.post('/api/v1/usage', rateLimitMiddleware, async (req: Request, res: Response) => {\n try {\n const auth = req.headers.authorization;\n if (!auth || !auth.startsWith('Bearer ')) return res.status(401).json({ error: 'unauthorized' });\n const { consumption } = req.body || {};\n const idemKey = (req.headers['idempotency-key'] as string | undefined) || undefined;\n const idToken = auth.substring('Bearer '.length).trim();\n const decoded = await decodeFirebaseToken(idToken).catch(() => null as any);\n if (!decoded) return res.status(401).json({ error: 'unauthorized' });\n const uid = decoded?.uid || decoded?.sub;\n await applyConsumption(uid, consumption || {}, idemKey);\n // Return fresh snapshot in unified shape\n const { data } = await ensureUsageDoc(uid);\n const { planId: pid, limits } = await getUserPlanAndLimits(uid);\n const periodId = getCurrentPeriodId();\n const used = data?.used || { req: 0, tokens: 0, code: 0, attachment: 0 };\n const remain = data?.remain || limits;\n const percentage = {\n req: limits.req > 0 ? Math.round((used.req / limits.req) * 100) : 0,\n tokens: limits.tokens > 0 ? Math.round((used.tokens / limits.tokens) * 100) : 0,\n code: limits.code > 0 ? Math.round((used.code / limits.code) * 100) : 0,\n attachment: limits.attachment > 0 ? Math.round((used.attachment / limits.attachment) * 100) : 0,\n };\n return res.json({ periodId, planCode: pid, planName: planName(pid), used, remain, limits, percentage, resetAt: data?.resetAt || nextMonthResetISO() });\n } catch (e) {\n console.error('[Usage] POST error', e);\n return res.status(500).json({ error: 'internal_error' });\n }\n});\n\n// 404 handler\napp.use((req: Request, res: Response) => {\n res.status(404).json({\n error: 'not_found',\n message: 'The requested endpoint does not exist',\n path: req.path\n });\n});\n\n// Error handler\napp.use((err: Error, req: Request, res: Response, next: NextFunction) => {\n console.error('[Server Error]:', err);\n res.status(500).json({\n error: 'internal_server_error',\n message: 'An unexpected error occurred'\n });\n});\n\n// Start server\nconst server = app.listen(port, () => {\n console.log(` MARIA CODE Express Server running on port ${port}`);\n console.log(` Health check: http://localhost:${port}/health`);\n console.log(` API Status: http://localhost:${port}/api/status`);\n console.log(` API Endpoints: http://localhost:${port}/`);\n \n // Start rate limit cleanup job\n startRateLimitCleanup();\n console.log(' Rate limit cleanup job started');\n});\n\n// Graceful shutdown\nprocess.on('SIGTERM', () => {\n console.log('SIGTERM signal received: closing HTTP server');\n server.close(() => {\n console.log('HTTP server closed');\n process.exit(0);\n });\n});\n\nprocess.on('SIGINT', () => {\n console.log('SIGINT signal received: closing HTTP server');\n server.close(() => {\n console.log('HTTP server closed');\n process.exit(0);\n });\n});\n\nexport { app, server };\n"]}
1
+ {"version":3,"sources":["../src/services/intelligent-model-selector/SecretManagerIntegration.ts","../node_modules/.pnpm/data-uri-to-buffer@4.0.1/node_modules/data-uri-to-buffer/src/index.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/utils.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/helpers/miscellaneous.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/helpers/webidl.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/simple-queue.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/abstract-ops/internal-methods.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/generic-reader.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/stub/number-isfinite.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/stub/math-trunc.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/basic.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/readable-stream.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/default-reader.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/target/es2018/stub/async-iterator-prototype.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/async-iterator.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/stub/number-isnan.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/abstract-ops/ecmascript.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/abstract-ops/miscellaneous.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/abstract-ops/queue-with-sizes.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/helpers/array-buffer-view.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/byte-stream-controller.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/reader-options.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/byob-reader.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/abstract-ops/queuing-strategy.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/queuing-strategy.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/underlying-sink.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/writable-stream.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/abort-signal.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/writable-stream.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/globals.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/stub/dom-exception.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/pipe.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/default-controller.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/tee.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/readable-stream-like.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream/from.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/underlying-source.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/iterator-options.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/pipe-options.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/readable-writable-pair.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/readable-stream.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/queuing-strategy-init.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/byte-length-queuing-strategy.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/count-queuing-strategy.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/validators/transformer.ts","../node_modules/.pnpm/web-streams-polyfill@3.3.3/node_modules/web-streams-polyfill/src/lib/transform-stream.ts","../node_modules/.pnpm/fetch-blob@3.2.0/node_modules/fetch-blob/streams.cjs","../node_modules/.pnpm/fetch-blob@3.2.0/node_modules/fetch-blob/index.js","../node_modules/.pnpm/fetch-blob@3.2.0/node_modules/fetch-blob/file.js","../node_modules/.pnpm/formdata-polyfill@4.0.10/node_modules/formdata-polyfill/esm.min.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/errors/base.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/errors/fetch-error.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/utils/is.js","../node_modules/.pnpm/node-domexception@1.0.0/node_modules/node-domexception/index.js","../node_modules/.pnpm/fetch-blob@3.2.0/node_modules/fetch-blob/from.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/utils/multipart-parser.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/body.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/headers.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/utils/is-redirect.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/response.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/utils/get-search.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/utils/referrer.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/request.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/errors/abort-error.js","../node_modules/.pnpm/node-fetch@3.3.2/node_modules/node-fetch/src/index.js","../src/services/media-orchestrator/image-post.ts","../src/middleware/rate-limit.ts","../src/services/media-orchestrator/types.ts","../src/services/media-orchestrator/Storage.ts","../src/providers/google/gemini-media.ts","../src/services/intelligent-model-selector/IMSFacade.ts","../src/providers/ai-provider.ts","../src/providers/google-ai-provider.ts","../src/providers/openai-provider.ts","../src/providers/anthropic-provider.ts","../src/providers/base-provider.ts","../src/providers/groq-provider.ts","../src/services/intelligent-model-selector/IMSProviderAdapter.ts","../src/services/subscription/subscription-store.ts","../src/services/subscription/stripe-webhook-service.ts","../src/server/express-server.ts"],"names":["SecretManagerServiceClient","e","r","i","noop","x","_a","resolve","F","queueMicrotask","isAbortSignal","streamBrandCheckException","defaultControllerBrandCheckException","DOMException","ReadableStream","POOL_SIZE","process","Blob","clone","size","File","f","FormData","m","port","fs","path","statSync","stat","basename","createReadStream","Body","clear","Buffer","Stream","promisify","types","toFormData","deprecate","PassThrough","http","INTERNALS","response","isIP","formatUrl","fetch","https","s","pump","zlib","getAuth","h","crypto","fsp","modelName","GoogleGenerativeAI","OpenAI","Anthropic","EventEmitter","createHmac","timingSafeEqual","express","helmet","cors","compression","compressionFilter","lower","SecretManagerIntegration","hasFtyp","isWebm","duration","header","headerStr","deadline","res","sanitizeKey","model","content","consumption"],"mappings":"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","file":"server-express.cjs","sourcesContent":["/**\n * Secret Manager Integration for IMS\n * Securely retrieves API keys from Google Secret Manager\n */\n\nimport { SecretManagerServiceClient } from '@google-cloud/secret-manager';\n\nexport interface SecretConfig {\n projectId: string;\n secrets: {\n googleAI?: string;\n openAI?: string;\n anthropic?: string;\n groq?: string;\n // Optional configuration (non-key) items\n defaultModel?: string;\n defaultProvider?: string;\n lmstudioApiBase?: string;\n ollamaApiUrl?: string;\n vllmApiUrl?: string;\n };\n}\n\nexport class SecretManagerIntegration {\n private client: SecretManagerServiceClient | null = null;\n private cache: Map<string, string> = new Map();\n private cacheExpiry: Map<string, number> = new Map();\n private readonly CACHE_TTL = 3600000; // 1 hour\n private readonly useGsm: boolean;\n private readonly MAX_RETRIES = 3;\n private readonly BASE_DELAY_MS = 200;\n \n constructor(private config: SecretConfig) {\n this.useGsm = this.shouldUseGsm();\n }\n\n /** Determine whether GSM should be used in this environment */\n private shouldUseGsm(): boolean {\n if (process.env.MARIA_DISABLE_GSM === 'true') return false;\n if (process.env.GOOGLE_APPLICATION_CREDENTIALS) return true;\n if (process.env.GOOGLE_CLOUD_PROJECT || process.env.GCLOUD_PROJECT) return true;\n if (process.env.CLOUD_RUN_SERVICE || process.env.K_SERVICE) return true;\n if (process.env.GCE_METADATA_HOST) return true;\n return false; // default: end-user machines don't require GSM\n }\n\n /** Lazily create Secret Manager client only when permitted */\n private ensureClient(): SecretManagerServiceClient | null {\n if (!this.useGsm) return null;\n if (this.client) return this.client;\n try {\n this.client = new SecretManagerServiceClient();\n } catch {\n this.client = null;\n }\n return this.client;\n }\n \n /**\n * Get API key from Secret Manager with caching\n */\n async getApiKey(provider: 'google' | 'openai' | 'anthropic' | 'groq'): Promise<string | undefined> {\n const secretName = this.getSecretName(provider);\n if (!secretName) {\n return undefined;\n }\n \n // Short-circuit when GSM is disabled/unavailable\n const client = this.ensureClient();\n if (!client) {\n return this.getFallbackFromEnv(provider);\n }\n\n // Valid cache first\n const valid = this.getCachedSecret(secretName);\n if (valid) return valid;\n\n // Try fetch with backoff\n const res = await this.accessWithBackoff(secretName).catch(() => undefined);\n if (res) {\n this.cacheSecret(secretName, res);\n return res;\n }\n\n // Stale-while-revalidate: if we ever cached a value, return it\n const stale = this.cache.get(secretName);\n if (stale) return stale;\n\n // Fallback to env var\n return this.getFallbackFromEnv(provider);\n }\n \n /**\n * Get all API keys\n */\n async getAllApiKeys(): Promise<{\n googleApiKey?: string;\n openaiApiKey?: string;\n anthropicApiKey?: string;\n groqApiKey?: string;\n }> {\n const [googleApiKey, openaiApiKey, anthropicApiKey, groqApiKey] = await Promise.all([\n this.getApiKey('google'),\n this.getApiKey('openai'),\n this.getApiKey('anthropic'),\n this.getApiKey('groq')\n ]);\n \n return {\n googleApiKey,\n openaiApiKey,\n anthropicApiKey,\n groqApiKey\n };\n }\n\n /** Fetch optional configuration values (not API keys) */\n async getOptionalConfig(): Promise<{\n defaultModel?: string;\n defaultProvider?: string;\n lmstudioApiBase?: string;\n ollamaApiUrl?: string;\n vllmApiUrl?: string;\n }> {\n const client = this.ensureClient();\n const read = async (name?: string): Promise<string | undefined> => {\n if (!name) return undefined;\n if (!client) return undefined;\n try {\n const resName = `projects/${this.config.projectId}/secrets/${name}/versions/latest`;\n const [version] = await client.accessSecretVersion({ name: resName });\n const payload = version.payload?.data;\n return payload?.toString();\n } catch {\n return undefined;\n }\n };\n\n const [defaultModel, defaultProvider, lmstudioApiBase, ollamaApiUrl, vllmApiUrl] = await Promise.all([\n read(this.config.secrets.defaultModel || 'default-model'),\n read(this.config.secrets.defaultProvider || 'default-provider'),\n read(this.config.secrets.lmstudioApiBase || 'lmstudio-api-base'),\n read(this.config.secrets.ollamaApiUrl || 'ollama-api-url'),\n read(this.config.secrets.vllmApiUrl || 'vllm-api-url'),\n ]);\n\n return { defaultModel, defaultProvider, lmstudioApiBase, ollamaApiUrl, vllmApiUrl };\n }\n \n /**\n * Verify that required secrets exist\n */\n async verifySecrets(): Promise<{\n available: string[];\n missing: string[];\n }> {\n // If GSM is disabled/unavailable, don't block CLI: report nothing\n const client = this.ensureClient();\n if (!client) {\n return { available: [], missing: [] };\n }\n\n const available: string[] = [];\n const missing: string[] = [];\n \n const providers: Array<'google' | 'openai' | 'anthropic' | 'groq'> = \n ['google', 'openai', 'anthropic', 'groq'];\n \n for (const provider of providers) {\n const secretName = this.getSecretName(provider);\n if (!secretName) continue;\n \n try {\n const name = `projects/${this.config.projectId}/secrets/${secretName}`;\n await client.getSecret({ name });\n available.push(provider);\n } catch (error) {\n missing.push(provider);\n }\n }\n \n return { available, missing };\n }\n \n /**\n * Create or update a secret\n */\n async createOrUpdateSecret(\n provider: 'google' | 'openai' | 'anthropic' | 'groq',\n apiKey: string\n ): Promise<boolean> {\n const secretName = this.getSecretName(provider);\n if (!secretName) {\n return false;\n }\n \n const client = this.ensureClient();\n if (!client) {\n // No GSM available locally\n return false;\n }\n\n const secretId = `projects/${this.config.projectId}/secrets/${secretName}`;\n \n try {\n // Check if secret exists\n let secretExists = false;\n try {\n await client.getSecret({ name: secretId });\n secretExists = true;\n } catch {\n secretExists = false;\n }\n \n if (!secretExists) {\n // Create the secret\n await client.createSecret({\n parent: `projects/${this.config.projectId}`,\n secretId: secretName,\n secret: {\n replication: {\n automatic: {}\n },\n labels: {\n service: 'ims',\n provider: provider\n }\n }\n });\n }\n \n // Add the secret version\n await client.addSecretVersion({\n parent: secretId,\n payload: {\n data: Buffer.from(apiKey, 'utf8')\n }\n });\n \n // Clear cache for this secret\n this.cache.delete(secretName);\n this.cacheExpiry.delete(secretName);\n \n return true;\n } catch (error) {\n // Silently handle create/update errors\n // console.error(`Failed to create/update secret ${secretName}:`, error);\n return false;\n }\n }\n \n /**\n * Get secret name for provider\n */\n private getSecretName(provider: 'google' | 'openai' | 'anthropic' | 'groq'): string | undefined {\n switch (provider) {\n case 'google':\n return this.config.secrets.googleAI || 'google-ai-api-key';\n case 'openai':\n return this.config.secrets.openAI || 'openai-api-key';\n case 'anthropic':\n return this.config.secrets.anthropic || 'anthropic-api-key';\n case 'groq':\n return this.config.secrets.groq || 'groq-api-key';\n default:\n return undefined;\n }\n }\n \n /**\n * Get cached secret if valid\n */\n private getCachedSecret(secretName: string): string | undefined {\n const expiry = this.cacheExpiry.get(secretName);\n if (!expiry || Date.now() > expiry) {\n // Cache expired\n this.cache.delete(secretName);\n this.cacheExpiry.delete(secretName);\n return undefined;\n }\n \n return this.cache.get(secretName);\n }\n\n /** Access a secret with retry + exponential backoff */\n private async accessWithBackoff(secretName: string): Promise<string | undefined> {\n const client = this.ensureClient();\n if (!client) return undefined;\n const name = `projects/${this.config.projectId}/secrets/${secretName}/versions/latest`;\n for (let attempt = 0; attempt < this.MAX_RETRIES; attempt++) {\n try {\n const [version] = await client.accessSecretVersion({ name });\n const payload = version.payload?.data;\n if (!payload) return undefined;\n return payload.toString();\n } catch (e) {\n if (attempt === this.MAX_RETRIES - 1) break;\n const delay = this.BASE_DELAY_MS * Math.pow(2, attempt);\n await new Promise((r) => setTimeout(r, delay));\n }\n }\n return undefined;\n }\n \n /**\n * Cache a secret\n */\n private cacheSecret(secretName: string, value: string): void {\n this.cache.set(secretName, value);\n this.cacheExpiry.set(secretName, Date.now() + this.CACHE_TTL);\n }\n \n /**\n * Get fallback from environment variable\n */\n private getFallbackFromEnv(provider: 'google' | 'openai' | 'anthropic' | 'groq'): string | undefined {\n switch (provider) {\n case 'google':\n return process.env.GOOGLE_AI_API_KEY;\n case 'openai':\n return process.env.OPENAI_API_KEY;\n case 'anthropic':\n return process.env.ANTHROPIC_API_KEY;\n case 'groq':\n return process.env.GROQ_API_KEY;\n default:\n return undefined;\n }\n }\n \n /**\n * Clear cache\n */\n clearCache(): void {\n this.cache.clear();\n this.cacheExpiry.clear();\n }\n}\n","export interface MimeBuffer extends Buffer {\n\ttype: string;\n\ttypeFull: string;\n\tcharset: string;\n}\n\n/**\n * Returns a `Buffer` instance from the given data URI `uri`.\n *\n * @param {String} uri Data URI to turn into a Buffer instance\n * @returns {Buffer} Buffer instance from Data URI\n * @api public\n */\nexport function dataUriToBuffer(uri: string): MimeBuffer {\n\tif (!/^data:/i.test(uri)) {\n\t\tthrow new TypeError(\n\t\t\t'`uri` does not appear to be a Data URI (must begin with \"data:\")'\n\t\t);\n\t}\n\n\t// strip newlines\n\turi = uri.replace(/\\r?\\n/g, '');\n\n\t// split the URI up into the \"metadata\" and the \"data\" portions\n\tconst firstComma = uri.indexOf(',');\n\tif (firstComma === -1 || firstComma <= 4) {\n\t\tthrow new TypeError('malformed data: URI');\n\t}\n\n\t// remove the \"data:\" scheme and parse the metadata\n\tconst meta = uri.substring(5, firstComma).split(';');\n\n\tlet charset = '';\n\tlet base64 = false;\n\tconst type = meta[0] || 'text/plain';\n\tlet typeFull = type;\n\tfor (let i = 1; i < meta.length; i++) {\n\t\tif (meta[i] === 'base64') {\n\t\t\tbase64 = true;\n\t\t} else if(meta[i]) {\n\t\t\ttypeFull += `;${ meta[i]}`;\n\t\t\tif (meta[i].indexOf('charset=') === 0) {\n\t\t\t\tcharset = meta[i].substring(8);\n\t\t\t}\n\t\t}\n\t}\n\t// defaults to US-ASCII only if type is not provided\n\tif (!meta[0] && !charset.length) {\n\t\ttypeFull += ';charset=US-ASCII';\n\t\tcharset = 'US-ASCII';\n\t}\n\n\t// get the encoded data portion and decode URI-encoded chars\n\tconst encoding = base64 ? 'base64' : 'ascii';\n\tconst data = unescape(uri.substring(firstComma + 1));\n\tconst buffer = Buffer.from(data, encoding) as MimeBuffer;\n\n\t// set `.type` and `.typeFull` properties to MIME type\n\tbuffer.type = type;\n\tbuffer.typeFull = typeFull;\n\n\t// set the `.charset` property\n\tbuffer.charset = charset;\n\n\treturn buffer;\n}\n\nexport default dataUriToBuffer;\n","export function noop(): undefined {\n return undefined;\n}\n","import { noop } from '../../utils';\nimport { AssertionError } from '../../stub/assert';\n\nexport function typeIsObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport const rethrowAssertionErrorRejection: (e: any) => void =\n DEBUG ? e => {\n // Used throughout the reference implementation, as `.catch(rethrowAssertionErrorRejection)`, to ensure any errors\n // get shown. There are places in the spec where we do promise transformations and purposefully ignore or don't\n // expect any errors, but assertion errors are always problematic.\n if (e && e instanceof AssertionError) {\n setTimeout(() => {\n throw e;\n }, 0);\n }\n } : noop;\n\nexport function setFunctionName(fn: Function, name: string): void {\n try {\n Object.defineProperty(fn, 'name', {\n value: name,\n configurable: true\n });\n } catch {\n // This property is non-configurable in older browsers, so ignore if this throws.\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#browser_compatibility\n }\n}\n","import { rethrowAssertionErrorRejection } from './miscellaneous';\nimport assert from '../../stub/assert';\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\n\n// https://webidl.spec.whatwg.org/#a-new-promise\nexport function newPromise<T>(executor: (\n resolve: (value: T | PromiseLike<T>) => void,\n reject: (reason?: any) => void\n) => void): Promise<T> {\n return new originalPromise(executor);\n}\n\n// https://webidl.spec.whatwg.org/#a-promise-resolved-with\nexport function promiseResolvedWith<T>(value: T | PromiseLike<T>): Promise<T> {\n return newPromise(resolve => resolve(value));\n}\n\n// https://webidl.spec.whatwg.org/#a-promise-rejected-with\nexport function promiseRejectedWith<T = never>(reason: any): Promise<T> {\n return originalPromiseReject(reason);\n}\n\nexport function PerformPromiseThen<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n onFulfilled?: (value: T) => TResult1 | PromiseLike<TResult1>,\n onRejected?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<TResult1 | TResult2> {\n // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n // approximation.\n return originalPromiseThen.call(promise, onFulfilled, onRejected) as Promise<TResult1 | TResult2>;\n}\n\n// Bluebird logs a warning when a promise is created within a fulfillment handler, but then isn't returned\n// from that handler. To prevent this, return null instead of void from all handlers.\n// http://bluebirdjs.com/docs/warning-explanations.html#warning-a-promise-was-created-in-a-handler-but-was-not-returned-from-it\nexport function uponPromise<T>(\n promise: Promise<T>,\n onFulfilled?: (value: T) => null | PromiseLike<null>,\n onRejected?: (reason: any) => null | PromiseLike<null>): void {\n PerformPromiseThen(\n PerformPromiseThen(promise, onFulfilled, onRejected),\n undefined,\n rethrowAssertionErrorRejection\n );\n}\n\nexport function uponFulfillment<T>(promise: Promise<T>, onFulfilled: (value: T) => null | PromiseLike<null>): void {\n uponPromise(promise, onFulfilled);\n}\n\nexport function uponRejection(promise: Promise<unknown>, onRejected: (reason: any) => null | PromiseLike<null>): void {\n uponPromise(promise, undefined, onRejected);\n}\n\nexport function transformPromiseWith<T, TResult1 = T, TResult2 = never>(\n promise: Promise<T>,\n fulfillmentHandler?: (value: T) => TResult1 | PromiseLike<TResult1>,\n rejectionHandler?: (reason: any) => TResult2 | PromiseLike<TResult2>): Promise<TResult1 | TResult2> {\n return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\n\nexport function setPromiseIsHandledToTrue(promise: Promise<unknown>): void {\n PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\n\nlet _queueMicrotask: (callback: () => void) => void = callback => {\n if (typeof queueMicrotask === 'function') {\n _queueMicrotask = queueMicrotask;\n } else {\n const resolvedPromise = promiseResolvedWith(undefined);\n _queueMicrotask = cb => PerformPromiseThen(resolvedPromise, cb);\n }\n return _queueMicrotask(callback);\n};\n\nexport { _queueMicrotask as queueMicrotask };\n\nexport function reflectCall<T, A extends any[], R>(F: (this: T, ...fnArgs: A) => R, V: T, args: A): R {\n if (typeof F !== 'function') {\n throw new TypeError('Argument is not a function');\n }\n return Function.prototype.apply.call(F, V, args);\n}\n\nexport function promiseCall<T, A extends any[], R>(F: (this: T, ...fnArgs: A) => R | PromiseLike<R>,\n V: T,\n args: A): Promise<R> {\n assert(typeof F === 'function');\n assert(V !== undefined);\n assert(Array.isArray(args));\n try {\n return promiseResolvedWith(reflectCall(F, V, args));\n } catch (value) {\n return promiseRejectedWith(value);\n }\n}\n","import assert from '../stub/assert';\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\n\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n\ninterface Node<T> {\n _elements: T[];\n _next: Node<T> | undefined;\n}\n\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nexport class SimpleQueue<T> {\n private _front: Node<T>;\n private _back: Node<T>;\n private _cursor = 0;\n private _size = 0;\n\n constructor() {\n // _front and _back are always defined.\n this._front = {\n _elements: [],\n _next: undefined\n };\n this._back = this._front;\n // The cursor is used to avoid calling Array.shift().\n // It contains the index of the front element of the array inside the\n // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n this._cursor = 0;\n // When there is only one node, size === elements.length - cursor.\n this._size = 0;\n }\n\n get length(): number {\n return this._size;\n }\n\n // For exception safety, this method is structured in order:\n // 1. Read state\n // 2. Calculate required state mutations\n // 3. Perform state mutations\n push(element: T): void {\n const oldBack = this._back;\n let newBack = oldBack;\n assert(oldBack._next === undefined);\n if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n newBack = {\n _elements: [],\n _next: undefined\n };\n }\n\n // push() is the mutation most likely to throw an exception, so it\n // goes first.\n oldBack._elements.push(element);\n if (newBack !== oldBack) {\n this._back = newBack;\n oldBack._next = newBack;\n }\n ++this._size;\n }\n\n // Like push(), shift() follows the read -> calculate -> mutate pattern for\n // exception safety.\n shift(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const oldFront = this._front;\n let newFront = oldFront;\n const oldCursor = this._cursor;\n let newCursor = oldCursor + 1;\n\n const elements = oldFront._elements;\n const element = elements[oldCursor];\n\n if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n assert(elements.length === QUEUE_MAX_ARRAY_SIZE);\n assert(oldFront._next !== undefined);\n newFront = oldFront._next!;\n newCursor = 0;\n }\n\n // No mutations before this point.\n --this._size;\n this._cursor = newCursor;\n if (oldFront !== newFront) {\n this._front = newFront;\n }\n\n // Permit shifted element to be garbage collected.\n elements[oldCursor] = undefined!;\n\n return element;\n }\n\n // The tricky thing about forEach() is that it can be called\n // re-entrantly. The queue may be mutated inside the callback. It is easy to\n // see that push() within the callback has no negative effects since the end\n // of the queue is checked for on every iteration. If shift() is called\n // repeatedly within the callback then the next iteration may return an\n // element that has been removed. In this case the callback will be called\n // with undefined values until we either \"catch up\" with elements that still\n // exist or reach the back of the queue.\n forEach(callback: (element: T) => void): void {\n let i = this._cursor;\n let node = this._front;\n let elements = node._elements;\n while (i !== elements.length || node._next !== undefined) {\n if (i === elements.length) {\n assert(node._next !== undefined);\n assert(i === QUEUE_MAX_ARRAY_SIZE);\n node = node._next!;\n elements = node._elements;\n i = 0;\n if (elements.length === 0) {\n break;\n }\n }\n callback(elements[i]);\n ++i;\n }\n }\n\n // Return the element that would be returned if shift() was called now,\n // without modifying the queue.\n peek(): T {\n assert(this._size > 0); // must not be called on an empty queue\n\n const front = this._front;\n const cursor = this._cursor;\n return front._elements[cursor];\n }\n}\n","export const AbortSteps = Symbol('[[AbortSteps]]');\nexport const ErrorSteps = Symbol('[[ErrorSteps]]');\nexport const CancelSteps = Symbol('[[CancelSteps]]');\nexport const PullSteps = Symbol('[[PullSteps]]');\nexport const ReleaseSteps = Symbol('[[ReleaseSteps]]');\n","import assert from '../../stub/assert';\nimport { ReadableStream, ReadableStreamCancel, type ReadableStreamReader } from '../readable-stream';\nimport { newPromise, setPromiseIsHandledToTrue } from '../helpers/webidl';\nimport { ReleaseSteps } from '../abstract-ops/internal-methods';\n\nexport function ReadableStreamReaderGenericInitialize<R>(reader: ReadableStreamReader<R>, stream: ReadableStream<R>) {\n reader._ownerReadableStream = stream;\n stream._reader = reader;\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseInitialize(reader);\n } else if (stream._state === 'closed') {\n defaultReaderClosedPromiseInitializeAsResolved(reader);\n } else {\n assert(stream._state === 'errored');\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n }\n}\n\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\n\nexport function ReadableStreamReaderGenericCancel(reader: ReadableStreamReader<any>, reason: any): Promise<undefined> {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n return ReadableStreamCancel(stream, reason);\n}\n\nexport function ReadableStreamReaderGenericRelease(reader: ReadableStreamReader<any>) {\n const stream = reader._ownerReadableStream;\n assert(stream !== undefined);\n assert(stream._reader === reader);\n\n if (stream._state === 'readable') {\n defaultReaderClosedPromiseReject(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n } else {\n defaultReaderClosedPromiseResetToRejected(\n reader,\n new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n }\n\n stream._readableStreamController[ReleaseSteps]();\n\n stream._reader = undefined;\n reader._ownerReadableStream = undefined!;\n}\n\n// Helper functions for the readers.\n\nexport function readerLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nexport function defaultReaderClosedPromiseInitialize(reader: ReadableStreamReader<any>) {\n reader._closedPromise = newPromise((resolve, reject) => {\n reader._closedPromise_resolve = resolve;\n reader._closedPromise_reject = reject;\n });\n}\n\nexport function defaultReaderClosedPromiseInitializeAsRejected(reader: ReadableStreamReader<any>, reason: any) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseReject(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseInitializeAsResolved(reader: ReadableStreamReader<any>) {\n defaultReaderClosedPromiseInitialize(reader);\n defaultReaderClosedPromiseResolve(reader);\n}\n\nexport function defaultReaderClosedPromiseReject(reader: ReadableStreamReader<any>, reason: any) {\n if (reader._closedPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(reader._closedPromise);\n reader._closedPromise_reject(reason);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n\nexport function defaultReaderClosedPromiseResetToRejected(reader: ReadableStreamReader<any>, reason: any) {\n assert(reader._closedPromise_resolve === undefined);\n assert(reader._closedPromise_reject === undefined);\n\n defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\n\nexport function defaultReaderClosedPromiseResolve(reader: ReadableStreamReader<any>) {\n if (reader._closedPromise_resolve === undefined) {\n return;\n }\n\n reader._closedPromise_resolve(undefined);\n reader._closedPromise_resolve = undefined;\n reader._closedPromise_reject = undefined;\n}\n","/// <reference lib=\"es2015.core\" />\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite: typeof Number.isFinite = Number.isFinite || function (x) {\n return typeof x === 'number' && isFinite(x);\n};\n\nexport default NumberIsFinite;\n","/// <reference lib=\"es2015.core\" />\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc: typeof Math.trunc = Math.trunc || function (v) {\n return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\nexport default MathTrunc;\n","import NumberIsFinite from '../../stub/number-isfinite';\nimport MathTrunc from '../../stub/math-trunc';\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nexport function isDictionary(x: any): x is object | null {\n return typeof x === 'object' || typeof x === 'function';\n}\n\nexport function assertDictionary(obj: unknown,\n context: string): asserts obj is object | null | undefined {\n if (obj !== undefined && !isDictionary(obj)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport type AnyFunction = (...args: any[]) => any;\n\n// https://heycam.github.io/webidl/#idl-callback-functions\nexport function assertFunction(x: unknown, context: string): asserts x is AnyFunction {\n if (typeof x !== 'function') {\n throw new TypeError(`${context} is not a function.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-object\nexport function isObject(x: any): x is object {\n return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nexport function assertObject(x: unknown,\n context: string): asserts x is object {\n if (!isObject(x)) {\n throw new TypeError(`${context} is not an object.`);\n }\n}\n\nexport function assertRequiredArgument<T>(x: T | undefined,\n position: number,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n }\n}\n\nexport function assertRequiredField<T>(x: T | undefined,\n field: string,\n context: string): asserts x is T {\n if (x === undefined) {\n throw new TypeError(`${field} is required in '${context}'.`);\n }\n}\n\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nexport function convertUnrestrictedDouble(value: unknown): number {\n return Number(value);\n}\n\nfunction censorNegativeZero(x: number): number {\n return x === 0 ? 0 : x;\n}\n\nfunction integerPart(x: number): number {\n return censorNegativeZero(MathTrunc(x));\n}\n\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nexport function convertUnsignedLongLongWithEnforceRange(value: unknown, context: string): number {\n const lowerBound = 0;\n const upperBound = Number.MAX_SAFE_INTEGER;\n\n let x = Number(value);\n x = censorNegativeZero(x);\n\n if (!NumberIsFinite(x)) {\n throw new TypeError(`${context} is not a finite number`);\n }\n\n x = integerPart(x);\n\n if (x < lowerBound || x > upperBound) {\n throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n }\n\n if (!NumberIsFinite(x) || x === 0) {\n return 0;\n }\n\n // TODO Use BigInt if supported?\n // let xBigInt = BigInt(integerPart(x));\n // xBigInt = BigInt.asUintN(64, xBigInt);\n // return Number(xBigInt);\n\n return x;\n}\n","import { IsReadableStream, ReadableStream } from '../readable-stream';\n\nexport function assertReadableStream(x: unknown, context: string): asserts x is ReadableStream {\n if (!IsReadableStream(x)) {\n throw new TypeError(`${context} is not a ReadableStream.`);\n }\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, ReadableStream } from '../readable-stream';\nimport { setFunctionName, typeIsObject } from '../helpers/miscellaneous';\nimport { PullSteps } from '../abstract-ops/internal-methods';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\n\n/**\n * A result returned by {@link ReadableStreamDefaultReader.read}.\n *\n * @public\n */\nexport type ReadableStreamDefaultReadResult<T> = {\n done: false;\n value: T;\n} | {\n done: true;\n value?: undefined;\n}\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamDefaultReader<R>(stream: ReadableStream): ReadableStreamDefaultReader<R> {\n return new ReadableStreamDefaultReader(stream);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadRequest<R>(stream: ReadableStream<R>,\n readRequest: ReadRequest<R>): void {\n assert(IsReadableStreamDefaultReader(stream._reader));\n assert(stream._state === 'readable');\n\n (stream._reader! as ReadableStreamDefaultReader<R>)._readRequests.push(readRequest);\n}\n\nexport function ReadableStreamFulfillReadRequest<R>(stream: ReadableStream<R>, chunk: R | undefined, done: boolean) {\n const reader = stream._reader as ReadableStreamDefaultReader<R>;\n\n assert(reader._readRequests.length > 0);\n\n const readRequest = reader._readRequests.shift()!;\n if (done) {\n readRequest._closeSteps();\n } else {\n readRequest._chunkSteps(chunk!);\n }\n}\n\nexport function ReadableStreamGetNumReadRequests<R>(stream: ReadableStream<R>): number {\n return (stream._reader as ReadableStreamDefaultReader<R>)._readRequests.length;\n}\n\nexport function ReadableStreamHasDefaultReader(stream: ReadableStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamDefaultReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadRequest<R> {\n _chunkSteps(chunk: R): void;\n\n _closeSteps(): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamDefaultReader<R = any> {\n /** @internal */\n _ownerReadableStream!: ReadableStream<R>;\n /** @internal */\n _closedPromise!: Promise<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readRequests: SimpleQueue<ReadRequest<R>>;\n\n constructor(stream: ReadableStream<R>) {\n assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed,\n * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise<undefined> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise<void> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read(): Promise<ReadableStreamDefaultReadResult<R>> {\n if (!IsReadableStreamDefaultReader(this)) {\n return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult<R>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamDefaultReadResult<R>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest<R> = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamDefaultReaderRead(this, readRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamDefaultReader(this)) {\n throw defaultReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n ReadableStreamDefaultReaderRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nsetFunctionName(ReadableStreamDefaultReader.prototype.cancel, 'cancel');\nsetFunctionName(ReadableStreamDefaultReader.prototype.read, 'read');\nsetFunctionName(ReadableStreamDefaultReader.prototype.releaseLock, 'releaseLock');\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamDefaultReader<R = any>(x: any): x is ReadableStreamDefaultReader<R> {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultReader;\n}\n\nexport function ReadableStreamDefaultReaderRead<R>(reader: ReadableStreamDefaultReader<R>,\n readRequest: ReadRequest<R>): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n readRequest._closeSteps();\n } else if (stream._state === 'errored') {\n readRequest._errorSteps(stream._storedError);\n } else {\n assert(stream._state === 'readable');\n stream._readableStreamController[PullSteps](readRequest as ReadRequest<any>);\n }\n}\n\nexport function ReadableStreamDefaultReaderRelease(reader: ReadableStreamDefaultReader) {\n ReadableStreamReaderGenericRelease(reader);\n const e = new TypeError('Reader was released');\n ReadableStreamDefaultReaderErrorReadRequests(reader, e);\n}\n\nexport function ReadableStreamDefaultReaderErrorReadRequests(reader: ReadableStreamDefaultReader, e: any) {\n const readRequests = reader._readRequests;\n reader._readRequests = new SimpleQueue();\n readRequests.forEach(readRequest => {\n readRequest._errorSteps(e);\n });\n}\n\n// Helper functions for the ReadableStreamDefaultReader.\n\nfunction defaultReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n","/// <reference lib=\"es2018.asynciterable\" />\n\n/* eslint-disable @typescript-eslint/no-empty-function */\nexport const AsyncIteratorPrototype: AsyncIterable<any> =\n Object.getPrototypeOf(Object.getPrototypeOf(async function* (): AsyncIterableIterator<any> {}).prototype);\n","/// <reference lib=\"es2018.asynciterable\" />\n\nimport { ReadableStream } from '../readable-stream';\nimport {\n AcquireReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n type ReadableStreamDefaultReadResult,\n type ReadRequest\n} from './default-reader';\nimport { ReadableStreamReaderGenericCancel, ReadableStreamReaderGenericRelease } from './generic-reader';\nimport assert from '../../stub/assert';\nimport { AsyncIteratorPrototype } from '@@target/stub/async-iterator-prototype';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n queueMicrotask,\n transformPromiseWith\n} from '../helpers/webidl';\n\n/**\n * An async iterator returned by {@link ReadableStream.values}.\n *\n * @public\n */\nexport interface ReadableStreamAsyncIterator<R> extends AsyncIterableIterator<R> {\n next(): Promise<IteratorResult<R, undefined>>;\n\n return(value?: any): Promise<IteratorResult<any>>;\n}\n\nexport class ReadableStreamAsyncIteratorImpl<R> {\n private readonly _reader: ReadableStreamDefaultReader<R>;\n private readonly _preventCancel: boolean;\n private _ongoingPromise: Promise<ReadableStreamDefaultReadResult<R>> | undefined = undefined;\n private _isFinished = false;\n\n constructor(reader: ReadableStreamDefaultReader<R>, preventCancel: boolean) {\n this._reader = reader;\n this._preventCancel = preventCancel;\n }\n\n next(): Promise<ReadableStreamDefaultReadResult<R>> {\n const nextSteps = () => this._nextSteps();\n this._ongoingPromise = this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n nextSteps();\n return this._ongoingPromise;\n }\n\n return(value: any): Promise<ReadableStreamDefaultReadResult<any>> {\n const returnSteps = () => this._returnSteps(value);\n return this._ongoingPromise ?\n transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n returnSteps();\n }\n\n private _nextSteps(): Promise<ReadableStreamDefaultReadResult<R>> {\n if (this._isFinished) {\n return Promise.resolve({ value: undefined, done: true });\n }\n\n const reader = this._reader;\n assert(reader._ownerReadableStream !== undefined);\n\n let resolvePromise!: (result: ReadableStreamDefaultReadResult<R>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamDefaultReadResult<R>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readRequest: ReadRequest<R> = {\n _chunkSteps: chunk => {\n this._ongoingPromise = undefined;\n // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n // FIXME Is this a bug in the specification, or in the test?\n queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n },\n _closeSteps: () => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n resolvePromise({ value: undefined, done: true });\n },\n _errorSteps: reason => {\n this._ongoingPromise = undefined;\n this._isFinished = true;\n ReadableStreamReaderGenericRelease(reader);\n rejectPromise(reason);\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n return promise;\n }\n\n private _returnSteps(value: any): Promise<ReadableStreamDefaultReadResult<any>> {\n if (this._isFinished) {\n return Promise.resolve({ value, done: true });\n }\n this._isFinished = true;\n\n const reader = this._reader;\n assert(reader._ownerReadableStream !== undefined);\n assert(reader._readRequests.length === 0);\n\n if (!this._preventCancel) {\n const result = ReadableStreamReaderGenericCancel(reader, value);\n ReadableStreamReaderGenericRelease(reader);\n return transformPromiseWith(result, () => ({ value, done: true }));\n }\n\n ReadableStreamReaderGenericRelease(reader);\n return promiseResolvedWith({ value, done: true });\n }\n}\n\ninterface ReadableStreamAsyncIteratorInstance<R> extends ReadableStreamAsyncIterator<R> {\n /** @interal */\n _asyncIteratorImpl: ReadableStreamAsyncIteratorImpl<R>;\n\n next(): Promise<IteratorResult<R, undefined>>;\n\n return(value?: any): Promise<IteratorResult<any>>;\n}\n\nconst ReadableStreamAsyncIteratorPrototype: ReadableStreamAsyncIteratorInstance<any> = {\n next(this: ReadableStreamAsyncIteratorInstance<any>): Promise<ReadableStreamDefaultReadResult<any>> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n }\n return this._asyncIteratorImpl.next();\n },\n\n return(this: ReadableStreamAsyncIteratorInstance<any>, value: any): Promise<ReadableStreamDefaultReadResult<any>> {\n if (!IsReadableStreamAsyncIterator(this)) {\n return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n }\n return this._asyncIteratorImpl.return(value);\n }\n} as any;\nObject.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamAsyncIterator<R>(stream: ReadableStream<R>,\n preventCancel: boolean): ReadableStreamAsyncIterator<R> {\n const reader = AcquireReadableStreamDefaultReader<R>(stream);\n const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n const iterator: ReadableStreamAsyncIteratorInstance<R> = Object.create(ReadableStreamAsyncIteratorPrototype);\n iterator._asyncIteratorImpl = impl;\n return iterator;\n}\n\nfunction IsReadableStreamAsyncIterator<R = any>(x: any): x is ReadableStreamAsyncIterator<R> {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n return false;\n }\n\n try {\n // noinspection SuspiciousTypeOfGuard\n return (x as ReadableStreamAsyncIteratorInstance<any>)._asyncIteratorImpl instanceof\n ReadableStreamAsyncIteratorImpl;\n } catch {\n return false;\n }\n}\n\n// Helper functions for the ReadableStream.\n\nfunction streamAsyncIteratorBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n","/// <reference lib=\"es2015.core\" />\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN: typeof Number.isNaN = Number.isNaN || function (x) {\n // eslint-disable-next-line no-self-compare\n return x !== x;\n};\n\nexport default NumberIsNaN;\n","import { reflectCall } from 'lib/helpers/webidl';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport assert from '../../stub/assert';\n\ndeclare global {\n interface ArrayBuffer {\n readonly detached: boolean;\n\n transfer(): ArrayBuffer;\n }\n\n function structuredClone<T>(value: T, options: { transfer: ArrayBuffer[] }): T;\n}\n\nexport function CreateArrayFromList<T extends any[]>(elements: T): T {\n // We use arrays to represent lists, so this is basically a no-op.\n // Do a slice though just in case we happen to depend on the unique-ness.\n return elements.slice() as T;\n}\n\nexport function CopyDataBlockBytes(dest: ArrayBuffer,\n destOffset: number,\n src: ArrayBuffer,\n srcOffset: number,\n n: number) {\n new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n\nexport let TransferArrayBuffer = (O: ArrayBuffer): ArrayBuffer => {\n if (typeof O.transfer === 'function') {\n TransferArrayBuffer = buffer => buffer.transfer();\n } else if (typeof structuredClone === 'function') {\n TransferArrayBuffer = buffer => structuredClone(buffer, { transfer: [buffer] });\n } else {\n // Not implemented correctly\n TransferArrayBuffer = buffer => buffer;\n }\n return TransferArrayBuffer(O);\n};\n\nexport function CanTransferArrayBuffer(O: ArrayBuffer): boolean {\n return !IsDetachedBuffer(O);\n}\n\nexport let IsDetachedBuffer = (O: ArrayBuffer): boolean => {\n if (typeof O.detached === 'boolean') {\n IsDetachedBuffer = buffer => buffer.detached;\n } else {\n // Not implemented correctly\n IsDetachedBuffer = buffer => buffer.byteLength === 0;\n }\n return IsDetachedBuffer(O);\n};\n\nexport function ArrayBufferSlice(buffer: ArrayBuffer, begin: number, end: number): ArrayBuffer {\n // ArrayBuffer.prototype.slice is not available on IE10\n // https://www.caniuse.com/mdn-javascript_builtins_arraybuffer_slice\n if (buffer.slice) {\n return buffer.slice(begin, end);\n }\n const length = end - begin;\n const slice = new ArrayBuffer(length);\n CopyDataBlockBytes(slice, 0, buffer, begin, length);\n return slice;\n}\n\nexport type MethodName<T> = {\n [P in keyof T]: T[P] extends Function | undefined ? P : never;\n}[keyof T];\n\nexport function GetMethod<T, K extends MethodName<T>>(receiver: T, prop: K): T[K] | undefined {\n const func = receiver[prop];\n if (func === undefined || func === null) {\n return undefined;\n }\n if (typeof func !== 'function') {\n throw new TypeError(`${String(prop)} is not a function`);\n }\n return func;\n}\n\nexport interface SyncIteratorRecord<T> {\n iterator: Iterator<T>,\n nextMethod: Iterator<T>['next'],\n done: boolean;\n}\n\nexport interface AsyncIteratorRecord<T> {\n iterator: AsyncIterator<T>,\n nextMethod: AsyncIterator<T>['next'],\n done: boolean;\n}\n\nexport type SyncOrAsyncIteratorRecord<T> = SyncIteratorRecord<T> | AsyncIteratorRecord<T>;\n\nexport function CreateAsyncFromSyncIterator<T>(syncIteratorRecord: SyncIteratorRecord<T>): AsyncIteratorRecord<T> {\n // Instead of re-implementing CreateAsyncFromSyncIterator and %AsyncFromSyncIteratorPrototype%,\n // we use yield* inside an async generator function to achieve the same result.\n\n // Wrap the sync iterator inside a sync iterable, so we can use it with yield*.\n const syncIterable = {\n [Symbol.iterator]: () => syncIteratorRecord.iterator\n };\n // Create an async generator function and immediately invoke it.\n const asyncIterator = (async function* () {\n return yield* syncIterable;\n }());\n // Return as an async iterator record.\n const nextMethod = asyncIterator.next;\n return { iterator: asyncIterator, nextMethod, done: false };\n}\n\n// Aligns with core-js/modules/es.symbol.async-iterator.js\nexport const SymbolAsyncIterator: (typeof Symbol)['asyncIterator'] =\n Symbol.asyncIterator ??\n Symbol.for?.('Symbol.asyncIterator') ??\n '@@asyncIterator';\n\nexport type SyncOrAsyncIterable<T> = Iterable<T> | AsyncIterable<T>;\nexport type SyncOrAsyncIteratorMethod<T> = () => (Iterator<T> | AsyncIterator<T>);\n\nfunction GetIterator<T>(\n obj: SyncOrAsyncIterable<T>,\n hint: 'async',\n method?: SyncOrAsyncIteratorMethod<T>\n): AsyncIteratorRecord<T>;\nfunction GetIterator<T>(\n obj: Iterable<T>,\n hint: 'sync',\n method?: SyncOrAsyncIteratorMethod<T>\n): SyncIteratorRecord<T>;\nfunction GetIterator<T>(\n obj: SyncOrAsyncIterable<T>,\n hint = 'sync',\n method?: SyncOrAsyncIteratorMethod<T>\n): SyncOrAsyncIteratorRecord<T> {\n assert(hint === 'sync' || hint === 'async');\n if (method === undefined) {\n if (hint === 'async') {\n method = GetMethod(obj as AsyncIterable<T>, SymbolAsyncIterator);\n if (method === undefined) {\n const syncMethod = GetMethod(obj as Iterable<T>, Symbol.iterator);\n const syncIteratorRecord = GetIterator(obj as Iterable<T>, 'sync', syncMethod);\n return CreateAsyncFromSyncIterator(syncIteratorRecord);\n }\n } else {\n method = GetMethod(obj as Iterable<T>, Symbol.iterator);\n }\n }\n if (method === undefined) {\n throw new TypeError('The object is not iterable');\n }\n const iterator = reflectCall(method, obj, []);\n if (!typeIsObject(iterator)) {\n throw new TypeError('The iterator method must return an object');\n }\n const nextMethod = iterator.next;\n return { iterator, nextMethod, done: false } as SyncOrAsyncIteratorRecord<T>;\n}\n\nexport { GetIterator };\n\nexport function IteratorNext<T>(iteratorRecord: AsyncIteratorRecord<T>): Promise<IteratorResult<T>> {\n const result = reflectCall(iteratorRecord.nextMethod, iteratorRecord.iterator, []);\n if (!typeIsObject(result)) {\n throw new TypeError('The iterator.next() method must return an object');\n }\n return result;\n}\n\nexport function IteratorComplete<TReturn>(\n iterResult: IteratorResult<unknown, TReturn>\n): iterResult is IteratorReturnResult<TReturn> {\n assert(typeIsObject(iterResult));\n return Boolean(iterResult.done);\n}\n\nexport function IteratorValue<T>(iterResult: IteratorYieldResult<T>): T {\n assert(typeIsObject(iterResult));\n return iterResult.value;\n}\n","import NumberIsNaN from '../../stub/number-isnan';\nimport { ArrayBufferSlice } from './ecmascript';\nimport type { NonShared } from '../helpers/array-buffer-view';\n\nexport function IsNonNegativeNumber(v: number): boolean {\n if (typeof v !== 'number') {\n return false;\n }\n\n if (NumberIsNaN(v)) {\n return false;\n }\n\n if (v < 0) {\n return false;\n }\n\n return true;\n}\n\nexport function CloneAsUint8Array(O: NonShared<ArrayBufferView>): NonShared<Uint8Array> {\n const buffer = ArrayBufferSlice(O.buffer, O.byteOffset, O.byteOffset + O.byteLength);\n return new Uint8Array(buffer) as NonShared<Uint8Array>;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsNonNegativeNumber } from './miscellaneous';\n\nexport interface QueueContainer<T> {\n _queue: SimpleQueue<T>;\n _queueTotalSize: number;\n}\n\nexport interface QueuePair<T> {\n value: T;\n size: number;\n}\n\nexport function DequeueValue<T>(container: QueueContainer<QueuePair<T>>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.shift()!;\n container._queueTotalSize -= pair.size;\n if (container._queueTotalSize < 0) {\n container._queueTotalSize = 0;\n }\n\n return pair.value;\n}\n\nexport function EnqueueValueWithSize<T>(container: QueueContainer<QueuePair<T>>, value: T, size: number) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n if (!IsNonNegativeNumber(size) || size === Infinity) {\n throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n }\n\n container._queue.push({ value, size });\n container._queueTotalSize += size;\n}\n\nexport function PeekQueueValue<T>(container: QueueContainer<QueuePair<T>>): T {\n assert('_queue' in container && '_queueTotalSize' in container);\n assert(container._queue.length > 0);\n\n const pair = container._queue.peek();\n return pair.value;\n}\n\nexport function ResetQueue<T>(container: QueueContainer<T>) {\n assert('_queue' in container && '_queueTotalSize' in container);\n\n container._queue = new SimpleQueue<T>();\n container._queueTotalSize = 0;\n}\n","export type TypedArray =\n | Int8Array\n | Uint8Array\n | Uint8ClampedArray\n | Int16Array\n | Uint16Array\n | Int32Array\n | Uint32Array\n | Float32Array\n | Float64Array;\n\nexport type NonShared<T extends ArrayBufferView> = T & {\n buffer: ArrayBuffer;\n}\n\nexport interface ArrayBufferViewConstructor<T extends ArrayBufferView = ArrayBufferView> {\n new(buffer: ArrayBuffer, byteOffset: number, length?: number): T;\n\n readonly prototype: T;\n}\n\nexport interface TypedArrayConstructor<T extends TypedArray = TypedArray> extends ArrayBufferViewConstructor<T> {\n readonly BYTES_PER_ELEMENT: number;\n}\n\nexport type DataViewConstructor = ArrayBufferViewConstructor<DataView>;\n\nfunction isDataViewConstructor(ctor: Function): ctor is DataViewConstructor {\n return ctor === DataView;\n}\n\nexport function isDataView(view: ArrayBufferView): view is DataView {\n return isDataViewConstructor(view.constructor);\n}\n\nexport function arrayBufferViewElementSize<T extends ArrayBufferView>(ctor: ArrayBufferViewConstructor<T>): number {\n if (isDataViewConstructor(ctor)) {\n return 1;\n }\n return (ctor as unknown as TypedArrayConstructor).BYTES_PER_ELEMENT;\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport { ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n IsReadableStreamDefaultReader,\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n ReadableStreamHasDefaultReader,\n type ReadRequest\n} from './default-reader';\nimport {\n ReadableStreamAddReadIntoRequest,\n ReadableStreamFulfillReadIntoRequest,\n ReadableStreamGetNumReadIntoRequests,\n ReadableStreamHasBYOBReader,\n type ReadIntoRequest\n} from './byob-reader';\nimport NumberIsInteger from '../../stub/number-isinteger';\nimport {\n IsReadableStreamLocked,\n type ReadableByteStream,\n ReadableStreamClose,\n ReadableStreamError\n} from '../readable-stream';\nimport type { ValidatedUnderlyingByteSource } from './underlying-source';\nimport { setFunctionName, typeIsObject } from '../helpers/miscellaneous';\nimport {\n ArrayBufferSlice,\n CanTransferArrayBuffer,\n CopyDataBlockBytes,\n IsDetachedBuffer,\n TransferArrayBuffer\n} from '../abstract-ops/ecmascript';\nimport { CancelSteps, PullSteps, ReleaseSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\nimport { assertRequiredArgument, convertUnsignedLongLongWithEnforceRange } from '../validators/basic';\nimport {\n type ArrayBufferViewConstructor,\n arrayBufferViewElementSize,\n type NonShared,\n type TypedArrayConstructor\n} from '../helpers/array-buffer-view';\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nexport class ReadableStreamBYOBRequest {\n /** @internal */\n _associatedReadableByteStreamController!: ReadableByteStreamController;\n /** @internal */\n _view!: NonShared<ArrayBufferView> | null;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n */\n get view(): ArrayBufferView | null {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('view');\n }\n\n return this._view;\n }\n\n /**\n * Indicates to the associated readable byte stream that `bytesWritten` bytes were written into\n * {@link ReadableStreamBYOBRequest.view | view}, causing the result be surfaced to the consumer.\n *\n * After this method is called, {@link ReadableStreamBYOBRequest.view | view} will be transferred and no longer\n * modifiable.\n */\n respond(bytesWritten: number): void;\n respond(bytesWritten: number | undefined): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respond');\n }\n assertRequiredArgument(bytesWritten, 1, 'respond');\n bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(this._view!.buffer)) {\n throw new TypeError(`The BYOB request's buffer has been detached and so cannot be used as a response`);\n }\n\n assert(this._view!.byteLength > 0);\n assert(this._view!.buffer.byteLength > 0);\n\n ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n }\n\n /**\n * Indicates to the associated readable byte stream that instead of writing into\n * {@link ReadableStreamBYOBRequest.view | view}, the underlying byte source is providing a new `ArrayBufferView`,\n * which will be given to the consumer of the readable byte stream.\n *\n * After this method is called, `view` will be transferred and no longer modifiable.\n */\n respondWithNewView(view: ArrayBufferView): void;\n respondWithNewView(view: NonShared<ArrayBufferView>): void {\n if (!IsReadableStreamBYOBRequest(this)) {\n throw byobRequestBrandCheckException('respondWithNewView');\n }\n assertRequiredArgument(view, 1, 'respondWithNewView');\n\n if (!ArrayBuffer.isView(view)) {\n throw new TypeError('You can only respond with array buffer views');\n }\n\n if (this._associatedReadableByteStreamController === undefined) {\n throw new TypeError('This BYOB request has been invalidated');\n }\n\n if (IsDetachedBuffer(view.buffer)) {\n throw new TypeError('The given view\\'s buffer has been detached and so cannot be used as a response');\n }\n\n ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n respond: { enumerable: true },\n respondWithNewView: { enumerable: true },\n view: { enumerable: true }\n});\nsetFunctionName(ReadableStreamBYOBRequest.prototype.respond, 'respond');\nsetFunctionName(ReadableStreamBYOBRequest.prototype.respondWithNewView, 'respondWithNewView');\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBRequest.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBRequest',\n configurable: true\n });\n}\n\ninterface ByteQueueElement {\n buffer: ArrayBuffer;\n byteOffset: number;\n byteLength: number;\n}\n\ntype PullIntoDescriptor<T extends NonShared<ArrayBufferView> = NonShared<ArrayBufferView>> =\n DefaultPullIntoDescriptor\n | BYOBPullIntoDescriptor<T>;\n\ninterface DefaultPullIntoDescriptor {\n buffer: ArrayBuffer;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n minimumFill: number;\n elementSize: number;\n viewConstructor: TypedArrayConstructor<Uint8Array>;\n readerType: 'default' | 'none';\n}\n\ninterface BYOBPullIntoDescriptor<T extends NonShared<ArrayBufferView> = NonShared<ArrayBufferView>> {\n buffer: ArrayBuffer;\n bufferByteLength: number;\n byteOffset: number;\n byteLength: number;\n bytesFilled: number;\n minimumFill: number;\n elementSize: number;\n viewConstructor: ArrayBufferViewConstructor<T>;\n readerType: 'byob' | 'none';\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableByteStreamController {\n /** @internal */\n _controlledReadableByteStream!: ReadableByteStream;\n /** @internal */\n _queue!: SimpleQueue<ByteQueueElement>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise<void>;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise<void>;\n /** @internal */\n _autoAllocateChunkSize: number | undefined;\n /** @internal */\n _byobRequest: ReadableStreamBYOBRequest | null;\n /** @internal */\n _pendingPullIntos!: SimpleQueue<PullIntoDescriptor>;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the current BYOB pull request, or `null` if there isn't one.\n */\n get byobRequest(): ReadableStreamBYOBRequest | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('byobRequest');\n }\n\n return ReadableByteStreamControllerGetBYOBRequest(this);\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('desiredSize');\n }\n\n return ReadableByteStreamControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('close');\n }\n\n if (this._closeRequested) {\n throw new TypeError('The stream has already been closed; do not close it again!');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n }\n\n ReadableByteStreamControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk chunk in the controlled readable stream.\n * The chunk has to be an `ArrayBufferView` instance, or else a `TypeError` will be thrown.\n */\n enqueue(chunk: ArrayBufferView): void;\n enqueue(chunk: NonShared<ArrayBufferView>): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('enqueue');\n }\n\n assertRequiredArgument(chunk, 1, 'enqueue');\n if (!ArrayBuffer.isView(chunk)) {\n throw new TypeError('chunk must be an array buffer view');\n }\n if (chunk.byteLength === 0) {\n throw new TypeError('chunk must have non-zero byteLength');\n }\n if (chunk.buffer.byteLength === 0) {\n throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n }\n\n if (this._closeRequested) {\n throw new TypeError('stream is closed or draining');\n }\n\n const state = this._controlledReadableByteStream._state;\n if (state !== 'readable') {\n throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n }\n\n ReadableByteStreamControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableByteStreamController(this)) {\n throw byteStreamControllerBrandCheckException('error');\n }\n\n ReadableByteStreamControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise<void> {\n ReadableByteStreamControllerClearPendingPullIntos(this);\n\n ResetQueue(this);\n\n const result = this._cancelAlgorithm(reason);\n ReadableByteStreamControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest<NonShared<Uint8Array>>): void {\n const stream = this._controlledReadableByteStream;\n assert(ReadableStreamHasDefaultReader(stream));\n\n if (this._queueTotalSize > 0) {\n assert(ReadableStreamGetNumReadRequests(stream) === 0);\n\n ReadableByteStreamControllerFillReadRequestFromQueue(this, readRequest);\n return;\n }\n\n const autoAllocateChunkSize = this._autoAllocateChunkSize;\n if (autoAllocateChunkSize !== undefined) {\n let buffer: ArrayBuffer;\n try {\n buffer = new ArrayBuffer(autoAllocateChunkSize);\n } catch (bufferE) {\n readRequest._errorSteps(bufferE);\n return;\n }\n\n const pullIntoDescriptor: DefaultPullIntoDescriptor = {\n buffer,\n bufferByteLength: autoAllocateChunkSize,\n byteOffset: 0,\n byteLength: autoAllocateChunkSize,\n bytesFilled: 0,\n minimumFill: 1,\n elementSize: 1,\n viewConstructor: Uint8Array,\n readerType: 'default'\n };\n\n this._pendingPullIntos.push(pullIntoDescriptor);\n }\n\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableByteStreamControllerCallPullIfNeeded(this);\n }\n\n /** @internal */\n [ReleaseSteps](): void {\n if (this._pendingPullIntos.length > 0) {\n const firstPullInto = this._pendingPullIntos.peek();\n firstPullInto.readerType = 'none';\n\n this._pendingPullIntos = new SimpleQueue();\n this._pendingPullIntos.push(firstPullInto);\n }\n }\n}\n\nObject.defineProperties(ReadableByteStreamController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n byobRequest: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nsetFunctionName(ReadableByteStreamController.prototype.close, 'close');\nsetFunctionName(ReadableByteStreamController.prototype.enqueue, 'enqueue');\nsetFunctionName(ReadableByteStreamController.prototype.error, 'error');\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableByteStreamController.prototype, Symbol.toStringTag, {\n value: 'ReadableByteStreamController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableByteStreamController.\n\nexport function IsReadableByteStreamController(x: any): x is ReadableByteStreamController {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n return false;\n }\n\n return x instanceof ReadableByteStreamController;\n}\n\nfunction IsReadableStreamBYOBRequest(x: any): x is ReadableStreamBYOBRequest {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBRequest;\n}\n\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller: ReadableByteStreamController): void {\n const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n // TODO: Test controller argument\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n\n return null;\n },\n e => {\n ReadableByteStreamControllerError(controller, e);\n return null;\n }\n );\n}\n\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller: ReadableByteStreamController) {\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n controller._pendingPullIntos = new SimpleQueue();\n}\n\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor<T extends NonShared<ArrayBufferView>>(\n stream: ReadableByteStream,\n pullIntoDescriptor: PullIntoDescriptor<T>\n) {\n assert(stream._state !== 'errored');\n assert(pullIntoDescriptor.readerType !== 'none');\n\n let done = false;\n if (stream._state === 'closed') {\n assert(pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize === 0);\n done = true;\n }\n\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor<T>(pullIntoDescriptor);\n if (pullIntoDescriptor.readerType === 'default') {\n ReadableStreamFulfillReadRequest(stream, filledView as unknown as NonShared<Uint8Array>, done);\n } else {\n assert(pullIntoDescriptor.readerType === 'byob');\n ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n }\n}\n\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor<T extends NonShared<ArrayBufferView>>(\n pullIntoDescriptor: PullIntoDescriptor<T>\n): T {\n const bytesFilled = pullIntoDescriptor.bytesFilled;\n const elementSize = pullIntoDescriptor.elementSize;\n\n assert(bytesFilled <= pullIntoDescriptor.byteLength);\n assert(bytesFilled % elementSize === 0);\n\n return new pullIntoDescriptor.viewConstructor(\n pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize) as T;\n}\n\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBuffer,\n byteOffset: number,\n byteLength: number) {\n controller._queue.push({ buffer, byteOffset, byteLength });\n controller._queueTotalSize += byteLength;\n}\n\nfunction ReadableByteStreamControllerEnqueueClonedChunkToQueue(controller: ReadableByteStreamController,\n buffer: ArrayBuffer,\n byteOffset: number,\n byteLength: number) {\n let clonedChunk;\n try {\n clonedChunk = ArrayBufferSlice(buffer, byteOffset, byteOffset + byteLength);\n } catch (cloneE) {\n ReadableByteStreamControllerError(controller, cloneE);\n throw cloneE;\n }\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, clonedChunk, 0, byteLength);\n}\n\nfunction ReadableByteStreamControllerEnqueueDetachedPullIntoToQueue(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.readerType === 'none');\n if (firstDescriptor.bytesFilled > 0) {\n ReadableByteStreamControllerEnqueueClonedChunkToQueue(\n controller,\n firstDescriptor.buffer,\n firstDescriptor.byteOffset,\n firstDescriptor.bytesFilled\n );\n }\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n}\n\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller: ReadableByteStreamController,\n pullIntoDescriptor: PullIntoDescriptor) {\n const maxBytesToCopy = Math.min(controller._queueTotalSize,\n pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n\n let totalBytesToCopyRemaining = maxBytesToCopy;\n let ready = false;\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.minimumFill);\n const remainderBytes = maxBytesFilled % pullIntoDescriptor.elementSize;\n const maxAlignedBytes = maxBytesFilled - remainderBytes;\n // A descriptor for a read() request that is not yet filled up to its minimum length will stay at the head\n // of the queue, so the underlying source can keep filling it.\n if (maxAlignedBytes >= pullIntoDescriptor.minimumFill) {\n totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n ready = true;\n }\n\n const queue = controller._queue;\n\n while (totalBytesToCopyRemaining > 0) {\n const headOfQueue = queue.peek();\n\n const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n\n const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n\n if (headOfQueue.byteLength === bytesToCopy) {\n queue.shift();\n } else {\n headOfQueue.byteOffset += bytesToCopy;\n headOfQueue.byteLength -= bytesToCopy;\n }\n controller._queueTotalSize -= bytesToCopy;\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n\n totalBytesToCopyRemaining -= bytesToCopy;\n }\n\n if (!ready) {\n assert(controller._queueTotalSize === 0);\n assert(pullIntoDescriptor.bytesFilled > 0);\n assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.minimumFill);\n }\n\n return ready;\n}\n\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller: ReadableByteStreamController,\n size: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos.peek() === pullIntoDescriptor);\n assert(controller._byobRequest === null);\n pullIntoDescriptor.bytesFilled += size;\n}\n\nfunction ReadableByteStreamControllerHandleQueueDrain(controller: ReadableByteStreamController) {\n assert(controller._controlledReadableByteStream._state === 'readable');\n\n if (controller._queueTotalSize === 0 && controller._closeRequested) {\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(controller._controlledReadableByteStream);\n } else {\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n }\n}\n\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller: ReadableByteStreamController) {\n if (controller._byobRequest === null) {\n return;\n }\n\n controller._byobRequest._associatedReadableByteStreamController = undefined!;\n controller._byobRequest._view = null!;\n controller._byobRequest = null;\n}\n\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller: ReadableByteStreamController) {\n assert(!controller._closeRequested);\n\n while (controller._pendingPullIntos.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n\n const pullIntoDescriptor = controller._pendingPullIntos.peek();\n assert(pullIntoDescriptor.readerType !== 'none');\n\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n ReadableByteStreamControllerCommitPullIntoDescriptor(\n controller._controlledReadableByteStream,\n pullIntoDescriptor\n );\n }\n }\n}\n\nfunction ReadableByteStreamControllerProcessReadRequestsUsingQueue(controller: ReadableByteStreamController) {\n const reader = controller._controlledReadableByteStream._reader;\n assert(IsReadableStreamDefaultReader(reader));\n while (reader._readRequests.length > 0) {\n if (controller._queueTotalSize === 0) {\n return;\n }\n const readRequest = reader._readRequests.shift();\n ReadableByteStreamControllerFillReadRequestFromQueue(controller, readRequest);\n }\n}\n\nexport function ReadableByteStreamControllerPullInto<T extends NonShared<ArrayBufferView>>(\n controller: ReadableByteStreamController,\n view: T,\n min: number,\n readIntoRequest: ReadIntoRequest<T>\n): void {\n const stream = controller._controlledReadableByteStream;\n\n const ctor = view.constructor as ArrayBufferViewConstructor<T>;\n const elementSize = arrayBufferViewElementSize(ctor);\n\n const { byteOffset, byteLength } = view;\n\n const minimumFill = min * elementSize;\n assert(minimumFill >= elementSize && minimumFill <= byteLength);\n assert(minimumFill % elementSize === 0);\n\n let buffer: ArrayBuffer;\n try {\n buffer = TransferArrayBuffer(view.buffer);\n } catch (e) {\n readIntoRequest._errorSteps(e);\n return;\n }\n\n const pullIntoDescriptor: BYOBPullIntoDescriptor<T> = {\n buffer,\n bufferByteLength: buffer.byteLength,\n byteOffset,\n byteLength,\n bytesFilled: 0,\n minimumFill,\n elementSize,\n viewConstructor: ctor,\n readerType: 'byob'\n };\n\n if (controller._pendingPullIntos.length > 0) {\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n // - No change happens on desiredSize\n // - The source has already been notified of that there's at least 1 pending read(view)\n\n ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n return;\n }\n\n if (stream._state === 'closed') {\n const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n readIntoRequest._closeSteps(emptyView);\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor<T>(pullIntoDescriptor);\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n readIntoRequest._chunkSteps(filledView);\n return;\n }\n\n if (controller._closeRequested) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n readIntoRequest._errorSteps(e);\n return;\n }\n }\n\n controller._pendingPullIntos.push(pullIntoDescriptor);\n\n ReadableStreamAddReadIntoRequest<T>(stream, readIntoRequest);\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInClosedState(controller: ReadableByteStreamController,\n firstDescriptor: PullIntoDescriptor) {\n assert(firstDescriptor.bytesFilled % firstDescriptor.elementSize === 0);\n\n if (firstDescriptor.readerType === 'none') {\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n\n const stream = controller._controlledReadableByteStream;\n if (ReadableStreamHasBYOBReader(stream)) {\n while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n }\n }\n}\n\nfunction ReadableByteStreamControllerRespondInReadableState(controller: ReadableByteStreamController,\n bytesWritten: number,\n pullIntoDescriptor: PullIntoDescriptor) {\n assert(pullIntoDescriptor.bytesFilled + bytesWritten <= pullIntoDescriptor.byteLength);\n\n ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n\n if (pullIntoDescriptor.readerType === 'none') {\n ReadableByteStreamControllerEnqueueDetachedPullIntoToQueue(controller, pullIntoDescriptor);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n return;\n }\n\n if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.minimumFill) {\n // A descriptor for a read() request that is not yet filled up to its minimum length will stay at the head\n // of the queue, so the underlying source can keep filling it.\n return;\n }\n\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n\n const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n if (remainderSize > 0) {\n const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n ReadableByteStreamControllerEnqueueClonedChunkToQueue(\n controller,\n pullIntoDescriptor.buffer,\n end - remainderSize,\n remainderSize\n );\n }\n\n pullIntoDescriptor.bytesFilled -= remainderSize;\n ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\n\nfunction ReadableByteStreamControllerRespondInternal(controller: ReadableByteStreamController, bytesWritten: number) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n assert(CanTransferArrayBuffer(firstDescriptor.buffer));\n\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n\n const state = controller._controlledReadableByteStream._state;\n if (state === 'closed') {\n assert(bytesWritten === 0);\n ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n } else {\n assert(state === 'readable');\n assert(bytesWritten > 0);\n ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nfunction ReadableByteStreamControllerShiftPendingPullInto(\n controller: ReadableByteStreamController\n): PullIntoDescriptor {\n assert(controller._byobRequest === null);\n const descriptor = controller._pendingPullIntos.shift()!;\n return descriptor;\n}\n\nfunction ReadableByteStreamControllerShouldCallPull(controller: ReadableByteStreamController): boolean {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return false;\n }\n\n if (controller._closeRequested) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableByteStreamControllerClearAlgorithms(controller: ReadableByteStreamController) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\n\nexport function ReadableByteStreamControllerClose(controller: ReadableByteStreamController) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n if (controller._queueTotalSize > 0) {\n controller._closeRequested = true;\n\n return;\n }\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (firstPendingPullInto.bytesFilled % firstPendingPullInto.elementSize !== 0) {\n const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n ReadableByteStreamControllerError(controller, e);\n\n throw e;\n }\n }\n\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n}\n\nexport function ReadableByteStreamControllerEnqueue(\n controller: ReadableByteStreamController,\n chunk: NonShared<ArrayBufferView>\n) {\n const stream = controller._controlledReadableByteStream;\n\n if (controller._closeRequested || stream._state !== 'readable') {\n return;\n }\n\n const { buffer, byteOffset, byteLength } = chunk;\n if (IsDetachedBuffer(buffer)) {\n throw new TypeError('chunk\\'s buffer is detached and so cannot be enqueued');\n }\n const transferredBuffer = TransferArrayBuffer(buffer);\n\n if (controller._pendingPullIntos.length > 0) {\n const firstPendingPullInto = controller._pendingPullIntos.peek();\n if (IsDetachedBuffer(firstPendingPullInto.buffer)) {\n throw new TypeError(\n 'The BYOB request\\'s buffer has been detached and so cannot be filled with an enqueued chunk'\n );\n }\n ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n firstPendingPullInto.buffer = TransferArrayBuffer(firstPendingPullInto.buffer);\n if (firstPendingPullInto.readerType === 'none') {\n ReadableByteStreamControllerEnqueueDetachedPullIntoToQueue(controller, firstPendingPullInto);\n }\n }\n\n if (ReadableStreamHasDefaultReader(stream)) {\n ReadableByteStreamControllerProcessReadRequestsUsingQueue(controller);\n if (ReadableStreamGetNumReadRequests(stream) === 0) {\n assert(controller._pendingPullIntos.length === 0);\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n } else {\n assert(controller._queue.length === 0);\n if (controller._pendingPullIntos.length > 0) {\n assert(controller._pendingPullIntos.peek().readerType === 'default');\n ReadableByteStreamControllerShiftPendingPullInto(controller);\n }\n const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n ReadableStreamFulfillReadRequest(stream, transferredView as NonShared<Uint8Array>, false);\n }\n } else if (ReadableStreamHasBYOBReader(stream)) {\n // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n } else {\n assert(!IsReadableStreamLocked(stream));\n ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n }\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableByteStreamControllerError(controller: ReadableByteStreamController, e: any) {\n const stream = controller._controlledReadableByteStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ReadableByteStreamControllerClearPendingPullIntos(controller);\n\n ResetQueue(controller);\n ReadableByteStreamControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableByteStreamControllerFillReadRequestFromQueue(\n controller: ReadableByteStreamController,\n readRequest: ReadRequest<NonShared<Uint8Array>>\n) {\n assert(controller._queueTotalSize > 0);\n\n const entry = controller._queue.shift();\n controller._queueTotalSize -= entry.byteLength;\n\n ReadableByteStreamControllerHandleQueueDrain(controller);\n\n const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n readRequest._chunkSteps(view as NonShared<Uint8Array>);\n}\n\nexport function ReadableByteStreamControllerGetBYOBRequest(\n controller: ReadableByteStreamController\n): ReadableStreamBYOBRequest | null {\n if (controller._byobRequest === null && controller._pendingPullIntos.length > 0) {\n const firstDescriptor = controller._pendingPullIntos.peek();\n const view = new Uint8Array(firstDescriptor.buffer,\n firstDescriptor.byteOffset + firstDescriptor.bytesFilled,\n firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n\n const byobRequest: ReadableStreamBYOBRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n SetUpReadableStreamBYOBRequest(byobRequest, controller, view as NonShared<Uint8Array>);\n controller._byobRequest = byobRequest;\n }\n return controller._byobRequest;\n}\n\nfunction ReadableByteStreamControllerGetDesiredSize(controller: ReadableByteStreamController): number | null {\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nexport function ReadableByteStreamControllerRespond(controller: ReadableByteStreamController, bytesWritten: number) {\n assert(controller._pendingPullIntos.length > 0);\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (bytesWritten !== 0) {\n throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (bytesWritten === 0) {\n throw new TypeError('bytesWritten must be greater than 0 when calling respond() on a readable stream');\n }\n if (firstDescriptor.bytesFilled + bytesWritten > firstDescriptor.byteLength) {\n throw new RangeError('bytesWritten out of range');\n }\n }\n\n firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n\n ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\n\nexport function ReadableByteStreamControllerRespondWithNewView(controller: ReadableByteStreamController,\n view: NonShared<ArrayBufferView>) {\n assert(controller._pendingPullIntos.length > 0);\n assert(!IsDetachedBuffer(view.buffer));\n\n const firstDescriptor = controller._pendingPullIntos.peek();\n const state = controller._controlledReadableByteStream._state;\n\n if (state === 'closed') {\n if (view.byteLength !== 0) {\n throw new TypeError('The view\\'s length must be 0 when calling respondWithNewView() on a closed stream');\n }\n } else {\n assert(state === 'readable');\n if (view.byteLength === 0) {\n throw new TypeError(\n 'The view\\'s length must be greater than 0 when calling respondWithNewView() on a readable stream'\n );\n }\n }\n\n if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n throw new RangeError('The region specified by view does not match byobRequest');\n }\n if (firstDescriptor.bufferByteLength !== view.buffer.byteLength) {\n throw new RangeError('The buffer of view has different capacity than byobRequest');\n }\n if (firstDescriptor.bytesFilled + view.byteLength > firstDescriptor.byteLength) {\n throw new RangeError('The region specified by view is larger than byobRequest');\n }\n\n const viewByteLength = view.byteLength;\n firstDescriptor.buffer = TransferArrayBuffer(view.buffer);\n ReadableByteStreamControllerRespondInternal(controller, viewByteLength);\n}\n\nexport function SetUpReadableByteStreamController(stream: ReadableByteStream,\n controller: ReadableByteStreamController,\n startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n autoAllocateChunkSize: number | undefined) {\n assert(stream._readableStreamController === undefined);\n if (autoAllocateChunkSize !== undefined) {\n assert(NumberIsInteger(autoAllocateChunkSize));\n assert(autoAllocateChunkSize > 0);\n }\n\n controller._controlledReadableByteStream = stream;\n\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._byobRequest = null;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._closeRequested = false;\n controller._started = false;\n\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._autoAllocateChunkSize = autoAllocateChunkSize;\n\n controller._pendingPullIntos = new SimpleQueue();\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableByteStreamControllerCallPullIfNeeded(controller);\n return null;\n },\n r => {\n ReadableByteStreamControllerError(controller, r);\n return null;\n }\n );\n}\n\nexport function SetUpReadableByteStreamControllerFromUnderlyingSource(\n stream: ReadableByteStream,\n underlyingByteSource: ValidatedUnderlyingByteSource,\n highWaterMark: number\n) {\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void>;\n let pullAlgorithm: () => Promise<void>;\n let cancelAlgorithm: (reason: any) => Promise<void>;\n\n if (underlyingByteSource.start !== undefined) {\n startAlgorithm = () => underlyingByteSource.start!(controller);\n } else {\n startAlgorithm = () => undefined;\n }\n if (underlyingByteSource.pull !== undefined) {\n pullAlgorithm = () => underlyingByteSource.pull!(controller);\n } else {\n pullAlgorithm = () => promiseResolvedWith(undefined);\n }\n if (underlyingByteSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingByteSource.cancel!(reason);\n } else {\n cancelAlgorithm = () => promiseResolvedWith(undefined);\n }\n\n const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n if (autoAllocateChunkSize === 0) {\n throw new TypeError('autoAllocateChunkSize must be greater than 0');\n }\n\n SetUpReadableByteStreamController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize\n );\n}\n\nfunction SetUpReadableStreamBYOBRequest(request: ReadableStreamBYOBRequest,\n controller: ReadableByteStreamController,\n view: NonShared<ArrayBufferView>) {\n assert(IsReadableByteStreamController(controller));\n assert(typeof view === 'object');\n assert(ArrayBuffer.isView(view));\n assert(!IsDetachedBuffer(view.buffer));\n request._associatedReadableByteStreamController = controller;\n request._view = view;\n}\n\n// Helper functions for the ReadableStreamBYOBRequest.\n\nfunction byobRequestBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n\n// Helper functions for the ReadableByteStreamController.\n\nfunction byteStreamControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n","import { assertDictionary, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport type {\n ReadableStreamBYOBReaderReadOptions,\n ReadableStreamGetReaderOptions,\n ValidatedReadableStreamBYOBReaderReadOptions\n} from '../readable-stream/reader-options';\n\nexport function convertReaderOptions(options: ReadableStreamGetReaderOptions | null | undefined,\n context: string): ReadableStreamGetReaderOptions {\n assertDictionary(options, context);\n const mode = options?.mode;\n return {\n mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n };\n}\n\nfunction convertReadableStreamReaderMode(mode: string, context: string): 'byob' {\n mode = `${mode}`;\n if (mode !== 'byob') {\n throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n }\n return mode;\n}\n\nexport function convertByobReadOptions(\n options: ReadableStreamBYOBReaderReadOptions | null | undefined,\n context: string\n): ValidatedReadableStreamBYOBReaderReadOptions {\n assertDictionary(options, context);\n const min = options?.min ?? 1;\n return {\n min: convertUnsignedLongLongWithEnforceRange(\n min,\n `${context} has member 'min' that`\n )\n };\n}\n","import assert from '../../stub/assert';\nimport { SimpleQueue } from '../simple-queue';\nimport {\n ReadableStreamReaderGenericCancel,\n ReadableStreamReaderGenericInitialize,\n ReadableStreamReaderGenericRelease,\n readerLockException\n} from './generic-reader';\nimport { IsReadableStreamLocked, type ReadableByteStream, type ReadableStream } from '../readable-stream';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamController,\n ReadableByteStreamControllerPullInto\n} from './byte-stream-controller';\nimport { setFunctionName, typeIsObject } from '../helpers/miscellaneous';\nimport { newPromise, promiseRejectedWith } from '../helpers/webidl';\nimport { assertRequiredArgument } from '../validators/basic';\nimport { assertReadableStream } from '../validators/readable-stream';\nimport { IsDetachedBuffer } from '../abstract-ops/ecmascript';\nimport type {\n ReadableStreamBYOBReaderReadOptions,\n ValidatedReadableStreamBYOBReaderReadOptions\n} from './reader-options';\nimport { convertByobReadOptions } from '../validators/reader-options';\nimport { isDataView, type NonShared, type TypedArray } from '../helpers/array-buffer-view';\n\n/**\n * A result returned by {@link ReadableStreamBYOBReader.read}.\n *\n * @public\n */\nexport type ReadableStreamBYOBReadResult<T extends ArrayBufferView> = {\n done: false;\n value: T;\n} | {\n done: true;\n value: T | undefined;\n};\n\n// Abstract operations for the ReadableStream.\n\nexport function AcquireReadableStreamBYOBReader(stream: ReadableByteStream): ReadableStreamBYOBReader {\n return new ReadableStreamBYOBReader(stream as ReadableStream<Uint8Array>);\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamAddReadIntoRequest<T extends NonShared<ArrayBufferView>>(\n stream: ReadableByteStream,\n readIntoRequest: ReadIntoRequest<T>\n): void {\n assert(IsReadableStreamBYOBReader(stream._reader));\n assert(stream._state === 'readable' || stream._state === 'closed');\n\n (stream._reader! as ReadableStreamBYOBReader)._readIntoRequests.push(readIntoRequest);\n}\n\nexport function ReadableStreamFulfillReadIntoRequest(stream: ReadableByteStream,\n chunk: ArrayBufferView,\n done: boolean) {\n const reader = stream._reader as ReadableStreamBYOBReader;\n\n assert(reader._readIntoRequests.length > 0);\n\n const readIntoRequest = reader._readIntoRequests.shift()!;\n if (done) {\n readIntoRequest._closeSteps(chunk);\n } else {\n readIntoRequest._chunkSteps(chunk);\n }\n}\n\nexport function ReadableStreamGetNumReadIntoRequests(stream: ReadableByteStream): number {\n return (stream._reader as ReadableStreamBYOBReader)._readIntoRequests.length;\n}\n\nexport function ReadableStreamHasBYOBReader(stream: ReadableByteStream): boolean {\n const reader = stream._reader;\n\n if (reader === undefined) {\n return false;\n }\n\n if (!IsReadableStreamBYOBReader(reader)) {\n return false;\n }\n\n return true;\n}\n\n// Readers\n\nexport interface ReadIntoRequest<T extends NonShared<ArrayBufferView>> {\n _chunkSteps(chunk: T): void;\n\n _closeSteps(chunk: T | undefined): void;\n\n _errorSteps(e: any): void;\n}\n\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nexport class ReadableStreamBYOBReader {\n /** @internal */\n _ownerReadableStream!: ReadableByteStream;\n /** @internal */\n _closedPromise!: Promise<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _readIntoRequests: SimpleQueue<ReadIntoRequest<any>>;\n\n constructor(stream: ReadableStream<Uint8Array>) {\n assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n assertReadableStream(stream, 'First parameter');\n\n if (IsReadableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n }\n\n if (!IsReadableByteStreamController(stream._readableStreamController)) {\n throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n 'source');\n }\n\n ReadableStreamReaderGenericInitialize(this, stream);\n\n this._readIntoRequests = new SimpleQueue();\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the reader's lock is released before the stream finishes closing.\n */\n get closed(): Promise<undefined> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n */\n cancel(reason: any = undefined): Promise<void> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('cancel'));\n }\n\n return ReadableStreamReaderGenericCancel(this, reason);\n }\n\n /**\n * Attempts to reads bytes into view, and returns a promise resolved with the result.\n *\n * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n */\n read<T extends ArrayBufferView>(\n view: T,\n options?: ReadableStreamBYOBReaderReadOptions\n ): Promise<ReadableStreamBYOBReadResult<T>>;\n read<T extends NonShared<ArrayBufferView>>(\n view: T,\n rawOptions: ReadableStreamBYOBReaderReadOptions | null | undefined = {}\n ): Promise<ReadableStreamBYOBReadResult<T>> {\n if (!IsReadableStreamBYOBReader(this)) {\n return promiseRejectedWith(byobReaderBrandCheckException('read'));\n }\n\n if (!ArrayBuffer.isView(view)) {\n return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n }\n if (view.byteLength === 0) {\n return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n }\n if (view.buffer.byteLength === 0) {\n return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n }\n if (IsDetachedBuffer(view.buffer)) {\n return promiseRejectedWith(new TypeError('view\\'s buffer has been detached'));\n }\n\n let options: ValidatedReadableStreamBYOBReaderReadOptions;\n try {\n options = convertByobReadOptions(rawOptions, 'options');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n const min = options.min;\n if (min === 0) {\n return promiseRejectedWith(new TypeError('options.min must be greater than 0'));\n }\n if (!isDataView(view)) {\n if (min > (view as unknown as TypedArray).length) {\n return promiseRejectedWith(new RangeError('options.min must be less than or equal to view\\'s length'));\n }\n } else if (min > view.byteLength) {\n return promiseRejectedWith(new RangeError('options.min must be less than or equal to view\\'s byteLength'));\n }\n\n if (this._ownerReadableStream === undefined) {\n return promiseRejectedWith(readerLockException('read from'));\n }\n\n let resolvePromise!: (result: ReadableStreamBYOBReadResult<T>) => void;\n let rejectPromise!: (reason: any) => void;\n const promise = newPromise<ReadableStreamBYOBReadResult<T>>((resolve, reject) => {\n resolvePromise = resolve;\n rejectPromise = reject;\n });\n const readIntoRequest: ReadIntoRequest<T> = {\n _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n _errorSteps: e => rejectPromise(e)\n };\n ReadableStreamBYOBReaderRead(this, view, min, readIntoRequest);\n return promise;\n }\n\n /**\n * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n * from now on; otherwise, the reader will appear closed.\n *\n * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n * do so will throw a `TypeError` and leave the reader locked to the stream.\n */\n releaseLock(): void {\n if (!IsReadableStreamBYOBReader(this)) {\n throw byobReaderBrandCheckException('releaseLock');\n }\n\n if (this._ownerReadableStream === undefined) {\n return;\n }\n\n ReadableStreamBYOBReaderRelease(this);\n }\n}\n\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n cancel: { enumerable: true },\n read: { enumerable: true },\n releaseLock: { enumerable: true },\n closed: { enumerable: true }\n});\nsetFunctionName(ReadableStreamBYOBReader.prototype.cancel, 'cancel');\nsetFunctionName(ReadableStreamBYOBReader.prototype.read, 'read');\nsetFunctionName(ReadableStreamBYOBReader.prototype.releaseLock, 'releaseLock');\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamBYOBReader.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamBYOBReader',\n configurable: true\n });\n}\n\n// Abstract operations for the readers.\n\nexport function IsReadableStreamBYOBReader(x: any): x is ReadableStreamBYOBReader {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n return false;\n }\n\n return x instanceof ReadableStreamBYOBReader;\n}\n\nexport function ReadableStreamBYOBReaderRead<T extends NonShared<ArrayBufferView>>(\n reader: ReadableStreamBYOBReader,\n view: T,\n min: number,\n readIntoRequest: ReadIntoRequest<T>\n): void {\n const stream = reader._ownerReadableStream;\n\n assert(stream !== undefined);\n\n stream._disturbed = true;\n\n if (stream._state === 'errored') {\n readIntoRequest._errorSteps(stream._storedError);\n } else {\n ReadableByteStreamControllerPullInto(\n stream._readableStreamController as ReadableByteStreamController,\n view,\n min,\n readIntoRequest\n );\n }\n}\n\nexport function ReadableStreamBYOBReaderRelease(reader: ReadableStreamBYOBReader) {\n ReadableStreamReaderGenericRelease(reader);\n const e = new TypeError('Reader was released');\n ReadableStreamBYOBReaderErrorReadIntoRequests(reader, e);\n}\n\nexport function ReadableStreamBYOBReaderErrorReadIntoRequests(reader: ReadableStreamBYOBReader, e: any) {\n const readIntoRequests = reader._readIntoRequests;\n reader._readIntoRequests = new SimpleQueue();\n readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._errorSteps(e);\n });\n}\n\n// Helper functions for the ReadableStreamBYOBReader.\n\nfunction byobReaderBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n","import type { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport NumberIsNaN from '../../stub/number-isnan';\n\nexport function ExtractHighWaterMark(strategy: QueuingStrategy, defaultHWM: number): number {\n const { highWaterMark } = strategy;\n\n if (highWaterMark === undefined) {\n return defaultHWM;\n }\n\n if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n throw new RangeError('Invalid highWaterMark');\n }\n\n return highWaterMark;\n}\n\nexport function ExtractSizeAlgorithm<T>(strategy: QueuingStrategy<T>): QueuingStrategySizeCallback<T> {\n const { size } = strategy;\n\n if (!size) {\n return () => 1;\n }\n\n return size;\n}\n","import type { QueuingStrategy, QueuingStrategySizeCallback } from '../queuing-strategy';\nimport { assertDictionary, assertFunction, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategy<T>(init: QueuingStrategy<T> | null | undefined,\n context: string): QueuingStrategy<T> {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n const size = init?.size;\n return {\n highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n };\n}\n\nfunction convertQueuingStrategySize<T>(fn: QueuingStrategySizeCallback<T>,\n context: string): QueuingStrategySizeCallback<T> {\n assertFunction(fn, context);\n return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport type {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from '../writable-stream/underlying-sink';\nimport { WritableStreamDefaultController } from '../writable-stream';\n\nexport function convertUnderlyingSink<W>(original: UnderlyingSink<W> | null,\n context: string): ValidatedUnderlyingSink<W> {\n assertDictionary(original, context);\n const abort = original?.abort;\n const close = original?.close;\n const start = original?.start;\n const type = original?.type;\n const write = original?.write;\n return {\n abort: abort === undefined ?\n undefined :\n convertUnderlyingSinkAbortCallback(abort, original!, `${context} has member 'abort' that`),\n close: close === undefined ?\n undefined :\n convertUnderlyingSinkCloseCallback(close, original!, `${context} has member 'close' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSinkStartCallback(start, original!, `${context} has member 'start' that`),\n write: write === undefined ?\n undefined :\n convertUnderlyingSinkWriteCallback(write, original!, `${context} has member 'write' that`),\n type\n };\n}\n\nfunction convertUnderlyingSinkAbortCallback(\n fn: UnderlyingSinkAbortCallback,\n original: UnderlyingSink,\n context: string\n): (reason: any) => Promise<void> {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSinkCloseCallback(\n fn: UnderlyingSinkCloseCallback,\n original: UnderlyingSink,\n context: string\n): () => Promise<void> {\n assertFunction(fn, context);\n return () => promiseCall(fn, original, []);\n}\n\nfunction convertUnderlyingSinkStartCallback(\n fn: UnderlyingSinkStartCallback,\n original: UnderlyingSink,\n context: string\n): UnderlyingSinkStartCallback {\n assertFunction(fn, context);\n return (controller: WritableStreamDefaultController) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSinkWriteCallback<W>(\n fn: UnderlyingSinkWriteCallback<W>,\n original: UnderlyingSink<W>,\n context: string\n): (chunk: W, controller: WritableStreamDefaultController) => Promise<void> {\n assertFunction(fn, context);\n return (chunk: W, controller: WritableStreamDefaultController) => promiseCall(fn, original, [chunk, controller]);\n}\n","import { IsWritableStream, WritableStream } from '../writable-stream';\n\nexport function assertWritableStream(x: unknown, context: string): asserts x is WritableStream {\n if (!IsWritableStream(x)) {\n throw new TypeError(`${context} is not a WritableStream.`);\n }\n}\n","/**\n * A signal object that allows you to communicate with a request and abort it if required\n * via its associated `AbortController` object.\n *\n * @remarks\n * This interface is compatible with the `AbortSignal` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @public\n */\nexport interface AbortSignal {\n /**\n * Whether the request is aborted.\n */\n readonly aborted: boolean;\n\n /**\n * If aborted, returns the reason for aborting.\n */\n readonly reason?: any;\n\n /**\n * Add an event listener to be triggered when this signal becomes aborted.\n */\n addEventListener(type: 'abort', listener: () => void): void;\n\n /**\n * Remove an event listener that was previously added with {@link AbortSignal.addEventListener}.\n */\n removeEventListener(type: 'abort', listener: () => void): void;\n}\n\nexport function isAbortSignal(value: unknown): value is AbortSignal {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n try {\n return typeof (value as AbortSignal).aborted === 'boolean';\n } catch {\n // AbortSignal.prototype.aborted throws if its brand check fails\n return false;\n }\n}\n\n/**\n * A controller object that allows you to abort an `AbortSignal` when desired.\n *\n * @remarks\n * This interface is compatible with the `AbortController` interface defined in TypeScript's DOM types.\n * It is redefined here, so it can be polyfilled without a DOM, for example with\n * {@link https://www.npmjs.com/package/abortcontroller-polyfill | abortcontroller-polyfill} in a Node environment.\n *\n * @internal\n */\nexport interface AbortController {\n readonly signal: AbortSignal;\n\n abort(reason?: any): void;\n}\n\ninterface AbortControllerConstructor {\n new(): AbortController;\n}\n\nconst supportsAbortController = typeof (AbortController as any) === 'function';\n\n/**\n * Construct a new AbortController, if supported by the platform.\n *\n * @internal\n */\nexport function createAbortController(): AbortController | undefined {\n if (supportsAbortController) {\n return new (AbortController as AbortControllerConstructor)();\n }\n return undefined;\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponPromise\n} from './helpers/webidl';\nimport {\n DequeueValue,\n EnqueueValueWithSize,\n PeekQueueValue,\n type QueuePair,\n ResetQueue\n} from './abstract-ops/queue-with-sizes';\nimport type { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { SimpleQueue } from './simple-queue';\nimport { setFunctionName, typeIsObject } from './helpers/miscellaneous';\nimport { AbortSteps, ErrorSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport type {\n UnderlyingSink,\n UnderlyingSinkAbortCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n ValidatedUnderlyingSink\n} from './writable-stream/underlying-sink';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertUnderlyingSink } from './validators/underlying-sink';\nimport { assertWritableStream } from './validators/writable-stream';\nimport { type AbortController, type AbortSignal, createAbortController } from './abort-signal';\n\ntype WritableStreamState = 'writable' | 'closed' | 'erroring' | 'errored';\n\ninterface WriteOrCloseRequest {\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n}\n\ntype WriteRequest = WriteOrCloseRequest;\ntype CloseRequest = WriteOrCloseRequest;\n\ninterface PendingAbortRequest {\n _promise: Promise<undefined>;\n _resolve: (value?: undefined) => void;\n _reject: (reason: any) => void;\n _reason: any;\n _wasAlreadyErroring: boolean;\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream<W = any> {\n /** @internal */\n _state!: WritableStreamState;\n /** @internal */\n _storedError: any;\n /** @internal */\n _writer: WritableStreamDefaultWriter<W> | undefined;\n /** @internal */\n _writableStreamController!: WritableStreamDefaultController<W>;\n /** @internal */\n _writeRequests!: SimpleQueue<WriteRequest>;\n /** @internal */\n _inFlightWriteRequest: WriteRequest | undefined;\n /** @internal */\n _closeRequest: CloseRequest | undefined;\n /** @internal */\n _inFlightCloseRequest: CloseRequest | undefined;\n /** @internal */\n _pendingAbortRequest: PendingAbortRequest | undefined;\n /** @internal */\n _backpressure!: boolean;\n\n constructor(underlyingSink?: UnderlyingSink<W>, strategy?: QueuingStrategy<W>);\n constructor(rawUnderlyingSink: UnderlyingSink<W> | null | undefined = {},\n rawStrategy: QueuingStrategy<W> | null | undefined = {}) {\n if (rawUnderlyingSink === undefined) {\n rawUnderlyingSink = null;\n } else {\n assertObject(rawUnderlyingSink, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n\n InitializeWritableStream(this);\n\n const type = underlyingSink.type;\n if (type !== undefined) {\n throw new RangeError('Invalid type is specified');\n }\n\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n\n SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n }\n\n /**\n * Returns whether or not the writable stream is locked to a writer.\n */\n get locked(): boolean {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsWritableStreamLocked(this);\n }\n\n /**\n * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n * mechanism of the underlying sink.\n *\n * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n * the stream) if the stream is currently locked.\n */\n abort(reason: any = undefined): Promise<void> {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('abort'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n }\n\n return WritableStreamAbort(this, reason);\n }\n\n /**\n * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n *\n * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n */\n close() {\n if (!IsWritableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('close'));\n }\n\n if (IsWritableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(this)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamClose(this);\n }\n\n /**\n * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n * is locked, no other writer can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n */\n getWriter(): WritableStreamDefaultWriter<W> {\n if (!IsWritableStream(this)) {\n throw streamBrandCheckException('getWriter');\n }\n\n return AcquireWritableStreamDefaultWriter(this);\n }\n}\n\nObject.defineProperties(WritableStream.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n getWriter: { enumerable: true },\n locked: { enumerable: true }\n});\nsetFunctionName(WritableStream.prototype.abort, 'abort');\nsetFunctionName(WritableStream.prototype.close, 'close');\nsetFunctionName(WritableStream.prototype.getWriter, 'getWriter');\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStream.prototype, Symbol.toStringTag, {\n value: 'WritableStream',\n configurable: true\n });\n}\n\nexport {\n AcquireWritableStreamDefaultWriter,\n CreateWritableStream,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamDefaultControllerErrorIfNeeded,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite,\n WritableStreamCloseQueuedOrInFlight\n};\n\nexport type {\n UnderlyingSink,\n UnderlyingSinkStartCallback,\n UnderlyingSinkWriteCallback,\n UnderlyingSinkCloseCallback,\n UnderlyingSinkAbortCallback\n};\n\n// Abstract operations for the WritableStream.\n\nfunction AcquireWritableStreamDefaultWriter<W>(stream: WritableStream<W>): WritableStreamDefaultWriter<W> {\n return new WritableStreamDefaultWriter(stream);\n}\n\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream<W>(startAlgorithm: () => void | PromiseLike<void>,\n writeAlgorithm: (chunk: W) => Promise<void>,\n closeAlgorithm: () => Promise<void>,\n abortAlgorithm: (reason: any) => Promise<void>,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback<W> = () => 1) {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: WritableStream<W> = Object.create(WritableStream.prototype);\n InitializeWritableStream(stream);\n\n const controller: WritableStreamDefaultController<W> = Object.create(WritableStreamDefaultController.prototype);\n\n SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm,\n abortAlgorithm, highWaterMark, sizeAlgorithm);\n return stream;\n}\n\nfunction InitializeWritableStream<W>(stream: WritableStream<W>) {\n stream._state = 'writable';\n\n // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n // 'erroring' or 'errored'. May be set to an undefined value.\n stream._storedError = undefined;\n\n stream._writer = undefined;\n\n // Initialize to undefined first because the constructor of the controller checks this\n // variable to validate the caller.\n stream._writableStreamController = undefined!;\n\n // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n // producer without waiting for the queued writes to finish.\n stream._writeRequests = new SimpleQueue();\n\n // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n stream._inFlightWriteRequest = undefined;\n\n // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n // has been detached.\n stream._closeRequest = undefined;\n\n // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n stream._inFlightCloseRequest = undefined;\n\n // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n stream._pendingAbortRequest = undefined;\n\n // The backpressure signal set by the controller.\n stream._backpressure = false;\n}\n\nfunction IsWritableStream(x: unknown): x is WritableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n return false;\n }\n\n return x instanceof WritableStream;\n}\n\nfunction IsWritableStreamLocked(stream: WritableStream): boolean {\n assert(IsWritableStream(stream));\n\n if (stream._writer === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamAbort(stream: WritableStream, reason: any): Promise<undefined> {\n if (stream._state === 'closed' || stream._state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n stream._writableStreamController._abortReason = reason;\n stream._writableStreamController._abortController?.abort(reason);\n\n // TypeScript narrows the type of `stream._state` down to 'writable' | 'erroring',\n // but it doesn't know that signaling abort runs author code that might have changed the state.\n // Widen the type again by casting to WritableStreamState.\n const state = stream._state as WritableStreamState;\n\n if (state === 'closed' || state === 'errored') {\n return promiseResolvedWith(undefined);\n }\n if (stream._pendingAbortRequest !== undefined) {\n return stream._pendingAbortRequest._promise;\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n let wasAlreadyErroring = false;\n if (state === 'erroring') {\n wasAlreadyErroring = true;\n // reason will not be used, so don't keep a reference to it.\n reason = undefined;\n }\n\n const promise = newPromise<undefined>((resolve, reject) => {\n stream._pendingAbortRequest = {\n _promise: undefined!,\n _resolve: resolve,\n _reject: reject,\n _reason: reason,\n _wasAlreadyErroring: wasAlreadyErroring\n };\n });\n stream._pendingAbortRequest!._promise = promise;\n\n if (!wasAlreadyErroring) {\n WritableStreamStartErroring(stream, reason);\n }\n\n return promise;\n}\n\nfunction WritableStreamClose(stream: WritableStream<any>): Promise<undefined> {\n const state = stream._state;\n if (state === 'closed' || state === 'errored') {\n return promiseRejectedWith(new TypeError(\n `The stream (in ${state} state) is not in the writable state and cannot be closed`));\n }\n\n assert(state === 'writable' || state === 'erroring');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const promise = newPromise<undefined>((resolve, reject) => {\n const closeRequest: CloseRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._closeRequest = closeRequest;\n });\n\n const writer = stream._writer;\n if (writer !== undefined && stream._backpressure && state === 'writable') {\n defaultWriterReadyPromiseResolve(writer);\n }\n\n WritableStreamDefaultControllerClose(stream._writableStreamController);\n\n return promise;\n}\n\n// WritableStream API exposed for controllers.\n\nfunction WritableStreamAddWriteRequest(stream: WritableStream): Promise<undefined> {\n assert(IsWritableStreamLocked(stream));\n assert(stream._state === 'writable');\n\n const promise = newPromise<undefined>((resolve, reject) => {\n const writeRequest: WriteRequest = {\n _resolve: resolve,\n _reject: reject\n };\n\n stream._writeRequests.push(writeRequest);\n });\n\n return promise;\n}\n\nfunction WritableStreamDealWithRejection(stream: WritableStream, error: any) {\n const state = stream._state;\n\n if (state === 'writable') {\n WritableStreamStartErroring(stream, error);\n return;\n }\n\n assert(state === 'erroring');\n WritableStreamFinishErroring(stream);\n}\n\nfunction WritableStreamStartErroring(stream: WritableStream, reason: any) {\n assert(stream._storedError === undefined);\n assert(stream._state === 'writable');\n\n const controller = stream._writableStreamController;\n assert(controller !== undefined);\n\n stream._state = 'erroring';\n stream._storedError = reason;\n const writer = stream._writer;\n if (writer !== undefined) {\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n }\n\n if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n WritableStreamFinishErroring(stream);\n }\n}\n\nfunction WritableStreamFinishErroring(stream: WritableStream) {\n assert(stream._state === 'erroring');\n assert(!WritableStreamHasOperationMarkedInFlight(stream));\n stream._state = 'errored';\n stream._writableStreamController[ErrorSteps]();\n\n const storedError = stream._storedError;\n stream._writeRequests.forEach(writeRequest => {\n writeRequest._reject(storedError);\n });\n stream._writeRequests = new SimpleQueue();\n\n if (stream._pendingAbortRequest === undefined) {\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const abortRequest = stream._pendingAbortRequest;\n stream._pendingAbortRequest = undefined;\n\n if (abortRequest._wasAlreadyErroring) {\n abortRequest._reject(storedError);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return;\n }\n\n const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n uponPromise(\n promise,\n () => {\n abortRequest._resolve();\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return null;\n },\n (reason: any) => {\n abortRequest._reject(reason);\n WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n return null;\n });\n}\n\nfunction WritableStreamFinishInFlightWrite(stream: WritableStream) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._resolve(undefined);\n stream._inFlightWriteRequest = undefined;\n}\n\nfunction WritableStreamFinishInFlightWriteWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightWriteRequest !== undefined);\n stream._inFlightWriteRequest!._reject(error);\n stream._inFlightWriteRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n WritableStreamDealWithRejection(stream, error);\n}\n\nfunction WritableStreamFinishInFlightClose(stream: WritableStream) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._resolve(undefined);\n stream._inFlightCloseRequest = undefined;\n\n const state = stream._state;\n\n assert(state === 'writable' || state === 'erroring');\n\n if (state === 'erroring') {\n // The error was too late to do anything, so it is ignored.\n stream._storedError = undefined;\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._resolve();\n stream._pendingAbortRequest = undefined;\n }\n }\n\n stream._state = 'closed';\n\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseResolve(writer);\n }\n\n assert(stream._pendingAbortRequest === undefined);\n assert(stream._storedError === undefined);\n}\n\nfunction WritableStreamFinishInFlightCloseWithError(stream: WritableStream, error: any) {\n assert(stream._inFlightCloseRequest !== undefined);\n stream._inFlightCloseRequest!._reject(error);\n stream._inFlightCloseRequest = undefined;\n\n assert(stream._state === 'writable' || stream._state === 'erroring');\n\n // Never execute sink abort() after sink close().\n if (stream._pendingAbortRequest !== undefined) {\n stream._pendingAbortRequest._reject(error);\n stream._pendingAbortRequest = undefined;\n }\n WritableStreamDealWithRejection(stream, error);\n}\n\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream: WritableStream): boolean {\n if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamHasOperationMarkedInFlight(stream: WritableStream): boolean {\n if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n return false;\n }\n\n return true;\n}\n\nfunction WritableStreamMarkCloseRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightCloseRequest === undefined);\n assert(stream._closeRequest !== undefined);\n stream._inFlightCloseRequest = stream._closeRequest;\n stream._closeRequest = undefined;\n}\n\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream: WritableStream) {\n assert(stream._inFlightWriteRequest === undefined);\n assert(stream._writeRequests.length !== 0);\n stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\n\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream: WritableStream) {\n assert(stream._state === 'errored');\n if (stream._closeRequest !== undefined) {\n assert(stream._inFlightCloseRequest === undefined);\n\n stream._closeRequest._reject(stream._storedError);\n stream._closeRequest = undefined;\n }\n const writer = stream._writer;\n if (writer !== undefined) {\n defaultWriterClosedPromiseReject(writer, stream._storedError);\n }\n}\n\nfunction WritableStreamUpdateBackpressure(stream: WritableStream, backpressure: boolean) {\n assert(stream._state === 'writable');\n assert(!WritableStreamCloseQueuedOrInFlight(stream));\n\n const writer = stream._writer;\n if (writer !== undefined && backpressure !== stream._backpressure) {\n if (backpressure) {\n defaultWriterReadyPromiseReset(writer);\n } else {\n assert(!backpressure);\n\n defaultWriterReadyPromiseResolve(writer);\n }\n }\n\n stream._backpressure = backpressure;\n}\n\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nexport class WritableStreamDefaultWriter<W = any> {\n /** @internal */\n _ownerWritableStream: WritableStream<W>;\n /** @internal */\n _closedPromise!: Promise<undefined>;\n /** @internal */\n _closedPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _closedPromise_reject?: (reason: any) => void;\n /** @internal */\n _closedPromiseState!: 'pending' | 'resolved' | 'rejected';\n /** @internal */\n _readyPromise!: Promise<undefined>;\n /** @internal */\n _readyPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _readyPromise_reject?: (reason: any) => void;\n /** @internal */\n _readyPromiseState!: 'pending' | 'fulfilled' | 'rejected';\n\n constructor(stream: WritableStream<W>) {\n assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n assertWritableStream(stream, 'First parameter');\n\n if (IsWritableStreamLocked(stream)) {\n throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n }\n\n this._ownerWritableStream = stream;\n stream._writer = this;\n\n const state = stream._state;\n\n if (state === 'writable') {\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n defaultWriterReadyPromiseInitialize(this);\n } else {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n }\n\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'erroring') {\n defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n defaultWriterClosedPromiseInitialize(this);\n } else if (state === 'closed') {\n defaultWriterReadyPromiseInitializeAsResolved(this);\n defaultWriterClosedPromiseInitializeAsResolved(this);\n } else {\n assert(state === 'errored');\n\n const storedError = stream._storedError;\n defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n }\n }\n\n /**\n * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n * the writer’s lock is released before the stream finishes closing.\n */\n get closed(): Promise<undefined> {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n }\n\n return this._closedPromise;\n }\n\n /**\n * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n * A producer can use this information to determine the right amount of data to write.\n *\n * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n * the writer’s lock is released.\n */\n get desiredSize(): number | null {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('desiredSize');\n }\n\n if (this._ownerWritableStream === undefined) {\n throw defaultWriterLockException('desiredSize');\n }\n\n return WritableStreamDefaultWriterGetDesiredSize(this);\n }\n\n /**\n * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n *\n * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n * rejected.\n */\n get ready(): Promise<undefined> {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n }\n\n return this._readyPromise;\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n */\n abort(reason: any = undefined): Promise<void> {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('abort'));\n }\n\n return WritableStreamDefaultWriterAbort(this, reason);\n }\n\n /**\n * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n */\n close(): Promise<void> {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('close'));\n }\n\n if (WritableStreamCloseQueuedOrInFlight(stream)) {\n return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n }\n\n return WritableStreamDefaultWriterClose(this);\n }\n\n /**\n * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n * now on; otherwise, the writer will appear closed.\n *\n * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n * other producers from writing in an interleaved manner.\n */\n releaseLock(): void {\n if (!IsWritableStreamDefaultWriter(this)) {\n throw defaultWriterBrandCheckException('releaseLock');\n }\n\n const stream = this._ownerWritableStream;\n\n if (stream === undefined) {\n return;\n }\n\n assert(stream._writer !== undefined);\n\n WritableStreamDefaultWriterRelease(this);\n }\n\n /**\n * Writes the given chunk to the writable stream, by waiting until any previous writes have finished successfully,\n * and then sending the chunk to the underlying sink's {@link UnderlyingSink.write | write()} method. It will return\n * a promise that fulfills with undefined upon a successful write, or rejects if the write fails or stream becomes\n * errored before the writing process is initiated.\n *\n * Note that what \"success\" means is up to the underlying sink; it might indicate simply that the chunk has been\n * accepted, and not necessarily that it is safely saved to its ultimate destination.\n */\n write(chunk: W): Promise<void>;\n write(chunk: W = undefined!): Promise<void> {\n if (!IsWritableStreamDefaultWriter(this)) {\n return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n }\n\n if (this._ownerWritableStream === undefined) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n return WritableStreamDefaultWriterWrite(this, chunk);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n abort: { enumerable: true },\n close: { enumerable: true },\n releaseLock: { enumerable: true },\n write: { enumerable: true },\n closed: { enumerable: true },\n desiredSize: { enumerable: true },\n ready: { enumerable: true }\n});\nsetFunctionName(WritableStreamDefaultWriter.prototype.abort, 'abort');\nsetFunctionName(WritableStreamDefaultWriter.prototype.close, 'close');\nsetFunctionName(WritableStreamDefaultWriter.prototype.releaseLock, 'releaseLock');\nsetFunctionName(WritableStreamDefaultWriter.prototype.write, 'write');\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultWriter.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultWriter',\n configurable: true\n });\n}\n\n// Abstract operations for the WritableStreamDefaultWriter.\n\nfunction IsWritableStreamDefaultWriter<W = any>(x: any): x is WritableStreamDefaultWriter<W> {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultWriter;\n}\n\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultWriterAbort(writer: WritableStreamDefaultWriter, reason: any) {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamAbort(stream, reason);\n}\n\nfunction WritableStreamDefaultWriterClose(writer: WritableStreamDefaultWriter): Promise<undefined> {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n return WritableStreamClose(stream);\n}\n\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer: WritableStreamDefaultWriter): Promise<undefined> {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const state = stream._state;\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable' || state === 'erroring');\n\n return WritableStreamDefaultWriterClose(writer);\n}\n\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._closedPromiseState === 'pending') {\n defaultWriterClosedPromiseReject(writer, error);\n } else {\n defaultWriterClosedPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer: WritableStreamDefaultWriter, error: any) {\n if (writer._readyPromiseState === 'pending') {\n defaultWriterReadyPromiseReject(writer, error);\n } else {\n defaultWriterReadyPromiseResetToRejected(writer, error);\n }\n}\n\nfunction WritableStreamDefaultWriterGetDesiredSize(writer: WritableStreamDefaultWriter): number | null {\n const stream = writer._ownerWritableStream;\n const state = stream._state;\n\n if (state === 'errored' || state === 'erroring') {\n return null;\n }\n\n if (state === 'closed') {\n return 0;\n }\n\n return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\n\nfunction WritableStreamDefaultWriterRelease(writer: WritableStreamDefaultWriter) {\n const stream = writer._ownerWritableStream;\n assert(stream !== undefined);\n assert(stream._writer === writer);\n\n const releasedError = new TypeError(\n `Writer was released and can no longer be used to monitor the stream's closedness`);\n\n WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n\n // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n // rejected until afterwards. This means that simply testing state will not work.\n WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n\n stream._writer = undefined;\n writer._ownerWritableStream = undefined!;\n}\n\nfunction WritableStreamDefaultWriterWrite<W>(writer: WritableStreamDefaultWriter<W>, chunk: W): Promise<undefined> {\n const stream = writer._ownerWritableStream;\n\n assert(stream !== undefined);\n\n const controller = stream._writableStreamController;\n\n const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n\n if (stream !== writer._ownerWritableStream) {\n return promiseRejectedWith(defaultWriterLockException('write to'));\n }\n\n const state = stream._state;\n if (state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n }\n if (state === 'erroring') {\n return promiseRejectedWith(stream._storedError);\n }\n\n assert(state === 'writable');\n\n const promise = WritableStreamAddWriteRequest(stream);\n\n WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n\n return promise;\n}\n\nconst closeSentinel: unique symbol = {} as any;\n\ntype QueueRecord<W> = W | typeof closeSentinel;\n\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nexport class WritableStreamDefaultController<W = any> {\n /** @internal */\n _controlledWritableStream!: WritableStream<W>;\n /** @internal */\n _queue!: SimpleQueue<QueuePair<QueueRecord<W>>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _abortReason: any;\n /** @internal */\n _abortController: AbortController | undefined;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback<W>;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _writeAlgorithm!: (chunk: W) => Promise<void>;\n /** @internal */\n _closeAlgorithm!: () => Promise<void>;\n /** @internal */\n _abortAlgorithm!: (reason: any) => Promise<void>;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * The reason which was passed to `WritableStream.abort(reason)` when the stream was aborted.\n *\n * @deprecated\n * This property has been removed from the specification, see https://github.com/whatwg/streams/pull/1177.\n * Use {@link WritableStreamDefaultController.signal}'s `reason` instead.\n */\n get abortReason(): any {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('abortReason');\n }\n return this._abortReason;\n }\n\n /**\n * An `AbortSignal` that can be used to abort the pending write or close operation when the stream is aborted.\n */\n get signal(): AbortSignal {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('signal');\n }\n if (this._abortController === undefined) {\n // Older browsers or older Node versions may not support `AbortController` or `AbortSignal`.\n // We don't want to bundle and ship an `AbortController` polyfill together with our polyfill,\n // so instead we only implement support for `signal` if we find a global `AbortController` constructor.\n throw new TypeError('WritableStreamDefaultController.prototype.signal is not supported');\n }\n return this._abortController.signal;\n }\n\n /**\n * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n *\n * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n * normal lifecycle of interactions with the underlying sink.\n */\n error(e: any = undefined): void {\n if (!IsWritableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n const state = this._controlledWritableStream._state;\n if (state !== 'writable') {\n // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n // just treat it as a no-op.\n return;\n }\n\n WritableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [AbortSteps](reason: any): Promise<void> {\n const result = this._abortAlgorithm(reason);\n WritableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [ErrorSteps]() {\n ResetQueue(this);\n }\n}\n\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n abortReason: { enumerable: true },\n signal: { enumerable: true },\n error: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(WritableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'WritableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations implementing interface required by the WritableStream.\n\nfunction IsWritableStreamDefaultController(x: any): x is WritableStreamDefaultController<any> {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n return false;\n }\n\n return x instanceof WritableStreamDefaultController;\n}\n\nfunction SetUpWritableStreamDefaultController<W>(stream: WritableStream<W>,\n controller: WritableStreamDefaultController<W>,\n startAlgorithm: () => void | PromiseLike<void>,\n writeAlgorithm: (chunk: W) => Promise<void>,\n closeAlgorithm: () => Promise<void>,\n abortAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<W>) {\n assert(IsWritableStream(stream));\n assert(stream._writableStreamController === undefined);\n\n controller._controlledWritableStream = stream;\n stream._writableStreamController = controller;\n\n // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._abortReason = undefined;\n controller._abortController = createAbortController();\n controller._started = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._writeAlgorithm = writeAlgorithm;\n controller._closeAlgorithm = closeAlgorithm;\n controller._abortAlgorithm = abortAlgorithm;\n\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n\n const startResult = startAlgorithm();\n const startPromise = promiseResolvedWith(startResult);\n uponPromise(\n startPromise,\n () => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n return null;\n },\n r => {\n assert(stream._state === 'writable' || stream._state === 'erroring');\n controller._started = true;\n WritableStreamDealWithRejection(stream, r);\n return null;\n }\n );\n}\n\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink<W>(stream: WritableStream<W>,\n underlyingSink: ValidatedUnderlyingSink<W>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<W>) {\n const controller = Object.create(WritableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void>;\n let writeAlgorithm: (chunk: W) => Promise<void>;\n let closeAlgorithm: () => Promise<void>;\n let abortAlgorithm: (reason: any) => Promise<void>;\n\n if (underlyingSink.start !== undefined) {\n startAlgorithm = () => underlyingSink.start!(controller);\n } else {\n startAlgorithm = () => undefined;\n }\n if (underlyingSink.write !== undefined) {\n writeAlgorithm = chunk => underlyingSink.write!(chunk, controller);\n } else {\n writeAlgorithm = () => promiseResolvedWith(undefined);\n }\n if (underlyingSink.close !== undefined) {\n closeAlgorithm = () => underlyingSink.close!();\n } else {\n closeAlgorithm = () => promiseResolvedWith(undefined);\n }\n if (underlyingSink.abort !== undefined) {\n abortAlgorithm = reason => underlyingSink.abort!(reason);\n } else {\n abortAlgorithm = () => promiseResolvedWith(undefined);\n }\n\n SetUpWritableStreamDefaultController(\n stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller: WritableStreamDefaultController<any>) {\n controller._writeAlgorithm = undefined!;\n controller._closeAlgorithm = undefined!;\n controller._abortAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\nfunction WritableStreamDefaultControllerClose<W>(controller: WritableStreamDefaultController<W>) {\n EnqueueValueWithSize(controller, closeSentinel, 0);\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\nfunction WritableStreamDefaultControllerGetChunkSize<W>(controller: WritableStreamDefaultController<W>,\n chunk: W): number {\n try {\n return controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n return 1;\n }\n}\n\nfunction WritableStreamDefaultControllerGetDesiredSize(controller: WritableStreamDefaultController<any>): number {\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\nfunction WritableStreamDefaultControllerWrite<W>(controller: WritableStreamDefaultController<W>,\n chunk: W,\n chunkSize: number) {\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n return;\n }\n\n const stream = controller._controlledWritableStream;\n if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n\n// Abstract operations for the WritableStreamDefaultController.\n\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded<W>(controller: WritableStreamDefaultController<W>) {\n const stream = controller._controlledWritableStream;\n\n if (!controller._started) {\n return;\n }\n\n if (stream._inFlightWriteRequest !== undefined) {\n return;\n }\n\n const state = stream._state;\n assert(state !== 'closed' && state !== 'errored');\n if (state === 'erroring') {\n WritableStreamFinishErroring(stream);\n return;\n }\n\n if (controller._queue.length === 0) {\n return;\n }\n\n const value = PeekQueueValue(controller);\n if (value === closeSentinel) {\n WritableStreamDefaultControllerProcessClose(controller);\n } else {\n WritableStreamDefaultControllerProcessWrite(controller, value);\n }\n}\n\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller: WritableStreamDefaultController<any>, error: any) {\n if (controller._controlledWritableStream._state === 'writable') {\n WritableStreamDefaultControllerError(controller, error);\n }\n}\n\nfunction WritableStreamDefaultControllerProcessClose(controller: WritableStreamDefaultController<any>) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkCloseRequestInFlight(stream);\n\n DequeueValue(controller);\n assert(controller._queue.length === 0);\n\n const sinkClosePromise = controller._closeAlgorithm();\n WritableStreamDefaultControllerClearAlgorithms(controller);\n uponPromise(\n sinkClosePromise,\n () => {\n WritableStreamFinishInFlightClose(stream);\n return null;\n },\n reason => {\n WritableStreamFinishInFlightCloseWithError(stream, reason);\n return null;\n }\n );\n}\n\nfunction WritableStreamDefaultControllerProcessWrite<W>(controller: WritableStreamDefaultController<W>, chunk: W) {\n const stream = controller._controlledWritableStream;\n\n WritableStreamMarkFirstWriteRequestInFlight(stream);\n\n const sinkWritePromise = controller._writeAlgorithm(chunk);\n uponPromise(\n sinkWritePromise,\n () => {\n WritableStreamFinishInFlightWrite(stream);\n\n const state = stream._state;\n assert(state === 'writable' || state === 'erroring');\n\n DequeueValue(controller);\n\n if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n WritableStreamUpdateBackpressure(stream, backpressure);\n }\n\n WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n return null;\n },\n reason => {\n if (stream._state === 'writable') {\n WritableStreamDefaultControllerClearAlgorithms(controller);\n }\n WritableStreamFinishInFlightWriteWithError(stream, reason);\n return null;\n }\n );\n}\n\nfunction WritableStreamDefaultControllerGetBackpressure(controller: WritableStreamDefaultController<any>): boolean {\n const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n return desiredSize <= 0;\n}\n\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\n\nfunction WritableStreamDefaultControllerError(controller: WritableStreamDefaultController<any>, error: any) {\n const stream = controller._controlledWritableStream;\n\n assert(stream._state === 'writable');\n\n WritableStreamDefaultControllerClearAlgorithms(controller);\n WritableStreamStartErroring(stream, error);\n}\n\n// Helper functions for the WritableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n\n// Helper functions for the WritableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultController.prototype.${name} can only be used on a WritableStreamDefaultController`);\n}\n\n\n// Helper functions for the WritableStreamDefaultWriter.\n\nfunction defaultWriterBrandCheckException(name: string): TypeError {\n return new TypeError(\n `WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\n\nfunction defaultWriterLockException(name: string): TypeError {\n return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\n\nfunction defaultWriterClosedPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._closedPromise = newPromise((resolve, reject) => {\n writer._closedPromise_resolve = resolve;\n writer._closedPromise_reject = reject;\n writer._closedPromiseState = 'pending';\n });\n}\n\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseReject(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterClosedPromiseInitialize(writer);\n defaultWriterClosedPromiseResolve(writer);\n}\n\nfunction defaultWriterClosedPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._closedPromise_reject === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n setPromiseIsHandledToTrue(writer._closedPromise);\n writer._closedPromise_reject(reason);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'rejected';\n}\n\nfunction defaultWriterClosedPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._closedPromise_resolve === undefined);\n assert(writer._closedPromise_reject === undefined);\n assert(writer._closedPromiseState !== 'pending');\n\n defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterClosedPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._closedPromise_resolve === undefined) {\n return;\n }\n assert(writer._closedPromiseState === 'pending');\n\n writer._closedPromise_resolve(undefined);\n writer._closedPromise_resolve = undefined;\n writer._closedPromise_reject = undefined;\n writer._closedPromiseState = 'resolved';\n}\n\nfunction defaultWriterReadyPromiseInitialize(writer: WritableStreamDefaultWriter) {\n writer._readyPromise = newPromise((resolve, reject) => {\n writer._readyPromise_resolve = resolve;\n writer._readyPromise_reject = reject;\n });\n writer._readyPromiseState = 'pending';\n}\n\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer: WritableStreamDefaultWriter, reason: any) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseReject(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer: WritableStreamDefaultWriter) {\n defaultWriterReadyPromiseInitialize(writer);\n defaultWriterReadyPromiseResolve(writer);\n}\n\nfunction defaultWriterReadyPromiseReject(writer: WritableStreamDefaultWriter, reason: any) {\n if (writer._readyPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(writer._readyPromise);\n writer._readyPromise_reject(reason);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'rejected';\n}\n\nfunction defaultWriterReadyPromiseReset(writer: WritableStreamDefaultWriter) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitialize(writer);\n}\n\nfunction defaultWriterReadyPromiseResetToRejected(writer: WritableStreamDefaultWriter, reason: any) {\n assert(writer._readyPromise_resolve === undefined);\n assert(writer._readyPromise_reject === undefined);\n\n defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\n\nfunction defaultWriterReadyPromiseResolve(writer: WritableStreamDefaultWriter) {\n if (writer._readyPromise_resolve === undefined) {\n return;\n }\n\n writer._readyPromise_resolve(undefined);\n writer._readyPromise_resolve = undefined;\n writer._readyPromise_reject = undefined;\n writer._readyPromiseState = 'fulfilled';\n}\n","/// <reference lib=\"dom\" />\n\nfunction getGlobals(): typeof globalThis | undefined {\n if (typeof globalThis !== 'undefined') {\n return globalThis;\n } else if (typeof self !== 'undefined') {\n return self;\n } else if (typeof global !== 'undefined') {\n return global;\n }\n return undefined;\n}\n\nexport const globals = getGlobals();\n","/// <reference types=\"node\" />\nimport { globals } from '../globals';\nimport { setFunctionName } from '../lib/helpers/miscellaneous';\n\ninterface DOMException extends Error {\n name: string;\n message: string;\n}\n\ntype DOMExceptionConstructor = new (message?: string, name?: string) => DOMException;\n\nfunction isDOMExceptionConstructor(ctor: unknown): ctor is DOMExceptionConstructor {\n if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n return false;\n }\n if ((ctor as DOMExceptionConstructor).name !== 'DOMException') {\n return false;\n }\n try {\n new (ctor as DOMExceptionConstructor)();\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Support:\n * - Web browsers\n * - Node 18 and higher (https://github.com/nodejs/node/commit/e4b1fb5e6422c1ff151234bb9de792d45dd88d87)\n */\nfunction getFromGlobal(): DOMExceptionConstructor | undefined {\n const ctor = globals?.DOMException;\n return isDOMExceptionConstructor(ctor) ? ctor : undefined;\n}\n\n/**\n * Support:\n * - All platforms\n */\nfunction createPolyfill(): DOMExceptionConstructor {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const ctor = function DOMException(this: DOMException, message?: string, name?: string) {\n this.message = message || '';\n this.name = name || 'Error';\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n } as any;\n setFunctionName(ctor, 'DOMException');\n ctor.prototype = Object.create(Error.prototype);\n Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n return ctor;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nconst DOMException: DOMExceptionConstructor = getFromGlobal() || createPolyfill();\n\nexport { DOMException };\n","import { IsReadableStream, IsReadableStreamLocked, ReadableStream, ReadableStreamCancel } from '../readable-stream';\nimport { AcquireReadableStreamDefaultReader, ReadableStreamDefaultReaderRead } from './default-reader';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireWritableStreamDefaultWriter,\n IsWritableStream,\n IsWritableStreamLocked,\n WritableStream,\n WritableStreamAbort,\n WritableStreamCloseQueuedOrInFlight,\n WritableStreamDefaultWriterCloseWithErrorPropagation,\n WritableStreamDefaultWriterRelease,\n WritableStreamDefaultWriterWrite\n} from '../writable-stream';\nimport assert from '../../stub/assert';\nimport {\n newPromise,\n PerformPromiseThen,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n uponFulfillment,\n uponPromise,\n uponRejection\n} from '../helpers/webidl';\nimport { noop } from '../../utils';\nimport { type AbortSignal, isAbortSignal } from '../abort-signal';\nimport { DOMException } from '../../stub/dom-exception';\n\nexport function ReadableStreamPipeTo<T>(source: ReadableStream<T>,\n dest: WritableStream<T>,\n preventClose: boolean,\n preventAbort: boolean,\n preventCancel: boolean,\n signal: AbortSignal | undefined): Promise<undefined> {\n assert(IsReadableStream(source));\n assert(IsWritableStream(dest));\n assert(typeof preventClose === 'boolean');\n assert(typeof preventAbort === 'boolean');\n assert(typeof preventCancel === 'boolean');\n assert(signal === undefined || isAbortSignal(signal));\n assert(!IsReadableStreamLocked(source));\n assert(!IsWritableStreamLocked(dest));\n\n const reader = AcquireReadableStreamDefaultReader<T>(source);\n const writer = AcquireWritableStreamDefaultWriter<T>(dest);\n\n source._disturbed = true;\n\n let shuttingDown = false;\n\n // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n let currentWrite = promiseResolvedWith<void>(undefined);\n\n return newPromise((resolve, reject) => {\n let abortAlgorithm: () => void;\n if (signal !== undefined) {\n abortAlgorithm = () => {\n const error = signal.reason !== undefined ? signal.reason : new DOMException('Aborted', 'AbortError');\n const actions: Array<() => Promise<void>> = [];\n if (!preventAbort) {\n actions.push(() => {\n if (dest._state === 'writable') {\n return WritableStreamAbort(dest, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n if (!preventCancel) {\n actions.push(() => {\n if (source._state === 'readable') {\n return ReadableStreamCancel(source, error);\n }\n return promiseResolvedWith(undefined);\n });\n }\n shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n };\n\n if (signal.aborted) {\n abortAlgorithm();\n return;\n }\n\n signal.addEventListener('abort', abortAlgorithm);\n }\n\n // Using reader and writer, read all chunks from this and write them to dest\n // - Backpressure must be enforced\n // - Shutdown must stop all activity\n function pipeLoop() {\n return newPromise<void>((resolveLoop, rejectLoop) => {\n function next(done: boolean) {\n if (done) {\n resolveLoop();\n } else {\n // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n PerformPromiseThen(pipeStep(), next, rejectLoop);\n }\n }\n\n next(false);\n });\n }\n\n function pipeStep(): Promise<boolean> {\n if (shuttingDown) {\n return promiseResolvedWith(true);\n }\n\n return PerformPromiseThen(writer._readyPromise, () => {\n return newPromise<boolean>((resolveRead, rejectRead) => {\n ReadableStreamDefaultReaderRead(\n reader,\n {\n _chunkSteps: chunk => {\n currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n resolveRead(false);\n },\n _closeSteps: () => resolveRead(true),\n _errorSteps: rejectRead\n }\n );\n });\n });\n }\n\n // Errors must be propagated forward\n isOrBecomesErrored(source, reader._closedPromise, storedError => {\n if (!preventAbort) {\n shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n return null;\n });\n\n // Errors must be propagated backward\n isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n } else {\n shutdown(true, storedError);\n }\n return null;\n });\n\n // Closing must be propagated forward\n isOrBecomesClosed(source, reader._closedPromise, () => {\n if (!preventClose) {\n shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n } else {\n shutdown();\n }\n return null;\n });\n\n // Closing must be propagated backward\n if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n\n if (!preventCancel) {\n shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n } else {\n shutdown(true, destClosed);\n }\n }\n\n setPromiseIsHandledToTrue(pipeLoop());\n\n function waitForWritesToFinish(): Promise<void> {\n // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n // for that too.\n const oldCurrentWrite = currentWrite;\n return PerformPromiseThen(\n currentWrite,\n () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined\n );\n }\n\n function isOrBecomesErrored(stream: ReadableStream | WritableStream,\n promise: Promise<void>,\n action: (reason: any) => null) {\n if (stream._state === 'errored') {\n action(stream._storedError);\n } else {\n uponRejection(promise, action);\n }\n }\n\n function isOrBecomesClosed(stream: ReadableStream | WritableStream, promise: Promise<void>, action: () => null) {\n if (stream._state === 'closed') {\n action();\n } else {\n uponFulfillment(promise, action);\n }\n }\n\n function shutdownWithAction(action: () => Promise<unknown>, originalIsError?: boolean, originalError?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), doTheRest);\n } else {\n doTheRest();\n }\n\n function doTheRest(): null {\n uponPromise(\n action(),\n () => finalize(originalIsError, originalError),\n newError => finalize(true, newError)\n );\n return null;\n }\n }\n\n function shutdown(isError?: boolean, error?: any) {\n if (shuttingDown) {\n return;\n }\n shuttingDown = true;\n\n if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n } else {\n finalize(isError, error);\n }\n }\n\n function finalize(isError?: boolean, error?: any): null {\n WritableStreamDefaultWriterRelease(writer);\n ReadableStreamReaderGenericRelease(reader);\n\n if (signal !== undefined) {\n signal.removeEventListener('abort', abortAlgorithm);\n }\n if (isError) {\n reject(error);\n } else {\n resolve(undefined);\n }\n\n return null;\n }\n });\n}\n","import type { QueuingStrategySizeCallback } from '../queuing-strategy';\nimport assert from '../../stub/assert';\nimport { DequeueValue, EnqueueValueWithSize, type QueuePair, ResetQueue } from '../abstract-ops/queue-with-sizes';\nimport {\n ReadableStreamAddReadRequest,\n ReadableStreamFulfillReadRequest,\n ReadableStreamGetNumReadRequests,\n type ReadRequest\n} from './default-reader';\nimport { SimpleQueue } from '../simple-queue';\nimport { IsReadableStreamLocked, ReadableStream, ReadableStreamClose, ReadableStreamError } from '../readable-stream';\nimport type { ValidatedUnderlyingSource } from './underlying-source';\nimport { setFunctionName, typeIsObject } from '../helpers/miscellaneous';\nimport { CancelSteps, PullSteps, ReleaseSteps } from '../abstract-ops/internal-methods';\nimport { promiseResolvedWith, uponPromise } from '../helpers/webidl';\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nexport class ReadableStreamDefaultController<R> {\n /** @internal */\n _controlledReadableStream!: ReadableStream<R>;\n /** @internal */\n _queue!: SimpleQueue<QueuePair<R>>;\n /** @internal */\n _queueTotalSize!: number;\n /** @internal */\n _started!: boolean;\n /** @internal */\n _closeRequested!: boolean;\n /** @internal */\n _pullAgain!: boolean;\n /** @internal */\n _pulling !: boolean;\n /** @internal */\n _strategySizeAlgorithm!: QueuingStrategySizeCallback<R>;\n /** @internal */\n _strategyHWM!: number;\n /** @internal */\n _pullAlgorithm!: () => Promise<void>;\n /** @internal */\n _cancelAlgorithm!: (reason: any) => Promise<void>;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n */\n get desiredSize(): number | null {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n return ReadableStreamDefaultControllerGetDesiredSize(this);\n }\n\n /**\n * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n * the stream, but once those are read, the stream will become closed.\n */\n close(): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('close');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits close');\n }\n\n ReadableStreamDefaultControllerClose(this);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the controlled readable stream.\n */\n enqueue(chunk: R): void;\n enqueue(chunk: R = undefined!): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n throw new TypeError('The stream is not in a state that permits enqueue');\n }\n\n return ReadableStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n */\n error(e: any = undefined): void {\n if (!IsReadableStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n ReadableStreamDefaultControllerError(this, e);\n }\n\n /** @internal */\n [CancelSteps](reason: any): Promise<void> {\n ResetQueue(this);\n const result = this._cancelAlgorithm(reason);\n ReadableStreamDefaultControllerClearAlgorithms(this);\n return result;\n }\n\n /** @internal */\n [PullSteps](readRequest: ReadRequest<R>): void {\n const stream = this._controlledReadableStream;\n\n if (this._queue.length > 0) {\n const chunk = DequeueValue(this);\n\n if (this._closeRequested && this._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(this);\n ReadableStreamClose(stream);\n } else {\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n\n readRequest._chunkSteps(chunk);\n } else {\n ReadableStreamAddReadRequest(stream, readRequest);\n ReadableStreamDefaultControllerCallPullIfNeeded(this);\n }\n }\n\n /** @internal */\n [ReleaseSteps](): void {\n // Do nothing.\n }\n}\n\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n close: { enumerable: true },\n enqueue: { enumerable: true },\n error: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nsetFunctionName(ReadableStreamDefaultController.prototype.close, 'close');\nsetFunctionName(ReadableStreamDefaultController.prototype.enqueue, 'enqueue');\nsetFunctionName(ReadableStreamDefaultController.prototype.error, 'error');\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'ReadableStreamDefaultController',\n configurable: true\n });\n}\n\n// Abstract operations for the ReadableStreamDefaultController.\n\nfunction IsReadableStreamDefaultController<R = any>(x: any): x is ReadableStreamDefaultController<R> {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n return false;\n }\n\n return x instanceof ReadableStreamDefaultController;\n}\n\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller: ReadableStreamDefaultController<any>): void {\n const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n if (!shouldPull) {\n return;\n }\n\n if (controller._pulling) {\n controller._pullAgain = true;\n return;\n }\n\n assert(!controller._pullAgain);\n\n controller._pulling = true;\n\n const pullPromise = controller._pullAlgorithm();\n uponPromise(\n pullPromise,\n () => {\n controller._pulling = false;\n\n if (controller._pullAgain) {\n controller._pullAgain = false;\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n }\n\n return null;\n },\n e => {\n ReadableStreamDefaultControllerError(controller, e);\n return null;\n }\n );\n}\n\nfunction ReadableStreamDefaultControllerShouldCallPull(controller: ReadableStreamDefaultController<any>): boolean {\n const stream = controller._controlledReadableStream;\n\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return false;\n }\n\n if (!controller._started) {\n return false;\n }\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n return true;\n }\n\n const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n assert(desiredSize !== null);\n if (desiredSize! > 0) {\n return true;\n }\n\n return false;\n}\n\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller: ReadableStreamDefaultController<any>) {\n controller._pullAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n controller._strategySizeAlgorithm = undefined!;\n}\n\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\n\nexport function ReadableStreamDefaultControllerClose(controller: ReadableStreamDefaultController<any>) {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n controller._closeRequested = true;\n\n if (controller._queue.length === 0) {\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamClose(stream);\n }\n}\n\nexport function ReadableStreamDefaultControllerEnqueue<R>(\n controller: ReadableStreamDefaultController<R>,\n chunk: R\n): void {\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n return;\n }\n\n const stream = controller._controlledReadableStream;\n\n if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n ReadableStreamFulfillReadRequest(stream, chunk, false);\n } else {\n let chunkSize;\n try {\n chunkSize = controller._strategySizeAlgorithm(chunk);\n } catch (chunkSizeE) {\n ReadableStreamDefaultControllerError(controller, chunkSizeE);\n throw chunkSizeE;\n }\n\n try {\n EnqueueValueWithSize(controller, chunk, chunkSize);\n } catch (enqueueE) {\n ReadableStreamDefaultControllerError(controller, enqueueE);\n throw enqueueE;\n }\n }\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\n\nexport function ReadableStreamDefaultControllerError(controller: ReadableStreamDefaultController<any>, e: any) {\n const stream = controller._controlledReadableStream;\n\n if (stream._state !== 'readable') {\n return;\n }\n\n ResetQueue(controller);\n\n ReadableStreamDefaultControllerClearAlgorithms(controller);\n ReadableStreamError(stream, e);\n}\n\nexport function ReadableStreamDefaultControllerGetDesiredSize(\n controller: ReadableStreamDefaultController<any>\n): number | null {\n const state = controller._controlledReadableStream._state;\n\n if (state === 'errored') {\n return null;\n }\n if (state === 'closed') {\n return 0;\n }\n\n return controller._strategyHWM - controller._queueTotalSize;\n}\n\n// This is used in the implementation of TransformStream.\nexport function ReadableStreamDefaultControllerHasBackpressure(\n controller: ReadableStreamDefaultController<any>\n): boolean {\n if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n return false;\n }\n\n return true;\n}\n\nexport function ReadableStreamDefaultControllerCanCloseOrEnqueue(\n controller: ReadableStreamDefaultController<any>\n): boolean {\n const state = controller._controlledReadableStream._state;\n\n if (!controller._closeRequested && state === 'readable') {\n return true;\n }\n\n return false;\n}\n\nexport function SetUpReadableStreamDefaultController<R>(stream: ReadableStream<R>,\n controller: ReadableStreamDefaultController<R>,\n startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<R>) {\n assert(stream._readableStreamController === undefined);\n\n controller._controlledReadableStream = stream;\n\n controller._queue = undefined!;\n controller._queueTotalSize = undefined!;\n ResetQueue(controller);\n\n controller._started = false;\n controller._closeRequested = false;\n controller._pullAgain = false;\n controller._pulling = false;\n\n controller._strategySizeAlgorithm = sizeAlgorithm;\n controller._strategyHWM = highWaterMark;\n\n controller._pullAlgorithm = pullAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n stream._readableStreamController = controller;\n\n const startResult = startAlgorithm();\n uponPromise(\n promiseResolvedWith(startResult),\n () => {\n controller._started = true;\n\n assert(!controller._pulling);\n assert(!controller._pullAgain);\n\n ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n return null;\n },\n r => {\n ReadableStreamDefaultControllerError(controller, r);\n return null;\n }\n );\n}\n\nexport function SetUpReadableStreamDefaultControllerFromUnderlyingSource<R>(\n stream: ReadableStream<R>,\n underlyingSource: ValidatedUnderlyingSource<R>,\n highWaterMark: number,\n sizeAlgorithm: QueuingStrategySizeCallback<R>\n) {\n const controller: ReadableStreamDefaultController<R> = Object.create(ReadableStreamDefaultController.prototype);\n\n let startAlgorithm: () => void | PromiseLike<void>;\n let pullAlgorithm: () => Promise<void>;\n let cancelAlgorithm: (reason: any) => Promise<void>;\n\n if (underlyingSource.start !== undefined) {\n startAlgorithm = () => underlyingSource.start!(controller);\n } else {\n startAlgorithm = () => undefined;\n }\n if (underlyingSource.pull !== undefined) {\n pullAlgorithm = () => underlyingSource.pull!(controller);\n } else {\n pullAlgorithm = () => promiseResolvedWith(undefined);\n }\n if (underlyingSource.cancel !== undefined) {\n cancelAlgorithm = reason => underlyingSource.cancel!(reason);\n } else {\n cancelAlgorithm = () => promiseResolvedWith(undefined);\n }\n\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n}\n\n// Helper functions for the ReadableStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n","import {\n CreateReadableByteStream,\n CreateReadableStream,\n type DefaultReadableStream,\n IsReadableStream,\n type ReadableByteStream,\n ReadableStream,\n ReadableStreamCancel,\n type ReadableStreamReader\n} from '../readable-stream';\nimport { ReadableStreamReaderGenericRelease } from './generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReaderRead,\n type ReadRequest\n} from './default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReaderRead,\n type ReadIntoRequest\n} from './byob-reader';\nimport assert from '../../stub/assert';\nimport { newPromise, promiseResolvedWith, queueMicrotask, uponRejection } from '../helpers/webidl';\nimport {\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError\n} from './default-controller';\nimport {\n IsReadableByteStreamController,\n ReadableByteStreamControllerClose,\n ReadableByteStreamControllerEnqueue,\n ReadableByteStreamControllerError,\n ReadableByteStreamControllerGetBYOBRequest,\n ReadableByteStreamControllerRespond,\n ReadableByteStreamControllerRespondWithNewView\n} from './byte-stream-controller';\nimport { CreateArrayFromList } from '../abstract-ops/ecmascript';\nimport { CloneAsUint8Array } from '../abstract-ops/miscellaneous';\nimport type { NonShared } from '../helpers/array-buffer-view';\n\nexport function ReadableStreamTee<R>(stream: ReadableStream<R>,\n cloneForBranch2: boolean): [ReadableStream<R>, ReadableStream<R>] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n if (IsReadableByteStreamController(stream._readableStreamController)) {\n return ReadableByteStreamTee(stream as unknown as ReadableByteStream) as\n unknown as [ReadableStream<R>, ReadableStream<R>];\n }\n return ReadableStreamDefaultTee(stream, cloneForBranch2);\n}\n\nexport function ReadableStreamDefaultTee<R>(\n stream: ReadableStream<R>,\n cloneForBranch2: boolean\n): [DefaultReadableStream<R>, DefaultReadableStream<R>] {\n assert(IsReadableStream(stream));\n assert(typeof cloneForBranch2 === 'boolean');\n\n const reader = AcquireReadableStreamDefaultReader<R>(stream);\n\n let reading = false;\n let readAgain = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: DefaultReadableStream<R>;\n let branch2: DefaultReadableStream<R>;\n\n let resolveCancelPromise: (value: undefined | Promise<undefined>) => void;\n const cancelPromise = newPromise<undefined>(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function pullAlgorithm(): Promise<void> {\n if (reading) {\n readAgain = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const readRequest: ReadRequest<R> = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgain = false;\n const chunk1 = chunk;\n const chunk2 = chunk;\n\n // There is no way to access the cloning code right now in the reference implementation.\n // If we add one then we'll need an implementation for serializable objects.\n // if (!canceled2 && cloneForBranch2) {\n // chunk2 = StructuredDeserialize(StructuredSerialize(chunk2));\n // }\n\n if (!canceled1) {\n ReadableStreamDefaultControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgain) {\n pullAlgorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableStreamDefaultControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableStreamDefaultControllerClose(branch2._readableStreamController);\n }\n\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise<void> {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise<void> {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm() {\n // do nothing\n }\n\n branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n\n uponRejection(reader._closedPromise, (r: any) => {\n ReadableStreamDefaultControllerError(branch1._readableStreamController, r);\n ReadableStreamDefaultControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n return null;\n });\n\n return [branch1, branch2];\n}\n\nexport function ReadableByteStreamTee(stream: ReadableByteStream): [ReadableByteStream, ReadableByteStream] {\n assert(IsReadableStream(stream));\n assert(IsReadableByteStreamController(stream._readableStreamController));\n\n let reader: ReadableStreamReader<NonShared<Uint8Array>> = AcquireReadableStreamDefaultReader(stream);\n let reading = false;\n let readAgainForBranch1 = false;\n let readAgainForBranch2 = false;\n let canceled1 = false;\n let canceled2 = false;\n let reason1: any;\n let reason2: any;\n let branch1: ReadableByteStream;\n let branch2: ReadableByteStream;\n\n let resolveCancelPromise: (value: undefined | Promise<undefined>) => void;\n const cancelPromise = newPromise<void>(resolve => {\n resolveCancelPromise = resolve;\n });\n\n function forwardReaderError(thisReader: ReadableStreamReader<NonShared<Uint8Array>>) {\n uponRejection(thisReader._closedPromise, r => {\n if (thisReader !== reader) {\n return null;\n }\n ReadableByteStreamControllerError(branch1._readableStreamController, r);\n ReadableByteStreamControllerError(branch2._readableStreamController, r);\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n return null;\n });\n }\n\n function pullWithDefaultReader() {\n if (IsReadableStreamBYOBReader(reader)) {\n assert(reader._readIntoRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamDefaultReader(stream);\n forwardReaderError(reader);\n }\n\n const readRequest: ReadRequest<NonShared<Uint8Array>> = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const chunk1 = chunk;\n let chunk2 = chunk;\n if (!canceled1 && !canceled2) {\n try {\n chunk2 = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(branch1._readableStreamController, cloneE);\n ReadableByteStreamControllerError(branch2._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n }\n\n if (!canceled1) {\n ReadableByteStreamControllerEnqueue(branch1._readableStreamController, chunk1);\n }\n if (!canceled2) {\n ReadableByteStreamControllerEnqueue(branch2._readableStreamController, chunk2);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: () => {\n reading = false;\n if (!canceled1) {\n ReadableByteStreamControllerClose(branch1._readableStreamController);\n }\n if (!canceled2) {\n ReadableByteStreamControllerClose(branch2._readableStreamController);\n }\n if (branch1._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch1._readableStreamController, 0);\n }\n if (branch2._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(branch2._readableStreamController, 0);\n }\n if (!canceled1 || !canceled2) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamDefaultReaderRead(reader, readRequest);\n }\n\n function pullWithBYOBReader(view: NonShared<ArrayBufferView>, forBranch2: boolean) {\n if (IsReadableStreamDefaultReader<NonShared<Uint8Array>>(reader)) {\n assert(reader._readRequests.length === 0);\n ReadableStreamReaderGenericRelease(reader);\n\n reader = AcquireReadableStreamBYOBReader(stream);\n forwardReaderError(reader);\n }\n\n const byobBranch = forBranch2 ? branch2 : branch1;\n const otherBranch = forBranch2 ? branch1 : branch2;\n\n const readIntoRequest: ReadIntoRequest<NonShared<ArrayBufferView>> = {\n _chunkSteps: chunk => {\n // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n // successful synchronously-available reads get ahead of asynchronously-available errors.\n queueMicrotask(() => {\n readAgainForBranch1 = false;\n readAgainForBranch2 = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!otherCanceled) {\n let clonedChunk;\n try {\n clonedChunk = CloneAsUint8Array(chunk);\n } catch (cloneE) {\n ReadableByteStreamControllerError(byobBranch._readableStreamController, cloneE);\n ReadableByteStreamControllerError(otherBranch._readableStreamController, cloneE);\n resolveCancelPromise(ReadableStreamCancel(stream, cloneE));\n return;\n }\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n ReadableByteStreamControllerEnqueue(otherBranch._readableStreamController, clonedChunk);\n } else if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n\n reading = false;\n if (readAgainForBranch1) {\n pull1Algorithm();\n } else if (readAgainForBranch2) {\n pull2Algorithm();\n }\n });\n },\n _closeSteps: chunk => {\n reading = false;\n\n const byobCanceled = forBranch2 ? canceled2 : canceled1;\n const otherCanceled = forBranch2 ? canceled1 : canceled2;\n\n if (!byobCanceled) {\n ReadableByteStreamControllerClose(byobBranch._readableStreamController);\n }\n if (!otherCanceled) {\n ReadableByteStreamControllerClose(otherBranch._readableStreamController);\n }\n\n if (chunk !== undefined) {\n assert(chunk.byteLength === 0);\n\n if (!byobCanceled) {\n ReadableByteStreamControllerRespondWithNewView(byobBranch._readableStreamController, chunk);\n }\n if (!otherCanceled && otherBranch._readableStreamController._pendingPullIntos.length > 0) {\n ReadableByteStreamControllerRespond(otherBranch._readableStreamController, 0);\n }\n }\n\n if (!byobCanceled || !otherCanceled) {\n resolveCancelPromise(undefined);\n }\n },\n _errorSteps: () => {\n reading = false;\n }\n };\n ReadableStreamBYOBReaderRead(reader, view, 1, readIntoRequest);\n }\n\n function pull1Algorithm(): Promise<void> {\n if (reading) {\n readAgainForBranch1 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch1._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, false);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function pull2Algorithm(): Promise<void> {\n if (reading) {\n readAgainForBranch2 = true;\n return promiseResolvedWith(undefined);\n }\n\n reading = true;\n\n const byobRequest = ReadableByteStreamControllerGetBYOBRequest(branch2._readableStreamController);\n if (byobRequest === null) {\n pullWithDefaultReader();\n } else {\n pullWithBYOBReader(byobRequest._view!, true);\n }\n\n return promiseResolvedWith(undefined);\n }\n\n function cancel1Algorithm(reason: any): Promise<void> {\n canceled1 = true;\n reason1 = reason;\n if (canceled2) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function cancel2Algorithm(reason: any): Promise<void> {\n canceled2 = true;\n reason2 = reason;\n if (canceled1) {\n const compositeReason = CreateArrayFromList([reason1, reason2]);\n const cancelResult = ReadableStreamCancel(stream, compositeReason);\n resolveCancelPromise(cancelResult);\n }\n return cancelPromise;\n }\n\n function startAlgorithm(): void {\n return;\n }\n\n branch1 = CreateReadableByteStream(startAlgorithm, pull1Algorithm, cancel1Algorithm);\n branch2 = CreateReadableByteStream(startAlgorithm, pull2Algorithm, cancel2Algorithm);\n\n forwardReaderError(reader);\n\n return [branch1, branch2];\n}\n","import { typeIsObject } from '../helpers/miscellaneous';\nimport type { ReadableStreamDefaultReadResult } from './default-reader';\n\n/**\n * A common interface for a `ReadadableStream` implementation.\n *\n * @public\n */\nexport interface ReadableStreamLike<R = any> {\n readonly locked: boolean;\n\n getReader(): ReadableStreamDefaultReaderLike<R>;\n}\n\n/**\n * A common interface for a `ReadableStreamDefaultReader` implementation.\n *\n * @public\n */\nexport interface ReadableStreamDefaultReaderLike<R = any> {\n readonly closed: Promise<undefined>;\n\n cancel(reason?: any): Promise<void>;\n\n read(): Promise<ReadableStreamDefaultReadResult<R>>;\n\n releaseLock(): void;\n}\n\nexport function isReadableStreamLike<R>(stream: unknown): stream is ReadableStreamLike<R> {\n return typeIsObject(stream) && typeof (stream as ReadableStreamLike<R>).getReader !== 'undefined';\n}\n","import { CreateReadableStream, type DefaultReadableStream } from '../readable-stream';\nimport {\n isReadableStreamLike,\n type ReadableStreamDefaultReaderLike,\n type ReadableStreamLike\n} from './readable-stream-like';\nimport { ReadableStreamDefaultControllerClose, ReadableStreamDefaultControllerEnqueue } from './default-controller';\nimport { GetIterator, GetMethod, IteratorComplete, IteratorNext, IteratorValue } from '../abstract-ops/ecmascript';\nimport { promiseRejectedWith, promiseResolvedWith, reflectCall, transformPromiseWith } from '../helpers/webidl';\nimport { typeIsObject } from '../helpers/miscellaneous';\nimport { noop } from '../../utils';\n\nexport function ReadableStreamFrom<R>(\n source: Iterable<R> | AsyncIterable<R> | ReadableStreamLike<R>\n): DefaultReadableStream<R> {\n if (isReadableStreamLike(source)) {\n return ReadableStreamFromDefaultReader(source.getReader());\n }\n return ReadableStreamFromIterable(source);\n}\n\nexport function ReadableStreamFromIterable<R>(asyncIterable: Iterable<R> | AsyncIterable<R>): DefaultReadableStream<R> {\n let stream: DefaultReadableStream<R>;\n const iteratorRecord = GetIterator(asyncIterable, 'async');\n\n const startAlgorithm = noop;\n\n function pullAlgorithm(): Promise<void> {\n let nextResult;\n try {\n nextResult = IteratorNext(iteratorRecord);\n } catch (e) {\n return promiseRejectedWith(e);\n }\n const nextPromise = promiseResolvedWith(nextResult);\n return transformPromiseWith(nextPromise, iterResult => {\n if (!typeIsObject(iterResult)) {\n throw new TypeError('The promise returned by the iterator.next() method must fulfill with an object');\n }\n const done = IteratorComplete(iterResult);\n if (done) {\n ReadableStreamDefaultControllerClose(stream._readableStreamController);\n } else {\n const value = IteratorValue(iterResult);\n ReadableStreamDefaultControllerEnqueue(stream._readableStreamController, value);\n }\n });\n }\n\n function cancelAlgorithm(reason: any): Promise<void> {\n const iterator = iteratorRecord.iterator;\n let returnMethod: (typeof iterator)['return'] | undefined;\n try {\n returnMethod = GetMethod(iterator, 'return');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n if (returnMethod === undefined) {\n return promiseResolvedWith(undefined);\n }\n let returnResult: IteratorResult<R> | Promise<IteratorResult<R>>;\n try {\n returnResult = reflectCall(returnMethod, iterator, [reason]);\n } catch (e) {\n return promiseRejectedWith(e);\n }\n const returnPromise = promiseResolvedWith(returnResult);\n return transformPromiseWith(returnPromise, iterResult => {\n if (!typeIsObject(iterResult)) {\n throw new TypeError('The promise returned by the iterator.return() method must fulfill with an object');\n }\n return undefined;\n });\n }\n\n stream = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, 0);\n return stream;\n}\n\nexport function ReadableStreamFromDefaultReader<R>(\n reader: ReadableStreamDefaultReaderLike<R>\n): DefaultReadableStream<R> {\n let stream: DefaultReadableStream<R>;\n\n const startAlgorithm = noop;\n\n function pullAlgorithm(): Promise<void> {\n let readPromise;\n try {\n readPromise = reader.read();\n } catch (e) {\n return promiseRejectedWith(e);\n }\n return transformPromiseWith(readPromise, readResult => {\n if (!typeIsObject(readResult)) {\n throw new TypeError('The promise returned by the reader.read() method must fulfill with an object');\n }\n if (readResult.done) {\n ReadableStreamDefaultControllerClose(stream._readableStreamController);\n } else {\n const value = readResult.value;\n ReadableStreamDefaultControllerEnqueue(stream._readableStreamController, value);\n }\n });\n }\n\n function cancelAlgorithm(reason: any): Promise<void> {\n try {\n return promiseResolvedWith(reader.cancel(reason));\n } catch (e) {\n return promiseRejectedWith(e);\n }\n }\n\n stream = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, 0);\n return stream;\n}\n","import { assertDictionary, assertFunction, convertUnsignedLongLongWithEnforceRange } from './basic';\nimport type {\n ReadableStreamController,\n UnderlyingByteSource,\n UnderlyingDefaultOrByteSource,\n UnderlyingDefaultOrByteSourcePullCallback,\n UnderlyingDefaultOrByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n ValidatedUnderlyingDefaultOrByteSource\n} from '../readable-stream/underlying-source';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\n\nexport function convertUnderlyingDefaultOrByteSource<R>(\n source: UnderlyingSource<R> | UnderlyingByteSource | null,\n context: string\n): ValidatedUnderlyingDefaultOrByteSource<R> {\n assertDictionary(source, context);\n const original = source as (UnderlyingDefaultOrByteSource<R> | null);\n const autoAllocateChunkSize = original?.autoAllocateChunkSize;\n const cancel = original?.cancel;\n const pull = original?.pull;\n const start = original?.start;\n const type = original?.type;\n return {\n autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n undefined :\n convertUnsignedLongLongWithEnforceRange(\n autoAllocateChunkSize,\n `${context} has member 'autoAllocateChunkSize' that`\n ),\n cancel: cancel === undefined ?\n undefined :\n convertUnderlyingSourceCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n pull: pull === undefined ?\n undefined :\n convertUnderlyingSourcePullCallback(pull, original!, `${context} has member 'pull' that`),\n start: start === undefined ?\n undefined :\n convertUnderlyingSourceStartCallback(start, original!, `${context} has member 'start' that`),\n type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n };\n}\n\nfunction convertUnderlyingSourceCancelCallback(\n fn: UnderlyingSourceCancelCallback,\n original: UnderlyingDefaultOrByteSource,\n context: string\n): (reason: any) => Promise<void> {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n\nfunction convertUnderlyingSourcePullCallback<R>(\n fn: UnderlyingDefaultOrByteSourcePullCallback<R>,\n original: UnderlyingDefaultOrByteSource<R>,\n context: string\n): (controller: ReadableStreamController<R>) => Promise<void> {\n assertFunction(fn, context);\n return (controller: ReadableStreamController<R>) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertUnderlyingSourceStartCallback<R>(\n fn: UnderlyingDefaultOrByteSourceStartCallback<R>,\n original: UnderlyingDefaultOrByteSource<R>,\n context: string\n): UnderlyingDefaultOrByteSourceStartCallback<R> {\n assertFunction(fn, context);\n return (controller: ReadableStreamController<R>) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertReadableStreamType(type: string, context: string): 'bytes' {\n type = `${type}`;\n if (type !== 'bytes') {\n throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n }\n return type;\n}\n","import { assertDictionary } from './basic';\nimport type {\n ReadableStreamIteratorOptions,\n ValidatedReadableStreamIteratorOptions\n} from '../readable-stream/iterator-options';\n\nexport function convertIteratorOptions(options: ReadableStreamIteratorOptions | null | undefined,\n context: string): ValidatedReadableStreamIteratorOptions {\n assertDictionary(options, context);\n const preventCancel = options?.preventCancel;\n return { preventCancel: Boolean(preventCancel) };\n}\n","import { assertDictionary } from './basic';\nimport type { StreamPipeOptions, ValidatedStreamPipeOptions } from '../readable-stream/pipe-options';\nimport { type AbortSignal, isAbortSignal } from '../abort-signal';\n\nexport function convertPipeOptions(options: StreamPipeOptions | null | undefined,\n context: string): ValidatedStreamPipeOptions {\n assertDictionary(options, context);\n const preventAbort = options?.preventAbort;\n const preventCancel = options?.preventCancel;\n const preventClose = options?.preventClose;\n const signal = options?.signal;\n if (signal !== undefined) {\n assertAbortSignal(signal, `${context} has member 'signal' that`);\n }\n return {\n preventAbort: Boolean(preventAbort),\n preventCancel: Boolean(preventCancel),\n preventClose: Boolean(preventClose),\n signal\n };\n}\n\nfunction assertAbortSignal(signal: unknown, context: string): asserts signal is AbortSignal {\n if (!isAbortSignal(signal)) {\n throw new TypeError(`${context} is not an AbortSignal.`);\n }\n}\n","import { assertDictionary, assertRequiredField } from './basic';\nimport { ReadableStream } from '../readable-stream';\nimport { WritableStream } from '../writable-stream';\nimport { assertReadableStream } from './readable-stream';\nimport { assertWritableStream } from './writable-stream';\n\nexport function convertReadableWritablePair<RS extends ReadableStream, WS extends WritableStream>(\n pair: { readable: RS; writable: WS } | null | undefined,\n context: string\n): { readable: RS; writable: WS } {\n assertDictionary(pair, context);\n\n const readable = pair?.readable;\n assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n assertReadableStream(readable, `${context} has member 'readable' that`);\n\n const writable = pair?.writable;\n assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n assertWritableStream(writable, `${context} has member 'writable' that`);\n\n return { readable, writable };\n}\n","import assert from '../stub/assert';\nimport {\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith\n} from './helpers/webidl';\nimport type { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { AcquireReadableStreamAsyncIterator, type ReadableStreamAsyncIterator } from './readable-stream/async-iterator';\nimport { defaultReaderClosedPromiseReject, defaultReaderClosedPromiseResolve } from './readable-stream/generic-reader';\nimport {\n AcquireReadableStreamDefaultReader,\n IsReadableStreamDefaultReader,\n ReadableStreamDefaultReader,\n ReadableStreamDefaultReaderErrorReadRequests,\n type ReadableStreamDefaultReadResult\n} from './readable-stream/default-reader';\nimport {\n AcquireReadableStreamBYOBReader,\n IsReadableStreamBYOBReader,\n ReadableStreamBYOBReader,\n ReadableStreamBYOBReaderErrorReadIntoRequests,\n type ReadableStreamBYOBReadResult\n} from './readable-stream/byob-reader';\nimport { ReadableStreamPipeTo } from './readable-stream/pipe';\nimport { ReadableStreamTee } from './readable-stream/tee';\nimport { ReadableStreamFrom } from './readable-stream/from';\nimport { IsWritableStream, IsWritableStreamLocked, WritableStream } from './writable-stream';\nimport { SimpleQueue } from './simple-queue';\nimport {\n ReadableByteStreamController,\n ReadableStreamBYOBRequest,\n SetUpReadableByteStreamController,\n SetUpReadableByteStreamControllerFromUnderlyingSource\n} from './readable-stream/byte-stream-controller';\nimport {\n ReadableStreamDefaultController,\n SetUpReadableStreamDefaultController,\n SetUpReadableStreamDefaultControllerFromUnderlyingSource\n} from './readable-stream/default-controller';\nimport type {\n UnderlyingByteSource,\n UnderlyingByteSourcePullCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingSource,\n UnderlyingSourceCancelCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceStartCallback\n} from './readable-stream/underlying-source';\nimport { noop } from '../utils';\nimport { setFunctionName, typeIsObject } from './helpers/miscellaneous';\nimport { CreateArrayFromList, SymbolAsyncIterator } from './abstract-ops/ecmascript';\nimport { CancelSteps } from './abstract-ops/internal-methods';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { assertObject, assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport { convertUnderlyingDefaultOrByteSource } from './validators/underlying-source';\nimport type {\n ReadableStreamBYOBReaderReadOptions,\n ReadableStreamGetReaderOptions\n} from './readable-stream/reader-options';\nimport { convertReaderOptions } from './validators/reader-options';\nimport type { StreamPipeOptions, ValidatedStreamPipeOptions } from './readable-stream/pipe-options';\nimport type { ReadableStreamIteratorOptions } from './readable-stream/iterator-options';\nimport { convertIteratorOptions } from './validators/iterator-options';\nimport { convertPipeOptions } from './validators/pipe-options';\nimport type { ReadableWritablePair } from './readable-stream/readable-writable-pair';\nimport { convertReadableWritablePair } from './validators/readable-writable-pair';\nimport type { ReadableStreamDefaultReaderLike, ReadableStreamLike } from './readable-stream/readable-stream-like';\nimport type { NonShared } from './helpers/array-buffer-view';\n\nexport type DefaultReadableStream<R = any> = ReadableStream<R> & {\n _readableStreamController: ReadableStreamDefaultController<R>\n};\n\nexport type ReadableByteStream = ReadableStream<NonShared<Uint8Array>> & {\n _readableStreamController: ReadableByteStreamController\n};\n\ntype ReadableStreamState = 'readable' | 'closed' | 'errored';\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nexport class ReadableStream<R = any> implements AsyncIterable<R> {\n /** @internal */\n _state!: ReadableStreamState;\n /** @internal */\n _reader: ReadableStreamReader<R> | undefined;\n /** @internal */\n _storedError: any;\n /** @internal */\n _disturbed!: boolean;\n /** @internal */\n _readableStreamController!: ReadableStreamDefaultController<R> | ReadableByteStreamController;\n\n constructor(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number; size?: undefined });\n constructor(underlyingSource?: UnderlyingSource<R>, strategy?: QueuingStrategy<R>);\n constructor(rawUnderlyingSource: UnderlyingSource<R> | UnderlyingByteSource | null | undefined = {},\n rawStrategy: QueuingStrategy<R> | null | undefined = {}) {\n if (rawUnderlyingSource === undefined) {\n rawUnderlyingSource = null;\n } else {\n assertObject(rawUnderlyingSource, 'First parameter');\n }\n\n const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n\n InitializeReadableStream(this);\n\n if (underlyingSource.type === 'bytes') {\n if (strategy.size !== undefined) {\n throw new RangeError('The strategy for a byte stream cannot have a size function');\n }\n const highWaterMark = ExtractHighWaterMark(strategy, 0);\n SetUpReadableByteStreamControllerFromUnderlyingSource(\n this as unknown as ReadableByteStream,\n underlyingSource,\n highWaterMark\n );\n } else {\n assert(underlyingSource.type === undefined);\n const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n const highWaterMark = ExtractHighWaterMark(strategy, 1);\n SetUpReadableStreamDefaultControllerFromUnderlyingSource(\n this,\n underlyingSource,\n highWaterMark,\n sizeAlgorithm\n );\n }\n }\n\n /**\n * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n */\n get locked(): boolean {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('locked');\n }\n\n return IsReadableStreamLocked(this);\n }\n\n /**\n * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n *\n * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n * method, which might or might not use it.\n */\n cancel(reason: any = undefined): Promise<void> {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('cancel'));\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n }\n\n return ReadableStreamCancel(this, reason);\n }\n\n /**\n * Creates a {@link ReadableStreamBYOBReader} and locks the stream to the new reader.\n *\n * This call behaves the same way as the no-argument variant, except that it only works on readable byte streams,\n * i.e. streams which were constructed specifically with the ability to handle \"bring your own buffer\" reading.\n * The returned BYOB reader provides the ability to directly read individual chunks from the stream via its\n * {@link ReadableStreamBYOBReader.read | read()} method, into developer-supplied buffers, allowing more precise\n * control over allocation.\n */\n getReader({ mode }: { mode: 'byob' }): ReadableStreamBYOBReader;\n /**\n * Creates a {@link ReadableStreamDefaultReader} and locks the stream to the new reader.\n * While the stream is locked, no other reader can be acquired until this one is released.\n *\n * This functionality is especially useful for creating abstractions that desire the ability to consume a stream\n * in its entirety. By getting a reader for the stream, you can ensure nobody else can interleave reads with yours\n * or cancel the stream, which would interfere with your abstraction.\n */\n getReader(): ReadableStreamDefaultReader<R>;\n getReader(\n rawOptions: ReadableStreamGetReaderOptions | null | undefined = undefined\n ): ReadableStreamDefaultReader<R> | ReadableStreamBYOBReader {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('getReader');\n }\n\n const options = convertReaderOptions(rawOptions, 'First parameter');\n\n if (options.mode === undefined) {\n return AcquireReadableStreamDefaultReader(this);\n }\n\n assert(options.mode === 'byob');\n return AcquireReadableStreamBYOBReader(this as unknown as ReadableByteStream);\n }\n\n /**\n * Provides a convenient, chainable way of piping this readable stream through a transform stream\n * (or any other `{ writable, readable }` pair). It simply {@link ReadableStream.pipeTo | pipes} the stream\n * into the writable side of the supplied pair, and returns the readable side for further use.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeThrough<RS extends ReadableStream>(\n transform: { readable: RS; writable: WritableStream<R> },\n options?: StreamPipeOptions\n ): RS;\n pipeThrough<RS extends ReadableStream>(\n rawTransform: { readable: RS; writable: WritableStream<R> } | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}\n ): RS {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('pipeThrough');\n }\n assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n\n const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n const options = convertPipeOptions(rawOptions, 'Second parameter');\n\n if (IsReadableStreamLocked(this)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n }\n if (IsWritableStreamLocked(transform.writable)) {\n throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n }\n\n const promise = ReadableStreamPipeTo(\n this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n\n setPromiseIsHandledToTrue(promise);\n\n return transform.readable;\n }\n\n /**\n * Pipes this readable stream to a given writable stream. The way in which the piping process behaves under\n * various error conditions can be customized with a number of passed options. It returns a promise that fulfills\n * when the piping process completes successfully, or rejects if any errors were encountered.\n *\n * Piping a stream will lock it for the duration of the pipe, preventing any other consumer from acquiring a reader.\n */\n pipeTo(destination: WritableStream<R>, options?: StreamPipeOptions): Promise<void>;\n pipeTo(destination: WritableStream<R> | null | undefined,\n rawOptions: StreamPipeOptions | null | undefined = {}): Promise<void> {\n if (!IsReadableStream(this)) {\n return promiseRejectedWith(streamBrandCheckException('pipeTo'));\n }\n\n if (destination === undefined) {\n return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n }\n if (!IsWritableStream(destination)) {\n return promiseRejectedWith(\n new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`)\n );\n }\n\n let options: ValidatedStreamPipeOptions;\n try {\n options = convertPipeOptions(rawOptions, 'Second parameter');\n } catch (e) {\n return promiseRejectedWith(e);\n }\n\n if (IsReadableStreamLocked(this)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')\n );\n }\n if (IsWritableStreamLocked(destination)) {\n return promiseRejectedWith(\n new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')\n );\n }\n\n return ReadableStreamPipeTo<R>(\n this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal\n );\n }\n\n /**\n * Tees this readable stream, returning a two-element array containing the two resulting branches as\n * new {@link ReadableStream} instances.\n *\n * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n * propagated to the stream's underlying source.\n *\n * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n * this could allow interference between the two branches.\n */\n tee(): [ReadableStream<R>, ReadableStream<R>] {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('tee');\n }\n\n const branches = ReadableStreamTee(this, false);\n return CreateArrayFromList(branches);\n }\n\n /**\n * Asynchronously iterates over the chunks in the stream's internal queue.\n *\n * Asynchronously iterating over the stream will lock it, preventing any other consumer from acquiring a reader.\n * The lock will be released if the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method\n * is called, e.g. by breaking out of the loop.\n *\n * By default, calling the async iterator's {@link ReadableStreamAsyncIterator.return | return()} method will also\n * cancel the stream. To prevent this, use the stream's {@link ReadableStream.values | values()} method, passing\n * `true` for the `preventCancel` option.\n */\n values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator<R>;\n values(rawOptions: ReadableStreamIteratorOptions | null | undefined = undefined): ReadableStreamAsyncIterator<R> {\n if (!IsReadableStream(this)) {\n throw streamBrandCheckException('values');\n }\n\n const options = convertIteratorOptions(rawOptions, 'First parameter');\n return AcquireReadableStreamAsyncIterator<R>(this, options.preventCancel);\n }\n\n /**\n * {@inheritDoc ReadableStream.values}\n */\n [Symbol.asyncIterator](options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator<R>;\n\n [SymbolAsyncIterator](options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator<R> {\n // Stub implementation, overridden below\n return this.values(options);\n }\n\n /**\n * Creates a new ReadableStream wrapping the provided iterable or async iterable.\n *\n * This can be used to adapt various kinds of objects into a readable stream,\n * such as an array, an async generator, or a Node.js readable stream.\n */\n static from<R>(asyncIterable: Iterable<R> | AsyncIterable<R> | ReadableStreamLike<R>): ReadableStream<R> {\n return ReadableStreamFrom(asyncIterable);\n }\n}\n\nObject.defineProperties(ReadableStream, {\n from: { enumerable: true }\n});\nObject.defineProperties(ReadableStream.prototype, {\n cancel: { enumerable: true },\n getReader: { enumerable: true },\n pipeThrough: { enumerable: true },\n pipeTo: { enumerable: true },\n tee: { enumerable: true },\n values: { enumerable: true },\n locked: { enumerable: true }\n});\nsetFunctionName(ReadableStream.from, 'from');\nsetFunctionName(ReadableStream.prototype.cancel, 'cancel');\nsetFunctionName(ReadableStream.prototype.getReader, 'getReader');\nsetFunctionName(ReadableStream.prototype.pipeThrough, 'pipeThrough');\nsetFunctionName(ReadableStream.prototype.pipeTo, 'pipeTo');\nsetFunctionName(ReadableStream.prototype.tee, 'tee');\nsetFunctionName(ReadableStream.prototype.values, 'values');\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ReadableStream.prototype, Symbol.toStringTag, {\n value: 'ReadableStream',\n configurable: true\n });\n}\nObject.defineProperty(ReadableStream.prototype, SymbolAsyncIterator, {\n value: ReadableStream.prototype.values,\n writable: true,\n configurable: true\n});\n\nexport type {\n ReadableStreamAsyncIterator,\n ReadableStreamDefaultReadResult,\n ReadableStreamBYOBReadResult,\n ReadableStreamBYOBReaderReadOptions,\n UnderlyingByteSource,\n UnderlyingSource,\n UnderlyingSourceStartCallback,\n UnderlyingSourcePullCallback,\n UnderlyingSourceCancelCallback,\n UnderlyingByteSourceStartCallback,\n UnderlyingByteSourcePullCallback,\n StreamPipeOptions,\n ReadableWritablePair,\n ReadableStreamIteratorOptions,\n ReadableStreamLike,\n ReadableStreamDefaultReaderLike\n};\n\n// Abstract operations for the ReadableStream.\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableStream<R>(\n startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n highWaterMark = 1,\n sizeAlgorithm: QueuingStrategySizeCallback<R> = () => 1\n): DefaultReadableStream<R> {\n assert(IsNonNegativeNumber(highWaterMark));\n\n const stream: DefaultReadableStream<R> = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableStreamDefaultController<R> = Object.create(ReadableStreamDefaultController.prototype);\n SetUpReadableStreamDefaultController(\n stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm\n );\n\n return stream;\n}\n\n// Throws if and only if startAlgorithm throws.\nexport function CreateReadableByteStream(\n startAlgorithm: () => void | PromiseLike<void>,\n pullAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>\n): ReadableByteStream {\n const stream: ReadableByteStream = Object.create(ReadableStream.prototype);\n InitializeReadableStream(stream);\n\n const controller: ReadableByteStreamController = Object.create(ReadableByteStreamController.prototype);\n SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, 0, undefined);\n\n return stream;\n}\n\nfunction InitializeReadableStream(stream: ReadableStream) {\n stream._state = 'readable';\n stream._reader = undefined;\n stream._storedError = undefined;\n stream._disturbed = false;\n}\n\nexport function IsReadableStream(x: unknown): x is ReadableStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n return false;\n }\n\n return x instanceof ReadableStream;\n}\n\nexport function IsReadableStreamDisturbed(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n return stream._disturbed;\n}\n\nexport function IsReadableStreamLocked(stream: ReadableStream): boolean {\n assert(IsReadableStream(stream));\n\n if (stream._reader === undefined) {\n return false;\n }\n\n return true;\n}\n\n// ReadableStream API exposed for controllers.\n\nexport function ReadableStreamCancel<R>(stream: ReadableStream<R>, reason: any): Promise<undefined> {\n stream._disturbed = true;\n\n if (stream._state === 'closed') {\n return promiseResolvedWith(undefined);\n }\n if (stream._state === 'errored') {\n return promiseRejectedWith(stream._storedError);\n }\n\n ReadableStreamClose(stream);\n\n const reader = stream._reader;\n if (reader !== undefined && IsReadableStreamBYOBReader(reader)) {\n const readIntoRequests = reader._readIntoRequests;\n reader._readIntoRequests = new SimpleQueue();\n readIntoRequests.forEach(readIntoRequest => {\n readIntoRequest._closeSteps(undefined);\n });\n }\n\n const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n return transformPromiseWith(sourceCancelPromise, noop);\n}\n\nexport function ReadableStreamClose<R>(stream: ReadableStream<R>): void {\n assert(stream._state === 'readable');\n\n stream._state = 'closed';\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseResolve(reader);\n\n if (IsReadableStreamDefaultReader<R>(reader)) {\n const readRequests = reader._readRequests;\n reader._readRequests = new SimpleQueue();\n readRequests.forEach(readRequest => {\n readRequest._closeSteps();\n });\n }\n}\n\nexport function ReadableStreamError<R>(stream: ReadableStream<R>, e: any): void {\n assert(IsReadableStream(stream));\n assert(stream._state === 'readable');\n\n stream._state = 'errored';\n stream._storedError = e;\n\n const reader = stream._reader;\n\n if (reader === undefined) {\n return;\n }\n\n defaultReaderClosedPromiseReject(reader, e);\n\n if (IsReadableStreamDefaultReader<R>(reader)) {\n ReadableStreamDefaultReaderErrorReadRequests(reader, e);\n } else {\n assert(IsReadableStreamBYOBReader(reader));\n ReadableStreamBYOBReaderErrorReadIntoRequests(reader, e);\n }\n}\n\n// Readers\n\nexport type ReadableStreamReader<R> = ReadableStreamDefaultReader<R> | ReadableStreamBYOBReader;\n\nexport {\n ReadableStreamDefaultReader,\n ReadableStreamBYOBReader\n};\n\n// Controllers\n\nexport {\n ReadableStreamDefaultController,\n ReadableStreamBYOBRequest,\n ReadableByteStreamController\n};\n\n// Helper functions for the ReadableStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n","import type { QueuingStrategyInit } from '../queuing-strategy';\nimport { assertDictionary, assertRequiredField, convertUnrestrictedDouble } from './basic';\n\nexport function convertQueuingStrategyInit(init: QueuingStrategyInit | null | undefined,\n context: string): QueuingStrategyInit {\n assertDictionary(init, context);\n const highWaterMark = init?.highWaterMark;\n assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n return {\n highWaterMark: convertUnrestrictedDouble(highWaterMark)\n };\n}\n","import type { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { setFunctionName, typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst byteLengthSizeFunction = (chunk: ArrayBufferView): number => {\n return chunk.byteLength;\n};\nsetFunctionName(byteLengthSizeFunction, 'size');\n\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nexport default class ByteLengthQueuingStrategy implements QueuingStrategy<ArrayBufferView> {\n /** @internal */\n readonly _byteLengthQueuingStrategyHighWaterMark: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('highWaterMark');\n }\n return this._byteLengthQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by returning the value of its `byteLength` property.\n */\n get size(): (chunk: ArrayBufferView) => number {\n if (!IsByteLengthQueuingStrategy(this)) {\n throw byteLengthBrandCheckException('size');\n }\n return byteLengthSizeFunction;\n }\n}\n\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(ByteLengthQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'ByteLengthQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the ByteLengthQueuingStrategy.\n\nfunction byteLengthBrandCheckException(name: string): TypeError {\n return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\n\nexport function IsByteLengthQueuingStrategy(x: any): x is ByteLengthQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof ByteLengthQueuingStrategy;\n}\n","import type { QueuingStrategy, QueuingStrategyInit } from './queuing-strategy';\nimport { setFunctionName, typeIsObject } from './helpers/miscellaneous';\nimport { assertRequiredArgument } from './validators/basic';\nimport { convertQueuingStrategyInit } from './validators/queuing-strategy-init';\n\n// The size function must not have a prototype property nor be a constructor\nconst countSizeFunction = (): 1 => {\n return 1;\n};\nsetFunctionName(countSizeFunction, 'size');\n\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nexport default class CountQueuingStrategy implements QueuingStrategy<any> {\n /** @internal */\n readonly _countQueuingStrategyHighWaterMark!: number;\n\n constructor(options: QueuingStrategyInit) {\n assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n options = convertQueuingStrategyInit(options, 'First parameter');\n this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n }\n\n /**\n * Returns the high water mark provided to the constructor.\n */\n get highWaterMark(): number {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('highWaterMark');\n }\n return this._countQueuingStrategyHighWaterMark;\n }\n\n /**\n * Measures the size of `chunk` by always returning 1.\n * This ensures that the total queue size is a count of the number of chunks in the queue.\n */\n get size(): (chunk: any) => 1 {\n if (!IsCountQueuingStrategy(this)) {\n throw countBrandCheckException('size');\n }\n return countSizeFunction;\n }\n}\n\nObject.defineProperties(CountQueuingStrategy.prototype, {\n highWaterMark: { enumerable: true },\n size: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(CountQueuingStrategy.prototype, Symbol.toStringTag, {\n value: 'CountQueuingStrategy',\n configurable: true\n });\n}\n\n// Helper functions for the CountQueuingStrategy.\n\nfunction countBrandCheckException(name: string): TypeError {\n return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\n\nexport function IsCountQueuingStrategy(x: any): x is CountQueuingStrategy {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n return false;\n }\n\n return x instanceof CountQueuingStrategy;\n}\n","import { assertDictionary, assertFunction } from './basic';\nimport { promiseCall, reflectCall } from '../helpers/webidl';\nimport type {\n Transformer,\n TransformerCancelCallback,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from '../transform-stream/transformer';\nimport { TransformStreamDefaultController } from '../transform-stream';\n\nexport function convertTransformer<I, O>(original: Transformer<I, O> | null,\n context: string): ValidatedTransformer<I, O> {\n assertDictionary(original, context);\n const cancel = original?.cancel;\n const flush = original?.flush;\n const readableType = original?.readableType;\n const start = original?.start;\n const transform = original?.transform;\n const writableType = original?.writableType;\n return {\n cancel: cancel === undefined ?\n undefined :\n convertTransformerCancelCallback(cancel, original!, `${context} has member 'cancel' that`),\n flush: flush === undefined ?\n undefined :\n convertTransformerFlushCallback(flush, original!, `${context} has member 'flush' that`),\n readableType,\n start: start === undefined ?\n undefined :\n convertTransformerStartCallback(start, original!, `${context} has member 'start' that`),\n transform: transform === undefined ?\n undefined :\n convertTransformerTransformCallback(transform, original!, `${context} has member 'transform' that`),\n writableType\n };\n}\n\nfunction convertTransformerFlushCallback<I, O>(\n fn: TransformerFlushCallback<O>,\n original: Transformer<I, O>,\n context: string\n): (controller: TransformStreamDefaultController<O>) => Promise<void> {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController<O>) => promiseCall(fn, original, [controller]);\n}\n\nfunction convertTransformerStartCallback<I, O>(\n fn: TransformerStartCallback<O>,\n original: Transformer<I, O>,\n context: string\n): TransformerStartCallback<O> {\n assertFunction(fn, context);\n return (controller: TransformStreamDefaultController<O>) => reflectCall(fn, original, [controller]);\n}\n\nfunction convertTransformerTransformCallback<I, O>(\n fn: TransformerTransformCallback<I, O>,\n original: Transformer<I, O>,\n context: string\n): (chunk: I, controller: TransformStreamDefaultController<O>) => Promise<void> {\n assertFunction(fn, context);\n return (chunk: I, controller: TransformStreamDefaultController<O>) => promiseCall(fn, original, [chunk, controller]);\n}\n\nfunction convertTransformerCancelCallback<I, O>(\n fn: TransformerCancelCallback,\n original: Transformer<I, O>,\n context: string\n): (reason: any) => Promise<void> {\n assertFunction(fn, context);\n return (reason: any) => promiseCall(fn, original, [reason]);\n}\n","import assert from '../stub/assert';\nimport {\n newPromise,\n promiseRejectedWith,\n promiseResolvedWith,\n setPromiseIsHandledToTrue,\n transformPromiseWith,\n uponPromise\n} from './helpers/webidl';\nimport { CreateReadableStream, type DefaultReadableStream, ReadableStream } from './readable-stream';\nimport {\n ReadableStreamDefaultControllerCanCloseOrEnqueue,\n ReadableStreamDefaultControllerClose,\n ReadableStreamDefaultControllerEnqueue,\n ReadableStreamDefaultControllerError,\n ReadableStreamDefaultControllerGetDesiredSize,\n ReadableStreamDefaultControllerHasBackpressure\n} from './readable-stream/default-controller';\nimport type { QueuingStrategy, QueuingStrategySizeCallback } from './queuing-strategy';\nimport { CreateWritableStream, WritableStream, WritableStreamDefaultControllerErrorIfNeeded } from './writable-stream';\nimport { setFunctionName, typeIsObject } from './helpers/miscellaneous';\nimport { IsNonNegativeNumber } from './abstract-ops/miscellaneous';\nimport { convertQueuingStrategy } from './validators/queuing-strategy';\nimport { ExtractHighWaterMark, ExtractSizeAlgorithm } from './abstract-ops/queuing-strategy';\nimport type {\n Transformer,\n TransformerCancelCallback,\n TransformerFlushCallback,\n TransformerStartCallback,\n TransformerTransformCallback,\n ValidatedTransformer\n} from './transform-stream/transformer';\nimport { convertTransformer } from './validators/transformer';\n\n// Class TransformStream\n\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nexport class TransformStream<I = any, O = any> {\n /** @internal */\n _writable!: WritableStream<I>;\n /** @internal */\n _readable!: DefaultReadableStream<O>;\n /** @internal */\n _backpressure!: boolean;\n /** @internal */\n _backpressureChangePromise!: Promise<void>;\n /** @internal */\n _backpressureChangePromise_resolve!: () => void;\n /** @internal */\n _transformStreamController!: TransformStreamDefaultController<O>;\n\n constructor(\n transformer?: Transformer<I, O>,\n writableStrategy?: QueuingStrategy<I>,\n readableStrategy?: QueuingStrategy<O>\n );\n constructor(rawTransformer: Transformer<I, O> | null | undefined = {},\n rawWritableStrategy: QueuingStrategy<I> | null | undefined = {},\n rawReadableStrategy: QueuingStrategy<O> | null | undefined = {}) {\n if (rawTransformer === undefined) {\n rawTransformer = null;\n }\n\n const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n\n const transformer = convertTransformer(rawTransformer, 'First parameter');\n if (transformer.readableType !== undefined) {\n throw new RangeError('Invalid readableType specified');\n }\n if (transformer.writableType !== undefined) {\n throw new RangeError('Invalid writableType specified');\n }\n\n const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n\n let startPromise_resolve!: (value: void | PromiseLike<void>) => void;\n const startPromise = newPromise<void>(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(\n this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm\n );\n SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n\n if (transformer.start !== undefined) {\n startPromise_resolve(transformer.start(this._transformStreamController));\n } else {\n startPromise_resolve(undefined);\n }\n }\n\n /**\n * The readable side of the transform stream.\n */\n get readable(): ReadableStream<O> {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('readable');\n }\n\n return this._readable;\n }\n\n /**\n * The writable side of the transform stream.\n */\n get writable(): WritableStream<I> {\n if (!IsTransformStream(this)) {\n throw streamBrandCheckException('writable');\n }\n\n return this._writable;\n }\n}\n\nObject.defineProperties(TransformStream.prototype, {\n readable: { enumerable: true },\n writable: { enumerable: true }\n});\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStream.prototype, Symbol.toStringTag, {\n value: 'TransformStream',\n configurable: true\n });\n}\n\nexport type {\n Transformer,\n TransformerCancelCallback,\n TransformerStartCallback,\n TransformerFlushCallback,\n TransformerTransformCallback\n};\n\n// Transform Stream Abstract Operations\n\nexport function CreateTransformStream<I, O>(startAlgorithm: () => void | PromiseLike<void>,\n transformAlgorithm: (chunk: I) => Promise<void>,\n flushAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>,\n writableHighWaterMark = 1,\n writableSizeAlgorithm: QueuingStrategySizeCallback<I> = () => 1,\n readableHighWaterMark = 0,\n readableSizeAlgorithm: QueuingStrategySizeCallback<O> = () => 1) {\n assert(IsNonNegativeNumber(writableHighWaterMark));\n assert(IsNonNegativeNumber(readableHighWaterMark));\n\n const stream: TransformStream<I, O> = Object.create(TransformStream.prototype);\n\n let startPromise_resolve!: (value: void | PromiseLike<void>) => void;\n const startPromise = newPromise<void>(resolve => {\n startPromise_resolve = resolve;\n });\n\n InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n const controller: TransformStreamDefaultController<O> = Object.create(TransformStreamDefaultController.prototype);\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm, cancelAlgorithm);\n\n const startResult = startAlgorithm();\n startPromise_resolve(startResult);\n return stream;\n}\n\nfunction InitializeTransformStream<I, O>(stream: TransformStream<I, O>,\n startPromise: Promise<void>,\n writableHighWaterMark: number,\n writableSizeAlgorithm: QueuingStrategySizeCallback<I>,\n readableHighWaterMark: number,\n readableSizeAlgorithm: QueuingStrategySizeCallback<O>) {\n function startAlgorithm(): Promise<void> {\n return startPromise;\n }\n\n function writeAlgorithm(chunk: I): Promise<void> {\n return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n }\n\n function abortAlgorithm(reason: any): Promise<void> {\n return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n }\n\n function closeAlgorithm(): Promise<void> {\n return TransformStreamDefaultSinkCloseAlgorithm(stream);\n }\n\n stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm,\n writableHighWaterMark, writableSizeAlgorithm);\n\n function pullAlgorithm(): Promise<void> {\n return TransformStreamDefaultSourcePullAlgorithm(stream);\n }\n\n function cancelAlgorithm(reason: any): Promise<void> {\n return TransformStreamDefaultSourceCancelAlgorithm(stream, reason);\n }\n\n stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark,\n readableSizeAlgorithm);\n\n // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n stream._backpressure = undefined!;\n stream._backpressureChangePromise = undefined!;\n stream._backpressureChangePromise_resolve = undefined!;\n TransformStreamSetBackpressure(stream, true);\n\n stream._transformStreamController = undefined!;\n}\n\nfunction IsTransformStream(x: unknown): x is TransformStream {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n return false;\n }\n\n return x instanceof TransformStream;\n}\n\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream: TransformStream, e: any) {\n ReadableStreamDefaultControllerError(stream._readable._readableStreamController, e);\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\n\nfunction TransformStreamErrorWritableAndUnblockWrite(stream: TransformStream, e: any) {\n TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n TransformStreamUnblockWrite(stream);\n}\n\nfunction TransformStreamUnblockWrite(stream: TransformStream) {\n if (stream._backpressure) {\n // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n // _backpressure is set.\n TransformStreamSetBackpressure(stream, false);\n }\n}\n\nfunction TransformStreamSetBackpressure(stream: TransformStream, backpressure: boolean) {\n // Passes also when called during construction.\n assert(stream._backpressure !== backpressure);\n\n if (stream._backpressureChangePromise !== undefined) {\n stream._backpressureChangePromise_resolve();\n }\n\n stream._backpressureChangePromise = newPromise(resolve => {\n stream._backpressureChangePromise_resolve = resolve;\n });\n\n stream._backpressure = backpressure;\n}\n\n// Class TransformStreamDefaultController\n\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nexport class TransformStreamDefaultController<O> {\n /** @internal */\n _controlledTransformStream: TransformStream<any, O>;\n /** @internal */\n _finishPromise: Promise<undefined> | undefined;\n /** @internal */\n _finishPromise_resolve?: (value?: undefined) => void;\n /** @internal */\n _finishPromise_reject?: (reason: any) => void;\n /** @internal */\n _transformAlgorithm: (chunk: any) => Promise<void>;\n /** @internal */\n _flushAlgorithm: () => Promise<void>;\n /** @internal */\n _cancelAlgorithm: (reason: any) => Promise<void>;\n\n private constructor() {\n throw new TypeError('Illegal constructor');\n }\n\n /**\n * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n */\n get desiredSize(): number | null {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('desiredSize');\n }\n\n const readableController = this._controlledTransformStream._readable._readableStreamController;\n return ReadableStreamDefaultControllerGetDesiredSize(readableController);\n }\n\n /**\n * Enqueues the given chunk `chunk` in the readable side of the controlled transform stream.\n */\n enqueue(chunk: O): void;\n enqueue(chunk: O = undefined!): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('enqueue');\n }\n\n TransformStreamDefaultControllerEnqueue(this, chunk);\n }\n\n /**\n * Errors both the readable side and the writable side of the controlled transform stream, making all future\n * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n */\n error(reason: any = undefined): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('error');\n }\n\n TransformStreamDefaultControllerError(this, reason);\n }\n\n /**\n * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n * transformer only needs to consume a portion of the chunks written to the writable side.\n */\n terminate(): void {\n if (!IsTransformStreamDefaultController(this)) {\n throw defaultControllerBrandCheckException('terminate');\n }\n\n TransformStreamDefaultControllerTerminate(this);\n }\n}\n\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n enqueue: { enumerable: true },\n error: { enumerable: true },\n terminate: { enumerable: true },\n desiredSize: { enumerable: true }\n});\nsetFunctionName(TransformStreamDefaultController.prototype.enqueue, 'enqueue');\nsetFunctionName(TransformStreamDefaultController.prototype.error, 'error');\nsetFunctionName(TransformStreamDefaultController.prototype.terminate, 'terminate');\nif (typeof Symbol.toStringTag === 'symbol') {\n Object.defineProperty(TransformStreamDefaultController.prototype, Symbol.toStringTag, {\n value: 'TransformStreamDefaultController',\n configurable: true\n });\n}\n\n// Transform Stream Default Controller Abstract Operations\n\nfunction IsTransformStreamDefaultController<O = any>(x: any): x is TransformStreamDefaultController<O> {\n if (!typeIsObject(x)) {\n return false;\n }\n\n if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n return false;\n }\n\n return x instanceof TransformStreamDefaultController;\n}\n\nfunction SetUpTransformStreamDefaultController<I, O>(stream: TransformStream<I, O>,\n controller: TransformStreamDefaultController<O>,\n transformAlgorithm: (chunk: I) => Promise<void>,\n flushAlgorithm: () => Promise<void>,\n cancelAlgorithm: (reason: any) => Promise<void>) {\n assert(IsTransformStream(stream));\n assert(stream._transformStreamController === undefined);\n\n controller._controlledTransformStream = stream;\n stream._transformStreamController = controller;\n\n controller._transformAlgorithm = transformAlgorithm;\n controller._flushAlgorithm = flushAlgorithm;\n controller._cancelAlgorithm = cancelAlgorithm;\n\n controller._finishPromise = undefined;\n controller._finishPromise_resolve = undefined;\n controller._finishPromise_reject = undefined;\n}\n\nfunction SetUpTransformStreamDefaultControllerFromTransformer<I, O>(stream: TransformStream<I, O>,\n transformer: ValidatedTransformer<I, O>) {\n const controller: TransformStreamDefaultController<O> = Object.create(TransformStreamDefaultController.prototype);\n\n let transformAlgorithm: (chunk: I) => Promise<void>;\n let flushAlgorithm: () => Promise<void>;\n let cancelAlgorithm: (reason: any) => Promise<void>;\n\n if (transformer.transform !== undefined) {\n transformAlgorithm = chunk => transformer.transform!(chunk, controller);\n } else {\n transformAlgorithm = chunk => {\n try {\n TransformStreamDefaultControllerEnqueue(controller, chunk as unknown as O);\n return promiseResolvedWith(undefined);\n } catch (transformResultE) {\n return promiseRejectedWith(transformResultE);\n }\n };\n }\n\n if (transformer.flush !== undefined) {\n flushAlgorithm = () => transformer.flush!(controller);\n } else {\n flushAlgorithm = () => promiseResolvedWith(undefined);\n }\n\n if (transformer.cancel !== undefined) {\n cancelAlgorithm = reason => transformer.cancel!(reason);\n } else {\n cancelAlgorithm = () => promiseResolvedWith(undefined);\n }\n\n SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm, cancelAlgorithm);\n}\n\nfunction TransformStreamDefaultControllerClearAlgorithms(controller: TransformStreamDefaultController<any>) {\n controller._transformAlgorithm = undefined!;\n controller._flushAlgorithm = undefined!;\n controller._cancelAlgorithm = undefined!;\n}\n\nfunction TransformStreamDefaultControllerEnqueue<O>(controller: TransformStreamDefaultController<O>, chunk: O) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController;\n if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n throw new TypeError('Readable side is not in a state that permits enqueue');\n }\n\n // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n // accept TransformStreamDefaultControllerEnqueue() calls.\n\n try {\n ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n } catch (e) {\n // This happens when readableStrategy.size() throws.\n TransformStreamErrorWritableAndUnblockWrite(stream, e);\n\n throw stream._readable._storedError;\n }\n\n const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n if (backpressure !== stream._backpressure) {\n assert(backpressure);\n TransformStreamSetBackpressure(stream, true);\n }\n}\n\nfunction TransformStreamDefaultControllerError(controller: TransformStreamDefaultController<any>, e: any) {\n TransformStreamError(controller._controlledTransformStream, e);\n}\n\nfunction TransformStreamDefaultControllerPerformTransform<I, O>(controller: TransformStreamDefaultController<O>,\n chunk: I) {\n const transformPromise = controller._transformAlgorithm(chunk);\n return transformPromiseWith(transformPromise, undefined, r => {\n TransformStreamError(controller._controlledTransformStream, r);\n throw r;\n });\n}\n\nfunction TransformStreamDefaultControllerTerminate<O>(controller: TransformStreamDefaultController<O>) {\n const stream = controller._controlledTransformStream;\n const readableController = stream._readable._readableStreamController;\n\n ReadableStreamDefaultControllerClose(readableController);\n\n const error = new TypeError('TransformStream terminated');\n TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n\n// TransformStreamDefaultSink Algorithms\n\nfunction TransformStreamDefaultSinkWriteAlgorithm<I, O>(stream: TransformStream<I, O>, chunk: I): Promise<void> {\n assert(stream._writable._state === 'writable');\n\n const controller = stream._transformStreamController;\n\n if (stream._backpressure) {\n const backpressureChangePromise = stream._backpressureChangePromise;\n assert(backpressureChangePromise !== undefined);\n return transformPromiseWith(backpressureChangePromise, () => {\n const writable = stream._writable;\n const state = writable._state;\n if (state === 'erroring') {\n throw writable._storedError;\n }\n assert(state === 'writable');\n return TransformStreamDefaultControllerPerformTransform<I, O>(controller, chunk);\n });\n }\n\n return TransformStreamDefaultControllerPerformTransform<I, O>(controller, chunk);\n}\n\nfunction TransformStreamDefaultSinkAbortAlgorithm<I, O>(stream: TransformStream<I, O>, reason: any): Promise<void> {\n const controller = stream._transformStreamController;\n if (controller._finishPromise !== undefined) {\n return controller._finishPromise;\n }\n\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n // Assign the _finishPromise now so that if _cancelAlgorithm calls readable.cancel() internally,\n // we don't run the _cancelAlgorithm again.\n controller._finishPromise = newPromise((resolve, reject) => {\n controller._finishPromise_resolve = resolve;\n controller._finishPromise_reject = reject;\n });\n\n const cancelPromise = controller._cancelAlgorithm(reason);\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n uponPromise(cancelPromise, () => {\n if (readable._state === 'errored') {\n defaultControllerFinishPromiseReject(controller, readable._storedError);\n } else {\n ReadableStreamDefaultControllerError(readable._readableStreamController, reason);\n defaultControllerFinishPromiseResolve(controller);\n }\n return null;\n }, r => {\n ReadableStreamDefaultControllerError(readable._readableStreamController, r);\n defaultControllerFinishPromiseReject(controller, r);\n return null;\n });\n\n return controller._finishPromise;\n}\n\nfunction TransformStreamDefaultSinkCloseAlgorithm<I, O>(stream: TransformStream<I, O>): Promise<void> {\n const controller = stream._transformStreamController;\n if (controller._finishPromise !== undefined) {\n return controller._finishPromise;\n }\n\n // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n const readable = stream._readable;\n\n // Assign the _finishPromise now so that if _flushAlgorithm calls readable.cancel() internally,\n // we don't also run the _cancelAlgorithm.\n controller._finishPromise = newPromise((resolve, reject) => {\n controller._finishPromise_resolve = resolve;\n controller._finishPromise_reject = reject;\n });\n\n const flushPromise = controller._flushAlgorithm();\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n uponPromise(flushPromise, () => {\n if (readable._state === 'errored') {\n defaultControllerFinishPromiseReject(controller, readable._storedError);\n } else {\n ReadableStreamDefaultControllerClose(readable._readableStreamController);\n defaultControllerFinishPromiseResolve(controller);\n }\n return null;\n }, r => {\n ReadableStreamDefaultControllerError(readable._readableStreamController, r);\n defaultControllerFinishPromiseReject(controller, r);\n return null;\n });\n\n return controller._finishPromise;\n}\n\n// TransformStreamDefaultSource Algorithms\n\nfunction TransformStreamDefaultSourcePullAlgorithm(stream: TransformStream): Promise<void> {\n // Invariant. Enforced by the promises returned by start() and pull().\n assert(stream._backpressure);\n\n assert(stream._backpressureChangePromise !== undefined);\n\n TransformStreamSetBackpressure(stream, false);\n\n // Prevent the next pull() call until there is backpressure.\n return stream._backpressureChangePromise;\n}\n\nfunction TransformStreamDefaultSourceCancelAlgorithm<I, O>(stream: TransformStream<I, O>, reason: any): Promise<void> {\n const controller = stream._transformStreamController;\n if (controller._finishPromise !== undefined) {\n return controller._finishPromise;\n }\n\n // stream._writable cannot change after construction, so caching it across a call to user code is safe.\n const writable = stream._writable;\n\n // Assign the _finishPromise now so that if _flushAlgorithm calls writable.abort() or\n // writable.cancel() internally, we don't run the _cancelAlgorithm again, or also run the\n // _flushAlgorithm.\n controller._finishPromise = newPromise((resolve, reject) => {\n controller._finishPromise_resolve = resolve;\n controller._finishPromise_reject = reject;\n });\n\n const cancelPromise = controller._cancelAlgorithm(reason);\n TransformStreamDefaultControllerClearAlgorithms(controller);\n\n uponPromise(cancelPromise, () => {\n if (writable._state === 'errored') {\n defaultControllerFinishPromiseReject(controller, writable._storedError);\n } else {\n WritableStreamDefaultControllerErrorIfNeeded(writable._writableStreamController, reason);\n TransformStreamUnblockWrite(stream);\n defaultControllerFinishPromiseResolve(controller);\n }\n return null;\n }, r => {\n WritableStreamDefaultControllerErrorIfNeeded(writable._writableStreamController, r);\n TransformStreamUnblockWrite(stream);\n defaultControllerFinishPromiseReject(controller, r);\n return null;\n });\n\n return controller._finishPromise;\n}\n\n// Helper functions for the TransformStreamDefaultController.\n\nfunction defaultControllerBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n\nexport function defaultControllerFinishPromiseResolve(controller: TransformStreamDefaultController<any>) {\n if (controller._finishPromise_resolve === undefined) {\n return;\n }\n\n controller._finishPromise_resolve();\n controller._finishPromise_resolve = undefined;\n controller._finishPromise_reject = undefined;\n}\n\nexport function defaultControllerFinishPromiseReject(controller: TransformStreamDefaultController<any>, reason: any) {\n if (controller._finishPromise_reject === undefined) {\n return;\n }\n\n setPromiseIsHandledToTrue(controller._finishPromise!);\n controller._finishPromise_reject(reason);\n controller._finishPromise_resolve = undefined;\n controller._finishPromise_reject = undefined;\n}\n\n// Helper functions for the TransformStream.\n\nfunction streamBrandCheckException(name: string): TypeError {\n return new TypeError(\n `TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n","/* c8 ignore start */\n// 64 KiB (same size chrome slice theirs blob into Uint8array's)\nconst POOL_SIZE = 65536\n\nif (!globalThis.ReadableStream) {\n // `node:stream/web` got introduced in v16.5.0 as experimental\n // and it's preferred over the polyfilled version. So we also\n // suppress the warning that gets emitted by NodeJS for using it.\n try {\n const process = require('node:process')\n const { emitWarning } = process\n try {\n process.emitWarning = () => {}\n Object.assign(globalThis, require('node:stream/web'))\n process.emitWarning = emitWarning\n } catch (error) {\n process.emitWarning = emitWarning\n throw error\n }\n } catch (error) {\n // fallback to polyfill implementation\n Object.assign(globalThis, require('web-streams-polyfill/dist/ponyfill.es2018.js'))\n }\n}\n\ntry {\n // Don't use node: prefix for this, require+node: is not supported until node v14.14\n // Only `import()` can use prefix in 12.20 and later\n const { Blob } = require('buffer')\n if (Blob && !Blob.prototype.stream) {\n Blob.prototype.stream = function name (params) {\n let position = 0\n const blob = this\n\n return new ReadableStream({\n type: 'bytes',\n async pull (ctrl) {\n const chunk = blob.slice(position, Math.min(blob.size, position + POOL_SIZE))\n const buffer = await chunk.arrayBuffer()\n position += buffer.byteLength\n ctrl.enqueue(new Uint8Array(buffer))\n\n if (position === blob.size) {\n ctrl.close()\n }\n }\n })\n }\n }\n} catch (error) {}\n/* c8 ignore end */\n","/*! fetch-blob. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */\n\n// TODO (jimmywarting): in the feature use conditional loading with top level await (requires 14.x)\n// Node has recently added whatwg stream into core\n\nimport './streams.cjs'\n\n// 64 KiB (same size chrome slice theirs blob into Uint8array's)\nconst POOL_SIZE = 65536\n\n/** @param {(Blob | Uint8Array)[]} parts */\nasync function * toIterator (parts, clone = true) {\n for (const part of parts) {\n if ('stream' in part) {\n yield * (/** @type {AsyncIterableIterator<Uint8Array>} */ (part.stream()))\n } else if (ArrayBuffer.isView(part)) {\n if (clone) {\n let position = part.byteOffset\n const end = part.byteOffset + part.byteLength\n while (position !== end) {\n const size = Math.min(end - position, POOL_SIZE)\n const chunk = part.buffer.slice(position, position + size)\n position += chunk.byteLength\n yield new Uint8Array(chunk)\n }\n } else {\n yield part\n }\n /* c8 ignore next 10 */\n } else {\n // For blobs that have arrayBuffer but no stream method (nodes buffer.Blob)\n let position = 0, b = (/** @type {Blob} */ (part))\n while (position !== b.size) {\n const chunk = b.slice(position, Math.min(b.size, position + POOL_SIZE))\n const buffer = await chunk.arrayBuffer()\n position += buffer.byteLength\n yield new Uint8Array(buffer)\n }\n }\n }\n}\n\nconst _Blob = class Blob {\n /** @type {Array.<(Blob|Uint8Array)>} */\n #parts = []\n #type = ''\n #size = 0\n #endings = 'transparent'\n\n /**\n * The Blob() constructor returns a new Blob object. The content\n * of the blob consists of the concatenation of the values given\n * in the parameter array.\n *\n * @param {*} blobParts\n * @param {{ type?: string, endings?: string }} [options]\n */\n constructor (blobParts = [], options = {}) {\n if (typeof blobParts !== 'object' || blobParts === null) {\n throw new TypeError('Failed to construct \\'Blob\\': The provided value cannot be converted to a sequence.')\n }\n\n if (typeof blobParts[Symbol.iterator] !== 'function') {\n throw new TypeError('Failed to construct \\'Blob\\': The object must have a callable @@iterator property.')\n }\n\n if (typeof options !== 'object' && typeof options !== 'function') {\n throw new TypeError('Failed to construct \\'Blob\\': parameter 2 cannot convert to dictionary.')\n }\n\n if (options === null) options = {}\n\n const encoder = new TextEncoder()\n for (const element of blobParts) {\n let part\n if (ArrayBuffer.isView(element)) {\n part = new Uint8Array(element.buffer.slice(element.byteOffset, element.byteOffset + element.byteLength))\n } else if (element instanceof ArrayBuffer) {\n part = new Uint8Array(element.slice(0))\n } else if (element instanceof Blob) {\n part = element\n } else {\n part = encoder.encode(`${element}`)\n }\n\n this.#size += ArrayBuffer.isView(part) ? part.byteLength : part.size\n this.#parts.push(part)\n }\n\n this.#endings = `${options.endings === undefined ? 'transparent' : options.endings}`\n const type = options.type === undefined ? '' : String(options.type)\n this.#type = /^[\\x20-\\x7E]*$/.test(type) ? type : ''\n }\n\n /**\n * The Blob interface's size property returns the\n * size of the Blob in bytes.\n */\n get size () {\n return this.#size\n }\n\n /**\n * The type property of a Blob object returns the MIME type of the file.\n */\n get type () {\n return this.#type\n }\n\n /**\n * The text() method in the Blob interface returns a Promise\n * that resolves with a string containing the contents of\n * the blob, interpreted as UTF-8.\n *\n * @return {Promise<string>}\n */\n async text () {\n // More optimized than using this.arrayBuffer()\n // that requires twice as much ram\n const decoder = new TextDecoder()\n let str = ''\n for await (const part of toIterator(this.#parts, false)) {\n str += decoder.decode(part, { stream: true })\n }\n // Remaining\n str += decoder.decode()\n return str\n }\n\n /**\n * The arrayBuffer() method in the Blob interface returns a\n * Promise that resolves with the contents of the blob as\n * binary data contained in an ArrayBuffer.\n *\n * @return {Promise<ArrayBuffer>}\n */\n async arrayBuffer () {\n // Easier way... Just a unnecessary overhead\n // const view = new Uint8Array(this.size);\n // await this.stream().getReader({mode: 'byob'}).read(view);\n // return view.buffer;\n\n const data = new Uint8Array(this.size)\n let offset = 0\n for await (const chunk of toIterator(this.#parts, false)) {\n data.set(chunk, offset)\n offset += chunk.length\n }\n\n return data.buffer\n }\n\n stream () {\n const it = toIterator(this.#parts, true)\n\n return new globalThis.ReadableStream({\n // @ts-ignore\n type: 'bytes',\n async pull (ctrl) {\n const chunk = await it.next()\n chunk.done ? ctrl.close() : ctrl.enqueue(chunk.value)\n },\n\n async cancel () {\n await it.return()\n }\n })\n }\n\n /**\n * The Blob interface's slice() method creates and returns a\n * new Blob object which contains data from a subset of the\n * blob on which it's called.\n *\n * @param {number} [start]\n * @param {number} [end]\n * @param {string} [type]\n */\n slice (start = 0, end = this.size, type = '') {\n const { size } = this\n\n let relativeStart = start < 0 ? Math.max(size + start, 0) : Math.min(start, size)\n let relativeEnd = end < 0 ? Math.max(size + end, 0) : Math.min(end, size)\n\n const span = Math.max(relativeEnd - relativeStart, 0)\n const parts = this.#parts\n const blobParts = []\n let added = 0\n\n for (const part of parts) {\n // don't add the overflow to new blobParts\n if (added >= span) {\n break\n }\n\n const size = ArrayBuffer.isView(part) ? part.byteLength : part.size\n if (relativeStart && size <= relativeStart) {\n // Skip the beginning and change the relative\n // start & end position as we skip the unwanted parts\n relativeStart -= size\n relativeEnd -= size\n } else {\n let chunk\n if (ArrayBuffer.isView(part)) {\n chunk = part.subarray(relativeStart, Math.min(size, relativeEnd))\n added += chunk.byteLength\n } else {\n chunk = part.slice(relativeStart, Math.min(size, relativeEnd))\n added += chunk.size\n }\n relativeEnd -= size\n blobParts.push(chunk)\n relativeStart = 0 // All next sequential parts should start at 0\n }\n }\n\n const blob = new Blob([], { type: String(type).toLowerCase() })\n blob.#size = span\n blob.#parts = blobParts\n\n return blob\n }\n\n get [Symbol.toStringTag] () {\n return 'Blob'\n }\n\n static [Symbol.hasInstance] (object) {\n return (\n object &&\n typeof object === 'object' &&\n typeof object.constructor === 'function' &&\n (\n typeof object.stream === 'function' ||\n typeof object.arrayBuffer === 'function'\n ) &&\n /^(Blob|File)$/.test(object[Symbol.toStringTag])\n )\n }\n}\n\nObject.defineProperties(_Blob.prototype, {\n size: { enumerable: true },\n type: { enumerable: true },\n slice: { enumerable: true }\n})\n\n/** @type {typeof globalThis.Blob} */\nexport const Blob = _Blob\nexport default Blob\n","import Blob from './index.js'\n\nconst _File = class File extends Blob {\n #lastModified = 0\n #name = ''\n\n /**\n * @param {*[]} fileBits\n * @param {string} fileName\n * @param {{lastModified?: number, type?: string}} options\n */// @ts-ignore\n constructor (fileBits, fileName, options = {}) {\n if (arguments.length < 2) {\n throw new TypeError(`Failed to construct 'File': 2 arguments required, but only ${arguments.length} present.`)\n }\n super(fileBits, options)\n\n if (options === null) options = {}\n\n // Simulate WebIDL type casting for NaN value in lastModified option.\n const lastModified = options.lastModified === undefined ? Date.now() : Number(options.lastModified)\n if (!Number.isNaN(lastModified)) {\n this.#lastModified = lastModified\n }\n\n this.#name = String(fileName)\n }\n\n get name () {\n return this.#name\n }\n\n get lastModified () {\n return this.#lastModified\n }\n\n get [Symbol.toStringTag] () {\n return 'File'\n }\n\n static [Symbol.hasInstance] (object) {\n return !!object && object instanceof Blob &&\n /^(File)$/.test(object[Symbol.toStringTag])\n }\n}\n\n/** @type {typeof globalThis.File} */// @ts-ignore\nexport const File = _File\nexport default File\n","/*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */\n\nimport C from 'fetch-blob'\nimport F from 'fetch-blob/file.js'\n\nvar {toStringTag:t,iterator:i,hasInstance:h}=Symbol,\nr=Math.random,\nm='append,set,get,getAll,delete,keys,values,entries,forEach,constructor'.split(','),\nf=(a,b,c)=>(a+='',/^(Blob|File)$/.test(b && b[t])?[(c=c!==void 0?c+'':b[t]=='File'?b.name:'blob',a),b.name!==c||b[t]=='blob'?new F([b],c,b):b]:[a,b+'']),\ne=(c,f)=>(f?c:c.replace(/\\r?\\n|\\r/g,'\\r\\n')).replace(/\\n/g,'%0A').replace(/\\r/g,'%0D').replace(/\"/g,'%22'),\nx=(n, a, e)=>{if(a.length<e){throw new TypeError(`Failed to execute '${n}' on 'FormData': ${e} arguments required, but only ${a.length} present.`)}}\n\nexport const File = F\n\n/** @type {typeof globalThis.FormData} */\nexport const FormData = class FormData {\n#d=[];\nconstructor(...a){if(a.length)throw new TypeError(`Failed to construct 'FormData': parameter 1 is not of type 'HTMLFormElement'.`)}\nget [t]() {return 'FormData'}\n[i](){return this.entries()}\nstatic [h](o) {return o&&typeof o==='object'&&o[t]==='FormData'&&!m.some(m=>typeof o[m]!='function')}\nappend(...a){x('append',arguments,2);this.#d.push(f(...a))}\ndelete(a){x('delete',arguments,1);a+='';this.#d=this.#d.filter(([b])=>b!==a)}\nget(a){x('get',arguments,1);a+='';for(var b=this.#d,l=b.length,c=0;c<l;c++)if(b[c][0]===a)return b[c][1];return null}\ngetAll(a,b){x('getAll',arguments,1);b=[];a+='';this.#d.forEach(c=>c[0]===a&&b.push(c[1]));return b}\nhas(a){x('has',arguments,1);a+='';return this.#d.some(b=>b[0]===a)}\nforEach(a,b){x('forEach',arguments,1);for(var [c,d]of this)a.call(b,d,c,this)}\nset(...a){x('set',arguments,2);var b=[],c=!0;a=f(...a);this.#d.forEach(d=>{d[0]===a[0]?c&&(c=!b.push(a)):b.push(d)});c&&b.push(a);this.#d=b}\n*entries(){yield*this.#d}\n*keys(){for(var[a]of this)yield a}\n*values(){for(var[,a]of this)yield a}}\n\n/** @param {FormData} F */\nexport function formDataToBlob (F,B=C){\nvar b=`${r()}${r()}`.replace(/\\./g, '').slice(-28).padStart(32, '-'),c=[],p=`--${b}\\r\\nContent-Disposition: form-data; name=\"`\nF.forEach((v,n)=>typeof v=='string'\n?c.push(p+e(n)+`\"\\r\\n\\r\\n${v.replace(/\\r(?!\\n)|(?<!\\r)\\n/g, '\\r\\n')}\\r\\n`)\n:c.push(p+e(n)+`\"; filename=\"${e(v.name, 1)}\"\\r\\nContent-Type: ${v.type||\"application/octet-stream\"}\\r\\n\\r\\n`, v, '\\r\\n'))\nc.push(`--${b}--`)\nreturn new B(c,{type:\"multipart/form-data; boundary=\"+b})}\n","export class FetchBaseError extends Error {\n\tconstructor(message, type) {\n\t\tsuper(message);\n\t\t// Hide custom error implementation details from end-users\n\t\tError.captureStackTrace(this, this.constructor);\n\n\t\tthis.type = type;\n\t}\n\n\tget name() {\n\t\treturn this.constructor.name;\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn this.constructor.name;\n\t}\n}\n","\nimport {FetchBaseError} from './base.js';\n\n/**\n * @typedef {{ address?: string, code: string, dest?: string, errno: number, info?: object, message: string, path?: string, port?: number, syscall: string}} SystemError\n*/\n\n/**\n * FetchError interface for operational errors\n */\nexport class FetchError extends FetchBaseError {\n\t/**\n\t * @param {string} message - Error message for human\n\t * @param {string} [type] - Error type for machine\n\t * @param {SystemError} [systemError] - For Node.js system error\n\t */\n\tconstructor(message, type, systemError) {\n\t\tsuper(message, type);\n\t\t// When err.type is `system`, err.erroredSysCall contains system error and err.code contains system error code\n\t\tif (systemError) {\n\t\t\t// eslint-disable-next-line no-multi-assign\n\t\t\tthis.code = this.errno = systemError.code;\n\t\t\tthis.erroredSysCall = systemError.syscall;\n\t\t}\n\t}\n}\n","/**\n * Is.js\n *\n * Object type checks.\n */\n\nconst NAME = Symbol.toStringTag;\n\n/**\n * Check if `obj` is a URLSearchParams object\n * ref: https://github.com/node-fetch/node-fetch/issues/296#issuecomment-307598143\n * @param {*} object - Object to check for\n * @return {boolean}\n */\nexport const isURLSearchParameters = object => {\n\treturn (\n\t\ttypeof object === 'object' &&\n\t\ttypeof object.append === 'function' &&\n\t\ttypeof object.delete === 'function' &&\n\t\ttypeof object.get === 'function' &&\n\t\ttypeof object.getAll === 'function' &&\n\t\ttypeof object.has === 'function' &&\n\t\ttypeof object.set === 'function' &&\n\t\ttypeof object.sort === 'function' &&\n\t\tobject[NAME] === 'URLSearchParams'\n\t);\n};\n\n/**\n * Check if `object` is a W3C `Blob` object (which `File` inherits from)\n * @param {*} object - Object to check for\n * @return {boolean}\n */\nexport const isBlob = object => {\n\treturn (\n\t\tobject &&\n\t\ttypeof object === 'object' &&\n\t\ttypeof object.arrayBuffer === 'function' &&\n\t\ttypeof object.type === 'string' &&\n\t\ttypeof object.stream === 'function' &&\n\t\ttypeof object.constructor === 'function' &&\n\t\t/^(Blob|File)$/.test(object[NAME])\n\t);\n};\n\n/**\n * Check if `obj` is an instance of AbortSignal.\n * @param {*} object - Object to check for\n * @return {boolean}\n */\nexport const isAbortSignal = object => {\n\treturn (\n\t\ttypeof object === 'object' && (\n\t\t\tobject[NAME] === 'AbortSignal' ||\n\t\t\tobject[NAME] === 'EventTarget'\n\t\t)\n\t);\n};\n\n/**\n * isDomainOrSubdomain reports whether sub is a subdomain (or exact match) of\n * the parent domain.\n *\n * Both domains must already be in canonical form.\n * @param {string|URL} original\n * @param {string|URL} destination\n */\nexport const isDomainOrSubdomain = (destination, original) => {\n\tconst orig = new URL(original).hostname;\n\tconst dest = new URL(destination).hostname;\n\n\treturn orig === dest || orig.endsWith(`.${dest}`);\n};\n\n/**\n * isSameProtocol reports whether the two provided URLs use the same protocol.\n *\n * Both domains must already be in canonical form.\n * @param {string|URL} original\n * @param {string|URL} destination\n */\nexport const isSameProtocol = (destination, original) => {\n\tconst orig = new URL(original).protocol;\n\tconst dest = new URL(destination).protocol;\n\n\treturn orig === dest;\n};\n","/*! node-domexception. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */\n\nif (!globalThis.DOMException) {\n try {\n const { MessageChannel } = require('worker_threads'),\n port = new MessageChannel().port1,\n ab = new ArrayBuffer()\n port.postMessage(ab, [ab, ab])\n } catch (err) {\n err.constructor.name === 'DOMException' && (\n globalThis.DOMException = err.constructor\n )\n }\n}\n\nmodule.exports = globalThis.DOMException\n","import { statSync, createReadStream, promises as fs } from 'node:fs'\nimport { basename } from 'node:path'\nimport DOMException from 'node-domexception'\n\nimport File from './file.js'\nimport Blob from './index.js'\n\nconst { stat } = fs\n\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n */\nconst blobFromSync = (path, type) => fromBlob(statSync(path), path, type)\n\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n * @returns {Promise<Blob>}\n */\nconst blobFrom = (path, type) => stat(path).then(stat => fromBlob(stat, path, type))\n\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n * @returns {Promise<File>}\n */\nconst fileFrom = (path, type) => stat(path).then(stat => fromFile(stat, path, type))\n\n/**\n * @param {string} path filepath on the disk\n * @param {string} [type] mimetype to use\n */\nconst fileFromSync = (path, type) => fromFile(statSync(path), path, type)\n\n// @ts-ignore\nconst fromBlob = (stat, path, type = '') => new Blob([new BlobDataItem({\n path,\n size: stat.size,\n lastModified: stat.mtimeMs,\n start: 0\n})], { type })\n\n// @ts-ignore\nconst fromFile = (stat, path, type = '') => new File([new BlobDataItem({\n path,\n size: stat.size,\n lastModified: stat.mtimeMs,\n start: 0\n})], basename(path), { type, lastModified: stat.mtimeMs })\n\n/**\n * This is a blob backed up by a file on the disk\n * with minium requirement. Its wrapped around a Blob as a blobPart\n * so you have no direct access to this.\n *\n * @private\n */\nclass BlobDataItem {\n #path\n #start\n\n constructor (options) {\n this.#path = options.path\n this.#start = options.start\n this.size = options.size\n this.lastModified = options.lastModified\n }\n\n /**\n * Slicing arguments is first validated and formatted\n * to not be out of range by Blob.prototype.slice\n */\n slice (start, end) {\n return new BlobDataItem({\n path: this.#path,\n lastModified: this.lastModified,\n size: end - start,\n start: this.#start + start\n })\n }\n\n async * stream () {\n const { mtimeMs } = await stat(this.#path)\n if (mtimeMs > this.lastModified) {\n throw new DOMException('The requested file could not be read, typically due to permission problems that have occurred after a reference to a file was acquired.', 'NotReadableError')\n }\n yield * createReadStream(this.#path, {\n start: this.#start,\n end: this.#start + this.size - 1\n })\n }\n\n get [Symbol.toStringTag] () {\n return 'Blob'\n }\n}\n\nexport default blobFromSync\nexport { File, Blob, blobFrom, blobFromSync, fileFrom, fileFromSync }\n","import {File} from 'fetch-blob/from.js';\nimport {FormData} from 'formdata-polyfill/esm.min.js';\n\nlet s = 0;\nconst S = {\n\tSTART_BOUNDARY: s++,\n\tHEADER_FIELD_START: s++,\n\tHEADER_FIELD: s++,\n\tHEADER_VALUE_START: s++,\n\tHEADER_VALUE: s++,\n\tHEADER_VALUE_ALMOST_DONE: s++,\n\tHEADERS_ALMOST_DONE: s++,\n\tPART_DATA_START: s++,\n\tPART_DATA: s++,\n\tEND: s++\n};\n\nlet f = 1;\nconst F = {\n\tPART_BOUNDARY: f,\n\tLAST_BOUNDARY: f *= 2\n};\n\nconst LF = 10;\nconst CR = 13;\nconst SPACE = 32;\nconst HYPHEN = 45;\nconst COLON = 58;\nconst A = 97;\nconst Z = 122;\n\nconst lower = c => c | 0x20;\n\nconst noop = () => {};\n\nclass MultipartParser {\n\t/**\n\t * @param {string} boundary\n\t */\n\tconstructor(boundary) {\n\t\tthis.index = 0;\n\t\tthis.flags = 0;\n\n\t\tthis.onHeaderEnd = noop;\n\t\tthis.onHeaderField = noop;\n\t\tthis.onHeadersEnd = noop;\n\t\tthis.onHeaderValue = noop;\n\t\tthis.onPartBegin = noop;\n\t\tthis.onPartData = noop;\n\t\tthis.onPartEnd = noop;\n\n\t\tthis.boundaryChars = {};\n\n\t\tboundary = '\\r\\n--' + boundary;\n\t\tconst ui8a = new Uint8Array(boundary.length);\n\t\tfor (let i = 0; i < boundary.length; i++) {\n\t\t\tui8a[i] = boundary.charCodeAt(i);\n\t\t\tthis.boundaryChars[ui8a[i]] = true;\n\t\t}\n\n\t\tthis.boundary = ui8a;\n\t\tthis.lookbehind = new Uint8Array(this.boundary.length + 8);\n\t\tthis.state = S.START_BOUNDARY;\n\t}\n\n\t/**\n\t * @param {Uint8Array} data\n\t */\n\twrite(data) {\n\t\tlet i = 0;\n\t\tconst length_ = data.length;\n\t\tlet previousIndex = this.index;\n\t\tlet {lookbehind, boundary, boundaryChars, index, state, flags} = this;\n\t\tconst boundaryLength = this.boundary.length;\n\t\tconst boundaryEnd = boundaryLength - 1;\n\t\tconst bufferLength = data.length;\n\t\tlet c;\n\t\tlet cl;\n\n\t\tconst mark = name => {\n\t\t\tthis[name + 'Mark'] = i;\n\t\t};\n\n\t\tconst clear = name => {\n\t\t\tdelete this[name + 'Mark'];\n\t\t};\n\n\t\tconst callback = (callbackSymbol, start, end, ui8a) => {\n\t\t\tif (start === undefined || start !== end) {\n\t\t\t\tthis[callbackSymbol](ui8a && ui8a.subarray(start, end));\n\t\t\t}\n\t\t};\n\n\t\tconst dataCallback = (name, clear) => {\n\t\t\tconst markSymbol = name + 'Mark';\n\t\t\tif (!(markSymbol in this)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (clear) {\n\t\t\t\tcallback(name, this[markSymbol], i, data);\n\t\t\t\tdelete this[markSymbol];\n\t\t\t} else {\n\t\t\t\tcallback(name, this[markSymbol], data.length, data);\n\t\t\t\tthis[markSymbol] = 0;\n\t\t\t}\n\t\t};\n\n\t\tfor (i = 0; i < length_; i++) {\n\t\t\tc = data[i];\n\n\t\t\tswitch (state) {\n\t\t\t\tcase S.START_BOUNDARY:\n\t\t\t\t\tif (index === boundary.length - 2) {\n\t\t\t\t\t\tif (c === HYPHEN) {\n\t\t\t\t\t\t\tflags |= F.LAST_BOUNDARY;\n\t\t\t\t\t\t} else if (c !== CR) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else if (index - 1 === boundary.length - 2) {\n\t\t\t\t\t\tif (flags & F.LAST_BOUNDARY && c === HYPHEN) {\n\t\t\t\t\t\t\tstate = S.END;\n\t\t\t\t\t\t\tflags = 0;\n\t\t\t\t\t\t} else if (!(flags & F.LAST_BOUNDARY) && c === LF) {\n\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t\tcallback('onPartBegin');\n\t\t\t\t\t\t\tstate = S.HEADER_FIELD_START;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (c !== boundary[index + 2]) {\n\t\t\t\t\t\tindex = -2;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (c === boundary[index + 2]) {\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase S.HEADER_FIELD_START:\n\t\t\t\t\tstate = S.HEADER_FIELD;\n\t\t\t\t\tmark('onHeaderField');\n\t\t\t\t\tindex = 0;\n\t\t\t\t\t// falls through\n\t\t\t\tcase S.HEADER_FIELD:\n\t\t\t\t\tif (c === CR) {\n\t\t\t\t\t\tclear('onHeaderField');\n\t\t\t\t\t\tstate = S.HEADERS_ALMOST_DONE;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tindex++;\n\t\t\t\t\tif (c === HYPHEN) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (c === COLON) {\n\t\t\t\t\t\tif (index === 1) {\n\t\t\t\t\t\t\t// empty header field\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdataCallback('onHeaderField', true);\n\t\t\t\t\t\tstate = S.HEADER_VALUE_START;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcl = lower(c);\n\t\t\t\t\tif (cl < A || cl > Z) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase S.HEADER_VALUE_START:\n\t\t\t\t\tif (c === SPACE) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tmark('onHeaderValue');\n\t\t\t\t\tstate = S.HEADER_VALUE;\n\t\t\t\t\t// falls through\n\t\t\t\tcase S.HEADER_VALUE:\n\t\t\t\t\tif (c === CR) {\n\t\t\t\t\t\tdataCallback('onHeaderValue', true);\n\t\t\t\t\t\tcallback('onHeaderEnd');\n\t\t\t\t\t\tstate = S.HEADER_VALUE_ALMOST_DONE;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase S.HEADER_VALUE_ALMOST_DONE:\n\t\t\t\t\tif (c !== LF) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tstate = S.HEADER_FIELD_START;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S.HEADERS_ALMOST_DONE:\n\t\t\t\t\tif (c !== LF) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tcallback('onHeadersEnd');\n\t\t\t\t\tstate = S.PART_DATA_START;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S.PART_DATA_START:\n\t\t\t\t\tstate = S.PART_DATA;\n\t\t\t\t\tmark('onPartData');\n\t\t\t\t\t// falls through\n\t\t\t\tcase S.PART_DATA:\n\t\t\t\t\tpreviousIndex = index;\n\n\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t// boyer-moore derrived algorithm to safely skip non-boundary data\n\t\t\t\t\t\ti += boundaryEnd;\n\t\t\t\t\t\twhile (i < bufferLength && !(data[i] in boundaryChars)) {\n\t\t\t\t\t\t\ti += boundaryLength;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ti -= boundaryEnd;\n\t\t\t\t\t\tc = data[i];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (index < boundary.length) {\n\t\t\t\t\t\tif (boundary[index] === c) {\n\t\t\t\t\t\t\tif (index === 0) {\n\t\t\t\t\t\t\t\tdataCallback('onPartData', true);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tindex++;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (index === boundary.length) {\n\t\t\t\t\t\tindex++;\n\t\t\t\t\t\tif (c === CR) {\n\t\t\t\t\t\t\t// CR = part boundary\n\t\t\t\t\t\t\tflags |= F.PART_BOUNDARY;\n\t\t\t\t\t\t} else if (c === HYPHEN) {\n\t\t\t\t\t\t\t// HYPHEN = end boundary\n\t\t\t\t\t\t\tflags |= F.LAST_BOUNDARY;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (index - 1 === boundary.length) {\n\t\t\t\t\t\tif (flags & F.PART_BOUNDARY) {\n\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t\tif (c === LF) {\n\t\t\t\t\t\t\t\t// unset the PART_BOUNDARY flag\n\t\t\t\t\t\t\t\tflags &= ~F.PART_BOUNDARY;\n\t\t\t\t\t\t\t\tcallback('onPartEnd');\n\t\t\t\t\t\t\t\tcallback('onPartBegin');\n\t\t\t\t\t\t\t\tstate = S.HEADER_FIELD_START;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (flags & F.LAST_BOUNDARY) {\n\t\t\t\t\t\t\tif (c === HYPHEN) {\n\t\t\t\t\t\t\t\tcallback('onPartEnd');\n\t\t\t\t\t\t\t\tstate = S.END;\n\t\t\t\t\t\t\t\tflags = 0;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (index > 0) {\n\t\t\t\t\t\t// when matching a possible boundary, keep a lookbehind reference\n\t\t\t\t\t\t// in case it turns out to be a false lead\n\t\t\t\t\t\tlookbehind[index - 1] = c;\n\t\t\t\t\t} else if (previousIndex > 0) {\n\t\t\t\t\t\t// if our boundary turned out to be rubbish, the captured lookbehind\n\t\t\t\t\t\t// belongs to partData\n\t\t\t\t\t\tconst _lookbehind = new Uint8Array(lookbehind.buffer, lookbehind.byteOffset, lookbehind.byteLength);\n\t\t\t\t\t\tcallback('onPartData', 0, previousIndex, _lookbehind);\n\t\t\t\t\t\tpreviousIndex = 0;\n\t\t\t\t\t\tmark('onPartData');\n\n\t\t\t\t\t\t// reconsider the current character even so it interrupted the sequence\n\t\t\t\t\t\t// it could be the beginning of a new sequence\n\t\t\t\t\t\ti--;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase S.END:\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Unexpected state entered: ${state}`);\n\t\t\t}\n\t\t}\n\n\t\tdataCallback('onHeaderField');\n\t\tdataCallback('onHeaderValue');\n\t\tdataCallback('onPartData');\n\n\t\t// Update properties for the next call\n\t\tthis.index = index;\n\t\tthis.state = state;\n\t\tthis.flags = flags;\n\t}\n\n\tend() {\n\t\tif ((this.state === S.HEADER_FIELD_START && this.index === 0) ||\n\t\t\t(this.state === S.PART_DATA && this.index === this.boundary.length)) {\n\t\t\tthis.onPartEnd();\n\t\t} else if (this.state !== S.END) {\n\t\t\tthrow new Error('MultipartParser.end(): stream ended unexpectedly');\n\t\t}\n\t}\n}\n\nfunction _fileName(headerValue) {\n\t// matches either a quoted-string or a token (RFC 2616 section 19.5.1)\n\tconst m = headerValue.match(/\\bfilename=(\"(.*?)\"|([^()<>@,;:\\\\\"/[\\]?={}\\s\\t]+))($|;\\s)/i);\n\tif (!m) {\n\t\treturn;\n\t}\n\n\tconst match = m[2] || m[3] || '';\n\tlet filename = match.slice(match.lastIndexOf('\\\\') + 1);\n\tfilename = filename.replace(/%22/g, '\"');\n\tfilename = filename.replace(/&#(\\d{4});/g, (m, code) => {\n\t\treturn String.fromCharCode(code);\n\t});\n\treturn filename;\n}\n\nexport async function toFormData(Body, ct) {\n\tif (!/multipart/i.test(ct)) {\n\t\tthrow new TypeError('Failed to fetch');\n\t}\n\n\tconst m = ct.match(/boundary=(?:\"([^\"]+)\"|([^;]+))/i);\n\n\tif (!m) {\n\t\tthrow new TypeError('no or bad content-type header, no multipart boundary');\n\t}\n\n\tconst parser = new MultipartParser(m[1] || m[2]);\n\n\tlet headerField;\n\tlet headerValue;\n\tlet entryValue;\n\tlet entryName;\n\tlet contentType;\n\tlet filename;\n\tconst entryChunks = [];\n\tconst formData = new FormData();\n\n\tconst onPartData = ui8a => {\n\t\tentryValue += decoder.decode(ui8a, {stream: true});\n\t};\n\n\tconst appendToFile = ui8a => {\n\t\tentryChunks.push(ui8a);\n\t};\n\n\tconst appendFileToFormData = () => {\n\t\tconst file = new File(entryChunks, filename, {type: contentType});\n\t\tformData.append(entryName, file);\n\t};\n\n\tconst appendEntryToFormData = () => {\n\t\tformData.append(entryName, entryValue);\n\t};\n\n\tconst decoder = new TextDecoder('utf-8');\n\tdecoder.decode();\n\n\tparser.onPartBegin = function () {\n\t\tparser.onPartData = onPartData;\n\t\tparser.onPartEnd = appendEntryToFormData;\n\n\t\theaderField = '';\n\t\theaderValue = '';\n\t\tentryValue = '';\n\t\tentryName = '';\n\t\tcontentType = '';\n\t\tfilename = null;\n\t\tentryChunks.length = 0;\n\t};\n\n\tparser.onHeaderField = function (ui8a) {\n\t\theaderField += decoder.decode(ui8a, {stream: true});\n\t};\n\n\tparser.onHeaderValue = function (ui8a) {\n\t\theaderValue += decoder.decode(ui8a, {stream: true});\n\t};\n\n\tparser.onHeaderEnd = function () {\n\t\theaderValue += decoder.decode();\n\t\theaderField = headerField.toLowerCase();\n\n\t\tif (headerField === 'content-disposition') {\n\t\t\t// matches either a quoted-string or a token (RFC 2616 section 19.5.1)\n\t\t\tconst m = headerValue.match(/\\bname=(\"([^\"]*)\"|([^()<>@,;:\\\\\"/[\\]?={}\\s\\t]+))/i);\n\n\t\t\tif (m) {\n\t\t\t\tentryName = m[2] || m[3] || '';\n\t\t\t}\n\n\t\t\tfilename = _fileName(headerValue);\n\n\t\t\tif (filename) {\n\t\t\t\tparser.onPartData = appendToFile;\n\t\t\t\tparser.onPartEnd = appendFileToFormData;\n\t\t\t}\n\t\t} else if (headerField === 'content-type') {\n\t\t\tcontentType = headerValue;\n\t\t}\n\n\t\theaderValue = '';\n\t\theaderField = '';\n\t};\n\n\tfor await (const chunk of Body) {\n\t\tparser.write(chunk);\n\t}\n\n\tparser.end();\n\n\treturn formData;\n}\n","\n/**\n * Body.js\n *\n * Body interface provides common methods for Request and Response\n */\n\nimport Stream, {PassThrough} from 'node:stream';\nimport {types, deprecate, promisify} from 'node:util';\nimport {Buffer} from 'node:buffer';\n\nimport Blob from 'fetch-blob';\nimport {FormData, formDataToBlob} from 'formdata-polyfill/esm.min.js';\n\nimport {FetchError} from './errors/fetch-error.js';\nimport {FetchBaseError} from './errors/base.js';\nimport {isBlob, isURLSearchParameters} from './utils/is.js';\n\nconst pipeline = promisify(Stream.pipeline);\nconst INTERNALS = Symbol('Body internals');\n\n/**\n * Body mixin\n *\n * Ref: https://fetch.spec.whatwg.org/#body\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nexport default class Body {\n\tconstructor(body, {\n\t\tsize = 0\n\t} = {}) {\n\t\tlet boundary = null;\n\n\t\tif (body === null) {\n\t\t\t// Body is undefined or null\n\t\t\tbody = null;\n\t\t} else if (isURLSearchParameters(body)) {\n\t\t\t// Body is a URLSearchParams\n\t\t\tbody = Buffer.from(body.toString());\n\t\t} else if (isBlob(body)) {\n\t\t\t// Body is blob\n\t\t} else if (Buffer.isBuffer(body)) {\n\t\t\t// Body is Buffer\n\t\t} else if (types.isAnyArrayBuffer(body)) {\n\t\t\t// Body is ArrayBuffer\n\t\t\tbody = Buffer.from(body);\n\t\t} else if (ArrayBuffer.isView(body)) {\n\t\t\t// Body is ArrayBufferView\n\t\t\tbody = Buffer.from(body.buffer, body.byteOffset, body.byteLength);\n\t\t} else if (body instanceof Stream) {\n\t\t\t// Body is stream\n\t\t} else if (body instanceof FormData) {\n\t\t\t// Body is FormData\n\t\t\tbody = formDataToBlob(body);\n\t\t\tboundary = body.type.split('=')[1];\n\t\t} else {\n\t\t\t// None of the above\n\t\t\t// coerce to string then buffer\n\t\t\tbody = Buffer.from(String(body));\n\t\t}\n\n\t\tlet stream = body;\n\n\t\tif (Buffer.isBuffer(body)) {\n\t\t\tstream = Stream.Readable.from(body);\n\t\t} else if (isBlob(body)) {\n\t\t\tstream = Stream.Readable.from(body.stream());\n\t\t}\n\n\t\tthis[INTERNALS] = {\n\t\t\tbody,\n\t\t\tstream,\n\t\t\tboundary,\n\t\t\tdisturbed: false,\n\t\t\terror: null\n\t\t};\n\t\tthis.size = size;\n\n\t\tif (body instanceof Stream) {\n\t\t\tbody.on('error', error_ => {\n\t\t\t\tconst error = error_ instanceof FetchBaseError ?\n\t\t\t\t\terror_ :\n\t\t\t\t\tnew FetchError(`Invalid response body while trying to fetch ${this.url}: ${error_.message}`, 'system', error_);\n\t\t\t\tthis[INTERNALS].error = error;\n\t\t\t});\n\t\t}\n\t}\n\n\tget body() {\n\t\treturn this[INTERNALS].stream;\n\t}\n\n\tget bodyUsed() {\n\t\treturn this[INTERNALS].disturbed;\n\t}\n\n\t/**\n\t * Decode response as ArrayBuffer\n\t *\n\t * @return Promise\n\t */\n\tasync arrayBuffer() {\n\t\tconst {buffer, byteOffset, byteLength} = await consumeBody(this);\n\t\treturn buffer.slice(byteOffset, byteOffset + byteLength);\n\t}\n\n\tasync formData() {\n\t\tconst ct = this.headers.get('content-type');\n\n\t\tif (ct.startsWith('application/x-www-form-urlencoded')) {\n\t\t\tconst formData = new FormData();\n\t\t\tconst parameters = new URLSearchParams(await this.text());\n\n\t\t\tfor (const [name, value] of parameters) {\n\t\t\t\tformData.append(name, value);\n\t\t\t}\n\n\t\t\treturn formData;\n\t\t}\n\n\t\tconst {toFormData} = await import('./utils/multipart-parser.js');\n\t\treturn toFormData(this.body, ct);\n\t}\n\n\t/**\n\t * Return raw response as Blob\n\t *\n\t * @return Promise\n\t */\n\tasync blob() {\n\t\tconst ct = (this.headers && this.headers.get('content-type')) || (this[INTERNALS].body && this[INTERNALS].body.type) || '';\n\t\tconst buf = await this.arrayBuffer();\n\n\t\treturn new Blob([buf], {\n\t\t\ttype: ct\n\t\t});\n\t}\n\n\t/**\n\t * Decode response as json\n\t *\n\t * @return Promise\n\t */\n\tasync json() {\n\t\tconst text = await this.text();\n\t\treturn JSON.parse(text);\n\t}\n\n\t/**\n\t * Decode response as text\n\t *\n\t * @return Promise\n\t */\n\tasync text() {\n\t\tconst buffer = await consumeBody(this);\n\t\treturn new TextDecoder().decode(buffer);\n\t}\n\n\t/**\n\t * Decode response as buffer (non-spec api)\n\t *\n\t * @return Promise\n\t */\n\tbuffer() {\n\t\treturn consumeBody(this);\n\t}\n}\n\nBody.prototype.buffer = deprecate(Body.prototype.buffer, 'Please use \\'response.arrayBuffer()\\' instead of \\'response.buffer()\\'', 'node-fetch#buffer');\n\n// In browsers, all properties are enumerable.\nObject.defineProperties(Body.prototype, {\n\tbody: {enumerable: true},\n\tbodyUsed: {enumerable: true},\n\tarrayBuffer: {enumerable: true},\n\tblob: {enumerable: true},\n\tjson: {enumerable: true},\n\ttext: {enumerable: true},\n\tdata: {get: deprecate(() => {},\n\t\t'data doesn\\'t exist, use json(), text(), arrayBuffer(), or body instead',\n\t\t'https://github.com/node-fetch/node-fetch/issues/1000 (response)')}\n});\n\n/**\n * Consume and convert an entire Body to a Buffer.\n *\n * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body\n *\n * @return Promise\n */\nasync function consumeBody(data) {\n\tif (data[INTERNALS].disturbed) {\n\t\tthrow new TypeError(`body used already for: ${data.url}`);\n\t}\n\n\tdata[INTERNALS].disturbed = true;\n\n\tif (data[INTERNALS].error) {\n\t\tthrow data[INTERNALS].error;\n\t}\n\n\tconst {body} = data;\n\n\t// Body is null\n\tif (body === null) {\n\t\treturn Buffer.alloc(0);\n\t}\n\n\t/* c8 ignore next 3 */\n\tif (!(body instanceof Stream)) {\n\t\treturn Buffer.alloc(0);\n\t}\n\n\t// Body is stream\n\t// get ready to actually consume the body\n\tconst accum = [];\n\tlet accumBytes = 0;\n\n\ttry {\n\t\tfor await (const chunk of body) {\n\t\t\tif (data.size > 0 && accumBytes + chunk.length > data.size) {\n\t\t\t\tconst error = new FetchError(`content size at ${data.url} over limit: ${data.size}`, 'max-size');\n\t\t\t\tbody.destroy(error);\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\taccumBytes += chunk.length;\n\t\t\taccum.push(chunk);\n\t\t}\n\t} catch (error) {\n\t\tconst error_ = error instanceof FetchBaseError ? error : new FetchError(`Invalid response body while trying to fetch ${data.url}: ${error.message}`, 'system', error);\n\t\tthrow error_;\n\t}\n\n\tif (body.readableEnded === true || body._readableState.ended === true) {\n\t\ttry {\n\t\t\tif (accum.every(c => typeof c === 'string')) {\n\t\t\t\treturn Buffer.from(accum.join(''));\n\t\t\t}\n\n\t\t\treturn Buffer.concat(accum, accumBytes);\n\t\t} catch (error) {\n\t\t\tthrow new FetchError(`Could not create Buffer from response body for ${data.url}: ${error.message}`, 'system', error);\n\t\t}\n\t} else {\n\t\tthrow new FetchError(`Premature close of server response while trying to fetch ${data.url}`);\n\t}\n}\n\n/**\n * Clone body given Res/Req instance\n *\n * @param Mixed instance Response or Request instance\n * @param String highWaterMark highWaterMark for both PassThrough body streams\n * @return Mixed\n */\nexport const clone = (instance, highWaterMark) => {\n\tlet p1;\n\tlet p2;\n\tlet {body} = instance[INTERNALS];\n\n\t// Don't allow cloning a used body\n\tif (instance.bodyUsed) {\n\t\tthrow new Error('cannot clone body after it is used');\n\t}\n\n\t// Check that body is a stream and not form-data object\n\t// note: we can't clone the form-data object without having it as a dependency\n\tif ((body instanceof Stream) && (typeof body.getBoundary !== 'function')) {\n\t\t// Tee instance body\n\t\tp1 = new PassThrough({highWaterMark});\n\t\tp2 = new PassThrough({highWaterMark});\n\t\tbody.pipe(p1);\n\t\tbody.pipe(p2);\n\t\t// Set instance body to teed body and return the other teed body\n\t\tinstance[INTERNALS].stream = p1;\n\t\tbody = p2;\n\t}\n\n\treturn body;\n};\n\nconst getNonSpecFormDataBoundary = deprecate(\n\tbody => body.getBoundary(),\n\t'form-data doesn\\'t follow the spec and requires special treatment. Use alternative package',\n\t'https://github.com/node-fetch/node-fetch/issues/1167'\n);\n\n/**\n * Performs the operation \"extract a `Content-Type` value from |object|\" as\n * specified in the specification:\n * https://fetch.spec.whatwg.org/#concept-bodyinit-extract\n *\n * This function assumes that instance.body is present.\n *\n * @param {any} body Any options.body input\n * @returns {string | null}\n */\nexport const extractContentType = (body, request) => {\n\t// Body is null or undefined\n\tif (body === null) {\n\t\treturn null;\n\t}\n\n\t// Body is string\n\tif (typeof body === 'string') {\n\t\treturn 'text/plain;charset=UTF-8';\n\t}\n\n\t// Body is a URLSearchParams\n\tif (isURLSearchParameters(body)) {\n\t\treturn 'application/x-www-form-urlencoded;charset=UTF-8';\n\t}\n\n\t// Body is blob\n\tif (isBlob(body)) {\n\t\treturn body.type || null;\n\t}\n\n\t// Body is a Buffer (Buffer, ArrayBuffer or ArrayBufferView)\n\tif (Buffer.isBuffer(body) || types.isAnyArrayBuffer(body) || ArrayBuffer.isView(body)) {\n\t\treturn null;\n\t}\n\n\tif (body instanceof FormData) {\n\t\treturn `multipart/form-data; boundary=${request[INTERNALS].boundary}`;\n\t}\n\n\t// Detect form data input from form-data module\n\tif (body && typeof body.getBoundary === 'function') {\n\t\treturn `multipart/form-data;boundary=${getNonSpecFormDataBoundary(body)}`;\n\t}\n\n\t// Body is stream - can't really do much about this\n\tif (body instanceof Stream) {\n\t\treturn null;\n\t}\n\n\t// Body constructor defaults other things to string\n\treturn 'text/plain;charset=UTF-8';\n};\n\n/**\n * The Fetch Standard treats this as if \"total bytes\" is a property on the body.\n * For us, we have to explicitly get it with a function.\n *\n * ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes\n *\n * @param {any} obj.body Body object from the Body instance.\n * @returns {number | null}\n */\nexport const getTotalBytes = request => {\n\tconst {body} = request[INTERNALS];\n\n\t// Body is null or undefined\n\tif (body === null) {\n\t\treturn 0;\n\t}\n\n\t// Body is Blob\n\tif (isBlob(body)) {\n\t\treturn body.size;\n\t}\n\n\t// Body is Buffer\n\tif (Buffer.isBuffer(body)) {\n\t\treturn body.length;\n\t}\n\n\t// Detect form data input from form-data module\n\tif (body && typeof body.getLengthSync === 'function') {\n\t\treturn body.hasKnownLength && body.hasKnownLength() ? body.getLengthSync() : null;\n\t}\n\n\t// Body is stream\n\treturn null;\n};\n\n/**\n * Write a Body to a Node.js WritableStream (e.g. http.Request) object.\n *\n * @param {Stream.Writable} dest The stream to write to.\n * @param obj.body Body object from the Body instance.\n * @returns {Promise<void>}\n */\nexport const writeToStream = async (dest, {body}) => {\n\tif (body === null) {\n\t\t// Body is null\n\t\tdest.end();\n\t} else {\n\t\t// Body is stream\n\t\tawait pipeline(body, dest);\n\t}\n};\n","/**\n * Headers.js\n *\n * Headers class offers convenient helpers\n */\n\nimport {types} from 'node:util';\nimport http from 'node:http';\n\n/* c8 ignore next 9 */\nconst validateHeaderName = typeof http.validateHeaderName === 'function' ?\n\thttp.validateHeaderName :\n\tname => {\n\t\tif (!/^[\\^`\\-\\w!#$%&'*+.|~]+$/.test(name)) {\n\t\t\tconst error = new TypeError(`Header name must be a valid HTTP token [${name}]`);\n\t\t\tObject.defineProperty(error, 'code', {value: 'ERR_INVALID_HTTP_TOKEN'});\n\t\t\tthrow error;\n\t\t}\n\t};\n\n/* c8 ignore next 9 */\nconst validateHeaderValue = typeof http.validateHeaderValue === 'function' ?\n\thttp.validateHeaderValue :\n\t(name, value) => {\n\t\tif (/[^\\t\\u0020-\\u007E\\u0080-\\u00FF]/.test(value)) {\n\t\t\tconst error = new TypeError(`Invalid character in header content [\"${name}\"]`);\n\t\t\tObject.defineProperty(error, 'code', {value: 'ERR_INVALID_CHAR'});\n\t\t\tthrow error;\n\t\t}\n\t};\n\n/**\n * @typedef {Headers | Record<string, string> | Iterable<readonly [string, string]> | Iterable<Iterable<string>>} HeadersInit\n */\n\n/**\n * This Fetch API interface allows you to perform various actions on HTTP request and response headers.\n * These actions include retrieving, setting, adding to, and removing.\n * A Headers object has an associated header list, which is initially empty and consists of zero or more name and value pairs.\n * You can add to this using methods like append() (see Examples.)\n * In all methods of this interface, header names are matched by case-insensitive byte sequence.\n *\n */\nexport default class Headers extends URLSearchParams {\n\t/**\n\t * Headers class\n\t *\n\t * @constructor\n\t * @param {HeadersInit} [init] - Response headers\n\t */\n\tconstructor(init) {\n\t\t// Validate and normalize init object in [name, value(s)][]\n\t\t/** @type {string[][]} */\n\t\tlet result = [];\n\t\tif (init instanceof Headers) {\n\t\t\tconst raw = init.raw();\n\t\t\tfor (const [name, values] of Object.entries(raw)) {\n\t\t\t\tresult.push(...values.map(value => [name, value]));\n\t\t\t}\n\t\t} else if (init == null) { // eslint-disable-line no-eq-null, eqeqeq\n\t\t\t// No op\n\t\t} else if (typeof init === 'object' && !types.isBoxedPrimitive(init)) {\n\t\t\tconst method = init[Symbol.iterator];\n\t\t\t// eslint-disable-next-line no-eq-null, eqeqeq\n\t\t\tif (method == null) {\n\t\t\t\t// Record<ByteString, ByteString>\n\t\t\t\tresult.push(...Object.entries(init));\n\t\t\t} else {\n\t\t\t\tif (typeof method !== 'function') {\n\t\t\t\t\tthrow new TypeError('Header pairs must be iterable');\n\t\t\t\t}\n\n\t\t\t\t// Sequence<sequence<ByteString>>\n\t\t\t\t// Note: per spec we have to first exhaust the lists then process them\n\t\t\t\tresult = [...init]\n\t\t\t\t\t.map(pair => {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttypeof pair !== 'object' || types.isBoxedPrimitive(pair)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthrow new TypeError('Each header pair must be an iterable object');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [...pair];\n\t\t\t\t\t}).map(pair => {\n\t\t\t\t\t\tif (pair.length !== 2) {\n\t\t\t\t\t\t\tthrow new TypeError('Each header pair must be a name/value tuple');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [...pair];\n\t\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new TypeError('Failed to construct \\'Headers\\': The provided value is not of type \\'(sequence<sequence<ByteString>> or record<ByteString, ByteString>)');\n\t\t}\n\n\t\t// Validate and lowercase\n\t\tresult =\n\t\t\tresult.length > 0 ?\n\t\t\t\tresult.map(([name, value]) => {\n\t\t\t\t\tvalidateHeaderName(name);\n\t\t\t\t\tvalidateHeaderValue(name, String(value));\n\t\t\t\t\treturn [String(name).toLowerCase(), String(value)];\n\t\t\t\t}) :\n\t\t\t\tundefined;\n\n\t\tsuper(result);\n\n\t\t// Returning a Proxy that will lowercase key names, validate parameters and sort keys\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn new Proxy(this, {\n\t\t\tget(target, p, receiver) {\n\t\t\t\tswitch (p) {\n\t\t\t\t\tcase 'append':\n\t\t\t\t\tcase 'set':\n\t\t\t\t\t\treturn (name, value) => {\n\t\t\t\t\t\t\tvalidateHeaderName(name);\n\t\t\t\t\t\t\tvalidateHeaderValue(name, String(value));\n\t\t\t\t\t\t\treturn URLSearchParams.prototype[p].call(\n\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\tString(name).toLowerCase(),\n\t\t\t\t\t\t\t\tString(value)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t};\n\n\t\t\t\t\tcase 'delete':\n\t\t\t\t\tcase 'has':\n\t\t\t\t\tcase 'getAll':\n\t\t\t\t\t\treturn name => {\n\t\t\t\t\t\t\tvalidateHeaderName(name);\n\t\t\t\t\t\t\treturn URLSearchParams.prototype[p].call(\n\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\tString(name).toLowerCase()\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t};\n\n\t\t\t\t\tcase 'keys':\n\t\t\t\t\t\treturn () => {\n\t\t\t\t\t\t\ttarget.sort();\n\t\t\t\t\t\t\treturn new Set(URLSearchParams.prototype.keys.call(target)).keys();\n\t\t\t\t\t\t};\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn Reflect.get(target, p, receiver);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t/* c8 ignore next */\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn this.constructor.name;\n\t}\n\n\ttoString() {\n\t\treturn Object.prototype.toString.call(this);\n\t}\n\n\tget(name) {\n\t\tconst values = this.getAll(name);\n\t\tif (values.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tlet value = values.join(', ');\n\t\tif (/^content-encoding$/i.test(name)) {\n\t\t\tvalue = value.toLowerCase();\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tforEach(callback, thisArg = undefined) {\n\t\tfor (const name of this.keys()) {\n\t\t\tReflect.apply(callback, thisArg, [this.get(name), name, this]);\n\t\t}\n\t}\n\n\t* values() {\n\t\tfor (const name of this.keys()) {\n\t\t\tyield this.get(name);\n\t\t}\n\t}\n\n\t/**\n\t * @type {() => IterableIterator<[string, string]>}\n\t */\n\t* entries() {\n\t\tfor (const name of this.keys()) {\n\t\t\tyield [name, this.get(name)];\n\t\t}\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.entries();\n\t}\n\n\t/**\n\t * Node-fetch non-spec method\n\t * returning all headers and their values as array\n\t * @returns {Record<string, string[]>}\n\t */\n\traw() {\n\t\treturn [...this.keys()].reduce((result, key) => {\n\t\t\tresult[key] = this.getAll(key);\n\t\t\treturn result;\n\t\t}, {});\n\t}\n\n\t/**\n\t * For better console.log(headers) and also to convert Headers into Node.js Request compatible format\n\t */\n\t[Symbol.for('nodejs.util.inspect.custom')]() {\n\t\treturn [...this.keys()].reduce((result, key) => {\n\t\t\tconst values = this.getAll(key);\n\t\t\t// Http.request() only supports string as Host header.\n\t\t\t// This hack makes specifying custom Host header possible.\n\t\t\tif (key === 'host') {\n\t\t\t\tresult[key] = values[0];\n\t\t\t} else {\n\t\t\t\tresult[key] = values.length > 1 ? values : values[0];\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}, {});\n\t}\n}\n\n/**\n * Re-shaping object for Web IDL tests\n * Only need to do it for overridden methods\n */\nObject.defineProperties(\n\tHeaders.prototype,\n\t['get', 'entries', 'forEach', 'values'].reduce((result, property) => {\n\t\tresult[property] = {enumerable: true};\n\t\treturn result;\n\t}, {})\n);\n\n/**\n * Create a Headers object from an http.IncomingMessage.rawHeaders, ignoring those that do\n * not conform to HTTP grammar productions.\n * @param {import('http').IncomingMessage['rawHeaders']} headers\n */\nexport function fromRawHeaders(headers = []) {\n\treturn new Headers(\n\t\theaders\n\t\t\t// Split into pairs\n\t\t\t.reduce((result, value, index, array) => {\n\t\t\t\tif (index % 2 === 0) {\n\t\t\t\t\tresult.push(array.slice(index, index + 2));\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}, [])\n\t\t\t.filter(([name, value]) => {\n\t\t\t\ttry {\n\t\t\t\t\tvalidateHeaderName(name);\n\t\t\t\t\tvalidateHeaderValue(name, String(value));\n\t\t\t\t\treturn true;\n\t\t\t\t} catch {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t})\n\n\t);\n}\n","const redirectStatus = new Set([301, 302, 303, 307, 308]);\n\n/**\n * Redirect code matching\n *\n * @param {number} code - Status code\n * @return {boolean}\n */\nexport const isRedirect = code => {\n\treturn redirectStatus.has(code);\n};\n","/**\n * Response.js\n *\n * Response class provides content decoding\n */\n\nimport Headers from './headers.js';\nimport Body, {clone, extractContentType} from './body.js';\nimport {isRedirect} from './utils/is-redirect.js';\n\nconst INTERNALS = Symbol('Response internals');\n\n/**\n * Response class\n *\n * Ref: https://fetch.spec.whatwg.org/#response-class\n *\n * @param Stream body Readable stream\n * @param Object opts Response options\n * @return Void\n */\nexport default class Response extends Body {\n\tconstructor(body = null, options = {}) {\n\t\tsuper(body, options);\n\n\t\t// eslint-disable-next-line no-eq-null, eqeqeq, no-negated-condition\n\t\tconst status = options.status != null ? options.status : 200;\n\n\t\tconst headers = new Headers(options.headers);\n\n\t\tif (body !== null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(body, this);\n\t\t\tif (contentType) {\n\t\t\t\theaders.append('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tthis[INTERNALS] = {\n\t\t\ttype: 'default',\n\t\t\turl: options.url,\n\t\t\tstatus,\n\t\t\tstatusText: options.statusText || '',\n\t\t\theaders,\n\t\t\tcounter: options.counter,\n\t\t\thighWaterMark: options.highWaterMark\n\t\t};\n\t}\n\n\tget type() {\n\t\treturn this[INTERNALS].type;\n\t}\n\n\tget url() {\n\t\treturn this[INTERNALS].url || '';\n\t}\n\n\tget status() {\n\t\treturn this[INTERNALS].status;\n\t}\n\n\t/**\n\t * Convenience property representing if the request ended normally\n\t */\n\tget ok() {\n\t\treturn this[INTERNALS].status >= 200 && this[INTERNALS].status < 300;\n\t}\n\n\tget redirected() {\n\t\treturn this[INTERNALS].counter > 0;\n\t}\n\n\tget statusText() {\n\t\treturn this[INTERNALS].statusText;\n\t}\n\n\tget headers() {\n\t\treturn this[INTERNALS].headers;\n\t}\n\n\tget highWaterMark() {\n\t\treturn this[INTERNALS].highWaterMark;\n\t}\n\n\t/**\n\t * Clone this response\n\t *\n\t * @return Response\n\t */\n\tclone() {\n\t\treturn new Response(clone(this, this.highWaterMark), {\n\t\t\ttype: this.type,\n\t\t\turl: this.url,\n\t\t\tstatus: this.status,\n\t\t\tstatusText: this.statusText,\n\t\t\theaders: this.headers,\n\t\t\tok: this.ok,\n\t\t\tredirected: this.redirected,\n\t\t\tsize: this.size,\n\t\t\thighWaterMark: this.highWaterMark\n\t\t});\n\t}\n\n\t/**\n\t * @param {string} url The URL that the new response is to originate from.\n\t * @param {number} status An optional status code for the response (e.g., 302.)\n\t * @returns {Response} A Response object.\n\t */\n\tstatic redirect(url, status = 302) {\n\t\tif (!isRedirect(status)) {\n\t\t\tthrow new RangeError('Failed to execute \"redirect\" on \"response\": Invalid status code');\n\t\t}\n\n\t\treturn new Response(null, {\n\t\t\theaders: {\n\t\t\t\tlocation: new URL(url).toString()\n\t\t\t},\n\t\t\tstatus\n\t\t});\n\t}\n\n\tstatic error() {\n\t\tconst response = new Response(null, {status: 0, statusText: ''});\n\t\tresponse[INTERNALS].type = 'error';\n\t\treturn response;\n\t}\n\n\tstatic json(data = undefined, init = {}) {\n\t\tconst body = JSON.stringify(data);\n\n\t\tif (body === undefined) {\n\t\t\tthrow new TypeError('data is not JSON serializable');\n\t\t}\n\n\t\tconst headers = new Headers(init && init.headers);\n\n\t\tif (!headers.has('content-type')) {\n\t\t\theaders.set('content-type', 'application/json');\n\t\t}\n\n\t\treturn new Response(body, {\n\t\t\t...init,\n\t\t\theaders\n\t\t});\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn 'Response';\n\t}\n}\n\nObject.defineProperties(Response.prototype, {\n\ttype: {enumerable: true},\n\turl: {enumerable: true},\n\tstatus: {enumerable: true},\n\tok: {enumerable: true},\n\tredirected: {enumerable: true},\n\tstatusText: {enumerable: true},\n\theaders: {enumerable: true},\n\tclone: {enumerable: true}\n});\n","export const getSearch = parsedURL => {\n\tif (parsedURL.search) {\n\t\treturn parsedURL.search;\n\t}\n\n\tconst lastOffset = parsedURL.href.length - 1;\n\tconst hash = parsedURL.hash || (parsedURL.href[lastOffset] === '#' ? '#' : '');\n\treturn parsedURL.href[lastOffset - hash.length] === '?' ? '?' : '';\n};\n","import {isIP} from 'node:net';\n\n/**\n * @external URL\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/URL|URL}\n */\n\n/**\n * @module utils/referrer\n * @private\n */\n\n/**\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#strip-url|Referrer Policy §8.4. Strip url for use as a referrer}\n * @param {string} URL\n * @param {boolean} [originOnly=false]\n */\nexport function stripURLForUseAsAReferrer(url, originOnly = false) {\n\t// 1. If url is null, return no referrer.\n\tif (url == null) { // eslint-disable-line no-eq-null, eqeqeq\n\t\treturn 'no-referrer';\n\t}\n\n\turl = new URL(url);\n\n\t// 2. If url's scheme is a local scheme, then return no referrer.\n\tif (/^(about|blob|data):$/.test(url.protocol)) {\n\t\treturn 'no-referrer';\n\t}\n\n\t// 3. Set url's username to the empty string.\n\turl.username = '';\n\n\t// 4. Set url's password to null.\n\t// Note: `null` appears to be a mistake as this actually results in the password being `\"null\"`.\n\turl.password = '';\n\n\t// 5. Set url's fragment to null.\n\t// Note: `null` appears to be a mistake as this actually results in the fragment being `\"#null\"`.\n\turl.hash = '';\n\n\t// 6. If the origin-only flag is true, then:\n\tif (originOnly) {\n\t\t// 6.1. Set url's path to null.\n\t\t// Note: `null` appears to be a mistake as this actually results in the path being `\"/null\"`.\n\t\turl.pathname = '';\n\n\t\t// 6.2. Set url's query to null.\n\t\t// Note: `null` appears to be a mistake as this actually results in the query being `\"?null\"`.\n\t\turl.search = '';\n\t}\n\n\t// 7. Return url.\n\treturn url;\n}\n\n/**\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#enumdef-referrerpolicy|enum ReferrerPolicy}\n */\nexport const ReferrerPolicy = new Set([\n\t'',\n\t'no-referrer',\n\t'no-referrer-when-downgrade',\n\t'same-origin',\n\t'origin',\n\t'strict-origin',\n\t'origin-when-cross-origin',\n\t'strict-origin-when-cross-origin',\n\t'unsafe-url'\n]);\n\n/**\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#default-referrer-policy|default referrer policy}\n */\nexport const DEFAULT_REFERRER_POLICY = 'strict-origin-when-cross-origin';\n\n/**\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#referrer-policies|Referrer Policy §3. Referrer Policies}\n * @param {string} referrerPolicy\n * @returns {string} referrerPolicy\n */\nexport function validateReferrerPolicy(referrerPolicy) {\n\tif (!ReferrerPolicy.has(referrerPolicy)) {\n\t\tthrow new TypeError(`Invalid referrerPolicy: ${referrerPolicy}`);\n\t}\n\n\treturn referrerPolicy;\n}\n\n/**\n * @see {@link https://w3c.github.io/webappsec-secure-contexts/#is-origin-trustworthy|Referrer Policy §3.2. Is origin potentially trustworthy?}\n * @param {external:URL} url\n * @returns `true`: \"Potentially Trustworthy\", `false`: \"Not Trustworthy\"\n */\nexport function isOriginPotentiallyTrustworthy(url) {\n\t// 1. If origin is an opaque origin, return \"Not Trustworthy\".\n\t// Not applicable\n\n\t// 2. Assert: origin is a tuple origin.\n\t// Not for implementations\n\n\t// 3. If origin's scheme is either \"https\" or \"wss\", return \"Potentially Trustworthy\".\n\tif (/^(http|ws)s:$/.test(url.protocol)) {\n\t\treturn true;\n\t}\n\n\t// 4. If origin's host component matches one of the CIDR notations 127.0.0.0/8 or ::1/128 [RFC4632], return \"Potentially Trustworthy\".\n\tconst hostIp = url.host.replace(/(^\\[)|(]$)/g, '');\n\tconst hostIPVersion = isIP(hostIp);\n\n\tif (hostIPVersion === 4 && /^127\\./.test(hostIp)) {\n\t\treturn true;\n\t}\n\n\tif (hostIPVersion === 6 && /^(((0+:){7})|(::(0+:){0,6}))0*1$/.test(hostIp)) {\n\t\treturn true;\n\t}\n\n\t// 5. If origin's host component is \"localhost\" or falls within \".localhost\", and the user agent conforms to the name resolution rules in [let-localhost-be-localhost], return \"Potentially Trustworthy\".\n\t// We are returning FALSE here because we cannot ensure conformance to\n\t// let-localhost-be-loalhost (https://tools.ietf.org/html/draft-west-let-localhost-be-localhost)\n\tif (url.host === 'localhost' || url.host.endsWith('.localhost')) {\n\t\treturn false;\n\t}\n\n\t// 6. If origin's scheme component is file, return \"Potentially Trustworthy\".\n\tif (url.protocol === 'file:') {\n\t\treturn true;\n\t}\n\n\t// 7. If origin's scheme component is one which the user agent considers to be authenticated, return \"Potentially Trustworthy\".\n\t// Not supported\n\n\t// 8. If origin has been configured as a trustworthy origin, return \"Potentially Trustworthy\".\n\t// Not supported\n\n\t// 9. Return \"Not Trustworthy\".\n\treturn false;\n}\n\n/**\n * @see {@link https://w3c.github.io/webappsec-secure-contexts/#is-url-trustworthy|Referrer Policy §3.3. Is url potentially trustworthy?}\n * @param {external:URL} url\n * @returns `true`: \"Potentially Trustworthy\", `false`: \"Not Trustworthy\"\n */\nexport function isUrlPotentiallyTrustworthy(url) {\n\t// 1. If url is \"about:blank\" or \"about:srcdoc\", return \"Potentially Trustworthy\".\n\tif (/^about:(blank|srcdoc)$/.test(url)) {\n\t\treturn true;\n\t}\n\n\t// 2. If url's scheme is \"data\", return \"Potentially Trustworthy\".\n\tif (url.protocol === 'data:') {\n\t\treturn true;\n\t}\n\n\t// Note: The origin of blob: and filesystem: URLs is the origin of the context in which they were\n\t// created. Therefore, blobs created in a trustworthy origin will themselves be potentially\n\t// trustworthy.\n\tif (/^(blob|filesystem):$/.test(url.protocol)) {\n\t\treturn true;\n\t}\n\n\t// 3. Return the result of executing §3.2 Is origin potentially trustworthy? on url's origin.\n\treturn isOriginPotentiallyTrustworthy(url);\n}\n\n/**\n * Modifies the referrerURL to enforce any extra security policy considerations.\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer|Referrer Policy §8.3. Determine request's Referrer}, step 7\n * @callback module:utils/referrer~referrerURLCallback\n * @param {external:URL} referrerURL\n * @returns {external:URL} modified referrerURL\n */\n\n/**\n * Modifies the referrerOrigin to enforce any extra security policy considerations.\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer|Referrer Policy §8.3. Determine request's Referrer}, step 7\n * @callback module:utils/referrer~referrerOriginCallback\n * @param {external:URL} referrerOrigin\n * @returns {external:URL} modified referrerOrigin\n */\n\n/**\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer|Referrer Policy §8.3. Determine request's Referrer}\n * @param {Request} request\n * @param {object} o\n * @param {module:utils/referrer~referrerURLCallback} o.referrerURLCallback\n * @param {module:utils/referrer~referrerOriginCallback} o.referrerOriginCallback\n * @returns {external:URL} Request's referrer\n */\nexport function determineRequestsReferrer(request, {referrerURLCallback, referrerOriginCallback} = {}) {\n\t// There are 2 notes in the specification about invalid pre-conditions. We return null, here, for\n\t// these cases:\n\t// > Note: If request's referrer is \"no-referrer\", Fetch will not call into this algorithm.\n\t// > Note: If request's referrer policy is the empty string, Fetch will not call into this\n\t// > algorithm.\n\tif (request.referrer === 'no-referrer' || request.referrerPolicy === '') {\n\t\treturn null;\n\t}\n\n\t// 1. Let policy be request's associated referrer policy.\n\tconst policy = request.referrerPolicy;\n\n\t// 2. Let environment be request's client.\n\t// not applicable to node.js\n\n\t// 3. Switch on request's referrer:\n\tif (request.referrer === 'about:client') {\n\t\treturn 'no-referrer';\n\t}\n\n\t// \"a URL\": Let referrerSource be request's referrer.\n\tconst referrerSource = request.referrer;\n\n\t// 4. Let request's referrerURL be the result of stripping referrerSource for use as a referrer.\n\tlet referrerURL = stripURLForUseAsAReferrer(referrerSource);\n\n\t// 5. Let referrerOrigin be the result of stripping referrerSource for use as a referrer, with the\n\t// origin-only flag set to true.\n\tlet referrerOrigin = stripURLForUseAsAReferrer(referrerSource, true);\n\n\t// 6. If the result of serializing referrerURL is a string whose length is greater than 4096, set\n\t// referrerURL to referrerOrigin.\n\tif (referrerURL.toString().length > 4096) {\n\t\treferrerURL = referrerOrigin;\n\t}\n\n\t// 7. The user agent MAY alter referrerURL or referrerOrigin at this point to enforce arbitrary\n\t// policy considerations in the interests of minimizing data leakage. For example, the user\n\t// agent could strip the URL down to an origin, modify its host, replace it with an empty\n\t// string, etc.\n\tif (referrerURLCallback) {\n\t\treferrerURL = referrerURLCallback(referrerURL);\n\t}\n\n\tif (referrerOriginCallback) {\n\t\treferrerOrigin = referrerOriginCallback(referrerOrigin);\n\t}\n\n\t// 8.Execute the statements corresponding to the value of policy:\n\tconst currentURL = new URL(request.url);\n\n\tswitch (policy) {\n\t\tcase 'no-referrer':\n\t\t\treturn 'no-referrer';\n\n\t\tcase 'origin':\n\t\t\treturn referrerOrigin;\n\n\t\tcase 'unsafe-url':\n\t\t\treturn referrerURL;\n\n\t\tcase 'strict-origin':\n\t\t\t// 1. If referrerURL is a potentially trustworthy URL and request's current URL is not a\n\t\t\t// potentially trustworthy URL, then return no referrer.\n\t\t\tif (isUrlPotentiallyTrustworthy(referrerURL) && !isUrlPotentiallyTrustworthy(currentURL)) {\n\t\t\t\treturn 'no-referrer';\n\t\t\t}\n\n\t\t\t// 2. Return referrerOrigin.\n\t\t\treturn referrerOrigin.toString();\n\n\t\tcase 'strict-origin-when-cross-origin':\n\t\t\t// 1. If the origin of referrerURL and the origin of request's current URL are the same, then\n\t\t\t// return referrerURL.\n\t\t\tif (referrerURL.origin === currentURL.origin) {\n\t\t\t\treturn referrerURL;\n\t\t\t}\n\n\t\t\t// 2. If referrerURL is a potentially trustworthy URL and request's current URL is not a\n\t\t\t// potentially trustworthy URL, then return no referrer.\n\t\t\tif (isUrlPotentiallyTrustworthy(referrerURL) && !isUrlPotentiallyTrustworthy(currentURL)) {\n\t\t\t\treturn 'no-referrer';\n\t\t\t}\n\n\t\t\t// 3. Return referrerOrigin.\n\t\t\treturn referrerOrigin;\n\n\t\tcase 'same-origin':\n\t\t\t// 1. If the origin of referrerURL and the origin of request's current URL are the same, then\n\t\t\t// return referrerURL.\n\t\t\tif (referrerURL.origin === currentURL.origin) {\n\t\t\t\treturn referrerURL;\n\t\t\t}\n\n\t\t\t// 2. Return no referrer.\n\t\t\treturn 'no-referrer';\n\n\t\tcase 'origin-when-cross-origin':\n\t\t\t// 1. If the origin of referrerURL and the origin of request's current URL are the same, then\n\t\t\t// return referrerURL.\n\t\t\tif (referrerURL.origin === currentURL.origin) {\n\t\t\t\treturn referrerURL;\n\t\t\t}\n\n\t\t\t// Return referrerOrigin.\n\t\t\treturn referrerOrigin;\n\n\t\tcase 'no-referrer-when-downgrade':\n\t\t\t// 1. If referrerURL is a potentially trustworthy URL and request's current URL is not a\n\t\t\t// potentially trustworthy URL, then return no referrer.\n\t\t\tif (isUrlPotentiallyTrustworthy(referrerURL) && !isUrlPotentiallyTrustworthy(currentURL)) {\n\t\t\t\treturn 'no-referrer';\n\t\t\t}\n\n\t\t\t// 2. Return referrerURL.\n\t\t\treturn referrerURL;\n\n\t\tdefault:\n\t\t\tthrow new TypeError(`Invalid referrerPolicy: ${policy}`);\n\t}\n}\n\n/**\n * @see {@link https://w3c.github.io/webappsec-referrer-policy/#parse-referrer-policy-from-header|Referrer Policy §8.1. Parse a referrer policy from a Referrer-Policy header}\n * @param {Headers} headers Response headers\n * @returns {string} policy\n */\nexport function parseReferrerPolicyFromHeader(headers) {\n\t// 1. Let policy-tokens be the result of extracting header list values given `Referrer-Policy`\n\t// and response’s header list.\n\tconst policyTokens = (headers.get('referrer-policy') || '').split(/[,\\s]+/);\n\n\t// 2. Let policy be the empty string.\n\tlet policy = '';\n\n\t// 3. For each token in policy-tokens, if token is a referrer policy and token is not the empty\n\t// string, then set policy to token.\n\t// Note: This algorithm loops over multiple policy values to allow deployment of new policy\n\t// values with fallbacks for older user agents, as described in § 11.1 Unknown Policy Values.\n\tfor (const token of policyTokens) {\n\t\tif (token && ReferrerPolicy.has(token)) {\n\t\t\tpolicy = token;\n\t\t}\n\t}\n\n\t// 4. Return policy.\n\treturn policy;\n}\n","/**\n * Request.js\n *\n * Request class contains server only options\n *\n * All spec algorithm step numbers are based on https://fetch.spec.whatwg.org/commit-snapshots/ae716822cb3a61843226cd090eefc6589446c1d2/.\n */\n\nimport {format as formatUrl} from 'node:url';\nimport {deprecate} from 'node:util';\nimport Headers from './headers.js';\nimport Body, {clone, extractContentType, getTotalBytes} from './body.js';\nimport {isAbortSignal} from './utils/is.js';\nimport {getSearch} from './utils/get-search.js';\nimport {\n\tvalidateReferrerPolicy, determineRequestsReferrer, DEFAULT_REFERRER_POLICY\n} from './utils/referrer.js';\n\nconst INTERNALS = Symbol('Request internals');\n\n/**\n * Check if `obj` is an instance of Request.\n *\n * @param {*} object\n * @return {boolean}\n */\nconst isRequest = object => {\n\treturn (\n\t\ttypeof object === 'object' &&\n\t\ttypeof object[INTERNALS] === 'object'\n\t);\n};\n\nconst doBadDataWarn = deprecate(() => {},\n\t'.data is not a valid RequestInit property, use .body instead',\n\t'https://github.com/node-fetch/node-fetch/issues/1000 (request)');\n\n/**\n * Request class\n *\n * Ref: https://fetch.spec.whatwg.org/#request-class\n *\n * @param Mixed input Url or Request instance\n * @param Object init Custom options\n * @return Void\n */\nexport default class Request extends Body {\n\tconstructor(input, init = {}) {\n\t\tlet parsedURL;\n\n\t\t// Normalize input and force URL to be encoded as UTF-8 (https://github.com/node-fetch/node-fetch/issues/245)\n\t\tif (isRequest(input)) {\n\t\t\tparsedURL = new URL(input.url);\n\t\t} else {\n\t\t\tparsedURL = new URL(input);\n\t\t\tinput = {};\n\t\t}\n\n\t\tif (parsedURL.username !== '' || parsedURL.password !== '') {\n\t\t\tthrow new TypeError(`${parsedURL} is an url with embedded credentials.`);\n\t\t}\n\n\t\tlet method = init.method || input.method || 'GET';\n\t\tif (/^(delete|get|head|options|post|put)$/i.test(method)) {\n\t\t\tmethod = method.toUpperCase();\n\t\t}\n\n\t\tif (!isRequest(init) && 'data' in init) {\n\t\t\tdoBadDataWarn();\n\t\t}\n\n\t\t// eslint-disable-next-line no-eq-null, eqeqeq\n\t\tif ((init.body != null || (isRequest(input) && input.body !== null)) &&\n\t\t\t(method === 'GET' || method === 'HEAD')) {\n\t\t\tthrow new TypeError('Request with GET/HEAD method cannot have body');\n\t\t}\n\n\t\tconst inputBody = init.body ?\n\t\t\tinit.body :\n\t\t\t(isRequest(input) && input.body !== null ?\n\t\t\t\tclone(input) :\n\t\t\t\tnull);\n\n\t\tsuper(inputBody, {\n\t\t\tsize: init.size || input.size || 0\n\t\t});\n\n\t\tconst headers = new Headers(init.headers || input.headers || {});\n\n\t\tif (inputBody !== null && !headers.has('Content-Type')) {\n\t\t\tconst contentType = extractContentType(inputBody, this);\n\t\t\tif (contentType) {\n\t\t\t\theaders.set('Content-Type', contentType);\n\t\t\t}\n\t\t}\n\n\t\tlet signal = isRequest(input) ?\n\t\t\tinput.signal :\n\t\t\tnull;\n\t\tif ('signal' in init) {\n\t\t\tsignal = init.signal;\n\t\t}\n\n\t\t// eslint-disable-next-line no-eq-null, eqeqeq\n\t\tif (signal != null && !isAbortSignal(signal)) {\n\t\t\tthrow new TypeError('Expected signal to be an instanceof AbortSignal or EventTarget');\n\t\t}\n\n\t\t// §5.4, Request constructor steps, step 15.1\n\t\t// eslint-disable-next-line no-eq-null, eqeqeq\n\t\tlet referrer = init.referrer == null ? input.referrer : init.referrer;\n\t\tif (referrer === '') {\n\t\t\t// §5.4, Request constructor steps, step 15.2\n\t\t\treferrer = 'no-referrer';\n\t\t} else if (referrer) {\n\t\t\t// §5.4, Request constructor steps, step 15.3.1, 15.3.2\n\t\t\tconst parsedReferrer = new URL(referrer);\n\t\t\t// §5.4, Request constructor steps, step 15.3.3, 15.3.4\n\t\t\treferrer = /^about:(\\/\\/)?client$/.test(parsedReferrer) ? 'client' : parsedReferrer;\n\t\t} else {\n\t\t\treferrer = undefined;\n\t\t}\n\n\t\tthis[INTERNALS] = {\n\t\t\tmethod,\n\t\t\tredirect: init.redirect || input.redirect || 'follow',\n\t\t\theaders,\n\t\t\tparsedURL,\n\t\t\tsignal,\n\t\t\treferrer\n\t\t};\n\n\t\t// Node-fetch-only options\n\t\tthis.follow = init.follow === undefined ? (input.follow === undefined ? 20 : input.follow) : init.follow;\n\t\tthis.compress = init.compress === undefined ? (input.compress === undefined ? true : input.compress) : init.compress;\n\t\tthis.counter = init.counter || input.counter || 0;\n\t\tthis.agent = init.agent || input.agent;\n\t\tthis.highWaterMark = init.highWaterMark || input.highWaterMark || 16384;\n\t\tthis.insecureHTTPParser = init.insecureHTTPParser || input.insecureHTTPParser || false;\n\n\t\t// §5.4, Request constructor steps, step 16.\n\t\t// Default is empty string per https://fetch.spec.whatwg.org/#concept-request-referrer-policy\n\t\tthis.referrerPolicy = init.referrerPolicy || input.referrerPolicy || '';\n\t}\n\n\t/** @returns {string} */\n\tget method() {\n\t\treturn this[INTERNALS].method;\n\t}\n\n\t/** @returns {string} */\n\tget url() {\n\t\treturn formatUrl(this[INTERNALS].parsedURL);\n\t}\n\n\t/** @returns {Headers} */\n\tget headers() {\n\t\treturn this[INTERNALS].headers;\n\t}\n\n\tget redirect() {\n\t\treturn this[INTERNALS].redirect;\n\t}\n\n\t/** @returns {AbortSignal} */\n\tget signal() {\n\t\treturn this[INTERNALS].signal;\n\t}\n\n\t// https://fetch.spec.whatwg.org/#dom-request-referrer\n\tget referrer() {\n\t\tif (this[INTERNALS].referrer === 'no-referrer') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (this[INTERNALS].referrer === 'client') {\n\t\t\treturn 'about:client';\n\t\t}\n\n\t\tif (this[INTERNALS].referrer) {\n\t\t\treturn this[INTERNALS].referrer.toString();\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tget referrerPolicy() {\n\t\treturn this[INTERNALS].referrerPolicy;\n\t}\n\n\tset referrerPolicy(referrerPolicy) {\n\t\tthis[INTERNALS].referrerPolicy = validateReferrerPolicy(referrerPolicy);\n\t}\n\n\t/**\n\t * Clone this request\n\t *\n\t * @return Request\n\t */\n\tclone() {\n\t\treturn new Request(this);\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn 'Request';\n\t}\n}\n\nObject.defineProperties(Request.prototype, {\n\tmethod: {enumerable: true},\n\turl: {enumerable: true},\n\theaders: {enumerable: true},\n\tredirect: {enumerable: true},\n\tclone: {enumerable: true},\n\tsignal: {enumerable: true},\n\treferrer: {enumerable: true},\n\treferrerPolicy: {enumerable: true}\n});\n\n/**\n * Convert a Request to Node.js http request options.\n *\n * @param {Request} request - A Request instance\n * @return The options object to be passed to http.request\n */\nexport const getNodeRequestOptions = request => {\n\tconst {parsedURL} = request[INTERNALS];\n\tconst headers = new Headers(request[INTERNALS].headers);\n\n\t// Fetch step 1.3\n\tif (!headers.has('Accept')) {\n\t\theaders.set('Accept', '*/*');\n\t}\n\n\t// HTTP-network-or-cache fetch steps 2.4-2.7\n\tlet contentLengthValue = null;\n\tif (request.body === null && /^(post|put)$/i.test(request.method)) {\n\t\tcontentLengthValue = '0';\n\t}\n\n\tif (request.body !== null) {\n\t\tconst totalBytes = getTotalBytes(request);\n\t\t// Set Content-Length if totalBytes is a number (that is not NaN)\n\t\tif (typeof totalBytes === 'number' && !Number.isNaN(totalBytes)) {\n\t\t\tcontentLengthValue = String(totalBytes);\n\t\t}\n\t}\n\n\tif (contentLengthValue) {\n\t\theaders.set('Content-Length', contentLengthValue);\n\t}\n\n\t// 4.1. Main fetch, step 2.6\n\t// > If request's referrer policy is the empty string, then set request's referrer policy to the\n\t// > default referrer policy.\n\tif (request.referrerPolicy === '') {\n\t\trequest.referrerPolicy = DEFAULT_REFERRER_POLICY;\n\t}\n\n\t// 4.1. Main fetch, step 2.7\n\t// > If request's referrer is not \"no-referrer\", set request's referrer to the result of invoking\n\t// > determine request's referrer.\n\tif (request.referrer && request.referrer !== 'no-referrer') {\n\t\trequest[INTERNALS].referrer = determineRequestsReferrer(request);\n\t} else {\n\t\trequest[INTERNALS].referrer = 'no-referrer';\n\t}\n\n\t// 4.5. HTTP-network-or-cache fetch, step 6.9\n\t// > If httpRequest's referrer is a URL, then append `Referer`/httpRequest's referrer, serialized\n\t// > and isomorphic encoded, to httpRequest's header list.\n\tif (request[INTERNALS].referrer instanceof URL) {\n\t\theaders.set('Referer', request.referrer);\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.11\n\tif (!headers.has('User-Agent')) {\n\t\theaders.set('User-Agent', 'node-fetch');\n\t}\n\n\t// HTTP-network-or-cache fetch step 2.15\n\tif (request.compress && !headers.has('Accept-Encoding')) {\n\t\theaders.set('Accept-Encoding', 'gzip, deflate, br');\n\t}\n\n\tlet {agent} = request;\n\tif (typeof agent === 'function') {\n\t\tagent = agent(parsedURL);\n\t}\n\n\t// HTTP-network fetch step 4.2\n\t// chunked encoding is handled by Node.js\n\n\tconst search = getSearch(parsedURL);\n\n\t// Pass the full URL directly to request(), but overwrite the following\n\t// options:\n\tconst options = {\n\t\t// Overwrite search to retain trailing ? (issue #776)\n\t\tpath: parsedURL.pathname + search,\n\t\t// The following options are not expressed in the URL\n\t\tmethod: request.method,\n\t\theaders: headers[Symbol.for('nodejs.util.inspect.custom')](),\n\t\tinsecureHTTPParser: request.insecureHTTPParser,\n\t\tagent\n\t};\n\n\treturn {\n\t\t/** @type {URL} */\n\t\tparsedURL,\n\t\toptions\n\t};\n};\n","import {FetchBaseError} from './base.js';\n\n/**\n * AbortError interface for cancelled requests\n */\nexport class AbortError extends FetchBaseError {\n\tconstructor(message, type = 'aborted') {\n\t\tsuper(message, type);\n\t}\n}\n","/**\n * Index.js\n *\n * a request API compatible with window.fetch\n *\n * All spec algorithm step numbers are based on https://fetch.spec.whatwg.org/commit-snapshots/ae716822cb3a61843226cd090eefc6589446c1d2/.\n */\n\nimport http from 'node:http';\nimport https from 'node:https';\nimport zlib from 'node:zlib';\nimport Stream, {PassThrough, pipeline as pump} from 'node:stream';\nimport {Buffer} from 'node:buffer';\n\nimport dataUriToBuffer from 'data-uri-to-buffer';\n\nimport {writeToStream, clone} from './body.js';\nimport Response from './response.js';\nimport Headers, {fromRawHeaders} from './headers.js';\nimport Request, {getNodeRequestOptions} from './request.js';\nimport {FetchError} from './errors/fetch-error.js';\nimport {AbortError} from './errors/abort-error.js';\nimport {isRedirect} from './utils/is-redirect.js';\nimport {FormData} from 'formdata-polyfill/esm.min.js';\nimport {isDomainOrSubdomain, isSameProtocol} from './utils/is.js';\nimport {parseReferrerPolicyFromHeader} from './utils/referrer.js';\nimport {\n\tBlob,\n\tFile,\n\tfileFromSync,\n\tfileFrom,\n\tblobFromSync,\n\tblobFrom\n} from 'fetch-blob/from.js';\n\nexport {FormData, Headers, Request, Response, FetchError, AbortError, isRedirect};\nexport {Blob, File, fileFromSync, fileFrom, blobFromSync, blobFrom};\n\nconst supportedSchemas = new Set(['data:', 'http:', 'https:']);\n\n/**\n * Fetch function\n *\n * @param {string | URL | import('./request').default} url - Absolute url or Request instance\n * @param {*} [options_] - Fetch options\n * @return {Promise<import('./response').default>}\n */\nexport default async function fetch(url, options_) {\n\treturn new Promise((resolve, reject) => {\n\t\t// Build request object\n\t\tconst request = new Request(url, options_);\n\t\tconst {parsedURL, options} = getNodeRequestOptions(request);\n\t\tif (!supportedSchemas.has(parsedURL.protocol)) {\n\t\t\tthrow new TypeError(`node-fetch cannot load ${url}. URL scheme \"${parsedURL.protocol.replace(/:$/, '')}\" is not supported.`);\n\t\t}\n\n\t\tif (parsedURL.protocol === 'data:') {\n\t\t\tconst data = dataUriToBuffer(request.url);\n\t\t\tconst response = new Response(data, {headers: {'Content-Type': data.typeFull}});\n\t\t\tresolve(response);\n\t\t\treturn;\n\t\t}\n\n\t\t// Wrap http.request into fetch\n\t\tconst send = (parsedURL.protocol === 'https:' ? https : http).request;\n\t\tconst {signal} = request;\n\t\tlet response = null;\n\n\t\tconst abort = () => {\n\t\t\tconst error = new AbortError('The operation was aborted.');\n\t\t\treject(error);\n\t\t\tif (request.body && request.body instanceof Stream.Readable) {\n\t\t\t\trequest.body.destroy(error);\n\t\t\t}\n\n\t\t\tif (!response || !response.body) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tresponse.body.emit('error', error);\n\t\t};\n\n\t\tif (signal && signal.aborted) {\n\t\t\tabort();\n\t\t\treturn;\n\t\t}\n\n\t\tconst abortAndFinalize = () => {\n\t\t\tabort();\n\t\t\tfinalize();\n\t\t};\n\n\t\t// Send request\n\t\tconst request_ = send(parsedURL.toString(), options);\n\n\t\tif (signal) {\n\t\t\tsignal.addEventListener('abort', abortAndFinalize);\n\t\t}\n\n\t\tconst finalize = () => {\n\t\t\trequest_.abort();\n\t\t\tif (signal) {\n\t\t\t\tsignal.removeEventListener('abort', abortAndFinalize);\n\t\t\t}\n\t\t};\n\n\t\trequest_.on('error', error => {\n\t\t\treject(new FetchError(`request to ${request.url} failed, reason: ${error.message}`, 'system', error));\n\t\t\tfinalize();\n\t\t});\n\n\t\tfixResponseChunkedTransferBadEnding(request_, error => {\n\t\t\tif (response && response.body) {\n\t\t\t\tresponse.body.destroy(error);\n\t\t\t}\n\t\t});\n\n\t\t/* c8 ignore next 18 */\n\t\tif (process.version < 'v14') {\n\t\t\t// Before Node.js 14, pipeline() does not fully support async iterators and does not always\n\t\t\t// properly handle when the socket close/end events are out of order.\n\t\t\trequest_.on('socket', s => {\n\t\t\t\tlet endedWithEventsCount;\n\t\t\t\ts.prependListener('end', () => {\n\t\t\t\t\tendedWithEventsCount = s._eventsCount;\n\t\t\t\t});\n\t\t\t\ts.prependListener('close', hadError => {\n\t\t\t\t\t// if end happened before close but the socket didn't emit an error, do it now\n\t\t\t\t\tif (response && endedWithEventsCount < s._eventsCount && !hadError) {\n\t\t\t\t\t\tconst error = new Error('Premature close');\n\t\t\t\t\t\terror.code = 'ERR_STREAM_PREMATURE_CLOSE';\n\t\t\t\t\t\tresponse.body.emit('error', error);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\trequest_.on('response', response_ => {\n\t\t\trequest_.setTimeout(0);\n\t\t\tconst headers = fromRawHeaders(response_.rawHeaders);\n\n\t\t\t// HTTP fetch step 5\n\t\t\tif (isRedirect(response_.statusCode)) {\n\t\t\t\t// HTTP fetch step 5.2\n\t\t\t\tconst location = headers.get('Location');\n\n\t\t\t\t// HTTP fetch step 5.3\n\t\t\t\tlet locationURL = null;\n\t\t\t\ttry {\n\t\t\t\t\tlocationURL = location === null ? null : new URL(location, request.url);\n\t\t\t\t} catch {\n\t\t\t\t\t// error here can only be invalid URL in Location: header\n\t\t\t\t\t// do not throw when options.redirect == manual\n\t\t\t\t\t// let the user extract the errorneous redirect URL\n\t\t\t\t\tif (request.redirect !== 'manual') {\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// HTTP fetch step 5.5\n\t\t\t\tswitch (request.redirect) {\n\t\t\t\t\tcase 'error':\n\t\t\t\t\t\treject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\tcase 'manual':\n\t\t\t\t\t\t// Nothing to do\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'follow': {\n\t\t\t\t\t\t// HTTP-redirect fetch step 2\n\t\t\t\t\t\tif (locationURL === null) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 5\n\t\t\t\t\t\tif (request.counter >= request.follow) {\n\t\t\t\t\t\t\treject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 6 (counter increment)\n\t\t\t\t\t\t// Create a new Request object.\n\t\t\t\t\t\tconst requestOptions = {\n\t\t\t\t\t\t\theaders: new Headers(request.headers),\n\t\t\t\t\t\t\tfollow: request.follow,\n\t\t\t\t\t\t\tcounter: request.counter + 1,\n\t\t\t\t\t\t\tagent: request.agent,\n\t\t\t\t\t\t\tcompress: request.compress,\n\t\t\t\t\t\t\tmethod: request.method,\n\t\t\t\t\t\t\tbody: clone(request),\n\t\t\t\t\t\t\tsignal: request.signal,\n\t\t\t\t\t\t\tsize: request.size,\n\t\t\t\t\t\t\treferrer: request.referrer,\n\t\t\t\t\t\t\treferrerPolicy: request.referrerPolicy\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// when forwarding sensitive headers like \"Authorization\",\n\t\t\t\t\t\t// \"WWW-Authenticate\", and \"Cookie\" to untrusted targets,\n\t\t\t\t\t\t// headers will be ignored when following a redirect to a domain\n\t\t\t\t\t\t// that is not a subdomain match or exact match of the initial domain.\n\t\t\t\t\t\t// For example, a redirect from \"foo.com\" to either \"foo.com\" or \"sub.foo.com\"\n\t\t\t\t\t\t// will forward the sensitive headers, but a redirect to \"bar.com\" will not.\n\t\t\t\t\t\t// headers will also be ignored when following a redirect to a domain using\n\t\t\t\t\t\t// a different protocol. For example, a redirect from \"https://foo.com\" to \"http://foo.com\"\n\t\t\t\t\t\t// will not forward the sensitive headers\n\t\t\t\t\t\tif (!isDomainOrSubdomain(request.url, locationURL) || !isSameProtocol(request.url, locationURL)) {\n\t\t\t\t\t\t\tfor (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {\n\t\t\t\t\t\t\t\trequestOptions.headers.delete(name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 9\n\t\t\t\t\t\tif (response_.statusCode !== 303 && request.body && options_.body instanceof Stream.Readable) {\n\t\t\t\t\t\t\treject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));\n\t\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 11\n\t\t\t\t\t\tif (response_.statusCode === 303 || ((response_.statusCode === 301 || response_.statusCode === 302) && request.method === 'POST')) {\n\t\t\t\t\t\t\trequestOptions.method = 'GET';\n\t\t\t\t\t\t\trequestOptions.body = undefined;\n\t\t\t\t\t\t\trequestOptions.headers.delete('content-length');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 14\n\t\t\t\t\t\tconst responseReferrerPolicy = parseReferrerPolicyFromHeader(headers);\n\t\t\t\t\t\tif (responseReferrerPolicy) {\n\t\t\t\t\t\t\trequestOptions.referrerPolicy = responseReferrerPolicy;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// HTTP-redirect fetch step 15\n\t\t\t\t\t\tresolve(fetch(new Request(locationURL, requestOptions)));\n\t\t\t\t\t\tfinalize();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn reject(new TypeError(`Redirect option '${request.redirect}' is not a valid value of RequestRedirect`));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Prepare response\n\t\t\tif (signal) {\n\t\t\t\tresponse_.once('end', () => {\n\t\t\t\t\tsignal.removeEventListener('abort', abortAndFinalize);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet body = pump(response_, new PassThrough(), error => {\n\t\t\t\tif (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\t\t\t});\n\t\t\t// see https://github.com/nodejs/node/pull/29376\n\t\t\t/* c8 ignore next 3 */\n\t\t\tif (process.version < 'v12.10') {\n\t\t\t\tresponse_.on('aborted', abortAndFinalize);\n\t\t\t}\n\n\t\t\tconst responseOptions = {\n\t\t\t\turl: request.url,\n\t\t\t\tstatus: response_.statusCode,\n\t\t\t\tstatusText: response_.statusMessage,\n\t\t\t\theaders,\n\t\t\t\tsize: request.size,\n\t\t\t\tcounter: request.counter,\n\t\t\t\thighWaterMark: request.highWaterMark\n\t\t\t};\n\n\t\t\t// HTTP-network fetch step 12.1.1.3\n\t\t\tconst codings = headers.get('Content-Encoding');\n\n\t\t\t// HTTP-network fetch step 12.1.1.4: handle content codings\n\n\t\t\t// in following scenarios we ignore compression support\n\t\t\t// 1. compression support is disabled\n\t\t\t// 2. HEAD request\n\t\t\t// 3. no Content-Encoding header\n\t\t\t// 4. no content response (204)\n\t\t\t// 5. content not modified response (304)\n\t\t\tif (!request.compress || request.method === 'HEAD' || codings === null || response_.statusCode === 204 || response_.statusCode === 304) {\n\t\t\t\tresponse = new Response(body, responseOptions);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For Node v6+\n\t\t\t// Be less strict when decoding compressed responses, since sometimes\n\t\t\t// servers send slightly invalid responses that are still accepted\n\t\t\t// by common browsers.\n\t\t\t// Always using Z_SYNC_FLUSH is what cURL does.\n\t\t\tconst zlibOptions = {\n\t\t\t\tflush: zlib.Z_SYNC_FLUSH,\n\t\t\t\tfinishFlush: zlib.Z_SYNC_FLUSH\n\t\t\t};\n\n\t\t\t// For gzip\n\t\t\tif (codings === 'gzip' || codings === 'x-gzip') {\n\t\t\t\tbody = pump(body, zlib.createGunzip(zlibOptions), error => {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tresponse = new Response(body, responseOptions);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For deflate\n\t\t\tif (codings === 'deflate' || codings === 'x-deflate') {\n\t\t\t\t// Handle the infamous raw deflate response from old servers\n\t\t\t\t// a hack for old IIS and Apache servers\n\t\t\t\tconst raw = pump(response_, new PassThrough(), error => {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\traw.once('data', chunk => {\n\t\t\t\t\t// See http://stackoverflow.com/questions/37519828\n\t\t\t\t\tif ((chunk[0] & 0x0F) === 0x08) {\n\t\t\t\t\t\tbody = pump(body, zlib.createInflate(), error => {\n\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbody = pump(body, zlib.createInflateRaw(), error => {\n\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\treject(error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tresponse = new Response(body, responseOptions);\n\t\t\t\t\tresolve(response);\n\t\t\t\t});\n\t\t\t\traw.once('end', () => {\n\t\t\t\t\t// Some old IIS servers return zero-length OK deflate responses, so\n\t\t\t\t\t// 'data' is never emitted. See https://github.com/node-fetch/node-fetch/pull/903\n\t\t\t\t\tif (!response) {\n\t\t\t\t\t\tresponse = new Response(body, responseOptions);\n\t\t\t\t\t\tresolve(response);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// For br\n\t\t\tif (codings === 'br') {\n\t\t\t\tbody = pump(body, zlib.createBrotliDecompress(), error => {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tresponse = new Response(body, responseOptions);\n\t\t\t\tresolve(response);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Otherwise, use response as-is\n\t\t\tresponse = new Response(body, responseOptions);\n\t\t\tresolve(response);\n\t\t});\n\n\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\twriteToStream(request_, request).catch(reject);\n\t});\n}\n\nfunction fixResponseChunkedTransferBadEnding(request, errorCallback) {\n\tconst LAST_CHUNK = Buffer.from('0\\r\\n\\r\\n');\n\n\tlet isChunkedTransfer = false;\n\tlet properLastChunkReceived = false;\n\tlet previousChunk;\n\n\trequest.on('response', response => {\n\t\tconst {headers} = response;\n\t\tisChunkedTransfer = headers['transfer-encoding'] === 'chunked' && !headers['content-length'];\n\t});\n\n\trequest.on('socket', socket => {\n\t\tconst onSocketClose = () => {\n\t\t\tif (isChunkedTransfer && !properLastChunkReceived) {\n\t\t\t\tconst error = new Error('Premature close');\n\t\t\t\terror.code = 'ERR_STREAM_PREMATURE_CLOSE';\n\t\t\t\terrorCallback(error);\n\t\t\t}\n\t\t};\n\n\t\tconst onData = buf => {\n\t\t\tproperLastChunkReceived = Buffer.compare(buf.slice(-5), LAST_CHUNK) === 0;\n\n\t\t\t// Sometimes final 0-length chunk and end of message code are in separate packets\n\t\t\tif (!properLastChunkReceived && previousChunk) {\n\t\t\t\tproperLastChunkReceived = (\n\t\t\t\t\tBuffer.compare(previousChunk.slice(-3), LAST_CHUNK.slice(0, 3)) === 0 &&\n\t\t\t\t\tBuffer.compare(buf.slice(-2), LAST_CHUNK.slice(3)) === 0\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tpreviousChunk = buf;\n\t\t};\n\n\t\tsocket.prependListener('close', onSocketClose);\n\t\tsocket.on('data', onData);\n\n\t\trequest.on('close', () => {\n\t\t\tsocket.removeListener('close', onSocketClose);\n\t\t\tsocket.removeListener('data', onData);\n\t\t});\n\t});\n}\n","// Optional sharp-based post-processing (sRGB/EXIF/format)\n// Dynamic import guarded by MARIA_SHARP to avoid hard dependency\n\nexport async function processImageOptional(\n bytes: Buffer,\n format: 'png'|'webp'|'jpg',\n keepExif?: boolean,\n targetSize?: { width: number; height: number },\n): Promise<Buffer> {\n try {\n // dynamic import (no env gate): try sharp, fall back silently if unavailable\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const sharp = (await import('sharp')).default;\n let img = sharp(bytes).toColourspace('srgb');\n if (targetSize && Number.isFinite(targetSize.width) && Number.isFinite(targetSize.height)) {\n const width = Math.max(1, Math.floor(targetSize.width));\n const height = Math.max(1, Math.floor(targetSize.height));\n img = img.resize(width, height, { fit: 'cover' });\n }\n if (keepExif) img = img.withMetadata();\n const qEnv = Number(process.env.MARIA_SHARP_QUALITY || '80');\n const quality = Number.isFinite(qEnv) ? Math.max(1, Math.min(100, Math.floor(qEnv))) : 80;\n const alphaMode = String(process.env.MARIA_SHARP_ALPHA || '').toLowerCase();\n if (format === 'jpg' && alphaMode !== 'preserve') {\n img = img.flatten({ background: { r: 255, g: 255, b: 255 } });\n }\n switch (format) {\n case 'png': return await img.png().toBuffer();\n case 'webp': return await img.webp({ quality }).toBuffer();\n case 'jpg': return await img.jpeg({ mozjpeg: true, quality }).toBuffer();\n }\n return bytes;\n } catch {\n return bytes;\n }\n}\n","/**\n * Production-ready Rate Limit Middleware\n * Fixes: First-call false positive, Infinity/Invalid Date errors\n */\n\nimport type { Request, Response, NextFunction } from 'express';\nimport { getAuth } from 'firebase-admin/auth';\n\n// In-memory store (TODO: Replace with Redis for multi-instance)\nconst rateLimitStore = new Map<string, { lastAt: number }>();\n\n// Rate limit configurations per endpoint and plan\ninterface RateLimitConfig {\n windowMs: number;\n requests: number;\n}\n\nconst RATE_LIMITS: Record<string, RateLimitConfig> = {\n '/image:FREE': { windowMs: 3000, requests: 1 }, // 1 req per 3s\n '/video:FREE': { windowMs: 15000, requests: 1 }, // 1 req per 15s\n '/code:FREE': { windowMs: 1000, requests: 1 }, // 1 req per 1s\n '/chat:FREE': { windowMs: 500, requests: 1 }, // 2 req per sec\n \n '/image:STARTER': { windowMs: 1000, requests: 1 }, // 1 req per 1s\n '/video:STARTER': { windowMs: 5000, requests: 1 }, // 1 req per 5s\n '/code:STARTER': { windowMs: 500, requests: 1 }, // 2 req per sec\n \n '/image:PRO': { windowMs: 100, requests: 1 }, // 10 req per sec\n '/video:PRO': { windowMs: 1000, requests: 1 }, // 1 req per sec\n '/code:PRO': { windowMs: 100, requests: 1 }, // 10 req per sec\n \n 'default': { windowMs: 1000, requests: 1 } // Fallback\n};\n\n/**\n * Get rate limit config for specific endpoint and plan\n */\nfunction getRateLimitConfig(endpoint: string, plan: string): RateLimitConfig {\n const key = `${endpoint}:${plan.toUpperCase()}`;\n return RATE_LIMITS[key] || RATE_LIMITS.default;\n}\n\n/**\n * Extract endpoint category from request path\n */\nfunction getEndpointCategory(path: string): string {\n if (path.includes('/image')) return '/image';\n if (path.includes('/video')) return '/video';\n if (path.includes('/code')) return '/code';\n if (path.includes('/chat')) return '/chat';\n return 'default';\n}\n\n/**\n * Main rate limit middleware\n */\nexport async function rateLimitMiddleware(\n req: Request,\n res: Response,\n next: NextFunction\n): Promise<void> {\n try {\n // 1. Identify user (from JWT or API key)\n const authHeader = req.headers.authorization;\n const bearer = authHeader?.split(' ')[1];\n \n let userId = 'anonymous';\n let userPlan = 'FREE';\n \n if (bearer) {\n try {\n const decodedToken = await getAuth().verifyIdToken(bearer);\n userId = decodedToken.uid;\n // Resolve plan from Firestore (fallback to FREE)\n userPlan = await getFirestorePlan(userId);\n } catch {\n // Invalid token, treat as anonymous\n }\n } else if (req.headers['x-api-key']) {\n userId = `apikey:${req.headers['x-api-key']}`;\n // TODO: Resolve plan from API key\n }\n \n // 2. Determine endpoint category\n const endpoint = getEndpointCategory(req.path);\n \n // 3. Get rate limit config\n const config = getRateLimitConfig(endpoint, userPlan);\n \n // 4. Build unique key for this user-endpoint combination\n const rateLimitKey = `${userId}:${endpoint}`;\n \n // 5. Check rate limit\n const now = Date.now();\n const userRecord = rateLimitStore.get(rateLimitKey);\n \n // First request - always allow\n if (!userRecord || typeof userRecord.lastAt !== 'number') {\n rateLimitStore.set(rateLimitKey, { lastAt: now });\n next();\n return;\n }\n \n // Calculate time elapsed since last request\n const elapsedMs = now - userRecord.lastAt;\n const remainingMs = Math.max(0, config.windowMs - elapsedMs);\n \n // If window hasn't passed, reject\n if (remainingMs > 0) {\n // Ensure clean, bounded values for response\n const retryAfterSeconds = Math.max(1, Math.ceil(remainingMs / 1000));\n const resetAt = new Date(now + remainingMs);\n\n // Standard rate-limit headers for client backoff\n try {\n res.setHeader('Retry-After', String(retryAfterSeconds));\n res.setHeader('X-RateLimit-Reset', String(resetAt.getTime()));\n res.setHeader('RateLimit-Reset', String(resetAt.getTime()));\n } catch {}\n\n res.status(429).json({\n error: 'rate_limit_exceeded',\n message: `Rate limit exceeded for ${endpoint} endpoint`,\n details: {\n endpoint,\n plan: userPlan,\n limit: `${config.requests} request per ${config.windowMs / 1000} seconds`,\n retryAfterSeconds,\n resetAt: resetAt.toISOString()\n },\n hint: userPlan === 'FREE' \n ? `Free plan limit: ${config.requests} request per ${config.windowMs / 1000}s. Upgrade at https://maria-code.ai/manage`\n : `Please wait ${retryAfterSeconds} seconds before retrying.`\n });\n return;\n }\n \n // Window has passed - allow and update timestamp\n rateLimitStore.set(rateLimitKey, { lastAt: now });\n next();\n return;\n \n } catch (error) {\n // Fail open - don't block users on rate limiter errors\n console.error('[RateLimit] Error in middleware:', error);\n next();\n return;\n }\n}\n\n/**\n * Clear rate limit for specific user (e.g., after upgrade)\n */\nexport function clearUserRateLimit(userId: string): void {\n const keysToDelete: string[] = [];\n \n rateLimitStore.forEach((_, key) => {\n if (key.startsWith(`${userId}:`)) {\n keysToDelete.push(key);\n }\n });\n \n keysToDelete.forEach(key => rateLimitStore.delete(key));\n}\n\n/**\n * Periodic cleanup of old entries (prevent memory leak)\n */\nexport function startRateLimitCleanup(): void {\n setInterval(() => {\n const now = Date.now();\n const maxAge = 60 * 60 * 1000; // 1 hour\n \n rateLimitStore.forEach((value, key) => {\n if (now - value.lastAt > maxAge) {\n rateLimitStore.delete(key);\n }\n });\n }, 10 * 60 * 1000); // Run every 10 minutes\n}\nasync function getFirestorePlan(uid: string): Promise<string> {\n try {\n const admin = await import('firebase-admin');\n if (!(admin as any).apps?.length) { try { (admin as any).initializeApp(); } catch {} }\n const { getFirestore } = await import('firebase-admin/firestore');\n const db = getFirestore();\n const doc = await db.doc(`projects/default/users/${uid}`).get();\n const plan = (doc.exists && (doc.data() as any)?.plan) || 'FREE';\n return String(plan).toUpperCase();\n } catch {\n return 'FREE';\n }\n}\n","// Media orchestrator types and helpers (named exports only)\n\nimport * as crypto from 'node:crypto';\n\nexport type MediaKind = 'image' | 'video';\n\nexport type PixelSize = [number, number];\nexport type Seconds = number;\n\nexport type ImageFormat = 'png' | 'webp' | 'jpg';\nexport type VideoFormat = 'mp4' | 'webm';\n\nexport interface BaseParams {\n prompt: string;\n model: string;\n seed?: number;\n trace?: string;\n}\n\nexport interface ImageParams extends BaseParams {\n size: PixelSize;\n format: ImageFormat;\n count: number;\n}\n\nexport interface VideoParams extends BaseParams {\n duration: Seconds;\n fps: number;\n size: PixelSize;\n format: VideoFormat;\n}\n\nexport type NormalizedParams = ImageParams | VideoParams;\n\nexport interface ProviderCaps {\n provider: 'google';\n model: string;\n kind: MediaKind;\n // Image caps\n maxImageSize?: PixelSize;\n supportedImageFormats?: ImageFormat[];\n maxBatch?: number;\n // Video caps\n maxVideoSize?: PixelSize;\n maxDuration?: Seconds;\n maxFps?: number;\n supportedVideoFormats?: VideoFormat[];\n // SLA\n maxRps?: number;\n timeoutMs?: number;\n}\n\nexport const PROVIDER_MATRIX: ProviderCaps[] = [\n {\n provider: 'google',\n model: 'gemini-2.5-flash-image-preview',\n kind: 'image',\n maxImageSize: [2048, 2048],\n supportedImageFormats: ['png', 'webp', 'jpg'],\n maxBatch: 8,\n maxRps: 4,\n timeoutMs: 60_000,\n },\n {\n provider: 'google',\n model: 'veo3',\n kind: 'video',\n maxVideoSize: [1920, 1080],\n maxDuration: 30,\n maxFps: 30,\n supportedVideoFormats: ['mp4', 'webm'],\n maxRps: 2,\n timeoutMs: 120_000,\n },\n];\n\nexport interface ManifestV1 {\n manifestVersion: 1;\n kind: MediaKind;\n request: {\n promptHash: string;\n seed?: number;\n params: Record<string, unknown>;\n model: string;\n provider: 'google';\n };\n artifacts: Array<{\n file: string;\n hash: string;\n size?: PixelSize;\n frames?: number;\n }>;\n metrics: {\n durationMs: number;\n retries: number;\n fallbacks: number;\n };\n trace?: string;\n createdAt: string;\n}\n\nexport function hashPrompt(prompt: string): string {\n const h = crypto.createHash('sha256').update(prompt, 'utf8').digest('hex');\n return `sha256:${h}`;\n}\n\nexport function hashBytes(buf: Buffer): string {\n const h = crypto.createHash('sha256').update(buf).digest('hex');\n return `sha256:${h}`;\n}\n\nexport function datePath(d: Date = new Date()): string {\n const y = d.getUTCFullYear();\n const m = String(d.getUTCMonth() + 1).padStart(2, '0');\n const day = String(d.getUTCDate()).padStart(2, '0');\n return `${y}/${m}/${day}`;\n}\n\nexport function hashPrefix(hash: string, n: number = 6): string {\n return hash.replace(/^sha256:/, '').slice(0, n);\n}\n\n","// Atomic artifact storage for media orchestrator\n// Named exports only\n\nimport * as fs from 'node:fs';\nimport * as fsp from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { datePath, hashBytes, hashPrefix, type ManifestV1 } from './types';\n\nexport interface SaveContext {\n root: string;\n kind: 'image' | 'video';\n baseDir?: string; // default based on kind\n trace?: string;\n flat?: boolean; // when true, save directly under baseDir/root without date/hash segments\n skipManifest?: boolean; // when true, do not write manifest.json\n}\n\nexport interface SaveItem {\n bytes: Buffer;\n ext: string; // '.webp' | '.png' | '.mp4' etc\n logicalName?: string; // optional label e.g., 'frame-0001'\n}\n\nexport interface SaveResult {\n files: string[]; // relative to root\n manifestPath: string; // relative to root (empty when skipManifest)\n}\n\nfunction ensureDirSync(p: string): void {\n fs.mkdirSync(p, { recursive: true });\n}\n\nfunction safeJoin(root: string, ...segs: string[]): { full: string; rel: string } {\n const full = path.resolve(root, ...segs);\n const rel = path.relative(root, full);\n if (rel.startsWith('..') || path.isAbsolute(rel)) {\n throw new Error(`path escapes root: ${segs.join('/')}`);\n }\n return { full, rel };\n}\n\nfunction stageDir(root: string, trace: string): string {\n return path.join(root, `.stage/${trace}`);\n}\n\nasync function existsSameHash(destFull: string): Promise<boolean> {\n try {\n await fsp.access(destFull);\n return true;\n } catch {\n return false;\n }\n}\n\nconst WINDOWS_RESERVED = new Set(['con','prn','aux','nul','com1','lpt1']);\nfunction validateWinPathEdge(fullPath: string) {\n if (process.platform === 'win32') {\n if (fullPath.length > 240) throw new Error('path too long for Windows');\n const base = fullPath.split(/[/\\\\]/).pop()?.toLowerCase() || '';\n if (WINDOWS_RESERVED.has(base.split('.')[0])) throw new Error('reserved filename on Windows');\n }\n}\n\nasync function hasCaseInsensitiveCollision(dirFull: string, targetFile: string): Promise<boolean> {\n try {\n const list = await fsp.readdir(dirFull);\n const set = new Set(list.map((n) => n.toLowerCase()));\n return set.has(targetFile.toLowerCase()) && !list.includes(targetFile);\n } catch {\n return false;\n }\n}\n\nasync function atomicRename(stage: string, dest: string): Promise<void> {\n try {\n await fsp.rename(stage, dest);\n try {\n const fd = await fsp.open(dest, 'r');\n try { await fd.sync(); } finally { await fd.close(); }\n } catch {}\n } catch (e: any) {\n if (e && e.code === 'EXDEV') {\n await fsp.copyFile(stage, dest);\n const fd = await fsp.open(dest, 'r');\n try {\n await fd.sync();\n } finally {\n await fd.close();\n }\n await fsp.unlink(stage);\n } else {\n throw e;\n }\n }\n}\n\nexport async function saveArtifacts(\n ctx: SaveContext,\n items: SaveItem[],\n manifest: Omit<ManifestV1, 'createdAt' | 'manifestVersion'> & { createdAt?: string },\n): Promise<SaveResult> {\n const root = ctx.root;\n // default to project root when not specified\n const base = typeof ctx.baseDir === 'string' ? ctx.baseDir : '';\n\n const trace = ctx.trace || Math.random().toString(36).slice(2, 10).toUpperCase();\n const stage = stageDir(root, trace);\n ensureDirSync(stage);\n\n try {\n const dateSeg = datePath(new Date());\n const reqHash = (manifest.request && (manifest.request as any).promptHash) || 'sha256:unknown';\n const slug = hashPrefix(reqHash, 6);\n const outDirSeg = ctx.flat ? (base || '') : `${base ? base + '/' : ''}${dateSeg}/${slug}`;\n const outDir = safeJoin(root, outDirSeg).full;\n ensureDirSync(outDir);\n\n const saved: string[] = [];\n for (let i = 0; i < items.length; i++) {\n const it = items[i];\n const contentHash = hashBytes(it.bytes).replace(/^sha256:/, '');\n const ext = it.ext.startsWith('.') ? it.ext : `.${it.ext}`;\n // Prefer logicalName if provided to preserve ordering (e.g., frames)\n const baseName = it.logicalName ? `${it.logicalName}` : `${contentHash}`;\n const fname = `${baseName}${ext}`;\n const relPath = outDirSeg ? `${outDirSeg}/${fname}` : `${fname}`;\n const dest = safeJoin(root, relPath);\n validateWinPathEdge(dest.full);\n if (await hasCaseInsensitiveCollision(path.dirname(dest.full), path.basename(dest.full))) {\n throw new Error('case-insensitive filename collision');\n }\n const stg = path.join(stage, `${fname}.part`);\n\n // Diagnostic logging – size and signature\n try {\n const sig = it.bytes.slice(0, 8).toString('hex');\n const looksJson = it.bytes.length >= 1 && it.bytes[0] === 0x7b /* '{' */;\n console.log(`[store] writing ${dest.rel} (${it.bytes.length} bytes, sig=${sig}${looksJson ? ', WARN:json-like' : ''})`);\n } catch {}\n\n if (await existsSameHash(dest.full)) {\n // duplicate; reference existing\n saved.push(dest.rel);\n continue;\n }\n\n await fsp.writeFile(stg, it.bytes);\n await atomicRename(stg, dest.full);\n const relPosix = dest.rel.replace(/\\\\/g, '/');\n saved.push(relPosix);\n }\n\n if (!ctx.skipManifest) {\n const manifestObj: ManifestV1 = {\n manifestVersion: 1,\n ...(manifest as any),\n createdAt: manifest.createdAt || new Date().toISOString(),\n artifacts: (manifest.artifacts && manifest.artifacts.length > 0)\n ? manifest.artifacts\n : saved.map((file) => ({ file, hash: `sha256:${path.basename(file).split('.')[0]}` })),\n };\n\n const manifestPathRel = `${outDirSeg ? outDirSeg + '/' : ''}manifest.json`;\n const manifestStage = path.join(stage, 'manifest.json.part');\n const manifestFull = safeJoin(root, manifestPathRel).full;\n\n await fsp.writeFile(manifestStage, JSON.stringify(manifestObj, null, 2), 'utf8');\n try { console.log(`[store] manifest -> ${manifestPathRel}`); } catch {}\n await atomicRename(manifestStage, manifestFull);\n\n await fsp.rm(stage, { recursive: true, force: true });\n return { files: saved, manifestPath: manifestPathRel.replace(/\\\\/g, '/') };\n } else {\n await fsp.rm(stage, { recursive: true, force: true });\n return { files: saved, manifestPath: '' };\n }\n } catch (e) {\n await fsp.rm(stage, { recursive: true, force: true });\n throw e;\n }\n}\n","// Real Gemini provider using @google/genai — no mock fallback\nimport type { MediaProvider, ImageRequestCommon, VideoRequestCommon, ImageResult, VideoFramesResult } from '../ProviderTypes';\n\nexport class GeminiMediaProvider implements MediaProvider {\n private ai: any;\n private primaryModel: string;\n\n constructor(opts?: { model?: string }) {\n const apiKey = process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY;\n if (!apiKey) {\n const hasGoogle = Boolean(process.env.GOOGLE_API_KEY);\n const hasGemini = Boolean(process.env.GEMINI_API_KEY);\n throw new Error(\n `GeminiMediaProvider: missing API key (GOOGLE_API_KEY=${hasGoogle ? 'set' : 'unset'}, GEMINI_API_KEY=${hasGemini ? 'set' : 'unset'})`\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { GoogleGenAI } = require('@google/genai');\n this.ai = new GoogleGenAI({ apiKey });\n this.primaryModel = opts?.model || process.env.MARIA_IMAGE_MODEL || 'gemini-2.5-flash-image-preview';\n }\n\n async generateImage(req: ImageRequestCommon): Promise<ImageResult> {\n const modelName = this.primaryModel;\n const promptPreview = String(req.prompt ?? '').replace(/\\s+/g, ' ').slice(0, 200);\n const targetMime = (() => {\n const fmt = (req.format || 'png').toLowerCase();\n if (fmt === 'jpg') return 'image/jpeg';\n if (fmt === 'jpeg') return 'image/jpeg';\n if (fmt === 'png') return 'image/png';\n if (fmt === 'webp') return 'image/webp';\n return 'image/png';\n })();\n let resp: any;\n try {\n resp = await this.ai.models.generateContent({\n model: modelName,\n contents: [{ role: 'user', parts: [{ text: String(req.prompt) }]}],\n generationConfig: {\n responseModalities: ['IMAGE'],\n responseMimeType: targetMime,\n },\n });\n } catch (err: any) {\n const errMsg = err?.message || String(err);\n throw new Error(\n `GeminiMediaProvider.generateImage request failed: model=${modelName}; prompt=\"${promptPreview}\"; error=${errMsg}`\n );\n }\n const feedback = resp?.response?.promptFeedback;\n const blockReason = feedback?.blockReason || feedback?.block_reason;\n if (blockReason) {\n const modelName = this.primaryModel;\n const reason = String(blockReason);\n throw new Error(`GeminiMediaProvider.policy_violation: model=${modelName}; reason=${reason}`);\n }\n const parts = resp?.response?.candidates?.[0]?.content?.parts || [];\n for (const p of parts) {\n const data = (p?.inlineData?.data) || (p?.inline_data?.data);\n const mime = (p?.inlineData?.mimeType) || (p?.inline_data?.mime_type) || (p?.inline_data?.mimeType) || (p?.inlineData?.mime_type);\n if (data) {\n const buf = Buffer.from(String(data), 'base64');\n if (buf.length > 0) return { bytes: buf, mime: typeof mime === 'string' ? mime : targetMime };\n }\n }\n // Fallback path: try Imagen models if Gemini preview returned no inline data\n try {\n const imagenModel = process.env.MARIA_IMAGE_FALLBACK_MODEL || 'imagen-4.0-generate-001';\n const r2 = await this.ai.models.generateImages({\n model: imagenModel,\n prompt: String(req.prompt),\n });\n const img0 = r2?.generatedImages?.[0]?.image;\n const bytesB64 = img0?.imageBytes || img0?.bytesBase64Encoded;\n if (bytesB64) {\n const buf = Buffer.from(String(bytesB64), 'base64');\n if (buf.length > 0) return { bytes: buf, mime: targetMime };\n }\n } catch {}\n\n const candidatesLen = resp?.response?.candidates?.length ?? 0;\n const finish = resp?.response?.candidates?.[0]?.finishReason || resp?.response?.promptFeedback?.blockReason || 'unknown';\n const firstPartKeys = parts[0] ? Object.keys(parts[0]).join(',') : 'n/a';\n throw new Error(\n `GeminiMediaProvider.generateImage: no inline image returned; model=${modelName}; prompt=\"${promptPreview}\"; candidates=${candidatesLen}; parts=${parts.length}; firstPartKeys=${firstPartKeys}; finish=${finish}`\n );\n }\n\n async generateVideoFrames(req: VideoRequestCommon): Promise<VideoFramesResult> {\n // Not supported in local provider. Use server Veo 3 path.\n const fps = typeof req?.fps === 'number' ? req.fps : 'n/a';\n const duration = typeof req?.duration === 'number' ? req.duration : 'n/a';\n throw new Error(\n `GeminiMediaProvider.generateVideoFrames is not supported locally. Use server /api/v1/video (veo-3.0-generate-001). requested_fps=${fps}; requested_duration=${duration}`\n );\n }\n}\n","import { SecretManagerIntegration } from './SecretManagerIntegration.js';\nimport { IMSProviderAdapter } from './IMSProviderAdapter.js';\nimport type { GenerationParameters, ModelDefinition } from './types/ModelPool.js';\nimport type { Message } from '../../providers/ai-provider.js';\n\nexport interface IMSFacadeOptions {\n projectId?: string;\n defaultPolicyId?: string;\n}\n\nexport interface IMSChatRequest {\n prompt: string;\n systemPrompt?: string;\n context?: {\n kind?: 'chat' | 'code';\n latencyBudgetMs?: number;\n costTier?: 'low' | 'mid' | 'high';\n userPlan?: 'free' | 'starter' | 'pro';\n };\n}\n\nexport interface IMSChatResponse {\n success: boolean;\n content: string;\n meta: {\n provider: string;\n model: string;\n traceId: string;\n reasons: string[];\n };\n}\n\n/**\n * Minimal IMS Facade for API integration\n * - Uses Secret Manager for API keys and optional defaults\n * - Performs simple provider/model selection (dev-friendly)\n * - Delegates provider calls through IMSProviderAdapter (unified interface)\n */\nexport class IMSFacade {\n private readonly secrets: SecretManagerIntegration;\n\n constructor(private readonly options: IMSFacadeOptions = {}) {\n const projectId = options.projectId || process.env.GCLOUD_PROJECT || process.env.GOOGLE_CLOUD_PROJECT || 'maria-code-470602';\n // Provide explicit secret name mapping so GEMINI/Google key is surfaced as googleApiKey\n this.secrets = new SecretManagerIntegration({\n projectId,\n secrets: {\n openAI: 'openai-api-key',\n googleAI: 'google-ai-api-key',\n anthropic: 'anthropic-api-key',\n groq: 'groq-api-key',\n }\n });\n }\n\n /** Route a simple chat request through IMS selection + providers */\n async routeChat(req: IMSChatRequest): Promise<IMSChatResponse> {\n const traceId = `ims_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;\n\n // 1) Load optional defaults from Secret Manager\n const optional = await this.secrets.getOptionalConfig().catch(() => ({} as any));\n\n // 2) Load API keys (fail-safe). Prefer Secret Manager's unified getter\n const allKeys = await this.secrets.getAllApiKeys().catch(() => ({}) as any);\n const openaiApiKey = allKeys.openaiApiKey || process.env.OPENAI_API_KEY;\n const groqApiKey = allKeys.groqApiKey || process.env.GROQ_API_KEY;\n const anthropicApiKey = allKeys.anthropicApiKey || process.env.ANTHROPIC_API_KEY;\n // Ensure GEMINI/GOOGLE_AI is honored (user said GEMINI_API_KEY is present in secrets)\n const googleApiKey = allKeys.googleApiKey || process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY || process.env.GOOGLE_AI_API_KEY;\n\n // 3) Decide provider/model\n const selection = this.selectProviderAndModel({\n defaultProvider: optional.defaultProvider,\n defaultModel: optional.defaultModel,\n keys: { openaiApiKey, groqApiKey, anthropicApiKey, googleApiKey }\n });\n\n // 4) If no keys at all, short-circuit with a graceful local reply\n const anyKey = openaiApiKey || groqApiKey || anthropicApiKey || googleApiKey;\n if (!anyKey) {\n const fallback = this.buildPoliteFallback(req.prompt);\n return {\n success: true,\n content: fallback,\n meta: { provider: 'none', model: 'none', traceId, reasons: ['no-keys-detected'] }\n };\n }\n\n // 4) Initialize provider adapter (with retries and fallback)\n const adapter = new IMSProviderAdapter({\n openaiApiKey,\n groqApiKey,\n anthropicApiKey,\n googleApiKey,\n enableMetrics: true,\n enableFallback: true,\n maxRetries: 2\n });\n try { await adapter.initialize(); } catch {\n const fallback = this.buildPoliteFallback(req.prompt);\n return { success: true, content: fallback, meta: { provider: 'none', model: 'none', traceId, reasons: ['adapter-init-failed'] } };\n }\n\n // 5) Build minimal ModelDefinition and generation params\n const modelDef: ModelDefinition = {\n id: `${selection.provider}:${selection.model}`,\n providerId: selection.provider,\n modelName: selection.model,\n modality: 'text',\n contextWindow: 128000,\n performance: { estimatedTTFBMs: 250, estimatedThroughput: 200, qualityScore: 0.9 },\n cost: { inputTokensPPM: 0.5, outputTokensPPM: 1.5 },\n capabilities: { languages: ['en', 'ja'], functionCalling: false, toolUse: false, codeExecution: false, streaming: true, maxOutputTokens: 4096 },\n defaultParams: { temperature: 0.7, topP: 0.9, maxTokens: 1024 }\n } as any;\n\n const gen: GenerationParameters = {\n temperature: modelDef.defaultParams.temperature,\n topP: modelDef.defaultParams.topP,\n maxTokens: modelDef.defaultParams.maxTokens,\n stop: []\n };\n\n const routeResult = {\n routing: { success: true, estimatedTTFBMs: modelDef.performance.estimatedTTFBMs, estimatedCostUsd: 0.001, confidence: 0.8 },\n generationParams: gen,\n trace: { traceId, routedAt: new Date().toISOString(), policyUsed: this.options.defaultPolicyId || 'dev', fallbackChain: [] }\n };\n\n const sys = (req.systemPrompt && String(req.systemPrompt).trim()) || 'You are a concise assistant. Make sure you answer in plain text, as a natural chat.';\n const messages: Message[] = [\n { role: 'system', content: sys },\n { role: 'user', content: req.prompt }\n ];\n\n // 6) Execute via adapter (graceful fallback on provider/network errors)\n let content = '';\n try {\n ({ content } = await adapter.executeModelCall(messages, routeResult as any, modelDef as any));\n } catch {\n content = this.buildPoliteFallback(req.prompt);\n }\n\n return {\n success: true,\n content,\n meta: {\n provider: selection.provider,\n model: selection.model,\n traceId,\n reasons: selection.reasons\n }\n };\n }\n\n private buildPoliteFallback(prompt: string): string {\n const p = (prompt || '').trim();\n return p\n ? `Sorry, I can't reach the AI service right now.\\nYour request: \"${p}\"\\nI can still help summarize, clarify, or suggest next steps. Try again in a moment, or ask me to rephrase.`\n : 'Sorry, I can\\'t reach the AI service right now. Please try again in a moment.';\n }\n\n private selectProviderAndModel(input: {\n defaultProvider?: string;\n defaultModel?: string;\n keys: { openaiApiKey?: string; groqApiKey?: string; anthropicApiKey?: string; googleApiKey?: string };\n }): { provider: 'openai'|'groq'|'anthropic'|'google'; model: string; reasons: string[] } {\n const reasons: string[] = [];\n // Use defaults if compatible\n if (input.defaultProvider && input.defaultModel) {\n const p = input.defaultProvider.toLowerCase();\n if (this.hasKey(p, input.keys)) {\n reasons.push('selected: secret-defaults');\n return { provider: p as any, model: input.defaultModel, reasons };\n }\n reasons.push('override: default-provider has no key');\n }\n\n // Priority order by key availability (dev-friendly)\n if (input.keys.openaiApiKey) return { provider: 'openai', model: 'gpt-5-mini', reasons: [...reasons, 'fallback: openai key present'] };\n if (input.keys.googleApiKey) return { provider: 'google', model: 'gemini-2.5-flash', reasons: [...reasons, 'fallback: google key present'] };\n if (input.keys.groqApiKey) return { provider: 'groq', model: 'llama-3.1-70b-versatile', reasons: [...reasons, 'fallback: groq key present'] };\n if (input.keys.anthropicApiKey) return { provider: 'anthropic', model: 'claude-sonnet-4-20250514', reasons: [...reasons, 'fallback: anthropic key present'] };\n\n // Last resort\n return { provider: 'openai', model: 'gpt-5-mini', reasons: [...reasons, 'last-resort: no keys detected'] };\n }\n\n private hasKey(provider: string, keys: { openaiApiKey?: string; groqApiKey?: string; anthropicApiKey?: string; googleApiKey?: string }): boolean {\n switch (provider) {\n case 'openai': return !!keys.openaiApiKey || !!process.env.OPENAI_API_KEY;\n case 'groq': return !!keys.groqApiKey || !!process.env.GROQ_API_KEY;\n case 'anthropic': return !!keys.anthropicApiKey || !!process.env.ANTHROPIC_API_KEY;\n case 'google': return !!keys.googleApiKey || !!process.env.GEMINI_API_KEY || !!process.env.GOOGLE_API_KEY || !!process.env.GOOGLE_AI_API_KEY;\n default: return false;\n }\n }\n}\n\nexport default IMSFacade;\n\n","/**\n * Common AI Provider Interface\n * All AI providers must implement this interface\n */\n\nexport interface Message {\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n}\n\nexport interface StreamOptions {\n onToken?: (_token: string) => void;\n signal?: AbortSignal;\n}\n\nexport interface CompletionOptions {\n temperature?: number;\n maxTokens?: number;\n topP?: number;\n stopSequences?: string[];\n stream?: boolean;\n streamOptions?: StreamOptions;\n}\n\nexport interface CodeReviewResult {\n issues: Array<{\n line: number;\n severity: \"error\" | \"warning\" | \"info\";\n message: string;\n suggestion?: string;\n }>;\n summary: string;\n improvements: string[];\n}\n\nexport interface VisionResponse {\n description: string;\n objects?: Array<{\n name: string;\n confidence: number;\n location?: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n }>;\n text?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface ModelInfo {\n name: string;\n description?: string;\n contextWindow?: number;\n maxTokens?: number;\n pricing?: {\n input: number;\n output: number;\n };\n capabilities: {\n vision?: boolean;\n streaming?: boolean;\n codeGeneration?: boolean;\n embeddings?: boolean;\n };\n}\n\nexport interface IAIProvider {\n readonly name: string;\n readonly models: string[];\n\n /**\n * Initialize the provider with API key and configuration\n */\n initialize(_apiKey: string, config?: Record<string, unknown>): Promise<void>;\n\n /**\n * Chat completion\n */\n chat(\n _messages: Message[],\n model?: string,\n options?: CompletionOptions,\n ): Promise<string>;\n\n /**\n * Streaming chat completion\n */\n chatStream(\n messages: Message[],\n model?: string,\n options?: CompletionOptions,\n ): AsyncGenerator<string>;\n\n /**\n * Generate code based on prompt\n */\n generateCode(\n _prompt: string,\n language?: string,\n model?: string,\n ): Promise<string>;\n\n /**\n * Review code and provide feedback\n */\n reviewCode(\n _code: string,\n language?: string,\n model?: string,\n ): Promise<CodeReviewResult>;\n\n /**\n * Vision understanding (optional)\n */\n vision?(\n _image: Buffer,\n prompt: string,\n model?: string,\n ): Promise<VisionResponse>;\n\n /**\n * Generate embeddings (optional)\n */\n embeddings?(_text: string, model?: string): Promise<number[]>;\n\n /**\n * Validate connection to the provider\n */\n validateConnection?(): Promise<boolean>;\n\n /**\n * Get model information\n */\n getModelInfo?(model?: string): Promise<ModelInfo>;\n\n /**\n * Estimate cost for tokens\n */\n estimateCost?(_tokens: number, model?: string): number;\n\n /**\n * Check if the provider is properly initialized\n */\n isInitialized(): boolean;\n\n /**\n * Get available models\n */\n getModels(): string[];\n\n /**\n * Get default model\n */\n getDefaultModel(): string;\n}\n\n/**\n * Base abstract class for AI providers\n */\nexport abstract class BaseAIProvider implements IAIProvider {\n protected _apiKey: string = \"\";\n protected config: Record<string, unknown> = {};\n protected initialized: boolean = false;\n\n abstract readonly name: string;\n abstract readonly models: string[];\n\n async initialize(\n _apiKey: string,\n config?: Record<string, unknown>,\n ): Promise<void> {\n this._apiKey = _apiKey;\n this.config = config || {};\n this.initialized = true;\n }\n\n isInitialized(): boolean {\n return this.initialized;\n }\n\n getModels(): string[] {\n return this.models;\n }\n\n getDefaultModel(): string {\n if (this.models.length === 0) {\n throw new Error(`No models available for ${this.name} provider`);\n }\n const _defaultModel = this.models[0];\n if (!_defaultModel) {\n throw new Error(`Invalid default model for ${this.name} provider`);\n }\n return _defaultModel;\n }\n\n protected validateModel(model?: string): string {\n const _selectedModel = model || this.getDefaultModel();\n if (!this.models.includes(_selectedModel)) {\n throw new Error(\n `Model ${_selectedModel} is not supported by ${this.name} provider`,\n );\n }\n return _selectedModel;\n }\n\n protected ensureInitialized(): void {\n if (!this.initialized) {\n throw new Error(\n `${this.name} provider is not initialized. Call initialize() first.`,\n );\n }\n }\n\n abstract chat(\n _messages: Message[],\n _model?: string,\n _options?: CompletionOptions,\n ): Promise<string>;\n abstract chatStream(\n _messages: Message[],\n _model?: string,\n _options?: CompletionOptions,\n ): AsyncGenerator<string>;\n abstract generateCode(\n _prompt: string,\n _language?: string,\n _model?: string,\n ): Promise<string>;\n abstract reviewCode(\n _code: string,\n _language?: string,\n _model?: string,\n ): Promise<CodeReviewResult>;\n}\n\n/**\n * Provider Registry\n */\nexport class AIProviderRegistry {\n private static providers = new Map<string, IAIProvider>();\n private static defaultProvider: string | null = null;\n\n static register(provider: IAIProvider): void {\n this.providers.set(provider.name.toLowerCase(), provider);\n }\n\n static get(name: string): IAIProvider | undefined {\n return this.providers.get(name.toLowerCase());\n }\n\n static getAll(): IAIProvider[] {\n return Array.from(this.providers.values());\n }\n\n static setDefault(name: string): void {\n if (!this.providers.has(name.toLowerCase())) {\n throw new Error(`Provider ${name} is not registered`);\n }\n this.defaultProvider = name.toLowerCase();\n }\n\n static getDefault(): IAIProvider | undefined {\n if (!this.defaultProvider) {\n // Return the first registered provider as default\n const _firstProvider = this.providers.values().next().value;\n return _firstProvider;\n }\n return this.providers.get(this.defaultProvider);\n }\n\n static clear(): void {\n this.providers.clear();\n this.defaultProvider = null;\n }\n}\n","import {\n Content,\n GenerativeModel,\n GoogleGenerativeAI,\n} from \"@google/generative-ai\";\nimport {\n BaseAIProvider,\n CodeReviewResult,\n CompletionOptions,\n Message,\n} from \"./ai-provider.js\";\n\nexport class GoogleAIProvider extends BaseAIProvider {\n id = \"google-aiprovider\";\n version = \"1.0.0\";\n\n readonly name = \"GoogleAI\";\n readonly models = [\n \"gemini-2.5-pro\",\n \"gemini-2.5-flash\",\n \"gemini-2.5-flash-lite\",\n \"gemini-2.5-flash-image-preview\",\n \"gemini-2.0-flash-exp\",\n \"gemini-1.5-pro\",\n \"gemini-1.5-pro-002\",\n \"gemini-1.5-flash\",\n \"gemini-1.5-flash-002\",\n \"gemini-1.5-flash-8b\",\n \"gemini-1.0-pro\",\n ];\n\n private client?: GoogleGenerativeAI;\n\n override async initialize(\n _apiKey: string,\n config?: Record<string, unknown>,\n ): Promise<void> {\n await super.initialize(_apiKey, config);\n\n this.client = new GoogleGenerativeAI(_apiKey);\n }\n\n private convertMessages(messages: Message[]): Content[] {\n // Extract system message to use as initial context\n const _systemMessage = messages.find((m) => m.role === \"system\");\n const _conversationMessages = messages.filter((m) => m.role !== \"system\");\n\n const _contents: Content[] = [];\n\n // Add system message as first user message if present\n if (_systemMessage) {\n _contents.push({\n role: \"user\",\n parts: [{ _text: `System: ${_systemMessage.content}` }],\n });\n _contents.push({\n role: \"model\",\n parts: [{ _text: \"Understood. I will follow these instructions.\" }],\n });\n }\n\n // Add conversation messages\n _conversationMessages.forEach((msg) => {\n _contents.push({\n role: msg.role === \"user\" ? \"user\" : \"model\",\n parts: [{ _text: msg.content }],\n });\n });\n\n return _contents;\n }\n\n private getModel(modelName: string): GenerativeModel {\n if (!this.client) {\n throw new Error(\"Client not initialized\");\n }\n\n return this.client.getGenerativeModel({\n model: modelName,\n generationConfig: {\n candidateCount: 1,\n },\n });\n }\n\n async _chat(\n _messages: Message[],\n model?: string,\n options?: CompletionOptions,\n ): Promise<string> {\n this.ensureInitialized();\n const _selectedModel = this.validateModel(model);\n\n const _genModel = this.getModel(_selectedModel);\n const _contents = this.convertMessages(_messages);\n\n // Create _chat session with history\n const _chat = _genModel.startChat({\n history: _contents.slice(0, -1), // All messages except the last one\n generationConfig: {\n temperature: options?.temperature || 0.7,\n maxOutputTokens: options?.maxTokens,\n topP: options?.topP,\n stopSequences: options?.stopSequences,\n },\n });\n\n // Send the last message\n const _lastMessage = _contents[_contents.length - 1];\n if (!_lastMessage || !_lastMessage.parts || !_lastMessage.parts[0]) {\n throw new Error(\"Invalid message format\");\n }\n const _result = await _chat.sendMessage((_lastMessage.parts[0] as any)._text || \"\");\n const _response = await _result.response;\n\n return response.text();\n }\n\n async *chatStream(\n messages: Message[],\n model?: string,\n options?: CompletionOptions,\n ): AsyncGenerator<string> {\n this.ensureInitialized();\n const _selectedModel = this.validateModel(model);\n\n const _genModel = this.getModel(_selectedModel);\n const _contents = this.convertMessages(messages);\n\n // Create _chat session with history\n const _chat = _genModel.startChat({\n history: _contents.slice(0, -1),\n generationConfig: {\n temperature: options?.temperature || 0.7,\n maxOutputTokens: options?.maxTokens,\n topP: options?.topP,\n stopSequences: options?.stopSequences,\n },\n });\n\n // Send the last message with streaming\n const _lastMessage = _contents[_contents.length - 1];\n if (!_lastMessage || !_lastMessage.parts || !_lastMessage.parts[0]) {\n throw new Error(\"Invalid message format\");\n }\n const _result = await _chat.sendMessageStream(\n (_lastMessage.parts[0] as any)._text || \"\",\n );\n\n for await (const chunk of _result.stream) {\n const text = chunk.text();\n if (text) {\n yield text;\n\n if (options?.streamOptions?.onToken) {\n options.streamOptions.onToken(text);\n }\n }\n\n // Check for abort signal\n if (options?.streamOptions?.signal?.aborted) {\n break;\n }\n }\n }\n\n async generateCode(\n prompt: string,\n language: string = \"typescript\",\n model?: string,\n ): Promise<string> {\n const messages: Message[] = [\n {\n role: \"system\",\n content: `You are an expert ${language} developer. Generate clean, well-commented code based on the user's request. Only return the code without any explanations or markdown formatting.`,\n },\n {\n role: \"user\",\n content: prompt,\n },\n ];\n\n return this.chat(messages, model, { temperature: 0.2 });\n }\n\n async reviewCode(\n code: string,\n language: string = \"typescript\",\n model?: string,\n ): Promise<CodeReviewResult> {\n const messages: Message[] = [\n {\n role: \"system\",\n content: `You are an expert code reviewer. Analyze the following ${language} code and provide a detailed review. Format your _response as JSON with the following structure:\n{\n \"issues\": [\n {\n \"line\": <line_number>,\n \"severity\": \"error\" | \"warning\" | \"info\",\n \"message\": \"<issue description>\",\n \"suggestion\": \"<optional fix suggestion>\"\n\n }\n ],\n \"summary\": \"<overall code quality summary>\",\n \"improvements\": [\"<improvement suggestion 1>\", \"<improvement suggestion 2>\", ...]\n}`,\n },\n {\n role: \"user\",\n content: code,\n },\n ];\n\n const _response = await this.chat(messages, model, { temperature: 0.1 });\n\n try {\n return JSON.parse(_response) as CodeReviewResult;\n } catch {\n // Fallback if JSON parsing fails\n return {\n issues: [],\n summary: _response,\n improvements: [],\n };\n }\n }\n}\n","import OpenAI from \"openai\";\nimport {\n BaseAIProvider,\n CodeReviewResult,\n CompletionOptions,\n Message,\n} from \"./ai-provider.js\";\n\nexport class OpenAIProvider extends BaseAIProvider {\n readonly name = \"OpenAI\";\n readonly models = [\n \"gpt-5-mini-2025-08-07\",\n \"gpt-5-mini\",\n \"gpt-5\",\n \"gpt-4o\",\n \"gpt-4o-mini\",\n \"gpt-4-turbo\",\n \"gpt-4\",\n \"gpt-3.5-turbo\",\n \"o1-preview\",\n \"o1-mini\",\n ];\n\n private client?: OpenAI;\n\n override async initialize(\n _apiKey: string,\n config?: Record<string, unknown>,\n ): Promise<void> {\n await super.initialize(_apiKey, config);\n\n this.client = new OpenAI({\n apiKey: this._apiKey,\n baseURL: config?.[\"baseURL\"] as string | undefined,\n organization: config?.[\"organization\"] as string | undefined,\n maxRetries: (config?.[\"maxRetries\"] as number) || 3,\n });\n }\n\n async chat(\n _messages: Message[],\n model?: string,\n options?: CompletionOptions,\n ): Promise<string> {\n this.ensureInitialized();\n const _selectedModel = this.validateModel(model);\n\n // o1 and gpt-5 models only support _temperature=1\n const _isRestrictedModel =\n _selectedModel.includes(\"o1\") || _selectedModel.includes(\"gpt-5\");\n const temperature = _isRestrictedModel ? 1.0 : (options?.temperature ?? 0.7);\n\n const completionParams: any = {\n model: _selectedModel,\n messages: _messages.map((m) => ({\n role: m.role,\n _content: m.content,\n })),\n top_p: options?.topP,\n stop: options?.stopSequences,\n };\n\n // GPT-5 models have special requirements\n if (_selectedModel.includes(\"gpt-5\")) {\n // GPT-5 only supports _temperature=1.0 (no need to send it)\n // Use max_completion_tokens instead of max_tokens\n completionParams.max_completion_tokens = options?.maxTokens || 32000;\n } else {\n // Non-GPT-5 models use standard parameters\n completionParams.temperature = temperature;\n completionParams.max_tokens = options?.maxTokens;\n }\n\n const _completion = await this.client!.chat.completions.create(completionParams);\n\n return _completion.choices[0]?.message?.content || \"\";\n }\n\n // Add complete method for UnifiedAIProviderManager compatibility\n async complete(\n prompt: string,\n req: { model?: string; _temperature?: number; maxTokens?: number },\n ): Promise<{ _content: string }> {\n const messages: Message[] = [\n {\n role: \"user\",\n _content: prompt,\n },\n ];\n\n const _content = await this.chat(messages, req.model, {\n _temperature: req._temperature,\n maxTokens: req.maxTokens,\n });\n\n return { _content };\n }\n\n async *chatStream(\n messages: Message[],\n model?: string,\n options?: CompletionOptions,\n ): AsyncGenerator<string> {\n this.ensureInitialized();\n const _selectedModel = this.validateModel(model);\n\n // o1 and gpt-5 models only support _temperature=1\n const _isRestrictedModel =\n _selectedModel.includes(\"o1\") || _selectedModel.includes(\"gpt-5\");\n const temperature = _isRestrictedModel ? 1.0 : (options?.temperature ?? 0.7);\n\n const streamParams: any = {\n model: _selectedModel,\n messages: messages.map((m) => ({\n role: m.role,\n _content: m.content,\n })),\n top_p: options?.topP,\n stop: options?.stopSequences,\n _stream: true,\n };\n\n // GPT-5 models have special requirements\n if (_selectedModel.includes(\"gpt-5\")) {\n // GPT-5 only supports _temperature=1.0 (no need to send it)\n // Use max_completion_tokens instead of max_tokens\n streamParams.max_completion_tokens = options?.maxTokens || 32000;\n } else {\n // Non-GPT-5 models use standard parameters\n streamParams.temperature = temperature;\n streamParams.max_tokens = options?.maxTokens;\n }\n\n const _stream = await this.client!.chat.completions.create(streamParams);\n\n for await (const chunk of _stream) {\n const _content = chunk.choices[0]?.delta?._content;\n if (_content) {\n yield _content;\n if (options?.streamOptions?.onToken) {\n options.streamOptions.onToken(_content);\n }\n }\n\n // Check for abort signal\n if (options?.streamOptions?.signal?.aborted) {\n break;\n }\n }\n }\n\n async generateCode(\n prompt: string,\n language: string = \"typescript\",\n model?: string,\n ): Promise<string> {\n const messages: Message[] = [\n {\n role: \"system\",\n _content: `You are an expert ${language} developer. Generate clean, well-commented code based on the user's request. Only return the code without any explanations or markdown formatting.`,\n },\n {\n role: \"user\",\n _content: prompt,\n },\n ];\n\n return this.chat(messages, model, { _temperature: 0.2 });\n }\n\n async reviewCode(\n code: string,\n language: string = \"typescript\",\n model?: string,\n ): Promise<CodeReviewResult> {\n const messages: Message[] = [\n {\n role: \"system\",\n _content: `You are an expert code reviewer. Analyze the following ${language} code and provide a detailed review. Format your response as JSON with the following structure:\n{\n \"issues\": [\n {\n \"line\": <line_number>,\n \"severity\": \"error\" | \"warning\" | \"info\",\n \"message\": \"<issue description>\",\n \"suggestion\": \"<optional fix suggestion>\"\n }\n ],\n \"summary\": \"<overall code quality summary>\",\n \"improvements\": [\"<improvement suggestion 1>\", \"<improvement suggestion 2>\", ...]\n}`,\n },\n {\n role: \"user\",\n _content: code,\n },\n ];\n\n const response = await this.chat(messages, model, { _temperature: 0.1 });\n\n try {\n return JSON.parse(response) as CodeReviewResult;\n } catch {\n // Fallback if JSON parsing fails\n return {\n issues: [],\n summary: response,\n improvements: [],\n };\n }\n }\n}\n","import Anthropic from \"@anthropic-ai/sdk\";\nimport {\n BaseAIProvider,\n CodeReviewResult,\n CompletionOptions,\n Message,\n} from \"./ai-provider.js\";\n\nexport class AnthropicProvider extends BaseAIProvider {\n readonly name = \"Anthropic\";\n readonly models = [\n \"claude-4.1\",\n \"claude-3-5-sonnet-20241022\",\n \"claude-3-5-haiku-20241022\",\n \"claude-3-opus-20240229\",\n \"claude-3-sonnet-20240229\",\n \"claude-3-haiku-20240307\",\n ];\n\n private client?: Anthropic;\n\n override async initialize(\n _apiKey: string,\n config?: Record<string, unknown>,\n ): Promise<void> {\n await super.initialize(_apiKey, config);\n\n this.client = new Anthropic({\n _apiKey: this._apiKey,\n baseURL: config?.[\"baseURL\"] as string | undefined,\n maxRetries: (config?.[\"maxRetries\"] as number) || 3,\n });\n }\n\n private convertMessages(messages: Message[]): Anthropic.MessageParam[] {\n // Extract system message if present (unused for now but kept for future use)\n const _systemMessage = messages.find((m) => m.role === \"system\");\n void _systemMessage; // Will be used in future implementation\n const _conversationMessages = messages.filter((m) => m.role !== \"system\");\n\n return _conversationMessages.map((m) => ({\n role: m.role as \"user\" | \"assistant\",\n _content: m.content,\n }));\n }\n\n private getSystemMessage(messages: Message[]): string | undefined {\n const _systemMessage = messages.find((m) => m.role === \"system\");\n return _systemMessage?.content;\n }\n\n async chat(\n _messages: Message[],\n model?: string,\n options?: CompletionOptions,\n ): Promise<string> {\n this.ensureInitialized();\n const _selectedModel = this.validateModel(model);\n\n const _response = await this.client!.messages.create({\n model: _selectedModel,\n _messages: this.convertMessages(_messages),\n system: this.getSystemMessage(_messages),\n maxtokens: options?.maxTokens || 4096,\n temperature: options?.temperature || 0.7,\n topp: options?.topP,\n stopsequences: options?.stopSequences,\n });\n\n // Handle different _content types\n const _content = _response._content[0];\n if (_content && _content.type === \"_text\" && \"_text\" in _content) {\n return _content._text;\n }\n\n return \"\";\n }\n\n async *chatStream(\n messages: Message[],\n model?: string,\n options?: CompletionOptions,\n ): AsyncGenerator<string> {\n this.ensureInitialized();\n const _selectedModel = this.validateModel(model);\n\n const _stream = await this.client!.messages.create({\n model: _selectedModel,\n messages: this.convertMessages(messages),\n system: this.getSystemMessage(messages),\n maxtokens: options?.maxTokens || 4096,\n temperature: options?.temperature || 0.7,\n topp: options?.topP,\n stopsequences: options?.stopSequences,\n _stream: true,\n });\n\n for await (const event of _stream) {\n if (\n event.type === \"content_block_delta\" &&\n event.delta.type === \"text_delta\"\n ) {\n const _text = event.delta._text;\n yield _text;\n\n if (options?.streamOptions?.onToken) {\n options.streamOptions.onToken(_text);\n }\n }\n\n // Check for abort signal\n if (options?.streamOptions?.signal?.aborted) {\n break;\n }\n }\n }\n\n async generateCode(\n prompt: string,\n language: string = \"typescript\",\n model?: string,\n ): Promise<string> {\n const messages: Message[] = [\n {\n role: \"system\",\n _content: `You are an expert ${language} developer. Generate clean, well-commented code based on the user's request. Only return the code without any explanations or markdown formatting.`,\n },\n {\n role: \"user\",\n _content: prompt,\n },\n ];\n\n return this.chat(messages, model, { temperature: 0.2 });\n }\n\n async reviewCode(\n code: string,\n language: string = \"typescript\",\n model?: string,\n ): Promise<CodeReviewResult> {\n const messages: Message[] = [\n {\n role: \"system\",\n _content: `You are an expert code reviewer. Analyze the following ${language} code and provide a detailed review. Format your _response as JSON with the following structure:\n{\n \"issues\": [\n {\n \"line\": <line_number>,\n \"severity\": \"error\" | \"warning\" | \"info\",\n \"message\": \"<issue description>\",\n \"suggestion\": \"<optional fix suggestion>\"\n }\n ],\n \"summary\": \"<overall code quality summary>\",\n \"improvements\": [\"<improvement suggestion 1>\", \"<improvement suggestion 2>\", ...]\n}`,\n },\n {\n role: \"user\",\n _content: code,\n },\n ];\n\n const _response = await this.chat(messages, model, { temperature: 0.1 });\n\n try {\n return JSON.parse(_response) as CodeReviewResult;\n } catch {\n // Fallback if JSON parsing fails\n return {\n issues: [],\n summary: _response,\n improvements: [],\n };\n }\n }\n}\n","/**\n * Unified Base Provider v2.0\n * Abstract base class for all AI providers with legacy compatibility\n */\n\nimport type {\n IUnifiedAIProvider,\n ProviderId,\n ProviderRequest,\n ProviderStream,\n ProviderResponse,\n ProviderHealth,\n} from \"./config\";\n\nexport abstract class UnifiedBaseProvider implements IUnifiedAIProvider {\n abstract id: ProviderId;\n abstract name: string;\n\n protected apiKey?: string;\n protected apiBase?: string;\n protected initialized: boolean = false;\n protected availableModels: string[] = [];\n\n constructor(config: { apiKey?: string; apiBase?: string } = {}) {\n this.apiKey = config.apiKey;\n this.apiBase = config.apiBase;\n }\n\n // Abstract methods that must be implemented by providers\n abstract isAvailable(): Promise<boolean>;\n abstract complete(\n prompt: string,\n req: ProviderRequest,\n ): Promise<ProviderResponse>;\n abstract stream(\n prompt: string,\n req: ProviderRequest,\n ): Promise<ProviderStream>;\n abstract getModels(): Promise<string[]>;\n\n // Default health check implementation\n async health(): Promise<ProviderHealth> {\n const startTime = Date.now();\n try {\n const isHealthy = await this.isAvailable();\n const latencyMs = Date.now() - startTime;\n\n return {\n ok: isHealthy,\n latencyMs,\n timestamp: Date.now(),\n };\n } catch (error) {\n return {\n ok: false,\n latencyMs: Date.now() - startTime,\n reason: error instanceof Error ? error.message : \"Unknown error\",\n timestamp: Date.now(),\n };\n }\n }\n\n // Helper method for HTTP requests\n protected async makeRequest(\n url: string,\n options: Record<string, unknown>,\n ): Promise<unknown> {\n const fetch = (await import(\"node-fetch\")).default;\n const timeoutMs = (options.timeout as number) || 30000;\n\n // Create abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(options.headers as Record<string, string>),\n },\n body: JSON.stringify(options.body),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `${this.name} API error: ${response.status} ${errorText}`,\n );\n }\n\n return response.json();\n } catch (error) {\n clearTimeout(timeoutId);\n throw error;\n }\n }\n\n // Helper method for streaming requests\n protected async makeStreamRequest(\n url: string,\n options: Record<string, unknown>,\n ): Promise<AsyncGenerator<string>> {\n const fetch = (await import(\"node-fetch\")).default;\n const timeoutMs = (options.timeout as number) || 30000;\n\n // Create abort controller for timeout\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(options.headers as Record<string, string>),\n },\n body: JSON.stringify(options.body),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorText = await response.text();\n throw new Error(\n `${this.name} API error: ${response.status} ${errorText}`,\n );\n }\n\n return this.parseStreamResponse(response);\n } catch (error) {\n clearTimeout(timeoutId);\n throw error;\n }\n }\n\n // Default stream parsing - override in subclasses for provider-specific logic\n private async *parseStreamResponse(\n response: unknown,\n ): AsyncGenerator<string> {\n const typedResponse = response as {\n body?: { getReader(): ReadableStreamDefaultReader<Uint8Array> };\n };\n\n const reader = typedResponse.body?.getReader();\n if (!reader) return;\n\n const decoder = new TextDecoder();\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n const chunk = decoder.decode(value);\n const lines = chunk.split(\"\\n\").filter((line) => line.trim());\n\n for (const line of lines) {\n if (line.startsWith(\"data: \")) {\n const data = line.slice(6);\n if (data === \"[DONE]\") return;\n\n try {\n const parsed = JSON.parse(data) as Record<string, unknown>;\n const content = this.extractStreamContent(parsed);\n if (content) yield content;\n } catch {\n // Skip invalid JSON\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n // Override in subclasses for provider-specific content extraction\n protected extractStreamContent(data: Record<string, unknown>): string | null {\n const choices = data.choices as Array<{ delta?: { content?: string } }>;\n return choices?.[0]?.delta?.content || null;\n }\n\n // Retry logic for API calls\n protected async withRetry<T>(\n operation: () => Promise<T>,\n maxRetries: number = 3,\n ): Promise<T> {\n let lastError: Error;\n\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n return await operation();\n } catch (error) {\n lastError = error as Error;\n\n // Don't retry on certain errors\n if (this.isNonRetryableError(error)) {\n throw error;\n }\n\n // Exponential backoff\n if (attempt < maxRetries - 1) {\n const delay = Math.pow(2, attempt) * 1000;\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n }\n\n throw lastError!;\n }\n\n // Check if error should not be retried\n protected isNonRetryableError(error: unknown): boolean {\n const message = (error as Error)?.message?.toLowerCase() || \"\";\n return (\n message.includes(\"invalid api key\") ||\n message.includes(\"unauthorized\") ||\n message.includes(\"forbidden\") ||\n message.includes(\"not found\")\n );\n }\n}\n\n// 互換エクスポート(既存コードが { BaseProvider } を期待するため)\nexport { UnifiedBaseProvider as BaseProvider };\nexport default UnifiedBaseProvider;\n","/**\n * Groq Provider Implementation (Fast Inference)\n */\n\nimport { BaseProvider } from \"./base-provider\";\nimport { AIRequest, AIResponse, ModelInfo } from \"../types\";\nimport type { ProviderId, ProviderRequest, ProviderResponse, ProviderStream } from \"./config\";\n\nexport class GroqProvider extends BaseProvider {\n id: ProviderId = \"groq\";\n name = \"groq\";\n private modelsCache?: ModelInfo[];\n\n constructor(apiKey?: string) {\n super({\n apiKey,\n apiBase: \"https://api.groq.com/openai/v1\",\n });\n }\n\n async isAvailable(): Promise<boolean> {\n if (!this.apiKey || this.apiKey.startsWith(\"gsk_your-groq-\")) {\n return false;\n }\n\n try {\n await this.makeRequest(`${this.apiBase}/models`, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n },\n });\n return true;\n } catch {\n return false;\n }\n }\n\n async getModels(): Promise<string[]> {\n const models = [\n \"llama-3.3-70b-versatile\",\n \"llama-3.2-90b-vision-preview\",\n \"mixtral-8x7b-32768\",\n \"gemma2-9b-it\",\n ];\n return models;\n }\n\n async getModelInfo(): Promise<ModelInfo[]> {\n if (this.modelsCache) {\n return this.modelsCache;\n }\n\n const models: ModelInfo[] = [\n {\n id: \"llama-3.3-70b-versatile\",\n name: \"Llama 3.3 70B\",\n provider: this.name,\n description: \"Most capable Llama _model with versatile performance\",\n contextLength: 32768,\n capabilities: [\"text\", \"reasoning\", \"code\"],\n _pricing: { input: 0.00059, output: 0.00079 },\n available: await this.isAvailable(),\n recommendedFor: [\"complex_reasoning\", \"coding\", \"analysis\"],\n },\n {\n id: \"llama-3.2-90b-vision-preview\",\n name: \"Llama 3.2 90B Vision\",\n provider: this.name,\n description: \"Vision-capable Llama _model for multimodal tasks\",\n contextLength: 128000,\n capabilities: [\"text\", \"vision\", \"reasoning\"],\n _pricing: { input: 0.0009, output: 0.0009 },\n available: await this.isAvailable(),\n recommendedFor: [\"vision_tasks\", \"multimodal\", \"analysis\"],\n },\n {\n id: \"mixtral-8x7b-32768\",\n name: \"Mixtral 8x7B\",\n provider: this.name,\n description: \"Mixture of experts _model for balanced performance\",\n contextLength: 32768,\n capabilities: [\"text\", \"reasoning\", \"code\"],\n _pricing: { input: 0.00024, output: 0.00024 },\n available: await this.isAvailable(),\n recommendedFor: [\"balanced_performance\", \"multilingual\"],\n },\n {\n id: \"gemma2-9b-it\",\n name: \"Gemma 2 9B\",\n provider: this.name,\n description: \"Google's efficient open _model\",\n contextLength: 8192,\n capabilities: [\"text\", \"reasoning\"],\n _pricing: { input: 0.0002, output: 0.0002 },\n available: await this.isAvailable(),\n recommendedFor: [\"quick_tasks\", \"cost_effective\"],\n },\n ];\n\n this.modelsCache = models;\n return models;\n }\n\n async complete(prompt: string, req: ProviderRequest): Promise<ProviderResponse> {\n if (!(await this.isAvailable())) {\n throw new Error(\"Groq API not available\");\n }\n\n const model = req.model || \"mixtral-8x7b-32768\";\n\n const _payload = {\n model,\n messages: [{ role: \"user\", content: prompt }],\n temperature: req.temperature || 0.7,\n max_tokens: req.maxTokens || 4000,\n stream: false,\n };\n\n const _response = (await this.makeRequest(\n `${this.apiBase}/chat/completions`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n ...req.headers,\n },\n body: _payload,\n timeout: req.timeoutMs,\n },\n )) as {\n choices: Array<{ message?: { content?: string }; finish_reason?: string }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n };\n };\n\n return {\n content: _response.choices[0]?.message?.content || \"\",\n model,\n usage: {\n promptTokens: _response.usage?.prompt_tokens || 0,\n completionTokens: _response.usage?.completion_tokens || 0,\n totalTokens: _response.usage?.total_tokens || 0,\n },\n finishReason: (_response.choices[0]?.finish_reason as ProviderResponse[\"finishReason\"]) || \"stop\",\n };\n }\n\n async stream(prompt: string, req: ProviderRequest): Promise<ProviderStream> {\n if (!(await this.isAvailable())) {\n throw new Error(\"Groq API not available\");\n }\n\n const model = req.model || \"mixtral-8x7b-32768\";\n\n const _payload = {\n model,\n messages: [{ role: \"user\", content: prompt }],\n temperature: req.temperature || 0.7,\n max_tokens: req.maxTokens || 4000,\n stream: true,\n };\n\n const stream = await this.makeStreamRequest(\n `${this.apiBase}/chat/completions`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n ...req.headers,\n },\n body: _payload,\n timeout: req.timeoutMs,\n },\n );\n\n // Convert the string stream to ProviderResponseChunk stream\n async function* chunkGenerator(): AsyncGenerator<{ content: string; delta?: string; finishReason?: string }> {\n for await (const chunk of stream) {\n yield {\n content: chunk,\n delta: chunk,\n };\n }\n }\n\n return chunkGenerator();\n }\n\n async chat(request: AIRequest): Promise<AIResponse> {\n if (!(await this.isAvailable())) {\n throw new Error(\"Groq API not available\");\n }\n\n const model = request.model || \"mixtral-8x7b-32768\";\n const _startTime = Date.now();\n\n const _payload = {\n model,\n messages: request.messages,\n temperature: request.temperature || 0.7,\n max_tokens: request.maxTokens || 4000,\n stream: request.stream || false,\n };\n\n if (request.stream) {\n const stream = await this.makeStreamRequest(\n `${this.apiBase}/chat/completions`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: _payload,\n },\n );\n\n return {\n stream,\n model,\n provider: this.name,\n responseTime: Date.now() - _startTime,\n };\n }\n\n const _response = (await this.makeRequest(\n `${this.apiBase}/chat/completions`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: _payload,\n },\n )) as {\n choices: Array<{ message?: { content?: string } }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n };\n };\n\n return {\n content: _response.choices[0]?.message?.content || \"\",\n model,\n provider: this.name,\n usage: {\n promptTokens: _response.usage?.prompt_tokens || 0,\n completionTokens: _response.usage?.completion_tokens || 0,\n totalTokens: _response.usage?.total_tokens || 0,\n },\n responseTime: Date.now() - _startTime,\n };\n }\n\n async vision(_image: Buffer, prompt: string): Promise<AIResponse> {\n if (!(await this.isAvailable())) {\n throw new Error(\"Groq API not available\");\n }\n\n const _base64Image = _image.toString(\"base64\");\n const _startTime = Date.now();\n\n const _payload = {\n model: \"llama-3.2-90b-vision-preview\",\n messages: [\n {\n role: \"user\",\n content: [\n { type: \"text\", text: prompt },\n {\n type: \"image_url\",\n imageurl: {\n url: `data:image/jpeg;base64,${_base64Image}`,\n },\n },\n ],\n },\n ],\n max_tokens: 4000,\n };\n\n const _response = (await this.makeRequest(\n `${this.apiBase}/chat/completions`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n },\n body: _payload,\n },\n )) as {\n choices: Array<{ message?: { content?: string } }>;\n usage?: {\n prompt_tokens?: number;\n completion_tokens?: number;\n total_tokens?: number;\n };\n };\n\n return {\n content: _response.choices[0]?.message?.content || \"\",\n model: \"llama-3.2-90b-vision-preview\",\n provider: this.name,\n usage: {\n promptTokens: _response.usage?.prompt_tokens || 0,\n completionTokens: _response.usage?.completion_tokens || 0,\n totalTokens: _response.usage?.total_tokens || 0,\n },\n responseTime: Date.now() - _startTime,\n };\n }\n\n estimateCost(\n _tokens: number,\n _model = \"mixtral-8x7b-32768\",\n ): number {\n const _pricing = {\n \"llama-3.3-70b-versatile\": { input: 0.00059, output: 0.00079 },\n \"llama-3.2-90b-vision-preview\": { input: 0.0009, output: 0.0009 },\n \"mixtral-8x7b-32768\": { input: 0.00024, output: 0.00024 },\n \"gemma2-9b-it\": { input: 0.0002, output: 0.0002 },\n };\n\n const _modelPricing =\n _pricing[_model as keyof typeof _pricing] ||\n _pricing[\"mixtral-8x7b-32768\"];\n return (\n _tokens * 0.75 * _modelPricing.input +\n _tokens * 0.25 * _modelPricing.output\n );\n }\n\n // Note: complete() and stream() methods are already implemented above (lines 105-200)\n}\n","/**\n * IMS Provider Adapter - Connects IMS routing decisions to actual AI providers\n * Handles provider-specific transformations and metrics collection\n */\n\nimport { EventEmitter } from 'events';\nimport type { Message } from '../../providers/ai-provider.js';\nimport type { RouteResult, ProviderCallInfo } from './IMSRouter.js';\nimport type { ModelConfig } from './types/ModelPool.js';\nimport { GoogleAIProvider } from '../../providers/google-ai-provider.js';\nimport { OpenAIProvider } from '../../providers/openai-provider.js';\nimport { AnthropicProvider } from '../../providers/anthropic-provider.js';\nimport { GroqProvider } from '../../providers/groq-provider.js';\nimport { BaseAIProvider } from '../../providers/ai-provider.js';\n\nexport interface ProviderMetrics {\n modelId: string;\n providerId: string;\n requestStartTime: number;\n firstTokenTime?: number;\n completionTime?: number;\n tokensGenerated?: number;\n errorOccurred?: boolean;\n errorCode?: string;\n statusCode?: number;\n}\n\nexport interface IMSProviderAdapterConfig {\n googleApiKey?: string;\n openaiApiKey?: string;\n anthropicApiKey?: string;\n groqApiKey?: string;\n enableMetrics: boolean;\n enableFallback: boolean;\n maxRetries: number;\n}\n\nexport class IMSProviderAdapter extends EventEmitter {\n private providers: Map<string, BaseAIProvider> = new Map();\n private metricsBuffer: ProviderMetrics[] = [];\n private initialized = false;\n \n constructor(private config: IMSProviderAdapterConfig) {\n super();\n }\n \n /**\n * Initialize all configured providers\n */\n async initialize(): Promise<void> {\n if (this.initialized) return;\n \n // Initialize Google AI Provider\n if (this.config.googleApiKey) {\n const googleProvider = new GoogleAIProvider();\n await googleProvider.initialize(this.config.googleApiKey);\n this.providers.set('google', googleProvider);\n this.emit('provider:initialized', { provider: 'google' });\n }\n \n // Initialize OpenAI Provider\n if (this.config.openaiApiKey) {\n const openaiProvider = new OpenAIProvider();\n await openaiProvider.initialize(this.config.openaiApiKey);\n this.providers.set('openai', openaiProvider);\n this.emit('provider:initialized', { provider: 'openai' });\n }\n \n // Initialize Anthropic Provider\n if (this.config.anthropicApiKey) {\n const anthropicProvider = new AnthropicProvider();\n await anthropicProvider.initialize(this.config.anthropicApiKey);\n this.providers.set('anthropic', anthropicProvider);\n this.emit('provider:initialized', { provider: 'anthropic' });\n }\n \n // Initialize Groq Provider (optional; guard against legacy implementation)\n if (this.config.groqApiKey) {\n try {\n const groqProvider: any = new GroqProvider();\n if (typeof groqProvider.initialize === 'function') {\n await groqProvider.initialize(this.config.groqApiKey);\n this.providers.set('groq', groqProvider);\n this.emit('provider:initialized', { provider: 'groq' });\n } else {\n // Skip silently if provider does not support initialize (legacy class)\n this.emit('provider:skipped', { provider: 'groq', reason: 'no-initialize' });\n }\n } catch (e) {\n // Do not fail adapter initialization due to optional provider\n this.emit('provider:error', { provider: 'groq', error: (e as Error)?.message || String(e) });\n }\n }\n \n this.initialized = true;\n this.emit('adapter:ready', { providers: Array.from(this.providers.keys()) });\n }\n \n /**\n * Execute a model call based on IMS routing decision\n */\n async executeModelCall(\n messages: Message[],\n routeResult: RouteResult,\n modelConfig: ModelConfig\n ): Promise<{ content: string; metrics: ProviderMetrics }> {\n const startTime = Date.now();\n const metrics: ProviderMetrics = {\n modelId: modelConfig.id,\n providerId: this.extractProviderId(modelConfig.id),\n requestStartTime: startTime\n };\n \n try {\n const provider = this.getProviderForModel(modelConfig.id);\n if (!provider) {\n throw new Error(`No provider available for model ${modelConfig.id}`);\n }\n \n // Record first token time (approximate for non-streaming)\n const firstTokenTimer = setTimeout(() => {\n metrics.firstTokenTime = Date.now();\n }, 50);\n \n // Execute the actual model call\n const content = await provider.chat(\n messages,\n this.extractModelName(modelConfig.id),\n {\n temperature: routeResult.generationParams.temperature,\n topP: routeResult.generationParams.topP,\n maxTokens: routeResult.generationParams.maxTokens,\n stopSequences: routeResult.generationParams.stop\n }\n );\n \n clearTimeout(firstTokenTimer);\n \n // Record completion metrics\n metrics.completionTime = Date.now();\n metrics.tokensGenerated = this.estimateTokenCount(content);\n \n // Store metrics if enabled\n if (this.config.enableMetrics) {\n this.metricsBuffer.push(metrics);\n this.emit('metrics:collected', metrics);\n }\n \n return { content, metrics };\n \n } catch (error) {\n metrics.errorOccurred = true;\n metrics.errorCode = error instanceof Error ? error.message : 'unknown';\n metrics.completionTime = Date.now();\n \n if (this.config.enableMetrics) {\n this.metricsBuffer.push(metrics);\n this.emit('metrics:error', metrics);\n }\n \n throw error;\n }\n }\n \n /**\n * Execute streaming model call\n */\n async *executeStreamingCall(\n messages: Message[],\n routeResult: RouteResult,\n modelConfig: ModelConfig\n ): AsyncGenerator<string> {\n const startTime = Date.now();\n const metrics: ProviderMetrics = {\n modelId: modelConfig.id,\n providerId: this.extractProviderId(modelConfig.id),\n requestStartTime: startTime\n };\n \n let firstTokenRecorded = false;\n let totalContent = '';\n \n try {\n const provider = this.getProviderForModel(modelConfig.id);\n if (!provider) {\n throw new Error(`No provider available for model ${modelConfig.id}`);\n }\n \n const stream = provider.chatStream(\n messages,\n this.extractModelName(modelConfig.id),\n {\n temperature: routeResult.generationParams.temperature,\n topP: routeResult.generationParams.topP,\n maxTokens: routeResult.generationParams.maxTokens,\n stopSequences: routeResult.generationParams.stop\n }\n );\n \n for await (const chunk of stream) {\n if (!firstTokenRecorded) {\n metrics.firstTokenTime = Date.now();\n firstTokenRecorded = true;\n this.emit('metrics:first-token', metrics);\n }\n \n totalContent += chunk;\n yield chunk;\n }\n \n // Record completion metrics\n metrics.completionTime = Date.now();\n metrics.tokensGenerated = this.estimateTokenCount(totalContent);\n \n if (this.config.enableMetrics) {\n this.metricsBuffer.push(metrics);\n this.emit('metrics:collected', metrics);\n }\n \n } catch (error) {\n metrics.errorOccurred = true;\n metrics.errorCode = error instanceof Error ? error.message : 'unknown';\n metrics.completionTime = Date.now();\n \n if (this.config.enableMetrics) {\n this.metricsBuffer.push(metrics);\n this.emit('metrics:error', metrics);\n }\n \n throw error;\n }\n }\n \n /**\n * Get provider instance for a model ID\n */\n private getProviderForModel(modelId: string): BaseAIProvider | undefined {\n const providerId = this.extractProviderId(modelId);\n return this.providers.get(providerId);\n }\n \n /**\n * Extract provider ID from model ID (e.g., \"google:gemini-2.5-flash\" -> \"google\")\n */\n private extractProviderId(modelId: string): string {\n const parts = modelId.split(':');\n if (parts.length < 2) {\n // Default mapping for models without prefix\n if (modelId.startsWith('gpt') || modelId.startsWith('o1')) return 'openai';\n if (modelId.startsWith('claude')) return 'anthropic';\n if (modelId.startsWith('gemini')) return 'google';\n if (modelId.startsWith('llama') || modelId.startsWith('mixtral')) return 'groq';\n return 'unknown';\n }\n return parts[0];\n }\n \n /**\n * Extract model name from model ID (e.g., \"google:gemini-2.5-flash\" -> \"gemini-2.5-flash\")\n */\n private extractModelName(modelId: string): string {\n const parts = modelId.split(':');\n return parts.length > 1 ? parts.slice(1).join(':') : modelId;\n }\n \n /**\n * Estimate token count for metrics (rough approximation)\n */\n private estimateTokenCount(content: string): number {\n // Rough estimate: 1 token ≈ 4 characters\n return Math.ceil(content.length / 4);\n }\n \n /**\n * Get collected metrics\n */\n getMetrics(): ProviderMetrics[] {\n return [...this.metricsBuffer];\n }\n \n /**\n * Clear metrics buffer\n */\n clearMetrics(): void {\n this.metricsBuffer = [];\n this.emit('metrics:cleared');\n }\n \n /**\n * Get average latency by model\n */\n getAverageLatencyByModel(): Map<string, { ttfb: number; total: number }> {\n const latencyMap = new Map<string, { ttfbSum: number; totalSum: number; count: number }>();\n \n for (const metric of this.metricsBuffer) {\n if (!metric.errorOccurred && metric.firstTokenTime && metric.completionTime) {\n const existing = latencyMap.get(metric.modelId) || { ttfbSum: 0, totalSum: 0, count: 0 };\n existing.ttfbSum += metric.firstTokenTime - metric.requestStartTime;\n existing.totalSum += metric.completionTime - metric.requestStartTime;\n existing.count++;\n latencyMap.set(metric.modelId, existing);\n }\n }\n \n const result = new Map<string, { ttfb: number; total: number }>();\n for (const [modelId, data] of latencyMap) {\n result.set(modelId, {\n ttfb: Math.round(data.ttfbSum / data.count),\n total: Math.round(data.totalSum / data.count)\n });\n }\n \n return result;\n }\n \n /**\n * Get error rate by model\n */\n getErrorRateByModel(): Map<string, number> {\n const errorMap = new Map<string, { errors: number; total: number }>();\n \n for (const metric of this.metricsBuffer) {\n const existing = errorMap.get(metric.modelId) || { errors: 0, total: 0 };\n existing.total++;\n if (metric.errorOccurred) {\n existing.errors++;\n }\n errorMap.set(metric.modelId, existing);\n }\n \n const result = new Map<string, number>();\n for (const [modelId, data] of errorMap) {\n result.set(modelId, data.total > 0 ? data.errors / data.total : 0);\n }\n \n return result;\n }\n}","import fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport type SubscriptionPlanId = 'free' | 'starter' | 'pro' | 'ultra';\n\nexport interface SubscriptionEventRecord {\n id: string;\n type: string;\n status: 'received' | 'processed' | 'failed' | 'skipped';\n receivedAt: string;\n stripeCreatedAt?: string;\n processedAt?: string;\n error?: string;\n}\n\nexport interface CustomerRecord {\n id: string;\n uid?: string;\n email?: string;\n metadata?: Record<string, string>;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface SubscriptionRecord {\n id: string;\n customerId: string;\n uid?: string;\n status: string;\n planId: SubscriptionPlanId;\n pendingPlanId?: SubscriptionPlanId | null;\n pendingPlanEffectiveAt?: string | null;\n cancelAt?: string | null;\n cancelAtPeriodEnd?: boolean;\n canceledAt?: string | null;\n currentPeriodStart: string;\n currentPeriodEnd: string;\n trialEnd?: string | null;\n latestInvoiceId?: string;\n latestInvoiceStatus?: 'succeeded' | 'failed' | 'pending';\n latestInvoiceAmount?: number;\n metadata?: Record<string, string>;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface InvoiceRecord {\n id: string;\n subscriptionId?: string;\n customerId?: string;\n amountPaid: number;\n currency: string;\n status: 'succeeded' | 'failed';\n paidAt: string;\n createdAt: string;\n periodStart?: string;\n periodEnd?: string;\n hostedInvoiceUrl?: string;\n}\n\nexport interface EntitlementRecord {\n uid: string;\n planId: SubscriptionPlanId;\n features: string[];\n updatedAt: string;\n}\n\nexport interface UsageRecord {\n uid: string;\n planId: SubscriptionPlanId;\n periodId: string;\n limits: QuotaSnapshot;\n used: QuotaSnapshot;\n remaining: QuotaSnapshot;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface QuotaSnapshot {\n requests: number;\n tokens: number;\n code: number;\n attachment: number;\n}\n\ninterface SubscriptionState {\n events: Record<string, SubscriptionEventRecord>;\n customers: Record<string, CustomerRecord>;\n subscriptions: Record<string, SubscriptionRecord>;\n invoices: Record<string, InvoiceRecord>;\n entitlements: Record<string, EntitlementRecord>;\n usage: Record<string, UsageRecord>;\n}\n\nconst DEFAULT_STATE: SubscriptionState = {\n events: {},\n customers: {},\n subscriptions: {},\n invoices: {},\n entitlements: {},\n usage: {}\n};\n\nexport class SubscriptionStore {\n private readonly filePath: string;\n private state: SubscriptionState | null = null;\n private loadPromise: Promise<void> | null = null;\n private queue: Promise<void> = Promise.resolve();\n\n constructor(filePath?: string) {\n this.filePath = filePath ?? path.resolve(process.cwd(), 'data', 'subscription-state.json');\n }\n\n private async ensureLoaded(): Promise<void> {\n if (this.state) {\n return;\n }\n if (!this.loadPromise) {\n this.loadPromise = this.loadStateFromDisk();\n }\n await this.loadPromise;\n }\n\n private async loadStateFromDisk(): Promise<void> {\n try {\n const raw = await fs.readFile(this.filePath, 'utf8');\n const parsed = JSON.parse(raw) as SubscriptionState;\n this.state = {\n events: parsed.events ?? {},\n customers: parsed.customers ?? {},\n subscriptions: parsed.subscriptions ?? {},\n invoices: parsed.invoices ?? {},\n entitlements: parsed.entitlements ?? {},\n usage: parsed.usage ?? {}\n };\n } catch (error: any) {\n if (error?.code === 'ENOENT') {\n this.state = { ...DEFAULT_STATE };\n await this.persist();\n return;\n }\n throw error;\n }\n }\n\n private async persist(): Promise<void> {\n if (!this.state) {\n return;\n }\n const directory = path.dirname(this.filePath);\n await fs.mkdir(directory, { recursive: true });\n const payload = JSON.stringify(this.state, null, 2);\n await fs.writeFile(this.filePath, payload, 'utf8');\n }\n\n private runExclusive<T>(task: () => Promise<T>): Promise<T> {\n const result = this.queue.then(task);\n this.queue = result.then(() => undefined).catch(() => undefined);\n return result;\n }\n\n async markEventReceived(event: { id: string; type: string; created?: number }): Promise<'new' | 'duplicate' | 'pending'> {\n return this.runExclusive(async () => {\n await this.ensureLoaded();\n const now = new Date().toISOString();\n const state = this.state!;\n const existing = state.events[event.id];\n\n if (!existing) {\n state.events[event.id] = {\n id: event.id,\n type: event.type,\n status: 'received',\n receivedAt: now,\n stripeCreatedAt: event.created ? new Date(event.created * 1000).toISOString() : undefined\n };\n await this.persist();\n return 'new';\n }\n\n if (existing.status === 'processed') {\n return 'duplicate';\n }\n\n state.events[event.id] = {\n ...existing,\n type: event.type,\n status: existing.status === 'failed' ? 'received' : existing.status,\n receivedAt: existing.receivedAt ?? now\n };\n await this.persist();\n return 'pending';\n });\n }\n\n async markEventProcessed(eventId: string): Promise<void> {\n await this.runExclusive(async () => {\n await this.ensureLoaded();\n const state = this.state!;\n const existing = state.events[eventId];\n if (!existing) {\n return;\n }\n state.events[eventId] = {\n ...existing,\n status: 'processed',\n processedAt: new Date().toISOString(),\n error: undefined\n };\n await this.persist();\n });\n }\n\n async markEventFailed(eventId: string, error: unknown): Promise<void> {\n await this.runExclusive(async () => {\n await this.ensureLoaded();\n const state = this.state!;\n const existing = state.events[eventId];\n if (!existing) {\n return;\n }\n state.events[eventId] = {\n ...existing,\n status: 'failed',\n error: error instanceof Error ? error.message : String(error)\n };\n await this.persist();\n });\n }\n\n async upsertCustomer(record: Omit<CustomerRecord, 'createdAt' | 'updatedAt'> & Partial<Pick<CustomerRecord, 'createdAt' | 'updatedAt'>>): Promise<CustomerRecord> {\n return this.runExclusive(async () => {\n await this.ensureLoaded();\n const now = new Date().toISOString();\n const state = this.state!;\n const existing = state.customers[record.id];\n const createdAt = existing?.createdAt ?? record.createdAt ?? now;\n\n const nextRecord: CustomerRecord = {\n id: record.id,\n uid: record.uid ?? existing?.uid,\n email: record.email ?? existing?.email,\n metadata: {\n ...(existing?.metadata ?? {}),\n ...(record.metadata ?? {})\n },\n createdAt,\n updatedAt: record.updatedAt ?? now\n };\n\n state.customers[record.id] = nextRecord;\n await this.persist();\n return nextRecord;\n });\n }\n\n async getCustomer(customerId: string): Promise<CustomerRecord | undefined> {\n await this.ensureLoaded();\n const state = this.state!;\n const record = state.customers[customerId];\n return record ? { ...record, metadata: record.metadata ? { ...record.metadata } : undefined } : undefined;\n }\n\n async upsertSubscription(record: Omit<SubscriptionRecord, 'createdAt' | 'updatedAt'> & Partial<Pick<SubscriptionRecord, 'createdAt' | 'updatedAt'>>): Promise<SubscriptionRecord> {\n return this.runExclusive(async () => {\n await this.ensureLoaded();\n const now = new Date().toISOString();\n const state = this.state!;\n const existing = state.subscriptions[record.id];\n const createdAt = existing?.createdAt ?? record.createdAt ?? now;\n\n const nextRecord: SubscriptionRecord = {\n id: record.id,\n customerId: record.customerId,\n uid: record.uid ?? existing?.uid,\n status: record.status,\n planId: record.planId,\n pendingPlanId: record.pendingPlanId !== undefined\n ? record.pendingPlanId\n : existing?.pendingPlanId ?? null,\n pendingPlanEffectiveAt: record.pendingPlanEffectiveAt !== undefined\n ? record.pendingPlanEffectiveAt\n : existing?.pendingPlanEffectiveAt ?? null,\n cancelAt: record.cancelAt ?? null,\n cancelAtPeriodEnd: record.cancelAtPeriodEnd ?? false,\n canceledAt: record.canceledAt ?? null,\n currentPeriodStart: record.currentPeriodStart,\n currentPeriodEnd: record.currentPeriodEnd,\n trialEnd: record.trialEnd ?? null,\n latestInvoiceId: record.latestInvoiceId ?? existing?.latestInvoiceId,\n latestInvoiceStatus: record.latestInvoiceStatus ?? existing?.latestInvoiceStatus,\n latestInvoiceAmount: record.latestInvoiceAmount ?? existing?.latestInvoiceAmount,\n metadata: {\n ...(existing?.metadata ?? {}),\n ...(record.metadata ?? {})\n },\n createdAt,\n updatedAt: record.updatedAt ?? now\n };\n\n state.subscriptions[record.id] = nextRecord;\n await this.persist();\n return nextRecord;\n });\n }\n\n async getSubscription(subscriptionId: string): Promise<SubscriptionRecord | undefined> {\n await this.ensureLoaded();\n const state = this.state!;\n const record = state.subscriptions[subscriptionId];\n if (!record) {\n return undefined;\n }\n return {\n ...record,\n metadata: record.metadata ? { ...record.metadata } : undefined\n };\n }\n\n async findSubscriptionByCustomer(customerId: string): Promise<SubscriptionRecord | undefined> {\n await this.ensureLoaded();\n const state = this.state!;\n return Object.values(state.subscriptions).find((sub) => sub.customerId === customerId);\n }\n\n async recordInvoice(record: InvoiceRecord): Promise<InvoiceRecord> {\n return this.runExclusive(async () => {\n await this.ensureLoaded();\n const state = this.state!;\n state.invoices[record.id] = { ...record };\n await this.persist();\n return state.invoices[record.id];\n });\n }\n\n async setEntitlements(uid: string, planId: SubscriptionPlanId, features: string[]): Promise<EntitlementRecord> {\n return this.runExclusive(async () => {\n await this.ensureLoaded();\n const now = new Date().toISOString();\n const state = this.state!;\n const record: EntitlementRecord = {\n uid,\n planId,\n features: [...features],\n updatedAt: now\n };\n state.entitlements[uid] = record;\n await this.persist();\n return record;\n });\n }\n\n async setUsage(params: {\n uid: string;\n planId: SubscriptionPlanId;\n periodId: string;\n limits: QuotaSnapshot;\n }): Promise<UsageRecord> {\n return this.runExclusive(async () => {\n await this.ensureLoaded();\n const now = new Date().toISOString();\n const state = this.state!;\n const key = `${params.uid}:${params.periodId}`;\n const existing = state.usage[key];\n const used: QuotaSnapshot = existing?.used ?? {\n requests: 0,\n tokens: 0,\n code: 0,\n attachment: 0\n };\n const remaining: QuotaSnapshot = {\n requests: Math.max(0, params.limits.requests - used.requests),\n tokens: Math.max(0, params.limits.tokens - used.tokens),\n code: Math.max(0, params.limits.code - used.code),\n attachment: Math.max(0, params.limits.attachment - used.attachment)\n };\n\n const record: UsageRecord = {\n uid: params.uid,\n planId: params.planId,\n periodId: params.periodId,\n limits: { ...params.limits },\n used,\n remaining,\n createdAt: existing?.createdAt ?? now,\n updatedAt: now\n };\n\n state.usage[key] = record;\n await this.persist();\n return record;\n });\n }\n\n async getUsage(uid: string, periodId: string): Promise<UsageRecord | undefined> {\n await this.ensureLoaded();\n const key = `${uid}:${periodId}`;\n const record = this.state!.usage[key];\n if (!record) {\n return undefined;\n }\n return {\n ...record,\n limits: { ...record.limits },\n used: { ...record.used },\n remaining: { ...record.remaining }\n };\n }\n\n async getEntitlements(uid: string): Promise<EntitlementRecord | undefined> {\n await this.ensureLoaded();\n const record = this.state!.entitlements[uid];\n if (!record) {\n return undefined;\n }\n return {\n ...record,\n features: [...record.features]\n };\n }\n\n async snapshot(): Promise<SubscriptionState> {\n await this.ensureLoaded();\n const state = this.state!;\n return JSON.parse(JSON.stringify(state)) as SubscriptionState;\n }\n}\n\nexport default SubscriptionStore;\n","import { createHmac, timingSafeEqual } from 'node:crypto';\nimport SubscriptionStore, {\n CustomerRecord,\n QuotaSnapshot,\n SubscriptionPlanId\n} from './subscription-store.js';\n\nexport type StripeEventType =\n | 'checkout.session.completed'\n | 'customer.subscription.created'\n | 'customer.subscription.updated'\n | 'customer.subscription.deleted'\n | 'invoice.payment_succeeded'\n | 'invoice.payment_failed';\n\ninterface StripeEvent<T = unknown> {\n id: string;\n type: StripeEventType | string;\n created: number;\n data: {\n object: T;\n };\n livemode?: boolean;\n}\n\ninterface StripeSubscriptionItem {\n price?: {\n id?: string;\n nickname?: string | null;\n product?: string | { id?: string } | null;\n metadata?: Record<string, string | undefined>;\n };\n plan?: {\n product?: string | { id?: string } | null;\n metadata?: Record<string, string | undefined>;\n } | null;\n metadata?: Record<string, string | undefined>;\n}\n\ninterface StripeSubscription {\n id: string;\n status: string;\n customer: string | { id?: string; email?: string | null };\n items?: {\n data?: StripeSubscriptionItem[];\n };\n metadata?: Record<string, string | undefined>;\n cancel_at?: number | null;\n cancel_at_period_end?: boolean;\n canceled_at?: number | null;\n current_period_start: number;\n current_period_end: number;\n trial_end?: number | null;\n latest_invoice?: string | { id?: string } | null;\n}\n\ninterface StripeInvoiceLine {\n period?: {\n start?: number;\n end?: number;\n };\n plan?: {\n id?: string;\n metadata?: Record<string, string | undefined>;\n } | null;\n price?: {\n id?: string;\n product?: string | { id?: string } | null;\n metadata?: Record<string, string | undefined>;\n } | null;\n metadata?: Record<string, string | undefined>;\n}\n\ninterface StripeInvoice {\n id: string;\n status?: 'draft' | 'open' | 'paid' | 'uncollectible' | 'void';\n amount_paid?: number;\n currency?: string;\n customer?: string | { id?: string } | null;\n subscription?: string | { id?: string } | null;\n hosted_invoice_url?: string | null;\n created?: number;\n paid?: boolean;\n lines?: {\n data?: StripeInvoiceLine[];\n };\n period_start?: number;\n period_end?: number;\n}\n\ninterface StripeCheckoutSession {\n id: string;\n customer?: string | { id?: string } | null;\n customer_email?: string | null;\n metadata?: Record<string, string | undefined>;\n client_reference_id?: string | null;\n subscription?: string | null;\n mode?: string;\n}\n\ninterface StripeWebhookServiceOptions {\n secret: string;\n store?: SubscriptionStore;\n toleranceSeconds?: number;\n priceIdMap?: Record<string, SubscriptionPlanId>;\n productIdMap?: Record<string, SubscriptionPlanId>;\n}\n\nconst PLAN_PRIORITY: Record<SubscriptionPlanId, number> = {\n free: 0,\n starter: 1,\n pro: 2,\n ultra: 3\n};\n\nconst PLAN_CONFIG: Record<SubscriptionPlanId, { entitlements: string[]; quota: QuotaSnapshot }> = {\n free: {\n entitlements: [\n 'core.cli.basic',\n 'ai.chat.basic',\n 'usage.metrics.basic'\n ],\n quota: {\n requests: 100,\n tokens: 50000,\n code: 30,\n attachment: 10\n }\n },\n starter: {\n entitlements: [\n 'core.cli.basic',\n 'ai.chat.basic',\n 'ai.chat.priority',\n 'usage.metrics.expanded',\n 'workspace.multi-device'\n ],\n quota: {\n requests: 500,\n tokens: 250000,\n code: 200,\n attachment: 50\n }\n },\n pro: {\n entitlements: [\n 'core.cli.basic',\n 'ai.chat.priority',\n 'ai.code.advanced',\n 'orchestrator.code',\n 'usage.metrics.expanded',\n 'workspace.multi-device',\n 'api.webhooks'\n ],\n quota: {\n requests: 2000,\n tokens: 1000000,\n code: 1000,\n attachment: 200\n }\n },\n ultra: {\n entitlements: [\n 'core.cli.basic',\n 'ai.chat.priority',\n 'ai.code.advanced',\n 'orchestrator.code',\n 'orchestrator.media',\n 'monitoring.analytics',\n 'api.webhooks',\n 'support.priority'\n ],\n quota: {\n requests: 10000,\n tokens: 5000000,\n code: 5000,\n attachment: 1000\n }\n }\n};\n\nconst PLAN_ALIAS_MAP: Record<string, SubscriptionPlanId> = {\n starterannual: 'starter',\n 'starter-annual': 'starter',\n 'starter_yearly': 'starter',\n 'starter-yearly': 'starter',\n starteryearly: 'starter',\n proannual: 'pro',\n 'pro-annual': 'pro',\n 'pro_yearly': 'pro',\n 'pro-yearly': 'pro',\n proyearly: 'pro',\n ultraannual: 'ultra',\n 'ultra-annual': 'ultra',\n 'ultra_yearly': 'ultra',\n 'ultra-yearly': 'ultra',\n ultrayearly: 'ultra'\n};\n\nfunction sanitizeKey(value: string): string {\n return value.trim().toLowerCase().replace(/[^a-z0-9-]/g, '');\n}\n\nfunction toIso(timestamp?: number | null): string | null {\n if (!timestamp) {\n return null;\n }\n return new Date(timestamp * 1000).toISOString();\n}\n\nfunction formatPeriodId(date: Date | number): string {\n const instance = typeof date === 'number' ? new Date(date) : date;\n const year = instance.getUTCFullYear();\n const month = String(instance.getUTCMonth() + 1).padStart(2, '0');\n return `${year}${month}`;\n}\n\nfunction extractId(value: string | { id?: string } | null | undefined): string | undefined {\n if (!value) {\n return undefined;\n }\n if (typeof value === 'string') {\n return value;\n }\n return value.id ?? undefined;\n}\n\nfunction extractMetadataPlan(metadata?: Record<string, string | undefined>): string | undefined {\n if (!metadata) {\n return undefined;\n }\n const keys = ['planId', 'plan_id', 'plan', 'plan-id', 'plan_name'];\n for (const key of keys) {\n const value = metadata[key];\n if (value && value.trim()) {\n return value.trim();\n }\n }\n return undefined;\n}\n\nfunction extractUidFromMetadata(metadata?: Record<string, string | undefined>): string | undefined {\n if (!metadata) {\n return undefined;\n }\n const keys = ['uid', 'userId', 'user_id', 'customer_uid'];\n for (const key of keys) {\n const value = metadata[key];\n if (value && value.trim()) {\n return value.trim();\n }\n }\n return undefined;\n}\n\nexport class StripeWebhookService {\n private readonly secret: string;\n private readonly toleranceSeconds: number;\n private readonly store: SubscriptionStore;\n private readonly pricePlanMap: Map<string, SubscriptionPlanId> = new Map();\n private readonly productPlanMap: Map<string, SubscriptionPlanId> = new Map();\n\n constructor(options: StripeWebhookServiceOptions) {\n if (!options.secret) {\n throw new Error('Stripe webhook secret must be provided');\n }\n this.secret = options.secret;\n this.toleranceSeconds = options.toleranceSeconds ?? 300;\n this.store = options.store ?? new SubscriptionStore();\n this.registerEnvPlanMappings();\n\n if (options.priceIdMap) {\n for (const [id, plan] of Object.entries(options.priceIdMap)) {\n this.pricePlanMap.set(sanitizeKey(id), plan);\n }\n }\n\n if (options.productIdMap) {\n for (const [id, plan] of Object.entries(options.productIdMap)) {\n this.productPlanMap.set(sanitizeKey(id), plan);\n }\n }\n }\n\n verifySignature(rawBody: Buffer, signatureHeader: string | string[] | undefined): void {\n if (!signatureHeader) {\n throw new Error('Stripe signature header is missing');\n }\n const header = Array.isArray(signatureHeader) ? signatureHeader.join(',') : signatureHeader;\n const { timestamp, signatures } = this.parseSignatureHeader(header);\n if (!timestamp || signatures.length === 0) {\n throw new Error('Stripe signature header is invalid');\n }\n\n const timestampSeconds = Number(timestamp);\n if (!Number.isFinite(timestampSeconds)) {\n throw new Error('Stripe signature timestamp is invalid');\n }\n\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (Math.abs(nowSeconds - timestampSeconds) > this.toleranceSeconds) {\n throw new Error('Stripe signature timestamp outside of tolerance window');\n }\n\n const signedPayload = `${timestamp}.${rawBody.toString('utf8')}`;\n const expected = createHmac('sha256', this.secret).update(signedPayload).digest('hex');\n const expectedBuffer = Buffer.from(expected, 'hex');\n\n const isValid = signatures.some((signature) => {\n const signatureBuffer = Buffer.from(signature, 'hex');\n if (signatureBuffer.length !== expectedBuffer.length) {\n return false;\n }\n return timingSafeEqual(signatureBuffer, expectedBuffer);\n });\n\n if (!isValid) {\n throw new Error('Stripe signature verification failed');\n }\n }\n\n parseEvent<T = unknown>(rawBody: Buffer): StripeEvent<T> {\n try {\n const parsed = JSON.parse(rawBody.toString('utf8')) as StripeEvent<T>;\n if (!parsed || typeof parsed !== 'object' || !parsed.id || !parsed.type) {\n throw new Error('Invalid event payload');\n }\n return parsed;\n } catch (error) {\n const message = error instanceof Error ? error.message : 'Unknown error';\n throw new Error(`Failed to parse Stripe event payload: ${message}`);\n }\n }\n\n async processEvent(event: StripeEvent): Promise<void> {\n const receipt = await this.store.markEventReceived({\n id: event.id,\n type: event.type,\n created: event.created\n });\n\n if (receipt === 'duplicate') {\n return;\n }\n\n try {\n switch (event.type) {\n case 'checkout.session.completed':\n await this.handleCheckoutSession(event as StripeEvent<StripeCheckoutSession>);\n break;\n case 'customer.subscription.created':\n await this.handleSubscriptionCreated(event as StripeEvent<StripeSubscription>);\n break;\n case 'customer.subscription.updated':\n await this.handleSubscriptionUpdated(event as StripeEvent<StripeSubscription>);\n break;\n case 'customer.subscription.deleted':\n await this.handleSubscriptionDeleted(event as StripeEvent<StripeSubscription>);\n break;\n case 'invoice.payment_succeeded':\n await this.handleInvoicePayment(event as StripeEvent<StripeInvoice>, true);\n break;\n case 'invoice.payment_failed':\n await this.handleInvoicePayment(event as StripeEvent<StripeInvoice>, false);\n break;\n default:\n // Mark unhandled events as processed to avoid replays\n console.info(`Unhandled Stripe event type: ${event.type}`);\n }\n await this.store.markEventProcessed(event.id);\n } catch (error) {\n await this.store.markEventFailed(event.id, error);\n throw error;\n }\n }\n\n private parseSignatureHeader(signatureHeader: string): { timestamp?: string; signatures: string[] } {\n const parts = signatureHeader.split(',');\n let timestamp: string | undefined;\n const signatures: string[] = [];\n\n for (const part of parts) {\n const [key, value] = part.trim().split('=');\n if (key === 't') {\n timestamp = value;\n } else if (key.startsWith('v')) {\n signatures.push(value);\n }\n }\n\n return { timestamp, signatures };\n }\n\n private registerEnvPlanMappings(): void {\n const mapping: Array<[string | undefined, SubscriptionPlanId]> = [\n [process.env.STRIPE_PRICE_STARTER, 'starter'],\n [process.env.STRIPE_PRICE_STARTER_ANNUAL, 'starter'],\n [process.env.STRIPE_PRICE_PRO, 'pro'],\n [process.env.STRIPE_PRICE_PRO_ANNUAL, 'pro'],\n [process.env.STRIPE_PRICE_ULTRA, 'ultra'],\n [process.env.STRIPE_PRICE_ULTRA_ANNUAL, 'ultra']\n ];\n\n mapping.forEach(([id, plan]) => {\n if (id && id.trim()) {\n this.pricePlanMap.set(sanitizeKey(id), plan);\n }\n });\n\n const productMapping: Array<[string | undefined, SubscriptionPlanId]> = [\n [process.env.STRIPE_PRODUCT_STARTER, 'starter'],\n [process.env.STRIPE_PRODUCT_PRO, 'pro'],\n [process.env.STRIPE_PRODUCT_ULTRA, 'ultra']\n ];\n\n productMapping.forEach(([id, plan]) => {\n if (id && id.trim()) {\n this.productPlanMap.set(sanitizeKey(id), plan);\n }\n });\n }\n\n private normalizePlanId(planId: string | undefined | null): SubscriptionPlanId {\n if (!planId) {\n return 'free';\n }\n const key = sanitizeKey(planId);\n if (PLAN_CONFIG[key as SubscriptionPlanId]) {\n return key as SubscriptionPlanId;\n }\n const alias = PLAN_ALIAS_MAP[key];\n if (alias) {\n return alias;\n }\n return 'free';\n }\n\n private resolvePlanFromSubscription(subscription: StripeSubscription): SubscriptionPlanId {\n const metadataPlan = extractMetadataPlan(subscription.metadata);\n if (metadataPlan) {\n return this.normalizePlanId(metadataPlan);\n }\n\n const items = subscription.items?.data ?? [];\n for (const item of items) {\n const itemMetadataPlan = extractMetadataPlan(item.metadata);\n if (itemMetadataPlan) {\n return this.normalizePlanId(itemMetadataPlan);\n }\n const priceMetadataPlan = extractMetadataPlan(item.price?.metadata);\n if (priceMetadataPlan) {\n return this.normalizePlanId(priceMetadataPlan);\n }\n const planMetadataPlan = extractMetadataPlan(item.plan?.metadata);\n if (planMetadataPlan) {\n return this.normalizePlanId(planMetadataPlan);\n }\n\n const priceId = item.price?.id;\n if (priceId) {\n const mapped = this.pricePlanMap.get(sanitizeKey(priceId));\n if (mapped) {\n return mapped;\n }\n }\n\n const productId = extractId(item.price?.product ?? item.plan?.product ?? null);\n if (productId) {\n const mapped = this.productPlanMap.get(sanitizeKey(productId));\n if (mapped) {\n return mapped;\n }\n }\n\n const nickname = item.price?.nickname;\n if (nickname) {\n const candidate = this.normalizePlanId(nickname);\n if (candidate !== 'free') {\n return candidate;\n }\n }\n }\n\n return 'free';\n }\n\n private getPlanConfig(planId: SubscriptionPlanId) {\n return PLAN_CONFIG[planId] ?? PLAN_CONFIG.free;\n }\n\n private async applyPlanEntitlements(uid: string, planId: SubscriptionPlanId, subscription: StripeSubscription | null, overridePeriod?: { start?: number; end?: number }): Promise<void> {\n const config = this.getPlanConfig(planId);\n await this.store.setEntitlements(uid, planId, config.entitlements);\n\n const periodStart = overridePeriod?.start ?? subscription?.current_period_start;\n const periodEnd = overridePeriod?.end ?? subscription?.current_period_end;\n const periodId = periodStart ? formatPeriodId(new Date(periodStart * 1000)) : formatPeriodId(Date.now());\n\n await this.store.setUsage({\n uid,\n planId,\n periodId,\n limits: config.quota\n });\n }\n\n private comparePlanPriority(a: SubscriptionPlanId, b: SubscriptionPlanId): number {\n return PLAN_PRIORITY[a] - PLAN_PRIORITY[b];\n }\n\n private async resolveUid(customerId: string | undefined, ...metadataSources: Array<Record<string, string | undefined> | undefined>): Promise<string | undefined> {\n for (const metadata of metadataSources) {\n const uidFromMetadata = extractUidFromMetadata(metadata);\n if (uidFromMetadata) {\n return uidFromMetadata;\n }\n }\n if (customerId) {\n const customer = await this.store.getCustomer(customerId);\n return customer?.uid;\n }\n return undefined;\n }\n\n private async handleCheckoutSession(event: StripeEvent<StripeCheckoutSession>): Promise<void> {\n const session = event.data.object;\n const customerId = extractId(session.customer ?? null);\n const uid = await this.resolveUid(customerId, session.metadata);\n\n if (!customerId) {\n console.warn('checkout.session.completed received without customer id', { sessionId: session.id });\n return;\n }\n\n const metadata: Record<string, string> = {};\n if (session.metadata) {\n for (const [key, value] of Object.entries(session.metadata)) {\n if (typeof value === 'string') {\n metadata[key] = value;\n }\n }\n }\n\n await this.store.upsertCustomer({\n id: customerId,\n uid,\n email: session.customer_email ?? undefined,\n metadata: {\n ...metadata,\n lastCheckoutSessionId: session.id,\n lastCheckoutMode: session.mode ?? undefined\n }\n });\n }\n\n private async handleSubscriptionCreated(event: StripeEvent<StripeSubscription>): Promise<void> {\n const subscription = event.data.object;\n const customerId = extractId(subscription.customer);\n if (!customerId) {\n throw new Error(`Subscription ${subscription.id} missing customer id`);\n }\n\n const planId = this.resolvePlanFromSubscription(subscription);\n const uid = await this.resolveUid(customerId, subscription.metadata);\n\n const customerRecord: CustomerRecord = {\n id: customerId,\n uid,\n email: typeof subscription.customer === 'object' ? subscription.customer.email ?? undefined : undefined,\n metadata: subscription.metadata && Object.keys(subscription.metadata).length > 0 ? { ...subscription.metadata } : undefined,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString()\n };\n\n await this.store.upsertCustomer(customerRecord);\n\n await this.store.upsertSubscription({\n id: subscription.id,\n customerId,\n uid,\n status: subscription.status,\n planId,\n pendingPlanId: null,\n pendingPlanEffectiveAt: null,\n cancelAt: toIso(subscription.cancel_at),\n cancelAtPeriodEnd: subscription.cancel_at_period_end ?? false,\n canceledAt: toIso(subscription.canceled_at),\n currentPeriodStart: toIso(subscription.current_period_start) ?? new Date().toISOString(),\n currentPeriodEnd: toIso(subscription.current_period_end) ?? new Date().toISOString(),\n trialEnd: toIso(subscription.trial_end),\n metadata: subscription.metadata && Object.keys(subscription.metadata).length > 0 ? { ...subscription.metadata } : undefined\n });\n\n if (uid) {\n await this.applyPlanEntitlements(uid, planId, subscription);\n }\n }\n\n private async handleSubscriptionUpdated(event: StripeEvent<StripeSubscription>): Promise<void> {\n const subscription = event.data.object;\n const customerId = extractId(subscription.customer);\n if (!customerId) {\n throw new Error(`Subscription ${subscription.id} missing customer id`);\n }\n\n const existing = await this.store.getSubscription(subscription.id);\n const resolvedPlan = this.resolvePlanFromSubscription(subscription);\n const uid = await this.resolveUid(customerId, subscription.metadata, existing?.metadata);\n const planChange = existing ? this.comparePlanPriority(resolvedPlan, existing.planId) : 0;\n\n let effectivePlan = resolvedPlan;\n let pendingPlan: SubscriptionPlanId | null = existing?.pendingPlanId ?? null;\n let pendingEffectiveAt: string | null = existing?.pendingPlanEffectiveAt ?? null;\n\n if (existing) {\n if (planChange < 0) {\n // Downgrade scheduled: keep current plan active until invoice confirms\n effectivePlan = existing.planId;\n pendingPlan = resolvedPlan;\n pendingEffectiveAt = toIso(subscription.current_period_end) ?? toIso(subscription.cancel_at) ?? existing.currentPeriodEnd;\n } else {\n pendingPlan = null;\n pendingEffectiveAt = null;\n if (planChange > 0 && uid) {\n // Upgrade: apply entitlements immediately\n await this.applyPlanEntitlements(uid, resolvedPlan, subscription);\n }\n }\n } else if (uid) {\n await this.applyPlanEntitlements(uid, resolvedPlan, subscription);\n }\n\n await this.store.upsertSubscription({\n id: subscription.id,\n customerId,\n uid,\n status: subscription.status,\n planId: effectivePlan,\n pendingPlanId: pendingPlan,\n pendingPlanEffectiveAt: pendingEffectiveAt,\n cancelAt: toIso(subscription.cancel_at),\n cancelAtPeriodEnd: subscription.cancel_at_period_end ?? false,\n canceledAt: toIso(subscription.canceled_at),\n currentPeriodStart: toIso(subscription.current_period_start) ?? existing?.currentPeriodStart ?? new Date().toISOString(),\n currentPeriodEnd: toIso(subscription.current_period_end) ?? existing?.currentPeriodEnd ?? new Date().toISOString(),\n trialEnd: toIso(subscription.trial_end),\n metadata: subscription.metadata && Object.keys(subscription.metadata).length > 0 ? { ...subscription.metadata } : undefined\n });\n\n if (uid) {\n await this.store.upsertCustomer({\n id: customerId,\n uid,\n metadata: subscription.metadata && Object.keys(subscription.metadata).length > 0 ? { ...subscription.metadata } : undefined\n });\n }\n }\n\n private async handleSubscriptionDeleted(event: StripeEvent<StripeSubscription>): Promise<void> {\n const subscription = event.data.object;\n const customerId = extractId(subscription.customer);\n const existing = await this.store.getSubscription(subscription.id);\n const uid = await this.resolveUid(customerId, subscription.metadata, existing?.metadata);\n\n await this.store.upsertSubscription({\n id: subscription.id,\n customerId: customerId ?? existing?.customerId ?? 'unknown',\n uid: uid ?? existing?.uid,\n status: 'canceled',\n planId: 'free',\n pendingPlanId: null,\n pendingPlanEffectiveAt: null,\n cancelAt: toIso(subscription.cancel_at),\n cancelAtPeriodEnd: subscription.cancel_at_period_end ?? false,\n canceledAt: toIso(subscription.canceled_at) ?? new Date().toISOString(),\n currentPeriodStart: toIso(subscription.current_period_start) ?? existing?.currentPeriodStart ?? new Date().toISOString(),\n currentPeriodEnd: toIso(subscription.current_period_end) ?? existing?.currentPeriodEnd ?? new Date().toISOString(),\n trialEnd: toIso(subscription.trial_end),\n metadata: subscription.metadata && Object.keys(subscription.metadata).length > 0 ? { ...subscription.metadata } : undefined\n });\n\n if (uid) {\n await this.applyPlanEntitlements(uid, 'free', subscription);\n }\n }\n\n private async handleInvoicePayment(event: StripeEvent<StripeInvoice>, succeeded: boolean): Promise<void> {\n const invoice = event.data.object;\n const subscriptionId = extractId(invoice.subscription ?? null);\n if (!subscriptionId) {\n console.warn('Invoice received without subscription id', { invoiceId: invoice.id });\n return;\n }\n\n const subscription = await this.store.getSubscription(subscriptionId);\n if (!subscription) {\n console.warn('Invoice received for unknown subscription', { invoiceId: invoice.id, subscriptionId });\n return;\n }\n\n const customerId = extractId(invoice.customer ?? subscription.customerId);\n\n await this.store.recordInvoice({\n id: invoice.id,\n subscriptionId,\n customerId,\n amountPaid: (invoice.amount_paid ?? 0) / 100,\n currency: invoice.currency ?? 'usd',\n status: succeeded ? 'succeeded' : 'failed',\n paidAt: invoice.created ? new Date(invoice.created * 1000).toISOString() : new Date().toISOString(),\n createdAt: new Date().toISOString(),\n periodStart: toIso(invoice.lines?.data?.[0]?.period?.start ?? invoice.period_start ?? null),\n periodEnd: toIso(invoice.lines?.data?.[0]?.period?.end ?? invoice.period_end ?? null),\n hostedInvoiceUrl: invoice.hosted_invoice_url ?? undefined\n });\n\n if (!succeeded) {\n await this.store.upsertSubscription({\n id: subscription.id,\n customerId: subscription.customerId,\n uid: subscription.uid,\n status: subscription.status,\n planId: subscription.planId,\n pendingPlanId: subscription.pendingPlanId ?? null,\n pendingPlanEffectiveAt: subscription.pendingPlanEffectiveAt ?? null,\n cancelAt: subscription.cancelAt ?? null,\n cancelAtPeriodEnd: subscription.cancelAtPeriodEnd ?? false,\n canceledAt: subscription.canceledAt ?? null,\n currentPeriodStart: subscription.currentPeriodStart,\n currentPeriodEnd: subscription.currentPeriodEnd,\n trialEnd: subscription.trialEnd ?? null,\n latestInvoiceId: invoice.id,\n latestInvoiceStatus: 'failed',\n latestInvoiceAmount: (invoice.amount_paid ?? 0) / 100\n });\n return;\n }\n\n const fallbackPeriodStart = subscription.currentPeriodStart ? Date.parse(subscription.currentPeriodStart) / 1000 : undefined;\n const fallbackPeriodEnd = subscription.currentPeriodEnd ? Date.parse(subscription.currentPeriodEnd) / 1000 : undefined;\n\n const periodStart = invoice.lines?.data?.[0]?.period?.start\n ?? invoice.period_start\n ?? fallbackPeriodStart;\n const periodEnd = invoice.lines?.data?.[0]?.period?.end\n ?? invoice.period_end\n ?? fallbackPeriodEnd;\n\n let nextPlanId = subscription.planId;\n let pendingPlanId = subscription.pendingPlanId ?? null;\n let pendingEffectiveAt = subscription.pendingPlanEffectiveAt ?? null;\n\n if (subscription.pendingPlanId) {\n nextPlanId = subscription.pendingPlanId;\n pendingPlanId = null;\n pendingEffectiveAt = null;\n if (subscription.uid) {\n await this.applyPlanEntitlements(subscription.uid, nextPlanId, null, { start: periodStart, end: periodEnd });\n }\n } else if (subscription.uid) {\n await this.applyPlanEntitlements(subscription.uid, subscription.planId, null, { start: periodStart, end: periodEnd });\n }\n\n await this.store.upsertSubscription({\n id: subscription.id,\n customerId: subscription.customerId,\n uid: subscription.uid,\n status: subscription.status,\n planId: nextPlanId,\n pendingPlanId,\n pendingPlanEffectiveAt: pendingEffectiveAt,\n cancelAt: subscription.cancelAt ?? null,\n cancelAtPeriodEnd: subscription.cancelAtPeriodEnd ?? false,\n canceledAt: subscription.canceledAt ?? null,\n currentPeriodStart: periodStart ? toIso(periodStart) ?? subscription.currentPeriodStart : subscription.currentPeriodStart,\n currentPeriodEnd: periodEnd ? toIso(periodEnd) ?? subscription.currentPeriodEnd : subscription.currentPeriodEnd,\n trialEnd: subscription.trialEnd ?? null,\n latestInvoiceId: invoice.id,\n latestInvoiceStatus: 'succeeded',\n latestInvoiceAmount: (invoice.amount_paid ?? 0) / 100\n });\n }\n}\n\nexport default StripeWebhookService;\n","/**\n * Express Server for MARIA CODE API\n * With Rate Limiting and API Endpoints\n */\n\nimport express, { Request, Response, NextFunction } from 'express';\nimport cors from 'cors';\nimport helmet from 'helmet';\nimport compression, { filter as compressionFilter } from 'compression';\nimport { rateLimitMiddleware, startRateLimitCleanup } from '../middleware/rate-limit';\nimport { saveArtifacts } from '../services/media-orchestrator/Storage';\nimport { GeminiMediaProvider } from '../providers/google/gemini-media';\nimport { hasFfmpeg, muxFramesToMp4 } from '../services/media-orchestrator/ffmpeg';\nimport { hashPrompt, type ManifestV1 } from '../services/media-orchestrator/types';\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport freePlan from '../config/plans/free-plan.json';\nimport IMSFacade from '../services/intelligent-model-selector/IMSFacade';\nimport SubscriptionStore from '../services/subscription/subscription-store';\nimport StripeWebhookService from '../services/subscription/stripe-webhook-service';\n\n// Simple in-memory job registry (ephemeral). For production, persist to DB.\ntype JobStatus = 'queued' | 'running' | 'completed' | 'failed';\ntype JobKind = 'image' | 'video';\ninterface JobInfo {\n id: string;\n status: JobStatus;\n kind: JobKind;\n manifestPath?: string;\n error?: string;\n createdAt: string;\n updatedAt: string;\n uid?: string;\n}\nconst jobIndex: Map<string, JobInfo> = new Map();\n\nconst app: express.Express = express();\nconst port = process.env.PORT || 8080;\n\nconst subscriptionStore = new SubscriptionStore();\nconst stripeWebhookSecret = process.env.STRIPE_WEBHOOK_SECRET;\nlet stripeWebhookService: StripeWebhookService | null = null;\n\nif (stripeWebhookSecret) {\n try {\n stripeWebhookService = new StripeWebhookService({\n secret: stripeWebhookSecret,\n store: subscriptionStore\n });\n } catch (error) {\n stripeWebhookService = null;\n console.error('Failed to initialize Stripe webhook service:', error);\n }\n} else {\n console.warn('STRIPE_WEBHOOK_SECRET is not configured; Stripe webhook endpoint will be disabled.');\n}\n\n// Security middleware\napp.use(helmet());\napp.use(cors());\n// Disable compression for media files to avoid any chance of corrupting binary transfers\napp.use(compression({\n filter: (req, res) => {\n if (/\\.(mp4|webm|mov)$/i.test(req.url)) return false;\n return compressionFilter(req, res);\n }\n}));\napp.use('/api/stripe/webhook', express.raw({ type: 'application/json' }));\n// Increase body limit to comfortably accept base64 attachments (images, PDFs)\napp.use(express.json({ limit: '50mb' }));\napp.use(express.urlencoded({ extended: true }));\n\n// Serve artifacts statically (read-only). In production, protect via CDN or auth middleware.\ntry {\n const artifactsDir = path.resolve(process.cwd(), 'artifacts');\n app.use('/artifacts', express.static(artifactsDir, { fallthrough: true, extensions: ['json','png','jpg','webp','mp4','webm','mov'] }));\n} catch {}\n\n// Request logging\napp.use((req: Request, res: Response, next: NextFunction) => {\n console.log(`[${new Date().toISOString()}] ${req.method} ${req.path}`);\n next();\n});\n\n// Health check (no rate limit)\napp.get('/health', (req: Request, res: Response) => {\n res.status(200).send('OK');\n});\n\napp.get('/api/status', (req: Request, res: Response) => {\n res.json({\n status: 'healthy',\n version: '4.3.9',\n uptime: process.uptime(),\n memory: process.memoryUsage(),\n platform: process.platform,\n node: process.version,\n timestamp: new Date().toISOString()\n });\n});\n\n// Root endpoint\napp.get('/', (req: Request, res: Response) => {\n res.json({\n name: 'MARIA CODE API',\n version: '4.3.45',\n status: 'running',\n environment: process.env.NODE_ENV || 'development',\n endpoints: {\n health: '/health',\n status: '/api/status',\n ai: '/api/ai',\n image: '/api/v1/image',\n video: '/api/v1/video',\n code: '/api/v1/code',\n chat: '/api/v1/chat'\n },\n timestamp: new Date().toISOString()\n });\n});\n\napp.post('/api/stripe/webhook', async (req: Request, res: Response) => {\n if (!stripeWebhookService) {\n return res.status(503).json({ error: 'Stripe webhook processing is not configured' });\n }\n\n const signature = req.headers['stripe-signature'];\n const rawBody = Buffer.isBuffer(req.body)\n ? req.body\n : Buffer.from(typeof req.body === 'string' ? req.body : JSON.stringify(req.body ?? {}), 'utf8');\n\n try {\n stripeWebhookService.verifySignature(rawBody, signature);\n } catch (error) {\n console.error('Stripe webhook signature verification failed:', error);\n return res.status(400).json({ error: 'Invalid Stripe signature' });\n }\n\n let event;\n try {\n event = stripeWebhookService.parseEvent(rawBody);\n } catch (error) {\n console.error('Stripe webhook payload parsing failed:', error);\n return res.status(400).json({ error: 'Invalid Stripe payload' });\n }\n\n stripeWebhookService.processEvent(event).catch((error) => {\n console.error('Stripe webhook processing error:', error);\n });\n\n return res.sendStatus(200);\n});\n\n// ---- Error classification helpers (provider/auth/policy) ----\nfunction classifyMediaError(err: unknown): { status: number; code: string; message: string; hint?: string } {\n const raw = (err as any);\n const msg: string = String(raw?.message || raw || 'unknown error');\n const lower = msg.toLowerCase();\n // Auth / key issues\n if (lower.includes('missing api key') || lower.includes('api key') && lower.includes('missing')) {\n return { status: 503, code: 'provider_unavailable', message: 'Provider API key is not configured', hint: 'Set GOOGLE_API_KEY or GEMINI_API_KEY on the server' };\n }\n if (lower.includes('invalid api key') || lower.includes('permission denied') || lower.includes('unauthorized')) {\n return { status: 502, code: 'provider_auth_failed', message: 'Provider authentication failed', hint: 'Verify your Google AI Studio API key' };\n }\n // Policy / moderation blocks from Gemini\n if (lower.includes('blockreason') || lower.includes('safety') || lower.includes('blocked') || lower.includes('policy')) {\n return { status: 422, code: 'policy_violation', message: 'Request was blocked by provider policy', hint: 'Modify the prompt to comply with safety policies' };\n }\n // No content returned (model refusal or empty)\n if (lower.includes('no inline image returned') || lower.includes('no video returned') || lower.includes('refus')) {\n return { status: 422, code: 'content_refused', message: 'Model refused or returned no content', hint: 'Try rephrasing the prompt' };\n }\n // Timeouts / rate limits\n if (lower.includes('timeout')) {\n return { status: 504, code: 'timeout', message: 'Generation timed out', hint: 'Please retry later' };\n }\n if (lower.includes('rate limit') || lower.includes('429')) {\n return { status: 429, code: 'rate_limited', message: 'Rate limit exceeded', hint: 'Slow down requests or try again shortly' };\n }\n // Fallback\n return { status: 500, code: 'internal_error', message: 'Failed to generate media' };\n}\n\n// Helper: verify Firebase ID token if firebase-admin is available; otherwise decode payload best-effort\nasync function decodeFirebaseToken(token: string): Promise<any | null> {\n try {\n // Dynamic import to avoid hard dep at build time\n const admin: any = await import('firebase-admin').catch(() => null);\n if (admin) {\n if (!admin.apps || admin.apps.length === 0) {\n try { admin.initializeApp(); } catch { /* ignore double init */ }\n }\n const decoded = await admin.auth().verifyIdToken(token, true);\n return decoded;\n }\n } catch {\n // ignore and fallback to unsafe decode\n }\n try {\n const parts = token.split('.');\n if (parts.length !== 3) return null;\n const payload = JSON.parse(Buffer.from(parts[1], 'base64').toString('utf8'));\n return payload;\n } catch {\n return null;\n }\n}\n\n// ---- Plan/Usage helpers (Firestore) ----\nfunction getCurrentPeriodId(): string {\n const now = new Date();\n return `${now.getUTCFullYear()}${String(now.getUTCMonth() + 1).padStart(2, '0')}`;\n}\n\nfunction nextMonthResetISO(): string {\n const d = new Date();\n d.setUTCMonth(d.getUTCMonth() + 1, 1);\n d.setUTCHours(0, 0, 0, 0);\n return d.toISOString();\n}\n\nconst PLAN_LIMITS: Record<string, { req: number; tokens: number; code: number; attachment: number }> = {\n free: { req: 300, tokens: 50000, code: 40, attachment: 5 },\n starter: { req: 1400, tokens: 1000000, code: 300, attachment: 50 },\n 'starter-annual': { req: 1400, tokens: 1000000, code: 300, attachment: 50 },\n pro: { req: 5000, tokens: 3500000, code: 1200, attachment: 200 },\n 'pro-annual': { req: 5000, tokens: 3500000, code: 1200, attachment: 200 },\n ultra: { req: 10000, tokens: 5000000, code: 5000, attachment: 500 },\n 'ultra-annual': { req: 10000, tokens: 5000000, code: 5000, attachment: 500 },\n enterprise: { req: -1, tokens: -1, code: -1, attachment: -1 },\n};\n\nfunction planName(planId: string): string {\n const names: Record<string, string> = {\n free: 'Free', starter: 'Starter', 'starter-annual': 'Starter (Annual)',\n pro: 'Pro', 'pro-annual': 'Pro (Annual)', ultra: 'Ultra', 'ultra-annual': 'Ultra (Annual)', enterprise: 'Enterprise'\n };\n return names[planId] || 'Free';\n}\n\nasync function getUserPlanAndLimits(uid: string): Promise<{ planId: string; limits: { req: number; tokens: number; code: number; attachment: number } }> {\n const db = await getFirestoreSafe();\n const fallback = { planId: 'free', limits: PLAN_LIMITS.free };\n if (!db) return fallback;\n try {\n const snap = await db.collection('user_subscriptions').doc(uid).get();\n const pid = (snap.exists && (snap.data() as any)?.planId) ? String((snap.data() as any).planId) : 'free';\n return { planId: pid, limits: PLAN_LIMITS[pid] || PLAN_LIMITS.free };\n } catch {\n return fallback;\n }\n}\n\nasync function ensureUsageDoc(uid: string): Promise<{ ref: any; data: any; planId: string; limits: { req: number; tokens: number; code: number; attachment: number } }> {\n const db = await getFirestoreSafe();\n if (!db) return { ref: null, data: null, planId: 'free', limits: PLAN_LIMITS.free };\n const periodId = getCurrentPeriodId();\n const { planId: pid, limits } = await getUserPlanAndLimits(uid);\n const ref = db.collection('users').doc(uid).collection('usage').doc(periodId);\n const snap = await ref.get();\n if (!snap.exists) {\n const nowISO = new Date().toISOString();\n const init = {\n periodId,\n createdAt: nowISO,\n updatedAt: nowISO,\n resetAt: nextMonthResetISO(),\n limits,\n remain: limits,\n used: { req: 0, tokens: 0, code: 0, attachment: 0 },\n };\n await ref.set(init, { merge: true });\n return { ref, data: init, planId: pid, limits };\n }\n return { ref, data: snap.data(), planId: pid, limits };\n}\n\nasync function applyConsumption(uid: string, consumption: Record<string, number>, idemKey?: string): Promise<any> {\n const db = await getFirestoreSafe();\n if (!db) return null;\n const { ref, data, planId: pid, limits } = await ensureUsageDoc(uid);\n const nowISO = new Date().toISOString();\n // Optional idempotency per-period\n if (idemKey) {\n const idemRef = ref.collection('consumptions').doc(idemKey);\n const idemSnap = await idemRef.get();\n if (!idemSnap.exists) await idemRef.set({ createdAt: nowISO, consumption });\n else return data; // already applied\n }\n const toNum = (v: unknown) => (typeof v === 'number' && isFinite(v) ? v : 0);\n const incReq = toNum(consumption.requests) + toNum((consumption as any).req);\n const incTokens = toNum((consumption as any).tokens);\n const incCode = toNum((consumption as any).code) + toNum((consumption as any).image) + toNum((consumption as any).video);\n const incAttachment = toNum((consumption as any).attachment);\n const used = data?.used || { req: 0, tokens: 0, code: 0, attachment: 0 };\n const newUsed = {\n req: Math.max(0, used.req + incReq),\n tokens: Math.max(0, used.tokens + incTokens),\n code: Math.max(0, used.code + incCode),\n attachment: Math.max(0, used.attachment + incAttachment),\n };\n const remain = {\n req: limits.req < 0 ? -1 : Math.max(0, limits.req - newUsed.req),\n tokens: limits.tokens < 0 ? -1 : Math.max(0, limits.tokens - newUsed.tokens),\n code: limits.code < 0 ? -1 : Math.max(0, limits.code - newUsed.code),\n attachment: limits.attachment < 0 ? -1 : Math.max(0, limits.attachment - newUsed.attachment),\n };\n await ref.set({ used: newUsed, remain, updatedAt: nowISO }, { merge: true });\n return { ...(data || {}), used: newUsed, remain, limits, periodId: getCurrentPeriodId(), updatedAt: nowISO };\n}\n\n/**\n * Auth: Get current user profile\n * Mirrors expected CLI contract at GET /api/user/profile\n */\napp.get('/api/user/profile', async (req: Request, res: Response) => {\n try {\n const authHeader = req.headers.authorization || '';\n if (!authHeader.startsWith('Bearer ')) {\n return res.status(401).json({ error: 'unauthorized' });\n }\n\n const idToken = authHeader.substring('Bearer '.length).trim();\n\n const decoded = await decodeFirebaseToken(idToken);\n if (!decoded) {\n return res.status(401).json({ error: 'invalid_token' });\n }\n\n // Extract identity\n const uid = decoded.uid || decoded.sub || 'unknown';\n const email = decoded.email || '';\n const displayName = decoded.name || decoded.displayName || (email ? String(email).split('@')[0] : 'User');\n let provider = decoded.firebase?.sign_in_provider as string | undefined;\n if (!provider && decoded.firebase?.identities) {\n const ids = decoded.firebase.identities as Record<string, unknown>;\n if (Array.isArray(ids['github.com']) && ids['github.com'].length > 0) provider = 'github';\n else if (Array.isArray(ids['google.com']) && ids['google.com'].length > 0) provider = 'google';\n }\n\n const { planId: pid, limits } = await getUserPlanAndLimits(uid);\n const periodRef = await ensureUsageDoc(uid);\n const currentUsedReq = Number(periodRef?.data?.used?.req || 0);\n const response = {\n id: uid,\n email,\n name: displayName,\n provider: provider || 'unknown',\n plan: String(pid).toUpperCase(),\n usage: {\n requests: currentUsedReq,\n requestLimit: limits.req < 0 ? Number.MAX_SAFE_INTEGER : limits.req,\n tokens: Number(periodRef?.data?.used?.tokens || 0),\n tokenLimit: limits.tokens < 0 ? Number.MAX_SAFE_INTEGER : limits.tokens,\n resetDate: periodRef?.data?.resetAt || nextMonthResetISO()\n },\n models: ['gpt-5', 'gemini-2.5-pro']\n };\n\n return res.status(200).json(response);\n } catch (error) {\n console.error('[User Profile] Error:', error);\n return res.status(500).json({ error: 'PROFILE_FETCH_FAILED' });\n }\n});\n\n/**\n * Minimal AI Proxy Endpoint\n * - Accepts { prompt, model?, provider? }\n * - Uses Secret Manager (ADC) to fetch API keys\n * - Currently supports provider: 'openai' (default)\n */\napp.post('/api/ai', rateLimitMiddleware, async (req: Request, res: Response) => {\n try {\n const { prompt, systemPrompt } = req.body || {};\n if (!prompt || typeof prompt !== 'string') {\n return res.status(400).json({ error: 'bad_request', message: 'prompt is required' });\n }\n if (process.env.MARIA_TELEMETRY === '1') {\n try { console.log(JSON.stringify({ ev: 'api_ai_request', promptLen: String(prompt).length, hasSystem: !!systemPrompt })); } catch {}\n }\n // Ensure provider keys are loaded from Secret Manager into cache/env before routing\n try { await loadProviderKeys(); } catch {}\n const ims = new IMSFacade();\n const resp = await ims.routeChat({ prompt, systemPrompt });\n if (process.env.MARIA_TELEMETRY === '1') {\n try {\n console.log(JSON.stringify({\n ev: 'api_ai_route',\n provider: (resp as any)?.meta?.provider || 'unknown',\n model: (resp as any)?.meta?.model || 'unknown',\n traceId: (resp as any)?.meta?.traceId,\n reasons: (resp as any)?.meta?.reasons || [],\n success: !!(resp as any)?.success\n }));\n } catch {}\n }\n return res.json(resp);\n } catch (error: any) {\n console.error('[AI API] Error:', error?.message || error);\n if (process.env.MARIA_TELEMETRY === '1') {\n try { console.log(JSON.stringify({ ev: 'api_ai_error', message: (error as any)?.message || String(error) })); } catch {}\n }\n // Graceful, natural-language fallback to keep UX coherent\n const polite = typeof (req.body?.prompt) === 'string'\n ? `Sorry, I couldn't reach the AI service right now. Here’s a quick human-style reply to keep you moving:\\n\\n${String(req.body.prompt)}\\n\\nIf you want, I can try again in a moment or help you rephrase.`\n : `Sorry, I couldn't reach the AI service right now. Please try again in a moment.`;\n return res.status(200).json({ success: true, data: { content: polite } as any });\n }\n});\n\n/**\n * Research Endpoint with Gemini Grounding and Web Scraping\n * Body: { query?: string; url?: string; topK?: number }\n * Returns: { success, data: { summary, sources: [{ url, title? }] } }\n */\napp.post('/api/v1/research', rateLimitMiddleware, async (req: Request, res: Response) => {\n try {\n await loadProviderKeys();\n\n const auth = req.headers.authorization;\n if (!auth || !auth.startsWith('Bearer ')) {\n return res.status(401).json({ error: 'unauthorized', message: 'Login required' });\n }\n\n const body = (req.body || {}) as { query?: string; url?: string; topK?: number };\n const query = typeof body.query === 'string' ? body.query.trim() : '';\n const url = typeof body.url === 'string' ? body.url.trim() : '';\n const topK = Number.isFinite(body.topK) ? Math.max(1, Math.min(5, Math.floor(body.topK as number))) : 5;\n\n if (!query && !url) {\n return res.status(400).json({ error: 'bad_request', message: 'query or url required' });\n }\n\n // Helper: basic HTML -> text extraction (no external deps)\n const extractText = (html: string): string => {\n try {\n const withoutScripts = html.replace(/<script[\\s\\S]*?<\\/script>/gi, ' ').replace(/<style[\\s\\S]*?<\\/style>/gi, ' ');\n const noTags = withoutScripts.replace(/<[^>]+>/g, ' ');\n const unescaped = noTags\n .replace(/&nbsp;/g, ' ')\n .replace(/&amp;/g, '&')\n .replace(/&lt;/g, '<')\n .replace(/&gt;/g, '>')\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\");\n return unescaped.replace(/\\s+/g, ' ').trim();\n } catch {\n return html;\n }\n };\n\n // Helper: fetch URL to text (with timeout)\n const fetchText = async (targetUrl: string): Promise<{ url: string; title?: string; text: string } | null> => {\n try {\n const ctrl = new AbortController();\n const to = setTimeout(() => ctrl.abort(), 20000);\n const r = await fetch(targetUrl, { method: 'GET', signal: ctrl.signal } as any);\n clearTimeout(to);\n if (!r.ok) return null;\n const html = await r.text();\n const titleMatch = /<title>([\\s\\S]*?)<\\/title>/i.exec(html);\n return { url: targetUrl, title: titleMatch ? titleMatch[1].trim() : undefined, text: extractText(html).slice(0, 120_000) };\n } catch {\n return null;\n }\n };\n\n // Resolve candidate sources\n let sources: Array<{ url: string; title?: string }> = [];\n let seedSummary = '';\n\n if (url) {\n sources = [{ url }];\n } else {\n // Use Gemini with grounding to get top web results\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { GoogleGenAI } = require('@google/genai');\n const apiKey = process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY;\n if (!apiKey) {\n return res.status(503).json({ error: 'provider_unavailable', message: 'Provider API key is not configured' });\n }\n const ai = new GoogleGenAI({ apiKey });\n const groundingTool = { googleSearch: {} };\n const config = { tools: [groundingTool] } as any;\n const modelName = process.env.MARIA_RESEARCH_MODEL || 'gemini-2.5-flash';\n const response: any = await ai.models.generateContent({ model: modelName, contents: String(query), config });\n const textOut: string = String((response?.text) || (response?.response?.candidates?.[0]?.content?.parts?.[0]?.text || ''));\n seedSummary = textOut;\n const chunks: any[] = (response?.response?.candidates?.[0]?.groundingMetadata?.groundingChunks || []) as any[];\n const urls = chunks\n .map((c: any) => ({ url: String(c?.web?.uri || '').trim(), title: String(c?.web?.title || '').trim() }))\n .filter((c: any) => c.url && /^https?:\\/\\//i.test(c.url));\n // De-duplicate by URL\n const seen = new Set<string>();\n const deduped: Array<{ url: string; title?: string }> = [];\n for (const c of urls) { if (!seen.has(c.url)) { seen.add(c.url); deduped.push(c); } }\n sources = deduped.slice(0, topK);\n }\n\n // Scrape top sources (or the single URL)\n const scraped: Array<{ url: string; title?: string; text: string }> = [];\n for (const s of sources) {\n const got = await fetchText(s.url);\n if (got) scraped.push({ url: got.url, title: got.title || s.title, text: got.text });\n }\n\n // Summarize scraped content in English plaintext\n const summarize = async (inputText: string): Promise<string> => {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { GoogleGenAI } = require('@google/genai');\n const apiKey = process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY;\n if (!apiKey) return '';\n const ai = new GoogleGenAI({ apiKey });\n const modelName = process.env.MARIA_RESEARCH_MODEL || 'gemini-2.5-flash';\n const prompt = `Summarize the following web research into concise English plaintext.\\n- Focus on verifiable facts and key takeaways.\\n- Keep it under 12 sentences.\\n- Do not include markdown, just plain text.\\n\\nCONTENT BEGIN\\n${inputText}\\nCONTENT END`;\n const resp: any = await ai.models.generateContent({ model: modelName, contents: prompt });\n return String(resp?.text || resp?.response?.candidates?.[0]?.content?.parts?.[0]?.text || '').trim();\n };\n\n const combined = [seedSummary, ...scraped.map(s => `${s.title ? `${s.title}\\n` : ''}${s.text}`)]\n .filter(Boolean)\n .join('\\n\\n')\n .slice(0, 180_000);\n\n const summary = (await summarize(combined)) || (scraped[0]?.text?.slice(0, 600) || seedSummary || '');\n\n // Record usage minimally\n try {\n const idToken = auth.substring('Bearer '.length).trim();\n const decoded = await decodeFirebaseToken(idToken).catch(() => null as any);\n const uid = decoded?.uid || decoded?.sub || 'current';\n const idemKey = (req.headers['idempotency-key'] as string | undefined) || undefined;\n await applyConsumption(uid, { requests: 1 }, idemKey);\n } catch {}\n\n return res.json({ success: true, data: { summary, sources } });\n } catch (error) {\n console.error('[Research API] Error:', error);\n const mapped = classifyMediaError(error);\n return res.status(mapped.status).json({ error: mapped.code, message: mapped.message, hint: mapped.hint });\n }\n});\n\n/**\n * Auth: Revoke tokens\n * Expected by CLI at POST /api/auth/revoke\n */\napp.post('/api/auth/revoke', async (req: Request, res: Response) => {\n try {\n const authHeader = req.headers.authorization || '';\n if (!authHeader.startsWith('Bearer ')) {\n return res.status(401).json({ error: 'unauthorized' });\n }\n\n // Accept both fields used by CLI\n const { refresh_token, all_devices } = req.body || {};\n // TODO: Integrate with real session store/token revocation\n return res.status(200).json({ success: true, allDevices: Boolean(all_devices) });\n } catch (error) {\n console.error('[Auth Revoke] Error:', error);\n return res.status(500).json({ error: 'REVOCATION_FAILED' });\n }\n});\n\n// ===========================================\n// API ENDPOINTS WITH RATE LIMITING\n// ===========================================\n\n// ---- Secret Manager integration (lazy, cached) ----\nlet _keysCache: { openaiApiKey?: string; googleApiKey?: string } | null = null;\nasync function loadProviderKeys(): Promise<{ openaiApiKey?: string; googleApiKey?: string }> {\n if (_keysCache) return _keysCache;\n try {\n const { SecretManagerIntegration } = await import('../services/intelligent-model-selector/SecretManagerIntegration');\n const sm = new SecretManagerIntegration({\n projectId: process.env.GOOGLE_CLOUD_PROJECT || process.env.GCLOUD_PROJECT || 'maria-code-470602',\n secrets: {\n openAI: 'openai-api-key',\n googleAI: 'google-ai-api-key',\n },\n });\n const keys = await sm.getAllApiKeys().catch(() => ({} as any));\n _keysCache = {\n openaiApiKey: keys.openaiApiKey,\n googleApiKey: keys.googleApiKey,\n };\n if (_keysCache.googleApiKey && !process.env.GEMINI_API_KEY && !process.env.GOOGLE_API_KEY) {\n process.env.GEMINI_API_KEY = _keysCache.googleApiKey;\n }\n if (_keysCache.openaiApiKey && !process.env.OPENAI_API_KEY) {\n process.env.OPENAI_API_KEY = _keysCache.openaiApiKey;\n }\n } catch {\n _keysCache = {\n openaiApiKey: process.env.OPENAI_API_KEY,\n googleApiKey: process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY,\n };\n }\n return _keysCache;\n}\n\n/**\n * Image Generation Endpoint\n */\napp.post('/api/v1/image', rateLimitMiddleware, async (req: Request, res: Response) => {\n try {\n await loadProviderKeys();\n const auth = req.headers.authorization;\n if (!auth || !auth.startsWith('Bearer ')) return res.status(401).json({ error: 'unauthorized', message: 'Login required', hint: 'Sign in and retry' });\n const idToken = auth.substring('Bearer '.length).trim();\n const decoded = await decodeFirebaseToken(idToken).catch(() => null as any);\n if (!decoded) return res.status(401).json({ error: 'unauthorized', message: 'Invalid login session', hint: 'Re-login to continue' });\n const uid = decoded?.uid || decoded?.sub || 'current';\n const { prompt, model, size = '1024x1024', format: formatRaw = 'png', count = 1, seed } = req.body || {};\n const fmt0 = String(formatRaw || 'png').toLowerCase();\n const format = (fmt0 === 'jpeg') ? 'jpg' : (['png','jpg','webp'].includes(fmt0) ? (fmt0 as 'png'|'jpg'|'webp') : 'png');\n if (!prompt) return res.status(400).json({ error: 'bad_request', message: 'prompt required' });\n const m = /^(\\d{2,4})x(\\d{2,4})$/.exec(String(size));\n if (!m) return res.status(400).json({ error: 'bad_request', message: 'size must be WxH' });\n const w = +m[1], h = +m[2];\n\n const provider = new GeminiMediaProvider();\n const started = Date.now();\n const buffers: Buffer[] = [];\n for (let i = 0; i < Math.max(1, Math.min(8, Number(count || 1))); i++) {\n const r = await provider.generateImage({ prompt, width: w, height: h, format, seed: (seed ?? 0) + i });\n // Align output to requested size/format using optional post-processing\n const processed = await (await import('../services/media-orchestrator/image-post')).processImageOptional(\n r.bytes,\n (String(format) as 'png'|'webp'|'jpg'),\n false,\n { width: w, height: h }\n );\n buffers.push(processed);\n }\n const promptHash = hashPrompt(prompt);\n const manifest: Omit<ManifestV1, 'manifestVersion'|'createdAt'> = {\n kind: 'image',\n request: { promptHash, seed, params: { size: [w,h], format, count }, model: model || 'gemini-2.5-flash-image-preview', provider: 'google' },\n artifacts: [],\n metrics: { durationMs: Date.now() - started, retries: 0, fallbacks: 0 },\n trace: Math.random().toString(36).slice(2,8).toUpperCase(),\n };\n const saved = await saveArtifacts({ root: process.cwd(), kind: 'image' }, buffers.map(b => ({ bytes: b, ext: `.${format}` })), manifest);\n jobIndex.set(String(manifest.trace), {\n id: String(manifest.trace),\n status: 'completed',\n kind: 'image',\n manifestPath: saved.manifestPath,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n uid,\n });\n // Record usage: 1 request, image count mapped into command bucket\n const idemKey = (req.headers['idempotency-key'] as string | undefined) || undefined;\n await applyConsumption(uid, { requests: 1, image: Math.max(1, buffers.length) }, idemKey);\n // Inline small payloads for direct client save\n const filesInline = buffers.map((b, idx) => ({\n file: saved.files[idx] || '',\n mime: format === 'jpg' ? 'image/jpeg' : `image/${format}`,\n bytesBase64: b.toString('base64'),\n }));\n return res.json({ success: true, data: { url: saved.manifestPath, files: saved.files, filesInline, jobId: manifest.trace } });\n } catch (error) {\n console.error('[Image API] Error:', error);\n const mapped = classifyMediaError(error);\n return res.status(mapped.status).json({ error: mapped.code, message: mapped.message, hint: mapped.hint });\n }\n});\n\n/**\n * Video Generation Endpoint\n */\napp.post('/api/v1/video', rateLimitMiddleware, async (req: Request, res: Response) => {\n try {\n await loadProviderKeys();\n const auth = req.headers.authorization;\n if (!auth || !auth.startsWith('Bearer ')) return res.status(401).json({ error: 'unauthorized', message: 'Login required', hint: 'Sign in and retry' });\n const { prompt, duration = 8, fps = 24, res: resStr = '1280x720', aspect: aspectStr, format = 'mp4', model, seed } = req.body || {};\n if (!prompt) return res.status(400).json({ error: 'bad_request', message: 'prompt required' });\n // Accept WxH (legacy) or 720|1080 with optional aspect 16:9|9:16\n let w: number, h: number;\n const aspect = (typeof aspectStr === 'string' && (aspectStr === '16:9' || aspectStr === '9:16')) ? aspectStr : undefined;\n const sv = String(resStr).toLowerCase().replace(/p$/, '');\n const m = /^(\\d{2,4})x(\\d{2,4})$/.exec(String(resStr));\n if (m) {\n w = +m[1]; h = +m[2];\n } else if (sv === '720') {\n if (aspect === '9:16') { w = 720; h = 1280; } else { w = 1280; h = 720; }\n } else if (sv === '1080') {\n if (aspect === '9:16') { w = 1080; h = 1920; } else { w = 1920; h = 1080; }\n } else {\n return res.status(400).json({ error: 'bad_request', message: 'res must be WxH or 720|1080' });\n }\n\n // Use Google GenAI Veo 3 for video generation\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { GoogleGenAI } = require('@google/genai');\n const apiKey = process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY;\n if (!apiKey) return res.status(503).json({ error: 'provider_unavailable', message: 'Provider API key is not configured', hint: 'Set GOOGLE_API_KEY or GEMINI_API_KEY on the server' });\n const ai = new GoogleGenAI({ apiKey });\n const veoModel = (model && String(model).trim()) || process.env.MARIA_VIDEO_MODEL || 'veo-3.0-generate-001';\n // Map size to aspect ratio per Veo spec (resolution parameter is not supported by SDK)\n const aspectRatio = '16:9'; //aspect || (w >= h ? '16:9' : '9:16'); not supported in veo3\n\n const startedMs = Date.now();\n // Veo 3 currently requires 8s clips; adjust if caller requested different\n const requestedDuration = Number(duration);\n const effectiveDuration = (Number.isFinite(requestedDuration) && requestedDuration === 8) ? 8 : 8;\n // Frame rate sanity (clamp 1..60, default 24)\n const requestedFps = Number(fps);\n const effectiveFps = Number.isFinite(requestedFps) ? Math.min(60, Math.max(1, Math.floor(requestedFps))) : 24;\n\n // Map requested size to discrete provider resolution\n const resolution = Math.max(w, h) >= 1920 ? '1080p' : '720p';\n let operation = await ai.models.generateVideos({\n model: veoModel,\n prompt: String(prompt),\n // Pass aspect + resolution + duration/fps explicitly -> resolution is not supported in veo3\n config: { aspectRatio, /* resolution: resolution, */ durationSeconds: effectiveDuration, frameRate: effectiveFps }\n });\n\n // Poll until done (official guidance ~ up to 6 minutes; use a safe cap)\n const deadline = Date.now() + 720_000;\n while (!(operation as any)?.done) {\n if (Date.now() > deadline) {\n return res.status(504).json({ error: 'timeout', message: 'video generation timed out' });\n }\n await new Promise(r => setTimeout(r, 10000));\n operation = await ai.operations.getVideosOperation({ operation });\n }\n // Give the file service a short settle time before first download attempt\n await new Promise(r => setTimeout(r, 2500));\n\n const videoRef = (operation as any)?.response?.generatedVideos?.[0]?.video;\n const videoMime: string | undefined = (videoRef && (videoRef.mimeType || videoRef.mime_type)) ? String(videoRef.mimeType || videoRef.mime_type) : undefined;\n if (!videoRef) {\n return res.status(500).json({ error: 'internal_error', message: 'no video returned by provider' });\n }\n\n const traceId = Math.random().toString(36).slice(2,8).toUpperCase();\n const tmpDir = path.join(process.cwd(), '.stage', traceId);\n await fs.mkdir(tmpDir, { recursive: true });\n const tmpOut = path.join(tmpDir, 'video.bin');\n\n // Robust download with SDK first, then manual fetch fallback\n const dlApiKey = process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY || '';\n\n const isLikelyValidVideo = async (buf: Buffer): Promise<boolean> => {\n if (!buf || buf.length < 16) return false;\n const head = buf.subarray(0, Math.min(256, buf.length));\n const headStr = head.toString('latin1');\n const hasFtyp = headStr.indexOf('ftyp') >= 0 || head.includes(Buffer.from('ftyp', 'ascii'));\n const isWebm = head[0] === 0x1A && head[1] === 0x45 && head[2] === 0xDF && head[3] === 0xA3;\n const looksHtml = headStr.includes('<!doctype') || headStr.includes('<html') || headStr.includes('<?xml');\n return (hasFtyp || isWebm) && !looksHtml;\n };\n\n const readUint32BE = (buf: Buffer, off: number): number => ((buf[off] << 24) | (buf[off+1] << 16) | (buf[off+2] << 8) | buf[off+3]) >>> 0;\n const readUint64BE = (buf: Buffer, off: number): number => {\n const hi = readUint32BE(buf, off);\n const lo = readUint32BE(buf, off + 4);\n // clamp to Number max safe\n return hi * 2 ** 32 + lo;\n };\n const tryParseMp4DurationSec = (buf: Buffer): number | null => {\n try {\n // Scan for 'mvhd' atom (Movie Header Box)\n for (let i = 0; i + 8 < buf.length; ) {\n const size = readUint32BE(buf, i);\n const type = buf.subarray(i + 4, i + 8).toString('latin1');\n if (!size || size < 8) break;\n if (type === 'moov') {\n // dive inside moov\n const end = Math.min(buf.length, i + size);\n let j = i + 8;\n while (j + 8 < end) {\n const sz = readUint32BE(buf, j);\n const tp = buf.subarray(j + 4, j + 8).toString('latin1');\n if (!sz || sz < 8) break;\n if (tp === 'mvhd') {\n const ver = buf[j + 8];\n if (ver === 1) {\n const timescale = readUint32BE(buf, j + 28);\n const duration = readUint64BE(buf, j + 32);\n if (timescale > 0) return duration / timescale;\n } else {\n const timescale = readUint32BE(buf, j + 20);\n const duration = readUint32BE(buf, j + 24);\n if (timescale > 0) return duration / timescale;\n }\n break;\n }\n j += sz;\n }\n break;\n }\n i += size;\n }\n } catch {}\n return null;\n };\n\n const hasAtom = (buf: Buffer, atom: string): boolean => {\n const tgt = Buffer.from(atom, 'latin1');\n return buf.indexOf(tgt) !== -1;\n };\n\n const validateVideoBytes = (buf: Buffer): { kind: 'mp4'|'mov'|'webm'|'unknown'; ok: boolean; durationSec: number | null; reason?: string } => {\n if (!buf || buf.length < 1024) return { kind: 'unknown', ok: false, durationSec: null, reason: 'too_small' };\n const header = buf.subarray(0, 256);\n const headerStr = header.toString('latin1');\n const hasFtyp = headerStr.indexOf('ftyp') >= 0 || header.includes(Buffer.from('ftyp', 'ascii'));\n const isWebm = header[0] === 0x1A && header[1] === 0x45 && header[2] === 0xDF && header[3] === 0xA3;\n if (isWebm) {\n // Accept WebM when header matches and size appears reasonable\n return { kind: 'webm', ok: buf.length > 200_000, durationSec: null };\n }\n if (hasFtyp) {\n const majorBrand = header.subarray(8, 12).toString('latin1').toLowerCase();\n const kind: 'mp4'|'mov' = majorBrand.startsWith('qt') ? 'mov' : 'mp4';\n // Require 'moov' atom present and duration near requested\n const hasMoov = hasAtom(buf, 'moov');\n const dur = tryParseMp4DurationSec(buf);\n const nearTarget = typeof dur === 'number' ? (dur + 0.75 /*slack*/ >= effectiveDuration) : false;\n const ok = hasMoov && nearTarget;\n return { kind, ok, durationSec: dur, reason: ok ? undefined : (!hasMoov ? 'missing_moov' : 'short_duration') };\n }\n return { kind: 'unknown', ok: false, durationSec: null, reason: 'unknown_header' };\n };\n\n const ensureFileMaterialized = async (p: string, waitMs = 45000): Promise<void> => {\n const deadline = Date.now() + waitMs;\n let lastSize = -1;\n let stableCount = 0;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n try {\n const st = await fs.stat(p);\n if (st && st.size > 0) {\n if (st.size === lastSize) {\n stableCount++;\n if (stableCount >= 5) return; // ~1s stability at 200ms interval\n } else {\n stableCount = 0;\n lastSize = st.size;\n }\n }\n } catch {}\n if (Date.now() > deadline) throw new Error(`video file not fully materialized: ${p}`);\n await new Promise(r => setTimeout(r, 200));\n }\n };\n\n const trySdkDownloadOnce = async (): Promise<Buffer | null> => {\n try {\n await ai.files.download({ file: videoRef, downloadPath: tmpOut });\n await ensureFileMaterialized(tmpOut, 45000);\n const bytes = await fs.readFile(tmpOut);\n if (await isLikelyValidVideo(bytes)) return bytes;\n } catch {}\n return null;\n };\n\n // Manual fetch fallback using direct URI when SDK path fails\n const tryManualDownload = async (): Promise<Buffer | null> => {\n try {\n const fileObj: any = videoRef as any;\n const direct = fileObj?.uri || fileObj?.url || fileObj?.downloadUri || fileObj?.downloadUrl || '';\n if (!direct || typeof direct !== 'string') return null;\n const res = await fetch(direct, {\n method: 'GET',\n headers: dlApiKey ? { 'x-goog-api-key': dlApiKey } as any : undefined,\n redirect: 'follow',\n } as any);\n if (!res.ok) return null;\n const lenHeader = res.headers?.get?.('content-length');\n const expectedLen = lenHeader ? Number(lenHeader) : undefined;\n const ab = await res.arrayBuffer();\n const buf = Buffer.from(ab);\n if (typeof expectedLen === 'number' && Number.isFinite(expectedLen) && expectedLen > 0 && buf.length !== expectedLen) {\n // size mismatch -> treat as invalid\n return null;\n }\n await fs.writeFile(tmpOut, buf);\n if (await isLikelyValidVideo(buf)) return buf;\n } catch {}\n return null;\n };\n\n // Robust acquire loop: prefer SDK, fallback to manual, validate duration/moov\n let videoBytes: Buffer | null = null;\n const maxAttempts = 10;\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n let bytes: Buffer | null = await trySdkDownloadOnce();\n if (!bytes) bytes = await tryManualDownload();\n if (bytes && await isLikelyValidVideo(bytes)) {\n const v = validateVideoBytes(bytes);\n if (v.ok) { videoBytes = bytes; break; }\n }\n // backoff then retry\n await new Promise(r => setTimeout(r, Math.min(8000, 1500 * attempt)));\n }\n if (!videoBytes) throw new Error('failed to obtain fully materialized video');\n // Detect container & decide extension\n const header = videoBytes.subarray(0, 256);\n const headerStr = header.toString('latin1');\n let outExt = '.mp4';\n let outMime = 'video/mp4';\n // MP4 typically contains 'ftyp' at bytes 4-7\n // Detect 'ftyp' anywhere in the first 256 bytes to determine MP4\n const hasFtyp = headerStr.indexOf('ftyp') >= 0 || header.includes(Buffer.from('ftyp', 'ascii'));\n // WebM/Matroska starts with 0x1A 0x45 0xDF 0xA3\n const isWebm = header[0] === 0x1A && header[1] === 0x45 && header[2] === 0xDF && header[3] === 0xA3;\n if (videoMime && /webm/i.test(videoMime)) { outExt = '.webm'; outMime = 'video/webm'; }\n else if (videoMime && /quicktime/i.test(videoMime)) { outExt = '.mov'; outMime = 'video/quicktime'; }\n else if (isWebm) { outExt = '.webm'; outMime = 'video/webm'; }\n else if (hasFtyp) {\n // Inspect major brand to distinguish MOV vs MP4\n const majorBrand = header.subarray(8, 12).toString('latin1');\n if ((majorBrand || '').toLowerCase().startsWith('qt')) { outExt = '.mov'; outMime = 'video/quicktime'; }\n else { outExt = '.mp4'; outMime = 'video/mp4'; }\n }\n await fs.rm(tmpDir, { recursive: true, force: true });\n\n const promptHash = hashPrompt(prompt);\n const manifest: Omit<ManifestV1, 'manifestVersion'|'createdAt'> = {\n kind: 'video',\n request: { promptHash, seed, params: { size: [w,h], fps: effectiveFps, duration: effectiveDuration, format: outExt.replace('.', '') }, model: veoModel, provider: 'google' },\n artifacts: [],\n metrics: { durationMs: Date.now() - startedMs, retries: 0, fallbacks: 0 },\n trace: traceId,\n };\n\n // Save shallow path: artifacts/media/videos/{traceId}/<file>\n const baseDir = path.join('artifacts', 'media', 'videos', traceId);\n const saved = await saveArtifacts({ root: process.cwd(), kind: 'video', baseDir, flat: true }, [{ bytes: videoBytes, ext: outExt }], manifest);\n const idemKey = (req.headers['idempotency-key'] as string | undefined) || undefined;\n const idToken = auth.substring('Bearer '.length).trim();\n const decoded = await decodeFirebaseToken(idToken).catch(() => null as any);\n const uid = decoded?.uid || decoded?.sub || 'current';\n await applyConsumption(uid, { requests: 1, video: 1 }, idemKey);\n jobIndex.set(String(manifest.trace), {\n id: String(manifest.trace),\n status: 'completed',\n kind: 'video',\n manifestPath: saved.manifestPath,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n uid,\n });\n return res.json({ success: true, data: { url: saved.manifestPath || (saved.files[0] ? `/${saved.files[0]}` : undefined), files: saved.files, jobId: manifest.trace, applied: { durationSeconds: effectiveDuration, frameRate: effectiveFps } } });\n } catch (error) {\n console.error('[Video API] Error:', error);\n const mapped = classifyMediaError(error);\n return res.status(mapped.status).json({ error: mapped.code, message: mapped.message, hint: mapped.hint });\n }\n});\n\n/**\n * Job Status Endpoint\n * GET /api/v1/jobs/:id -> { id, status, kind, manifestPath, manifest? }\n */\napp.get('/api/v1/jobs/:id', async (req: Request, res: Response) => {\n try {\n const auth = req.headers.authorization;\n if (!auth || !auth.startsWith('Bearer ')) return res.status(401).json({ error: 'unauthorized' });\n const idToken = auth.substring('Bearer '.length).trim();\n const decoded = await decodeFirebaseToken(idToken).catch(() => null as any);\n const uid = decoded?.uid || decoded?.sub || 'current';\n const id = String(req.params.id || '').trim();\n if (!id) return res.status(400).json({ error: 'bad_request', message: 'id required' });\n const info = jobIndex.get(id);\n if (!info || (info.uid && info.uid !== uid)) return res.status(404).json({ error: 'not_found', message: 'job not found' });\n\n let manifest: any | undefined;\n if (info.manifestPath) {\n try {\n const full = path.resolve(process.cwd(), info.manifestPath);\n const txt = await fs.readFile(full, 'utf8');\n manifest = JSON.parse(txt);\n } catch {\n // ignore\n }\n }\n\n return res.json({\n id: info.id,\n status: info.status,\n kind: info.kind,\n manifestPath: info.manifestPath,\n manifest,\n createdAt: info.createdAt,\n updatedAt: info.updatedAt,\n });\n } catch (error) {\n console.error('[Jobs API] Error:', error);\n return res.status(500).json({ error: 'internal_error', message: 'failed to fetch job' });\n }\n});\n\n/**\n * Code Generation Endpoint\n */\napp.post('/api/v1/code', rateLimitMiddleware, async (req: Request, res: Response) => {\n try {\n const auth = req.headers.authorization;\n if (!auth || !auth.startsWith('Bearer ')) return res.status(401).json({ error: 'unauthorized' });\n const idToken = auth.substring('Bearer '.length).trim();\n const decoded = await decodeFirebaseToken(idToken).catch(() => null as any);\n if (!decoded) return res.status(401).json({ error: 'unauthorized' });\n const uid = decoded?.uid || decoded?.sub;\n\n const { prompt, language = 'typescript', model = 'gpt-4' } = req.body;\n \n if (!prompt) {\n return res.status(400).json({\n error: 'bad_request',\n message: 'Prompt is required'\n });\n }\n \n // TODO: Implement actual code generation logic\n // Record usage: count as one request and one code command\n const idemKey = (req.headers['idempotency-key'] as string | undefined) || undefined;\n await applyConsumption(uid, { requests: 1, code: 1 }, idemKey);\n\n return res.json({\n success: true,\n data: {\n code: `// Generated code for: ${prompt}\\nfunction example() {\\n return \"Generated by MARIA CODE\";\\n}`,\n language,\n model,\n prompt,\n createdAt: new Date().toISOString()\n }\n });\n } catch (error) {\n console.error('[Code API] Error:', error);\n return res.status(500).json({\n error: 'internal_error',\n message: 'Failed to generate code'\n });\n }\n});\n\n/**\n * Chat Endpoint\n */\napp.post('/api/v1/chat', rateLimitMiddleware, async (req: Request, res: Response) => {\n try {\n const auth = req.headers.authorization;\n if (!auth || !auth.startsWith('Bearer ')) return res.status(401).json({ error: 'unauthorized' });\n const idToken = auth.substring('Bearer '.length).trim();\n const decoded = await decodeFirebaseToken(idToken).catch(() => null as any);\n if (!decoded) return res.status(401).json({ error: 'unauthorized' });\n const uid = decoded?.uid || decoded?.sub;\n\n const { message, model = 'gemini-2.5-flash', messages } = req.body || {};\n // Accept both single message and array of messages (OpenAI-like)\n let effectiveMessage: string | undefined = undefined;\n if (typeof message === 'string' && message.trim()) {\n effectiveMessage = String(message).trim();\n } else if (Array.isArray(messages)) {\n try {\n // Prefer last user message content; fallback to join all\n const lastUser = [...messages].reverse().find((m: any) => (m?.role || '').toLowerCase() === 'user');\n effectiveMessage = (lastUser?.content && String(lastUser.content)) || messages.map((m: any) => String(m?.content || '')).filter(Boolean).join('\\n');\n } catch {}\n }\n if (!effectiveMessage) {\n return res.status(400).json({ error: 'bad_request', message: 'message or messages is required' });\n }\n \n // TODO: Implement actual chat logic (proxy to provider)\n // Record usage: 1 request. If token usage is known, include tokens\n const idemKey = (req.headers['idempotency-key'] as string | undefined) || undefined;\n await applyConsumption(uid, { requests: 1 }, idemKey);\n\n return res.json({\n success: true,\n data: {\n response: `Echo: ${effectiveMessage}`,\n model,\n createdAt: new Date().toISOString()\n }\n });\n } catch (error) {\n console.error('[Chat API] Error:', error);\n return res.status(500).json({\n error: 'internal_error',\n message: 'Failed to process chat'\n });\n }\n});\n\n// AI proxy for /code using OpenAI GPT (server-side OPENAI_API_KEY)\napp.post('/v1/ai-proxy', rateLimitMiddleware, async (req: Request, res: Response) => {\n try {\n const auth = req.headers.authorization;\n if (!auth || !auth.startsWith('Bearer ')) return res.status(401).json({ error: 'unauthorized' });\n const { prompt, taskType, research, messages } = req.body || {};\n // Derive effective prompt\n let effectivePrompt: string | undefined = undefined;\n if (typeof prompt === 'string' && prompt.trim()) {\n effectivePrompt = String(prompt).trim();\n } else if (Array.isArray(messages)) {\n try {\n const lastUser = [...messages].reverse().find((m: any) => (m?.role || '').toLowerCase() === 'user');\n effectivePrompt = (lastUser?.content && String(lastUser.content)) || messages.map((m: any) => String(m?.content || '')).filter(Boolean).join('\\n');\n } catch {}\n }\n if (!effectivePrompt && !(taskType === 'research' && research?.query)) return res.status(400).json({ error: 'bad_request', message: 'prompt or messages or research.query required' });\n const idToken = auth.substring('Bearer '.length).trim();\n const decoded = await decodeFirebaseToken(idToken).catch(() => null as any);\n if (!decoded) return res.status(401).json({ error: 'unauthorized' });\n const uid = decoded?.uid || decoded?.sub;\n const idemKey = (req.headers['idempotency-key'] as string | undefined) || undefined;\n if (process.env.MARIA_TELEMETRY === '1') {\n try { console.log(JSON.stringify({ ev: 'ai_proxy_request', taskType: taskType || 'unknown', promptLen: String(effectivePrompt || research?.query || '').length })); } catch {}\n }\n // Helper: sanitize API keys (trim, strip quotes/Bearer prefix)\n const sanitizeKey = (v?: string | null): string | undefined => {\n if (!v) return undefined;\n let k = String(v).trim();\n if (!k) return undefined;\n // Remove surrounding quotes often present in env\n if ((k.startsWith('\"') && k.endsWith('\"')) || (k.startsWith(\"'\") && k.endsWith(\"'\"))) {\n k = k.slice(1, -1);\n }\n // Strip accidental Bearer prefix\n if (/^Bearer\\s+/i.test(k)) k = k.replace(/^Bearer\\s+/i, '');\n // Reject placeholders\n if (/your_.*key|example|placeholder/i.test(k)) return undefined;\n // Disallow whitespace/newlines in header values\n if (/\\s/.test(k)) k = k.replace(/\\s+/g, '');\n return k || undefined;\n };\n\n // Prefer Gemini when valid key provided; fallback to OpenAI only when its key is valid\n const keys = await (async () => {\n try { return await (global as any).___maria_keys ?? await (async () => { const k = await (await import('../services/intelligent-model-selector/SecretManagerIntegration')).SecretManagerIntegration; const sm = new k({ projectId: process.env.GOOGLE_CLOUD_PROJECT || process.env.GCLOUD_PROJECT || 'maria-code-470602', secrets: { openAI: 'openai-api-key', googleAI: 'google-ai-api-key' } }); const all = await sm.getAllApiKeys().catch(() => ({} as any)); (global as any).___maria_keys = all; return all; })(); } catch { return {}; } })();\n const gemKey = sanitizeKey((keys as any)?.googleApiKey || process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY);\n if (gemKey) {\n try {\n const { GoogleGenerativeAI } = await import('@google/generative-ai');\n const ai = new GoogleGenerativeAI(gemKey);\n const modelName = process.env.MARIA_CODE_MODEL || 'gemini-2.5-flash';\n const model = ai.getGenerativeModel({ model: modelName });\n let content = '';\n\n if (taskType === 'research' && research?.query) {\n // Use Gemini grounding via googleSearch tool\n const tool = { googleSearch: {} } as any;\n const r: any = await (ai as any).models.generateContent({ model: modelName, contents: String(research.query), config: { tools: [tool] } });\n content = String((r?.text?.()) || r?.text || r?.response?.candidates?.[0]?.content?.parts?.[0]?.text || '');\n } else {\n // Standard prompt path with optional attachments\n const attachments = Array.isArray((req.body?.metadata || {}).attachments)\n ? ((req.body.metadata.attachments as any[]) || []).filter(Boolean)\n : [];\n const parts: any[] = [{ text: String(effectivePrompt || '') }];\n for (const a of attachments) {\n try {\n const b64 = String(a.data_base64 || '');\n const mime = String(a.mime || 'application/octet-stream');\n if (!b64) continue;\n parts.push({ inlineData: { data: b64, mimeType: mime } });\n } catch {}\n }\n const resp = await model.generateContent({ contents: [{ role: 'user', parts }] });\n content = resp?.response?.text?.() || resp?.response?.candidates?.[0]?.content?.parts?.[0]?.text || '';\n }\n if (process.env.MARIA_TELEMETRY === '1') {\n try { console.log(JSON.stringify({ ev: 'ai_proxy_route', vendor: 'google', model: modelName, empty: !content })); } catch {}\n }\n // Usage: 1 request; tokens unknown for Gemini SDK. Count code when taskType suggests code/evaluation\n const consumption: Record<string, number> = { requests: 1 };\n if (taskType === 'code' || taskType === 'evaluation') consumption.code = 1;\n try { await applyConsumption(uid, consumption, idemKey); } catch {}\n return res.json({ data: { content, routedModel: { vendor: 'google', family: 'gemini', name: modelName, reason: taskType || 'code' } } });\n } catch (e) {\n console.warn('[AI Proxy] Gemini path failed, falling back to OpenAI:', (e as Error)?.message || e);\n if (process.env.MARIA_TELEMETRY === '1') {\n try { console.log(JSON.stringify({ ev: 'ai_proxy_google_error', message: (e as any)?.message || String(e) })); } catch {}\n }\n }\n }\n\n const openaiKey = sanitizeKey((keys as any)?.openaiApiKey || process.env.OPENAI_API_KEY);\n if (!openaiKey) {\n if (process.env.MARIA_TELEMETRY === '1') {\n try { console.log(JSON.stringify({ ev: 'ai_proxy_no_keys' })); } catch {}\n }\n return res.status(503).json({ error: 'provider_unavailable', message: 'No valid provider key (set GEMINI_API_KEY/GOOGLE_API_KEY or OPENAI_API_KEY)' });\n }\n // Use OpenAI Responses API for gpt-5-mini (fallback gpt-4o-mini)\n const OpenAI = (await import('openai')).default;\n const client = new OpenAI({ apiKey: openaiKey });\n let model = process.env.MARIA_CODE_MODEL || 'gpt-5-mini';\n let content = '';\n let totalTokens = 0;\n try {\n const r = await client.responses.create({\n model,\n input: [\n { role: 'system', content: 'You output only code blocks when asked for code.' },\n { role: 'user', content: effectivePrompt || '' },\n ] as any,\n } as any);\n content = (r as any)?.output_text || (r as any)?.content?.[0]?.text || '';\n const u: any = (r as any)?.usage;\n if (u) {\n const inTok = Number(u.input_tokens || u.inputTokens || 0);\n const outTok = Number(u.output_tokens || u.outputTokens || 0);\n totalTokens = Number(u.total_tokens || u.totalTokens || (inTok + outTok) || 0);\n }\n } catch (_e) {\n model = 'gpt-4o-mini';\n const r2 = await client.chat.completions.create({\n model,\n messages: [\n { role: 'system', content: 'You output only code blocks when asked for code.' },\n { role: 'user', content: effectivePrompt || '' },\n ],\n });\n content = r2.choices?.[0]?.message?.content || '';\n const u2: any = (r2 as any)?.usage;\n if (u2) totalTokens = Number(u2.total_tokens || 0);\n }\n if (process.env.MARIA_TELEMETRY === '1') {\n try { console.log(JSON.stringify({ ev: 'ai_proxy_route', vendor: 'openai', model, empty: !content })); } catch {}\n }\n\n // Usage: 1 request; include tokens when available; count code when taskType suggests code/evaluation\n const consumption: Record<string, number> = { requests: 1 };\n if (totalTokens > 0) consumption.tokens = totalTokens;\n if (taskType === 'code' || taskType === 'evaluation') consumption.code = 1;\n try { await applyConsumption(uid, consumption, idemKey); } catch {}\n\n return res.json({ data: { content, routedModel: { vendor: 'openai', family: 'gpt', name: model, reason: taskType || 'code' } } });\n } catch (error) {\n console.error('[AI Proxy] Error:', error);\n if (process.env.MARIA_TELEMETRY === '1') {\n try { console.log(JSON.stringify({ ev: 'ai_proxy_error', message: (error as any)?.message || String(error) })); } catch {}\n }\n return res.status(500).json({ error: 'internal_error', message: 'AI proxy failed' });\n }\n});\n\n// ===== Usage endpoints (Firestore-backed when available) =====\nasync function getFirestoreSafe(): Promise<any|null> {\n try {\n const admin = await import('firebase-admin');\n if (!admin.apps?.length) { try { (admin as any).initializeApp(); } catch {} }\n const { getFirestore } = await import('firebase-admin/firestore');\n return getFirestore();\n } catch { return null; }\n}\n\nfunction calcNextReset(): string {\n const d = new Date();\n d.setUTCMonth(d.getUTCMonth() + 1, 1); // next month 1st day\n d.setUTCHours(0,0,0,0);\n return d.toISOString();\n}\n\nasync function recordConsumption(uid: string, consumption: Record<string, number>, idempotencyKey?: string) {\n const db = await getFirestoreSafe();\n if (!db) return;\n const docPath = `projects/default/usage/${uid}`;\n const usageRef = db.doc(docPath);\n const nowISO = new Date().toISOString();\n\n // Idempotency handling: if provided, ensure it is unique per user\n if (idempotencyKey) {\n const idemRef = db.doc(`projects/default/usage/${uid}/consumptions/${idempotencyKey}`);\n const idemSnap = await idemRef.get();\n if (idemSnap.exists) return; // already processed\n await idemRef.set({ createdAt: nowISO, consumption });\n }\n\n const snap = await usageRef.get();\n let data = snap.exists ? snap.data() : null;\n if (!data) {\n data = {\n plan: { name: 'FREE', limits: { requests: freePlan.buckets.req } },\n monthly: {\n requests: { used: 0, limit: freePlan.buckets.req },\n image: { used: 0, limit: freePlan.buckets.image },\n video: { used: 0, limit: freePlan.buckets.video },\n code: { used: 0, limit: freePlan.buckets.code },\n resetAt: calcNextReset(),\n },\n updatedAt: nowISO,\n };\n }\n const m = data.monthly || {};\n if (consumption?.requests) m.requests.used = Math.max(0, (m.requests.used || 0) + Number(consumption.requests));\n if (consumption?.image) m.image.used = Math.max(0, (m.image.used || 0) + Number(consumption.image));\n if (consumption?.video) m.video.used = Math.max(0, (m.video.used || 0) + Number(consumption.video));\n if (consumption?.code) m.code.used = Math.max(0, (m.code.used || 0) + Number(consumption.code));\n data.monthly = m; data.updatedAt = nowISO;\n await usageRef.set(data, { merge: true });\n}\n\napp.get('/api/v1/usage', rateLimitMiddleware, async (req: Request, res: Response) => {\n try {\n const auth = req.headers.authorization;\n if (!auth || !auth.startsWith('Bearer ')) return res.status(401).json({ error: 'unauthorized' });\n const idToken = auth.substring('Bearer '.length).trim();\n const decoded = await decodeFirebaseToken(idToken).catch(() => null as any);\n if (!decoded) return res.status(401).json({ error: 'unauthorized' });\n const uid = decoded?.uid || decoded?.sub;\n const { planId: pid, limits } = await getUserPlanAndLimits(uid);\n const { data } = await ensureUsageDoc(uid);\n const periodId = getCurrentPeriodId();\n const used = data?.used || { req: 0, tokens: 0, code: 0, attachment: 0 };\n const remain = data?.remain || limits;\n const percentage = {\n req: limits.req > 0 ? Math.round((used.req / limits.req) * 100) : 0,\n tokens: limits.tokens > 0 ? Math.round((used.tokens / limits.tokens) * 100) : 0,\n code: limits.code > 0 ? Math.round((used.code / limits.code) * 100) : 0,\n attachment: limits.attachment > 0 ? Math.round((used.attachment / limits.attachment) * 100) : 0,\n };\n return res.json({\n periodId,\n planCode: pid,\n planName: planName(pid),\n used,\n remain,\n limits,\n percentage,\n resetAt: data?.resetAt || nextMonthResetISO(),\n });\n } catch (e) {\n console.error('[Usage] GET error', e);\n return res.status(500).json({ error: 'internal_error' });\n }\n});\n\napp.post('/api/v1/usage', rateLimitMiddleware, async (req: Request, res: Response) => {\n try {\n const auth = req.headers.authorization;\n if (!auth || !auth.startsWith('Bearer ')) return res.status(401).json({ error: 'unauthorized' });\n const { consumption } = req.body || {};\n const idemKey = (req.headers['idempotency-key'] as string | undefined) || undefined;\n const idToken = auth.substring('Bearer '.length).trim();\n const decoded = await decodeFirebaseToken(idToken).catch(() => null as any);\n if (!decoded) return res.status(401).json({ error: 'unauthorized' });\n const uid = decoded?.uid || decoded?.sub;\n await applyConsumption(uid, consumption || {}, idemKey);\n // Return fresh snapshot in unified shape\n const { data } = await ensureUsageDoc(uid);\n const { planId: pid, limits } = await getUserPlanAndLimits(uid);\n const periodId = getCurrentPeriodId();\n const used = data?.used || { req: 0, tokens: 0, code: 0, attachment: 0 };\n const remain = data?.remain || limits;\n const percentage = {\n req: limits.req > 0 ? Math.round((used.req / limits.req) * 100) : 0,\n tokens: limits.tokens > 0 ? Math.round((used.tokens / limits.tokens) * 100) : 0,\n code: limits.code > 0 ? Math.round((used.code / limits.code) * 100) : 0,\n attachment: limits.attachment > 0 ? Math.round((used.attachment / limits.attachment) * 100) : 0,\n };\n return res.json({ periodId, planCode: pid, planName: planName(pid), used, remain, limits, percentage, resetAt: data?.resetAt || nextMonthResetISO() });\n } catch (e) {\n console.error('[Usage] POST error', e);\n return res.status(500).json({ error: 'internal_error' });\n }\n});\n\n// 404 handler\napp.use((req: Request, res: Response) => {\n res.status(404).json({\n error: 'not_found',\n message: 'The requested endpoint does not exist',\n path: req.path\n });\n});\n\n// Error handler\napp.use((err: Error, req: Request, res: Response, next: NextFunction) => {\n console.error('[Server Error]:', err);\n res.status(500).json({\n error: 'internal_server_error',\n message: 'An unexpected error occurred'\n });\n});\n\n// Start server\nconst server = app.listen(port, () => {\n console.log(` MARIA CODE Express Server running on port ${port}`);\n console.log(` Health check: http://localhost:${port}/health`);\n console.log(` API Status: http://localhost:${port}/api/status`);\n console.log(` API Endpoints: http://localhost:${port}/`);\n \n // Start rate limit cleanup job\n startRateLimitCleanup();\n console.log(' Rate limit cleanup job started');\n});\n\n// Graceful shutdown\nprocess.on('SIGTERM', () => {\n console.log('SIGTERM signal received: closing HTTP server');\n server.close(() => {\n console.log('HTTP server closed');\n process.exit(0);\n });\n});\n\nprocess.on('SIGINT', () => {\n console.log('SIGINT signal received: closing HTTP server');\n server.close(() => {\n console.log('HTTP server closed');\n process.exit(0);\n });\n});\n\nexport { app, server };\n"]}