@xdevplatform/xdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../node_modules/data-uri-to-buffer/src/index.ts","../node_modules/web-streams-polyfill/src/utils.ts","../node_modules/web-streams-polyfill/src/lib/helpers/miscellaneous.ts","../node_modules/web-streams-polyfill/src/lib/helpers/webidl.ts","../node_modules/web-streams-polyfill/src/lib/simple-queue.ts","../node_modules/web-streams-polyfill/src/lib/abstract-ops/internal-methods.ts","../node_modules/web-streams-polyfill/src/lib/readable-stream/generic-reader.ts","../node_modules/web-streams-polyfill/src/stub/number-isfinite.ts","../node_modules/web-streams-polyfill/src/stub/math-trunc.ts","../node_modules/web-streams-polyfill/src/lib/validators/basic.ts","../node_modules/web-streams-polyfill/src/lib/validators/readable-stream.ts","../node_modules/web-streams-polyfill/src/lib/readable-stream/default-reader.ts","../node_modules/web-streams-polyfill/src/target/es2018/stub/async-iterator-prototype.ts","../node_modules/web-streams-polyfill/src/lib/readable-stream/async-iterator.ts","../node_modules/web-streams-polyfill/src/stub/number-isnan.ts","../node_modules/web-streams-polyfill/src/lib/abstract-ops/ecmascript.ts","../node_modules/web-streams-polyfill/src/lib/abstract-ops/miscellaneous.ts","../node_modules/web-streams-polyfill/src/lib/abstract-ops/queue-with-sizes.ts","../node_modules/web-streams-polyfill/src/lib/helpers/array-buffer-view.ts","../node_modules/web-streams-polyfill/src/lib/readable-stream/byte-stream-controller.ts","../node_modules/web-streams-polyfill/src/lib/validators/reader-options.ts","../node_modules/web-streams-polyfill/src/lib/readable-stream/byob-reader.ts","../node_modules/web-streams-polyfill/src/lib/abstract-ops/queuing-strategy.ts","../node_modules/web-streams-polyfill/src/lib/validators/queuing-strategy.ts","../node_modules/web-streams-polyfill/src/lib/validators/underlying-sink.ts","../node_modules/web-streams-polyfill/src/lib/validators/writable-stream.ts","../node_modules/web-streams-polyfill/src/lib/abort-signal.ts","../node_modules/web-streams-polyfill/src/lib/writable-stream.ts","../node_modules/web-streams-polyfill/src/globals.ts","../node_modules/web-streams-polyfill/src/stub/dom-exception.ts","../node_modules/web-streams-polyfill/src/lib/readable-stream/pipe.ts","../node_modules/web-streams-polyfill/src/lib/readable-stream/default-controller.ts","../node_modules/web-streams-polyfill/src/lib/readable-stream/tee.ts","../node_modules/web-streams-polyfill/src/lib/readable-stream/readable-stream-like.ts","../node_modules/web-streams-polyfill/src/lib/readable-stream/from.ts","../node_modules/web-streams-polyfill/src/lib/validators/underlying-source.ts","../node_modules/web-streams-polyfill/src/lib/validators/iterator-options.ts","../node_modules/web-streams-polyfill/src/lib/validators/pipe-options.ts","../node_modules/web-streams-polyfill/src/lib/validators/readable-writable-pair.ts","../node_modules/web-streams-polyfill/src/lib/readable-stream.ts","../node_modules/web-streams-polyfill/src/lib/validators/queuing-strategy-init.ts","../node_modules/web-streams-polyfill/src/lib/byte-length-queuing-strategy.ts","../node_modules/web-streams-polyfill/src/lib/count-queuing-strategy.ts","../node_modules/web-streams-polyfill/src/lib/validators/transformer.ts","../node_modules/web-streams-polyfill/src/lib/transform-stream.ts","../node_modules/fetch-blob/streams.cjs","../node_modules/fetch-blob/index.js","../node_modules/fetch-blob/file.js","../node_modules/formdata-polyfill/esm.min.js","../node_modules/node-fetch/src/errors/base.js","../node_modules/node-fetch/src/errors/fetch-error.js","../node_modules/node-fetch/src/utils/is.js","../node_modules/node-domexception/index.js","../node_modules/fetch-blob/from.js","../node_modules/node-fetch/src/utils/multipart-parser.js","../node_modules/node-fetch/src/body.js","../node_modules/node-fetch/src/headers.js","../node_modules/node-fetch/src/utils/is-redirect.js","../node_modules/node-fetch/src/response.js","../node_modules/node-fetch/src/utils/get-search.js","../node_modules/node-fetch/src/utils/referrer.js","../node_modules/node-fetch/src/request.js","../node_modules/node-fetch/src/errors/abort-error.js","../node_modules/node-fetch/src/index.js","../src/http-client.ts","../src/usage/client.ts","../src/usage/models.ts","../src/communities/client.ts","../src/communities/models.ts","../src/trends/client.ts","../src/trends/models.ts","../src/general/client.ts","../src/general/models.ts","../src/users/client.ts","../src/users/models.ts","../src/community_notes/client.ts","../src/community_notes/models.ts","../src/posts/client.ts","../src/posts/models.ts","../src/lists/client.ts","../src/lists/models.ts","../src/compliance/client.ts","../src/compliance/models.ts","../src/media/client.ts","../src/media/models.ts","../src/direct_messages/client.ts","../src/direct_messages/models.ts","../src/account_activity/client.ts","../src/account_activity/models.ts","../src/spaces/client.ts","../src/spaces/models.ts","../src/stream/event_driven_stream.ts","../src/stream/stream_client.ts","../src/activity/client.ts","../src/activity/models.ts","../src/webhooks/client.ts","../src/webhooks/models.ts","../src/connections/client.ts","../src/connections/models.ts","../src/client.ts","../src/crypto_utils.ts","../src/oauth2_auth.ts","../src/oauth1_auth.ts","../src/schemas.ts","../src/stream/models.ts","../src/paginator.ts","../src/index.ts"],"names":["i","noop","x","_a","F","e","queueMicrotask","r","isAbortSignal","streamBrandCheckException","defaultControllerBrandCheckException","DOMException","ReadableStream","POOL_SIZE","process","Blob","clone","size","File","f","FormData","m","stat","Body","clear","Buffer","toFormData","types","Headers","INTERNALS","deprecate","fetch","http","Stream","PassThrough","response","s","models_exports","crypto"],"mappings":"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","sourcesContent":["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","/**\n * Environment-aware HTTP client for the X API SDK.\n * \n * This module provides a universal HTTP client that works in both Node.js and browser environments\n * without requiring manual polyfills.\n */\n\n// Environment detection\nconst isNode =\n typeof process !== 'undefined' && process.versions && process.versions.node;\nconst isBrowser =\n typeof window !== 'undefined' && typeof window.fetch === 'function';\n\n// Type definitions\nexport interface RequestOptions {\n method?: string;\n headers?: Record<string, string> | Headers;\n body?: string | Buffer | ArrayBuffer | ArrayBufferView;\n signal?: AbortSignal;\n timeout?: number;\n}\n\nexport interface HttpResponse {\n ok: boolean;\n status: number;\n statusText: string;\n headers: Headers;\n url: string;\n json(): Promise<any>;\n text(): Promise<string>;\n arrayBuffer(): Promise<ArrayBuffer>;\n}\n\n/**\n * Universal HTTP client that works in both Node.js and browser environments\n */\nexport class HttpClient {\n private fetch: any;\n private HeadersClass: any;\n\n constructor() {\n this.initializeEnvironment();\n }\n\n private initializeEnvironment(): void {\n if (isNode) {\n // Node.js environment - set up polyfills synchronously\n this.initializeNodeEnvironment();\n } else if (isBrowser) {\n // Browser environment - use native APIs\n this.fetch = globalThis.fetch;\n this.HeadersClass = globalThis.Headers;\n } else {\n // Fallback for other environments (Deno, etc.)\n this.fetch = globalThis.fetch;\n this.HeadersClass = globalThis.Headers;\n }\n }\n\n private initializeNodeEnvironment(): void {\n // Check if native fetch is available (Node.js 18+)\n if (\n typeof globalThis.fetch === 'function' &&\n typeof globalThis.Headers === 'function'\n ) {\n this.fetch = globalThis.fetch;\n this.HeadersClass = globalThis.Headers;\n return;\n }\n\n // Try to use node-fetch for older Node.js versions\n try {\n const nodeFetch = require('node-fetch');\n const { Headers: NodeHeaders } = nodeFetch;\n\n this.fetch = nodeFetch.default || nodeFetch;\n this.HeadersClass = NodeHeaders;\n } catch (error) {\n // If node-fetch is not available, provide a helpful error\n throw new Error(\n 'X API SDK: node-fetch not found. For Node.js environments, please install node-fetch:\\n' +\n 'npm install node-fetch\\n' +\n 'Or upgrade to Node.js 18+ for native fetch support.'\n );\n }\n }\n\n /**\n * Create a new Headers instance\n */\n createHeaders(init?: Record<string, string> | Headers): Headers {\n return new this.HeadersClass(init) as Headers;\n }\n\n /**\n * Make an HTTP request\n */\n async request(\n url: string,\n options: RequestOptions = {}\n ): Promise<HttpResponse> {\n // Convert body to string if it's a Buffer or ArrayBuffer\n let body = options.body;\n if (body && typeof body !== 'string') {\n if (Buffer.isBuffer(body)) {\n body = body.toString();\n } else if (body instanceof ArrayBuffer) {\n body = new TextDecoder().decode(body);\n } else if (ArrayBuffer.isView(body)) {\n body = new TextDecoder().decode(body);\n }\n }\n\n // Handle timeout\n let signal = options.signal;\n if (options.timeout && options.timeout > 0 && !signal) {\n const controller = new AbortController();\n setTimeout(() => controller.abort(), options.timeout);\n signal = controller.signal;\n }\n\n const response = await this.fetch(url, {\n method: options.method || 'GET',\n headers: options.headers as any,\n body: body as any,\n signal: signal,\n });\n\n return response as HttpResponse;\n }\n\n /**\n * Make a GET request\n */\n async get(\n url: string,\n headers?: Record<string, string>\n ): Promise<HttpResponse> {\n return this.request(url, {\n method: 'GET',\n headers,\n });\n }\n\n /**\n * Make a POST request\n */\n async post(\n url: string,\n body?: string,\n headers?: Record<string, string>\n ): Promise<HttpResponse> {\n return this.request(url, {\n method: 'POST',\n headers,\n body,\n });\n }\n\n /**\n * Make a PUT request\n */\n async put(\n url: string,\n body?: string,\n headers?: Record<string, string>\n ): Promise<HttpResponse> {\n return this.request(url, {\n method: 'PUT',\n headers,\n body,\n });\n }\n\n /**\n * Make a DELETE request\n */\n async delete(\n url: string,\n headers?: Record<string, string>\n ): Promise<HttpResponse> {\n return this.request(url, {\n method: 'DELETE',\n headers,\n });\n }\n\n /**\n * Make a PATCH request\n */\n async patch(\n url: string,\n body?: string,\n headers?: Record<string, string>\n ): Promise<HttpResponse> {\n return this.request(url, {\n method: 'PATCH',\n headers,\n body,\n });\n }\n}\n\n// Export a singleton instance\nexport const httpClient = new HttpClient();\n","/**\n * usage client for the X API.\n *\n * This module provides a client for interacting with the usage endpoints of the X API.\n */\n\nimport { Client, ApiResponse, RequestOptions } from '../client.js';\nimport {\n Paginator,\n PostPaginator,\n UserPaginator,\n EventPaginator,\n} from '../paginator.js';\nimport { GetResponse } from './models.js';\n\n/**\n * Options for get method\n * \n * @public\n */\nexport interface GetOptions {\n /** The number of days for which you need usage for. */\n days?: number;\n\n /** A comma separated list of Usage fields to display. */\n usagefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Client for usage operations\n * \n * This client provides methods for interacting with the usage endpoints\n * of the X API. It handles authentication, request formatting, and response\n * parsing for all usage related operations.\n * \n * @category usage\n */\nexport class UsageClient {\n private client: Client;\n\n /**\n * Creates a new usage client instance\n * \n * @param client - The main X API client instance\n */\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Get usage\n * Retrieves usage statistics for Posts over a specified number of days.\n\n\n\n * @returns {Promise<GetResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async get(options: GetOptions = {}): Promise<GetResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n days = undefined,\n\n usagefields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/usage/tweets';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (days !== undefined) {\n params.append('days', String(days));\n }\n\n if (usagefields !== undefined) {\n params.append('usage.fields', usagefields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n}\n","/**\n * Models for usage operations\n */\nimport type * as Schemas from '../schemas.js';\n\n\n\n\n\n/**\n * Response for get\n * \n * @public\n */\nexport type GetResponse = Schemas.Get2UsageTweetsResponse;","/**\n * communities client for the X API.\n *\n * This module provides a client for interacting with the communities endpoints of the X API.\n */\n\nimport { Client, ApiResponse, RequestOptions } from '../client.js';\nimport {\n Paginator,\n PostPaginator,\n UserPaginator,\n EventPaginator,\n} from '../paginator.js';\nimport { GetByIdResponse, SearchResponse } from './models.js';\n\n/**\n * Options for getById method\n * \n * @public\n */\nexport interface GetByIdOptions {\n /** A comma separated list of Community fields to display. */\n communityfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for search method\n * \n * @public\n */\nexport interface SearchOptions {\n /** The maximum number of search results to be returned by a request. */\n maxResults?: number;\n\n /** This parameter is used to get the next 'page' of results. The value used with the parameter is pulled directly from the response provided by the API, and should not be modified. */\n nextToken?: any;\n\n /** This parameter is used to get the next 'page' of results. The value used with the parameter is pulled directly from the response provided by the API, and should not be modified. */\n paginationToken?: any;\n\n /** A comma separated list of Community fields to display. */\n communityfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Client for communities operations\n * \n * This client provides methods for interacting with the communities endpoints\n * of the X API. It handles authentication, request formatting, and response\n * parsing for all communities related operations.\n * \n * @category communities\n */\nexport class CommunitiesClient {\n private client: Client;\n\n /**\n * Creates a new communities client instance\n * \n * @param client - The main X API client instance\n */\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Get Community by ID\n * Retrieves details of a specific Community by its ID.\n\n\n * @param id The ID of the Community.\n\n\n\n\n * @returns {Promise<GetByIdResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getById(\n id: string,\n options: GetByIdOptions = {}\n ): Promise<GetByIdResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n communityfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/communities/{id}';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (communityfields !== undefined) {\n params.append('community.fields', communityfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetByIdResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Search Communities\n * Retrieves a list of Communities matching the specified search query.\n\n\n\n * @param query Query to search communities.\n\n\n\n * @returns {Promise<SearchResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async search(\n query: string,\n options: SearchOptions = {}\n ): Promise<SearchResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n nextToken = undefined,\n\n paginationToken = undefined,\n\n communityfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/communities/search';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (query !== undefined) {\n params.append('query', String(query));\n }\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (nextToken !== undefined) {\n params.append('next_token', String(nextToken));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (communityfields !== undefined) {\n params.append('community.fields', communityfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<SearchResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n}\n","/**\n * Models for communities operations\n */\nimport type * as Schemas from '../schemas.js';\n\n\n\n\n\n/**\n * Response for getById\n * \n * @public\n */\nexport type GetByIdResponse = Schemas.Get2CommunitiesIdResponse;\n/**\n * Response for search\n * \n * @public\n */\nexport type SearchResponse = Schemas.Get2CommunitiesSearchResponse;","/**\n * trends client for the X API.\n *\n * This module provides a client for interacting with the trends endpoints of the X API.\n */\n\nimport { Client, ApiResponse, RequestOptions } from '../client.js';\nimport {\n Paginator,\n PostPaginator,\n UserPaginator,\n EventPaginator,\n} from '../paginator.js';\nimport { GetByWoeidResponse, GetPersonalizedResponse } from './models.js';\n\n/**\n * Options for getByWoeid method\n * \n * @public\n */\nexport interface GetByWoeidOptions {\n /** The maximum number of results. */\n maxTrends?: number;\n\n /** A comma separated list of Trend fields to display. */\n trendfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getPersonalized method\n * \n * @public\n */\nexport interface GetPersonalizedOptions {\n /** A comma separated list of PersonalizedTrend fields to display. */\n personalizedTrendfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Client for trends operations\n * \n * This client provides methods for interacting with the trends endpoints\n * of the X API. It handles authentication, request formatting, and response\n * parsing for all trends related operations.\n * \n * @category trends\n */\nexport class TrendsClient {\n private client: Client;\n\n /**\n * Creates a new trends client instance\n * \n * @param client - The main X API client instance\n */\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Get Trends by WOEID\n * Retrieves trending topics for a specific location identified by its WOEID.\n\n\n * @param woeid The WOEID of the place to lookup a trend for.\n\n\n\n\n * @returns {Promise<GetByWoeidResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getByWoeid(\n woeid: number,\n options: GetByWoeidOptions = {}\n ): Promise<GetByWoeidResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxTrends = undefined,\n\n trendfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/trends/by/woeid/{woeid}';\n\n path = path.replace('{woeid}', encodeURIComponent(String(woeid)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxTrends !== undefined) {\n params.append('max_trends', String(maxTrends));\n }\n\n if (trendfields !== undefined) {\n params.append('trend.fields', trendfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetByWoeidResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get personalized Trends\n * Retrieves personalized trending topics for the authenticated user.\n\n\n\n * @returns {Promise<GetPersonalizedResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getPersonalized(\n options: GetPersonalizedOptions = {}\n ): Promise<GetPersonalizedResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n personalizedTrendfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/personalized_trends';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (personalizedTrendfields !== undefined) {\n params.append(\n 'personalized_trend.fields',\n personalizedTrendfields.join(',')\n );\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetPersonalizedResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n}\n","/**\n * Models for trends operations\n */\nimport type * as Schemas from '../schemas.js';\n\n\n\n\n\n/**\n * Response for getByWoeid\n * \n * @public\n */\nexport type GetByWoeidResponse = Schemas.Get2TrendsByWoeidWoeidResponse;\n/**\n * Response for getPersonalized\n * \n * @public\n */\nexport type GetPersonalizedResponse = Schemas.Get2UsersPersonalizedTrendsResponse;","/**\n * general client for the X API.\n *\n * This module provides a client for interacting with the general endpoints of the X API.\n */\n\nimport { Client, ApiResponse, RequestOptions } from '../client.js';\nimport {\n Paginator,\n PostPaginator,\n UserPaginator,\n EventPaginator,\n} from '../paginator.js';\nimport { GetOpenApiSpecResponse } from './models.js';\n\n/**\n * Client for general operations\n * \n * This client provides methods for interacting with the general endpoints\n * of the X API. It handles authentication, request formatting, and response\n * parsing for all general related operations.\n * \n * @category general\n */\nexport class GeneralClient {\n private client: Client;\n\n /**\n * Creates a new general client instance\n * \n * @param client - The main X API client instance\n */\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Get OpenAPI Spec.\n * Retrieves the full OpenAPI Specification in JSON format. (See https://github.com/OAI/OpenAPI-Specification/blob/master/README.md)\n\n\n\n * @returns {Promise<GetOpenApiSpecResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getOpenApiSpec(): Promise<GetOpenApiSpecResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/openapi.json';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<GetOpenApiSpecResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n}\n","/**\n * Models for general operations\n */\nimport type * as Schemas from '../schemas.js';\n\n\n\n\n\n\n/**\n * Response for getOpenApiSpec\n * \n * @public\n */\nexport type GetOpenApiSpecResponse = Record<string, any>;","/**\n * users client for the X API.\n *\n * This module provides a client for interacting with the users endpoints of the X API.\n */\n\nimport { Client, ApiResponse, RequestOptions } from '../client.js';\nimport {\n Paginator,\n PostPaginator,\n UserPaginator,\n EventPaginator,\n} from '../paginator.js';\nimport {\n GetBookmarksByFolderIdResponse,\n GetFollowingResponse,\n FollowUserRequest,\n FollowUserResponse,\n GetBookmarkFoldersResponse,\n UnrepostPostResponse,\n UnlikePostResponse,\n GetMutingResponse,\n MuteUserRequest,\n MuteUserResponse,\n GetLikedPostsResponse,\n GetPinnedListsResponse,\n PinListRequest,\n PinListResponse,\n GetPostsResponse,\n GetByIdsResponse,\n GetFollowedListsResponse,\n FollowListRequest,\n FollowListResponse,\n GetBookmarksResponse,\n CreateBookmarkRequest,\n CreateBookmarkResponse,\n GetMentionsResponse,\n GetBlockingResponse,\n UnblockDmsResponse,\n GetByIdResponse,\n GetByUsernamesResponse,\n GetOwnedListsResponse,\n RepostPostRequest,\n RepostPostResponse,\n DeleteBookmarkResponse,\n GetFollowersResponse,\n SearchResponse,\n LikePostRequest,\n LikePostResponse,\n UnpinListResponse,\n GetListMembershipsResponse,\n GetRepostsOfMeResponse,\n UnfollowUserResponse,\n UnmuteUserResponse,\n UnfollowListResponse,\n GetTimelineResponse,\n BlockDmsResponse,\n GetByUsernameResponse,\n GetMeResponse,\n} from './models.js';\n\n/**\n * Options for getFollowing method\n * \n * @public\n */\nexport interface GetFollowingOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get a specified 'page' of results. */\n paginationToken?: any;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for followUser method\n * \n * @public\n */\nexport interface FollowUserOptions {\n /** Request body */\n body?: FollowUserRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getBookmarkFolders method\n * \n * @public\n */\nexport interface GetBookmarkFoldersOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get the next 'page' of results. */\n paginationToken?: any;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getMuting method\n * \n * @public\n */\nexport interface GetMutingOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get the next 'page' of results. */\n paginationToken?: any;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for muteUser method\n * \n * @public\n */\nexport interface MuteUserOptions {\n /** Request body */\n body?: MuteUserRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getLikedPosts method\n * \n * @public\n */\nexport interface GetLikedPostsOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get the next 'page' of results. */\n paginationToken?: any;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getPinnedLists method\n * \n * @public\n */\nexport interface GetPinnedListsOptions {\n /** A comma separated list of List fields to display. */\n listfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getPosts method\n * \n * @public\n */\nexport interface GetPostsOptions {\n /** The minimum Post ID to be included in the result set. This parameter takes precedence over start_time if both are specified. */\n sinceId?: any;\n\n /** The maximum Post ID to be included in the result set. This parameter takes precedence over end_time if both are specified. */\n untilId?: any;\n\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get the next 'page' of results. */\n paginationToken?: any;\n\n /** The set of entities to exclude (e.g. 'replies' or 'retweets'). */\n exclude?: Array<any>;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The earliest UTC timestamp from which the Posts will be provided. The since_id parameter takes precedence if it is also specified. */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The latest UTC timestamp to which the Posts will be provided. The until_id parameter takes precedence if it is also specified. */\n endTime?: string;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getByIds method\n * \n * @public\n */\nexport interface GetByIdsOptions {\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getFollowedLists method\n * \n * @public\n */\nexport interface GetFollowedListsOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get a specified 'page' of results. */\n paginationToken?: any;\n\n /** A comma separated list of List fields to display. */\n listfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for followList method\n * \n * @public\n */\nexport interface FollowListOptions {\n /** Request body */\n body?: FollowListRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getBookmarks method\n * \n * @public\n */\nexport interface GetBookmarksOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get the next 'page' of results. */\n paginationToken?: any;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getMentions method\n * \n * @public\n */\nexport interface GetMentionsOptions {\n /** The minimum Post ID to be included in the result set. This parameter takes precedence over start_time if both are specified. */\n sinceId?: any;\n\n /** The maximum Post ID to be included in the result set. This parameter takes precedence over end_time if both are specified. */\n untilId?: any;\n\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get the next 'page' of results. */\n paginationToken?: any;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The earliest UTC timestamp from which the Posts will be provided. The since_id parameter takes precedence if it is also specified. */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The latest UTC timestamp to which the Posts will be provided. The until_id parameter takes precedence if it is also specified. */\n endTime?: string;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getBlocking method\n * \n * @public\n */\nexport interface GetBlockingOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get a specified 'page' of results. */\n paginationToken?: any;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getById method\n * \n * @public\n */\nexport interface GetByIdOptions {\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getByUsernames method\n * \n * @public\n */\nexport interface GetByUsernamesOptions {\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getOwnedLists method\n * \n * @public\n */\nexport interface GetOwnedListsOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get a specified 'page' of results. */\n paginationToken?: any;\n\n /** A comma separated list of List fields to display. */\n listfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for repostPost method\n * \n * @public\n */\nexport interface RepostPostOptions {\n /** Request body */\n body?: RepostPostRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getFollowers method\n * \n * @public\n */\nexport interface GetFollowersOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get a specified 'page' of results. */\n paginationToken?: any;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for search method\n * \n * @public\n */\nexport interface SearchOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get the next 'page' of results. The value used with the parameter is pulled directly from the response provided by the API, and should not be modified. */\n nextToken?: any;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for likePost method\n * \n * @public\n */\nexport interface LikePostOptions {\n /** Request body */\n body?: LikePostRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getListMemberships method\n * \n * @public\n */\nexport interface GetListMembershipsOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get a specified 'page' of results. */\n paginationToken?: any;\n\n /** A comma separated list of List fields to display. */\n listfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getRepostsOfMe method\n * \n * @public\n */\nexport interface GetRepostsOfMeOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get the next 'page' of results. */\n paginationToken?: any;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getTimeline method\n * \n * @public\n */\nexport interface GetTimelineOptions {\n /** The minimum Post ID to be included in the result set. This parameter takes precedence over start_time if both are specified. */\n sinceId?: any;\n\n /** The maximum Post ID to be included in the result set. This parameter takes precedence over end_time if both are specified. */\n untilId?: any;\n\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get the next 'page' of results. */\n paginationToken?: any;\n\n /** The set of entities to exclude (e.g. 'replies' or 'retweets'). */\n exclude?: Array<any>;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The earliest UTC timestamp from which the Posts will be provided. The since_id parameter takes precedence if it is also specified. */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The latest UTC timestamp to which the Posts will be provided. The until_id parameter takes precedence if it is also specified. */\n endTime?: string;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getByUsername method\n * \n * @public\n */\nexport interface GetByUsernameOptions {\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getMe method\n * \n * @public\n */\nexport interface GetMeOptions {\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Client for users operations\n * \n * This client provides methods for interacting with the users endpoints\n * of the X API. It handles authentication, request formatting, and response\n * parsing for all users related operations.\n * \n * @category users\n */\nexport class UsersClient {\n private client: Client;\n\n /**\n * Creates a new users client instance\n * \n * @param client - The main X API client instance\n */\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Get Bookmarks by folder ID\n * Retrieves Posts in a specific Bookmark folder by its ID for the authenticated user.\n\n\n * @param id The ID of the authenticated source User for whom to return results.\n\n\n\n * @param folderId The ID of the Bookmark Folder that the authenticated User is trying to fetch Posts for.\n\n\n\n\n * @returns {Promise<GetBookmarksByFolderIdResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getBookmarksByFolderId(\n id: string,\n folderId: string\n ): Promise<GetBookmarksByFolderIdResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/bookmarks/folders/{folder_id}';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n path = path.replace('{folder_id}', encodeURIComponent(String(folderId)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<GetBookmarksByFolderIdResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get following\n * Retrieves a list of Users followed by a specific User by their ID.\n\n\n * @param id The ID of the User to lookup.\n\n\n\n\n * @returns {Promise<GetFollowingResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getFollowing(\n id: string,\n options: GetFollowingOptions = {}\n ): Promise<GetFollowingResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n userfields = [],\n\n expansions = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/following';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetFollowingResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Follow User\n * Causes the authenticated user to follow a specific user by their ID.\n\n\n * @param id The ID of the authenticated source User that is requesting to follow the target User.\n\n\n\n\n * @returns {Promise<FollowUserResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async followUser(\n id: string,\n options: FollowUserOptions = {}\n ): Promise<FollowUserResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/following';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<FollowUserResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Bookmark folders\n * Retrieves a list of Bookmark folders created by the authenticated user.\n\n\n * @param id The ID of the authenticated source User for whom to return results.\n\n\n\n\n * @returns {Promise<GetBookmarkFoldersResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getBookmarkFolders(\n id: string,\n options: GetBookmarkFoldersOptions = {}\n ): Promise<GetBookmarkFoldersResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/bookmarks/folders';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetBookmarkFoldersResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Unrepost Post\n * Causes the authenticated user to unrepost a specific Post by its ID.\n\n\n * @param id The ID of the authenticated source User that is requesting to repost the Post.\n\n\n\n * @param sourceTweetId The ID of the Post that the User is requesting to unretweet.\n\n\n\n\n * @returns {Promise<UnrepostPostResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async unrepostPost(\n id: string,\n sourceTweetId: string\n ): Promise<UnrepostPostResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/retweets/{source_tweet_id}';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n path = path.replace(\n '{source_tweet_id}',\n encodeURIComponent(String(sourceTweetId))\n );\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<UnrepostPostResponse>(\n 'DELETE',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Unlike Post\n * Causes the authenticated user to Unlike a specific Post by its ID.\n\n\n * @param id The ID of the authenticated source User that is requesting to unlike the Post.\n\n\n\n * @param tweetId The ID of the Post that the User is requesting to unlike.\n\n\n\n\n * @returns {Promise<UnlikePostResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async unlikePost(id: string, tweetId: string): Promise<UnlikePostResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/likes/{tweet_id}';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n path = path.replace('{tweet_id}', encodeURIComponent(String(tweetId)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<UnlikePostResponse>(\n 'DELETE',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get muting\n * Retrieves a list of Users muted by the authenticated user.\n\n\n * @param id The ID of the authenticated source User for whom to return results.\n\n\n\n\n * @returns {Promise<GetMutingResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getMuting(\n id: string,\n options: GetMutingOptions = {}\n ): Promise<GetMutingResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n userfields = [],\n\n expansions = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/muting';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetMutingResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Mute User\n * Causes the authenticated user to mute a specific User by their ID.\n\n\n * @param id The ID of the authenticated source User that is requesting to mute the target User.\n\n\n\n\n * @returns {Promise<MuteUserResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async muteUser(\n id: string,\n options: MuteUserOptions = {}\n ): Promise<MuteUserResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/muting';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<MuteUserResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get liked Posts\n * Retrieves a list of Posts liked by a specific User by their ID.\n\n\n * @param id The ID of the User to lookup.\n\n\n\n\n * @returns {Promise<GetLikedPostsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getLikedPosts(\n id: string,\n options: GetLikedPostsOptions = {}\n ): Promise<GetLikedPostsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/liked_tweets';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetLikedPostsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get pinned Lists\n * Retrieves a list of Lists pinned by the authenticated user.\n\n\n * @param id The ID of the authenticated source User for whom to return results.\n\n\n\n\n * @returns {Promise<GetPinnedListsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getPinnedLists(\n id: string,\n options: GetPinnedListsOptions = {}\n ): Promise<GetPinnedListsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n listfields = [],\n\n expansions = [],\n\n userfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/pinned_lists';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (listfields !== undefined) {\n params.append('list.fields', listfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetPinnedListsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Pin List\n * Causes the authenticated user to pin a specific List by its ID.\n\n\n * @param id The ID of the authenticated source User that will pin the List.\n\n\n\n\n * @param body Request body\n\n * @returns {Promise<PinListResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async pinList(id: string, body: PinListRequest): Promise<PinListResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/pinned_lists';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: JSON.stringify(body || {}),\n\n // No optional parameters, using empty request options\n };\n\n return this.client.request<PinListResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Posts\n * Retrieves a list of posts authored by a specific User by their ID.\n\n\n * @param id The ID of the User to lookup.\n\n\n\n\n * @returns {Promise<GetPostsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getPosts(\n id: string,\n options: GetPostsOptions = {}\n ): Promise<GetPostsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n sinceId = undefined,\n\n untilId = undefined,\n\n maxResults = undefined,\n\n paginationToken = undefined,\n\n exclude = [],\n\n startTime = undefined,\n\n endTime = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/tweets';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (sinceId !== undefined) {\n params.append('since_id', String(sinceId));\n }\n\n if (untilId !== undefined) {\n params.append('until_id', String(untilId));\n }\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (exclude !== undefined) {\n params.append('exclude', exclude.join(','));\n }\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetPostsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Users by IDs\n * Retrieves details of multiple Users by their IDs.\n\n\n\n * @param ids A list of User IDs, comma-separated. You can specify up to 100 IDs.\n\n\n\n * @returns {Promise<GetByIdsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getByIds(\n ids: Array<any>,\n options: GetByIdsOptions = {}\n ): Promise<GetByIdsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n userfields = [],\n\n expansions = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (ids !== undefined) {\n params.append('ids', ids.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetByIdsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get followed Lists\n * Retrieves a list of Lists followed by a specific User by their ID.\n\n\n * @param id The ID of the User to lookup.\n\n\n\n\n * @returns {Promise<GetFollowedListsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getFollowedLists(\n id: string,\n options: GetFollowedListsOptions = {}\n ): Promise<GetFollowedListsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n listfields = [],\n\n expansions = [],\n\n userfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/followed_lists';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (listfields !== undefined) {\n params.append('list.fields', listfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetFollowedListsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Follow List\n * Causes the authenticated user to follow a specific List by its ID.\n\n\n * @param id The ID of the authenticated source User that will follow the List.\n\n\n\n\n * @returns {Promise<FollowListResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async followList(\n id: string,\n options: FollowListOptions = {}\n ): Promise<FollowListResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/followed_lists';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<FollowListResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Bookmarks\n * Retrieves a list of Posts bookmarked by the authenticated user.\n\n\n * @param id The ID of the authenticated source User for whom to return results.\n\n\n\n\n * @returns {Promise<GetBookmarksResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getBookmarks(\n id: string,\n options: GetBookmarksOptions = {}\n ): Promise<GetBookmarksResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/bookmarks';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetBookmarksResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Create Bookmark\n * Adds a post to the authenticated user’s bookmarks.\n\n\n * @param id The ID of the authenticated source User for whom to add bookmarks.\n\n\n\n\n * @param body Request body\n\n * @returns {Promise<CreateBookmarkResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async createBookmark(\n id: string,\n body: CreateBookmarkRequest\n ): Promise<CreateBookmarkResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/bookmarks';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: JSON.stringify(body || {}),\n\n // No optional parameters, using empty request options\n };\n\n return this.client.request<CreateBookmarkResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get mentions\n * Retrieves a list of Posts that mention a specific User by their ID.\n\n\n * @param id The ID of the User to lookup.\n\n\n\n\n * @returns {Promise<GetMentionsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getMentions(\n id: string,\n options: GetMentionsOptions = {}\n ): Promise<GetMentionsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n sinceId = undefined,\n\n untilId = undefined,\n\n maxResults = undefined,\n\n paginationToken = undefined,\n\n startTime = undefined,\n\n endTime = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/mentions';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (sinceId !== undefined) {\n params.append('since_id', String(sinceId));\n }\n\n if (untilId !== undefined) {\n params.append('until_id', String(untilId));\n }\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetMentionsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get blocking\n * Retrieves a list of Users blocked by the specified User ID.\n\n\n * @param id The ID of the authenticated source User for whom to return results.\n\n\n\n\n * @returns {Promise<GetBlockingResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getBlocking(\n id: string,\n options: GetBlockingOptions = {}\n ): Promise<GetBlockingResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n userfields = [],\n\n expansions = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/blocking';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetBlockingResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Unblock DMs\n * Unblocks direct messages to or from a specific User by their ID for the authenticated user.\n\n\n * @param id The ID of the target User that the authenticated user requesting to unblock dms for.\n\n\n\n\n * @returns {Promise<UnblockDmsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async unblockDms(id: string): Promise<UnblockDmsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/dm/unblock';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<UnblockDmsResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get User by ID\n * Retrieves details of a specific User by their ID.\n\n\n * @param id The ID of the User to lookup.\n\n\n\n\n * @returns {Promise<GetByIdResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getById(\n id: string,\n options: GetByIdOptions = {}\n ): Promise<GetByIdResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n userfields = [],\n\n expansions = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetByIdResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Users by usernames\n * Retrieves details of multiple Users by their usernames.\n\n\n\n * @param usernames A list of usernames, comma-separated.\n\n\n\n * @returns {Promise<GetByUsernamesResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getByUsernames(\n usernames: Array<any>,\n options: GetByUsernamesOptions = {}\n ): Promise<GetByUsernamesResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n userfields = [],\n\n expansions = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/by';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (usernames !== undefined) {\n params.append('usernames', usernames.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetByUsernamesResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get owned Lists\n * Retrieves a list of Lists owned by a specific User by their ID.\n\n\n * @param id The ID of the User to lookup.\n\n\n\n\n * @returns {Promise<GetOwnedListsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getOwnedLists(\n id: string,\n options: GetOwnedListsOptions = {}\n ): Promise<GetOwnedListsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n listfields = [],\n\n expansions = [],\n\n userfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/owned_lists';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (listfields !== undefined) {\n params.append('list.fields', listfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetOwnedListsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Repost Post\n * Causes the authenticated user to repost a specific Post by its ID.\n\n\n * @param id The ID of the authenticated source User that is requesting to repost the Post.\n\n\n\n\n * @returns {Promise<RepostPostResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async repostPost(\n id: string,\n options: RepostPostOptions = {}\n ): Promise<RepostPostResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/retweets';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<RepostPostResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Delete Bookmark\n * Removes a Post from the authenticated user’s Bookmarks by its ID.\n\n\n * @param id The ID of the authenticated source User whose bookmark is to be removed.\n\n\n\n * @param tweetId The ID of the Post that the source User is removing from bookmarks.\n\n\n\n\n * @returns {Promise<DeleteBookmarkResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async deleteBookmark(\n id: string,\n tweetId: string\n ): Promise<DeleteBookmarkResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/bookmarks/{tweet_id}';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n path = path.replace('{tweet_id}', encodeURIComponent(String(tweetId)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<DeleteBookmarkResponse>(\n 'DELETE',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get followers\n * Retrieves a list of Users who follow a specific User by their ID.\n\n\n * @param id The ID of the User to lookup.\n\n\n\n\n * @returns {Promise<GetFollowersResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getFollowers(\n id: string,\n options: GetFollowersOptions = {}\n ): Promise<GetFollowersResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n userfields = [],\n\n expansions = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/followers';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetFollowersResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Search Users\n * Retrieves a list of Users matching a search query.\n\n\n\n * @param query TThe the query string by which to query for users.\n\n\n\n * @returns {Promise<SearchResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async search(\n query: any,\n options: SearchOptions = {}\n ): Promise<SearchResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n nextToken = undefined,\n\n userfields = [],\n\n expansions = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/search';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (query !== undefined) {\n params.append('query', String(query));\n }\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (nextToken !== undefined) {\n params.append('next_token', String(nextToken));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<SearchResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Like Post\n * Causes the authenticated user to Like a specific Post by its ID.\n\n\n * @param id The ID of the authenticated source User that is requesting to like the Post.\n\n\n\n\n * @returns {Promise<LikePostResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async likePost(\n id: string,\n options: LikePostOptions = {}\n ): Promise<LikePostResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/likes';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<LikePostResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Unpin List\n * Causes the authenticated user to unpin a specific List by its ID.\n\n\n * @param id The ID of the authenticated source User for whom to return results.\n\n\n\n * @param listId The ID of the List to unpin.\n\n\n\n\n * @returns {Promise<UnpinListResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async unpinList(id: string, listId: string): Promise<UnpinListResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/pinned_lists/{list_id}';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n path = path.replace('{list_id}', encodeURIComponent(String(listId)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<UnpinListResponse>(\n 'DELETE',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get List memberships\n * Retrieves a list of Lists that a specific User is a member of by their ID.\n\n\n * @param id The ID of the User to lookup.\n\n\n\n\n * @returns {Promise<GetListMembershipsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getListMemberships(\n id: string,\n options: GetListMembershipsOptions = {}\n ): Promise<GetListMembershipsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n listfields = [],\n\n expansions = [],\n\n userfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/list_memberships';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (listfields !== undefined) {\n params.append('list.fields', listfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetListMembershipsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Reposts of me\n * Retrieves a list of Posts that repost content from the authenticated user.\n\n\n\n * @returns {Promise<GetRepostsOfMeResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getRepostsOfMe(\n options: GetRepostsOfMeOptions = {}\n ): Promise<GetRepostsOfMeResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/reposts_of_me';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetRepostsOfMeResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Unfollow User\n * Causes the authenticated user to unfollow a specific user by their ID.\n\n\n * @param sourceUserId The ID of the authenticated source User that is requesting to unfollow the target User.\n\n\n\n * @param targetUserId The ID of the User that the source User is requesting to unfollow.\n\n\n\n\n * @returns {Promise<UnfollowUserResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async unfollowUser(\n sourceUserId: string,\n targetUserId: string\n ): Promise<UnfollowUserResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/users/{source_user_id}/following/{target_user_id}';\n\n path = path.replace(\n '{source_user_id}',\n encodeURIComponent(String(sourceUserId))\n );\n\n path = path.replace(\n '{target_user_id}',\n encodeURIComponent(String(targetUserId))\n );\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<UnfollowUserResponse>(\n 'DELETE',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Unmute User\n * Causes the authenticated user to unmute a specific user by their ID.\n\n\n * @param sourceUserId The ID of the authenticated source User that is requesting to unmute the target User.\n\n\n\n * @param targetUserId The ID of the User that the source User is requesting to unmute.\n\n\n\n\n * @returns {Promise<UnmuteUserResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async unmuteUser(\n sourceUserId: string,\n targetUserId: string\n ): Promise<UnmuteUserResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/users/{source_user_id}/muting/{target_user_id}';\n\n path = path.replace(\n '{source_user_id}',\n encodeURIComponent(String(sourceUserId))\n );\n\n path = path.replace(\n '{target_user_id}',\n encodeURIComponent(String(targetUserId))\n );\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<UnmuteUserResponse>(\n 'DELETE',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Unfollow List\n * Causes the authenticated user to unfollow a specific List by its ID.\n\n\n * @param id The ID of the authenticated source User that will unfollow the List.\n\n\n\n * @param listId The ID of the List to unfollow.\n\n\n\n\n * @returns {Promise<UnfollowListResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async unfollowList(\n id: string,\n listId: string\n ): Promise<UnfollowListResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/followed_lists/{list_id}';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n path = path.replace('{list_id}', encodeURIComponent(String(listId)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<UnfollowListResponse>(\n 'DELETE',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Timeline\n * Retrieves a reverse chronological list of Posts in the authenticated User’s Timeline.\n\n\n * @param id The ID of the authenticated source User to list Reverse Chronological Timeline Posts of.\n\n\n\n\n * @returns {Promise<GetTimelineResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getTimeline(\n id: string,\n options: GetTimelineOptions = {}\n ): Promise<GetTimelineResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n sinceId = undefined,\n\n untilId = undefined,\n\n maxResults = undefined,\n\n paginationToken = undefined,\n\n exclude = [],\n\n startTime = undefined,\n\n endTime = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/timelines/reverse_chronological';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (sinceId !== undefined) {\n params.append('since_id', String(sinceId));\n }\n\n if (untilId !== undefined) {\n params.append('until_id', String(untilId));\n }\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (exclude !== undefined) {\n params.append('exclude', exclude.join(','));\n }\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetTimelineResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Block DMs\n * Blocks direct messages to or from a specific User by their ID for the authenticated user.\n\n\n * @param id The ID of the target User that the authenticated user requesting to block dms for.\n\n\n\n\n * @returns {Promise<BlockDmsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async blockDms(id: string): Promise<BlockDmsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/users/{id}/dm/block';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<BlockDmsResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get User by username\n * Retrieves details of a specific User by their username.\n\n\n * @param username A username.\n\n\n\n\n * @returns {Promise<GetByUsernameResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getByUsername(\n username: string,\n options: GetByUsernameOptions = {}\n ): Promise<GetByUsernameResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n userfields = [],\n\n expansions = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/by/username/{username}';\n\n path = path.replace('{username}', encodeURIComponent(String(username)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetByUsernameResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get my User\n * Retrieves details of the authenticated user.\n\n\n\n * @returns {Promise<GetMeResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getMe(options: GetMeOptions = {}): Promise<GetMeResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n userfields = [],\n\n expansions = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/me';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetMeResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n}\n","/**\n * Models for users operations\n */\nimport type * as Schemas from '../schemas.js';\n\n\n\n\n\n/**\n * Response for getBookmarksByFolderId\n * \n * @public\n */\nexport type GetBookmarksByFolderIdResponse = Schemas.BookmarkFolderPostsResponse;\n/**\n * Response for getFollowing\n * \n * @public\n */\nexport type GetFollowingResponse = Schemas.Get2UsersIdFollowingResponse;\n/**\n * Request for followUser\n * \n * @public\n */\nexport type FollowUserRequest = Schemas.UsersFollowingCreateRequest;\n/**\n * Response for followUser\n * \n * @public\n */\nexport type FollowUserResponse = Schemas.UsersFollowingCreateResponse;\n/**\n * Response for getBookmarkFolders\n * \n * @public\n */\nexport type GetBookmarkFoldersResponse = Schemas.BookmarkFoldersResponse;\n/**\n * Response for unrepostPost\n * \n * @public\n */\nexport type UnrepostPostResponse = Schemas.UsersRetweetsDeleteResponse;\n/**\n * Response for unlikePost\n * \n * @public\n */\nexport type UnlikePostResponse = Schemas.UsersLikesDeleteResponse;\n/**\n * Response for getMuting\n * \n * @public\n */\nexport type GetMutingResponse = Schemas.Get2UsersIdMutingResponse;\n\n/**\n * Request for muteUser\n * \n * @public\n */\nexport type { MuteUserRequest as MuteUserRequest } from '../schemas.js';\n/**\n * Response for muteUser\n * \n * @public\n */\nexport type MuteUserResponse = Schemas.MuteUserMutationResponse;\n/**\n * Response for getLikedPosts\n * \n * @public\n */\nexport type GetLikedPostsResponse = Schemas.Get2UsersIdLikedTweetsResponse;\n/**\n * Response for getPinnedLists\n * \n * @public\n */\nexport type GetPinnedListsResponse = Schemas.Get2UsersIdPinnedListsResponse;\n/**\n * Request for pinList\n * \n * @public\n */\nexport type PinListRequest = Schemas.ListPinnedRequest;\n/**\n * Response for pinList\n * \n * @public\n */\nexport type PinListResponse = Schemas.ListPinnedResponse;\n/**\n * Response for getPosts\n * \n * @public\n */\nexport type GetPostsResponse = Schemas.Get2UsersIdTweetsResponse;\n/**\n * Response for getByIds\n * \n * @public\n */\nexport type GetByIdsResponse = Schemas.Get2UsersResponse;\n/**\n * Response for getFollowedLists\n * \n * @public\n */\nexport type GetFollowedListsResponse = Schemas.Get2UsersIdFollowedListsResponse;\n/**\n * Request for followList\n * \n * @public\n */\nexport type FollowListRequest = Schemas.ListFollowedRequest;\n/**\n * Response for followList\n * \n * @public\n */\nexport type FollowListResponse = Schemas.ListFollowedResponse;\n/**\n * Response for getBookmarks\n * \n * @public\n */\nexport type GetBookmarksResponse = Schemas.Get2UsersIdBookmarksResponse;\n/**\n * Request for createBookmark\n * \n * @public\n */\nexport type CreateBookmarkRequest = Schemas.BookmarkAddRequest;\n/**\n * Response for createBookmark\n * \n * @public\n */\nexport type CreateBookmarkResponse = Schemas.BookmarkMutationResponse;\n/**\n * Response for getMentions\n * \n * @public\n */\nexport type GetMentionsResponse = Schemas.Get2UsersIdMentionsResponse;\n/**\n * Response for getBlocking\n * \n * @public\n */\nexport type GetBlockingResponse = Schemas.Get2UsersIdBlockingResponse;\n/**\n * Response for unblockDms\n * \n * @public\n */\nexport type UnblockDmsResponse = Schemas.UsersDMUnBlockCreateResponse;\n/**\n * Response for getById\n * \n * @public\n */\nexport type GetByIdResponse = Schemas.Get2UsersIdResponse;\n/**\n * Response for getByUsernames\n * \n * @public\n */\nexport type GetByUsernamesResponse = Schemas.Get2UsersByResponse;\n/**\n * Response for getOwnedLists\n * \n * @public\n */\nexport type GetOwnedListsResponse = Schemas.Get2UsersIdOwnedListsResponse;\n/**\n * Request for repostPost\n * \n * @public\n */\nexport type RepostPostRequest = Schemas.UsersRetweetsCreateRequest;\n/**\n * Response for repostPost\n * \n * @public\n */\nexport type RepostPostResponse = Schemas.UsersRetweetsCreateResponse;\n/**\n * Response for deleteBookmark\n * \n * @public\n */\nexport type DeleteBookmarkResponse = Schemas.BookmarkMutationResponse;\n/**\n * Response for getFollowers\n * \n * @public\n */\nexport type GetFollowersResponse = Schemas.Get2UsersIdFollowersResponse;\n/**\n * Response for search\n * \n * @public\n */\nexport type SearchResponse = Schemas.Get2UsersSearchResponse;\n/**\n * Request for likePost\n * \n * @public\n */\nexport type LikePostRequest = Schemas.UsersLikesCreateRequest;\n/**\n * Response for likePost\n * \n * @public\n */\nexport type LikePostResponse = Schemas.UsersLikesCreateResponse;\n/**\n * Response for unpinList\n * \n * @public\n */\nexport type UnpinListResponse = Schemas.ListUnpinResponse;\n/**\n * Response for getListMemberships\n * \n * @public\n */\nexport type GetListMembershipsResponse = Schemas.Get2UsersIdListMembershipsResponse;\n/**\n * Response for getRepostsOfMe\n * \n * @public\n */\nexport type GetRepostsOfMeResponse = Schemas.Get2UsersRepostsOfMeResponse;\n/**\n * Response for unfollowUser\n * \n * @public\n */\nexport type UnfollowUserResponse = Schemas.UsersFollowingDeleteResponse;\n/**\n * Response for unmuteUser\n * \n * @public\n */\nexport type UnmuteUserResponse = Schemas.MuteUserMutationResponse;\n/**\n * Response for unfollowList\n * \n * @public\n */\nexport type UnfollowListResponse = Schemas.ListFollowedResponse;\n/**\n * Response for getTimeline\n * \n * @public\n */\nexport type GetTimelineResponse = Schemas.Get2UsersIdTimelinesReverseChronologicalResponse;\n/**\n * Response for blockDms\n * \n * @public\n */\nexport type BlockDmsResponse = Schemas.UsersDMBlockCreateResponse;\n/**\n * Response for getByUsername\n * \n * @public\n */\nexport type GetByUsernameResponse = Schemas.Get2UsersByUsernameUsernameResponse;\n/**\n * Response for getMe\n * \n * @public\n */\nexport type GetMeResponse = Schemas.Get2UsersMeResponse;","/**\n * community notes client for the X API.\n *\n * This module provides a client for interacting with the community notes endpoints of the X API.\n */\n\nimport { Client, ApiResponse, RequestOptions } from '../client.js';\nimport {\n Paginator,\n PostPaginator,\n UserPaginator,\n EventPaginator,\n} from '../paginator.js';\nimport {\n DeleteResponse,\n EvaluateRequest,\n EvaluateResponse,\n SearchWrittenResponse,\n SearchEligiblePostsResponse,\n CreateRequest,\n CreateResponse,\n} from './models.js';\n\n/**\n * Options for evaluate method\n * \n * @public\n */\nexport interface EvaluateOptions {\n /** Request body */\n body?: EvaluateRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for searchWritten method\n * \n * @public\n */\nexport interface SearchWrittenOptions {\n /** Pagination token to get next set of posts eligible for notes. */\n paginationToken?: string;\n\n /** Max results to return. */\n maxResults?: number;\n\n /** A comma separated list of Note fields to display. */\n notefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for searchEligiblePosts method\n * \n * @public\n */\nexport interface SearchEligiblePostsOptions {\n /** Pagination token to get next set of posts eligible for notes. */\n paginationToken?: string;\n\n /** Max results to return. */\n maxResults?: number;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for create method\n * \n * @public\n */\nexport interface CreateOptions {\n /** Request body */\n body?: CreateRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Client for community notes operations\n * \n * This client provides methods for interacting with the community notes endpoints\n * of the X API. It handles authentication, request formatting, and response\n * parsing for all community notes related operations.\n * \n * @category community notes\n */\nexport class CommunityNotesClient {\n private client: Client;\n\n /**\n * Creates a new community notes client instance\n * \n * @param client - The main X API client instance\n */\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Delete a Community Note\n * Deletes a community note.\n\n\n * @param id The community note id to delete.\n\n\n\n\n * @returns {Promise<DeleteResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async delete(id: string): Promise<DeleteResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/notes/{id}';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<DeleteResponse>(\n 'DELETE',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Evaluate a Community Note\n * Endpoint to evaluate a community note.\n\n\n\n * @returns {Promise<EvaluateResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async evaluate(options: EvaluateOptions = {}): Promise<EvaluateResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/evaluate_note';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<EvaluateResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Search for Community Notes Written\n * Returns all the community notes written by the user.\n\n\n\n * @param testMode If true, return the notes the caller wrote for the test. If false, return the notes the caller wrote on the product.\n\n\n\n * @returns {Promise<SearchWrittenResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async searchWritten(\n testMode: boolean,\n options: SearchWrittenOptions = {}\n ): Promise<SearchWrittenResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n paginationToken = undefined,\n\n maxResults = undefined,\n\n notefields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/notes/search/notes_written';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (testMode !== undefined) {\n params.append('test_mode', String(testMode));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (notefields !== undefined) {\n params.append('note.fields', notefields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<SearchWrittenResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Search for Posts Eligible for Community Notes\n * Returns all the posts that are eligible for community notes.\n\n\n\n * @param testMode If true, return a list of posts that are for the test. If false, return a list of posts that the bots can write proposed notes on the product.\n\n\n\n * @returns {Promise<SearchEligiblePostsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async searchEligiblePosts(\n testMode: boolean,\n options: SearchEligiblePostsOptions = {}\n ): Promise<SearchEligiblePostsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n paginationToken = undefined,\n\n maxResults = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/notes/search/posts_eligible_for_notes';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (testMode !== undefined) {\n params.append('test_mode', String(testMode));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<SearchEligiblePostsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Create a Community Note\n * Creates a community note endpoint for LLM use case.\n\n\n\n * @returns {Promise<CreateResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async create(options: CreateOptions = {}): Promise<CreateResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/notes';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<CreateResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n}\n","/**\n * Models for community notes operations\n */\nimport type * as Schemas from '../schemas.js';\n\n\n\n\n\n/**\n * Response for delete\n * \n * @public\n */\nexport type DeleteResponse = Schemas.DeleteNoteResponse;\n/**\n * Request for evaluate\n * \n * @public\n */\nexport type EvaluateRequest = Schemas.EvaluateNoteRequest;\n/**\n * Response for evaluate\n * \n * @public\n */\nexport type EvaluateResponse = Schemas.EvaluateNoteResponse;\n/**\n * Response for searchWritten\n * \n * @public\n */\nexport type SearchWrittenResponse = Schemas.Get2NotesSearchNotesWrittenResponse;\n/**\n * Response for searchEligiblePosts\n * \n * @public\n */\nexport type SearchEligiblePostsResponse = Schemas.Get2NotesSearchPostsEligibleForNotesResponse;\n/**\n * Request for create\n * \n * @public\n */\nexport type CreateRequest = Schemas.CreateNoteRequest;\n/**\n * Response for create\n * \n * @public\n */\nexport type CreateResponse = Schemas.CreateNoteResponse;","/**\n * posts client for the X API.\n *\n * This module provides a client for interacting with the posts endpoints of the X API.\n */\n\nimport { Client, ApiResponse, RequestOptions } from '../client.js';\nimport {\n Paginator,\n PostPaginator,\n UserPaginator,\n EventPaginator,\n} from '../paginator.js';\nimport {\n GetRepostsResponse,\n SearchAllResponse,\n GetRepostedByResponse,\n GetCountsRecentResponse,\n GetCountsAllResponse,\n GetByIdResponse,\n DeleteResponse,\n SearchRecentResponse,\n GetInsights28hrResponse,\n GetInsightsHistoricalResponse,\n GetAnalyticsResponse,\n GetQuotedResponse,\n GetByIdsResponse,\n CreateRequest,\n CreateResponse,\n GetLikingUsersResponse,\n HideReplyRequest,\n HideReplyResponse,\n} from './models.js';\n\n/**\n * Options for getReposts method\n * \n * @public\n */\nexport interface GetRepostsOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get the next 'page' of results. */\n paginationToken?: any;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for searchAll method\n * \n * @public\n */\nexport interface SearchAllOptions {\n /** YYYY-MM-DDTHH:mm:ssZ. The oldest UTC timestamp from which the Posts will be provided. Timestamp is in second granularity and is inclusive (i.e. 12:00:01 includes the first second of the minute). */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The newest, most recent UTC timestamp to which the Posts will be provided. Timestamp is in second granularity and is exclusive (i.e. 12:00:01 excludes the first second of the minute). */\n endTime?: string;\n\n /** Returns results with a Post ID greater than (that is, more recent than) the specified ID. */\n sinceId?: any;\n\n /** Returns results with a Post ID less than (that is, older than) the specified ID. */\n untilId?: any;\n\n /** The maximum number of search results to be returned by a request. */\n maxResults?: number;\n\n /** This parameter is used to get the next 'page' of results. The value used with the parameter is pulled directly from the response provided by the API, and should not be modified. */\n nextToken?: any;\n\n /** This parameter is used to get the next 'page' of results. The value used with the parameter is pulled directly from the response provided by the API, and should not be modified. */\n paginationToken?: any;\n\n /** This order in which to return results. */\n sortOrder?: string;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getRepostedBy method\n * \n * @public\n */\nexport interface GetRepostedByOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get the next 'page' of results. */\n paginationToken?: any;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getCountsRecent method\n * \n * @public\n */\nexport interface GetCountsRecentOptions {\n /** YYYY-MM-DDTHH:mm:ssZ. The oldest UTC timestamp (from most recent 7 days) from which the Posts will be provided. Timestamp is in second granularity and is inclusive (i.e. 12:00:01 includes the first second of the minute). */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The newest, most recent UTC timestamp to which the Posts will be provided. Timestamp is in second granularity and is exclusive (i.e. 12:00:01 excludes the first second of the minute). */\n endTime?: string;\n\n /** Returns results with a Post ID greater than (that is, more recent than) the specified ID. */\n sinceId?: any;\n\n /** Returns results with a Post ID less than (that is, older than) the specified ID. */\n untilId?: any;\n\n /** This parameter is used to get the next 'page' of results. The value used with the parameter is pulled directly from the response provided by the API, and should not be modified. */\n nextToken?: any;\n\n /** This parameter is used to get the next 'page' of results. The value used with the parameter is pulled directly from the response provided by the API, and should not be modified. */\n paginationToken?: any;\n\n /** The granularity for the search counts results. */\n granularity?: string;\n\n /** A comma separated list of SearchCount fields to display. */\n searchCountfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getCountsAll method\n * \n * @public\n */\nexport interface GetCountsAllOptions {\n /** YYYY-MM-DDTHH:mm:ssZ. The oldest UTC timestamp (from most recent 7 days) from which the Posts will be provided. Timestamp is in second granularity and is inclusive (i.e. 12:00:01 includes the first second of the minute). */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The newest, most recent UTC timestamp to which the Posts will be provided. Timestamp is in second granularity and is exclusive (i.e. 12:00:01 excludes the first second of the minute). */\n endTime?: string;\n\n /** Returns results with a Post ID greater than (that is, more recent than) the specified ID. */\n sinceId?: any;\n\n /** Returns results with a Post ID less than (that is, older than) the specified ID. */\n untilId?: any;\n\n /** This parameter is used to get the next 'page' of results. The value used with the parameter is pulled directly from the response provided by the API, and should not be modified. */\n nextToken?: any;\n\n /** This parameter is used to get the next 'page' of results. The value used with the parameter is pulled directly from the response provided by the API, and should not be modified. */\n paginationToken?: any;\n\n /** The granularity for the search counts results. */\n granularity?: string;\n\n /** A comma separated list of SearchCount fields to display. */\n searchCountfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getById method\n * \n * @public\n */\nexport interface GetByIdOptions {\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for searchRecent method\n * \n * @public\n */\nexport interface SearchRecentOptions {\n /** YYYY-MM-DDTHH:mm:ssZ. The oldest UTC timestamp from which the Posts will be provided. Timestamp is in second granularity and is inclusive (i.e. 12:00:01 includes the first second of the minute). */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The newest, most recent UTC timestamp to which the Posts will be provided. Timestamp is in second granularity and is exclusive (i.e. 12:00:01 excludes the first second of the minute). */\n endTime?: string;\n\n /** Returns results with a Post ID greater than (that is, more recent than) the specified ID. */\n sinceId?: any;\n\n /** Returns results with a Post ID less than (that is, older than) the specified ID. */\n untilId?: any;\n\n /** The maximum number of search results to be returned by a request. */\n maxResults?: number;\n\n /** This parameter is used to get the next 'page' of results. The value used with the parameter is pulled directly from the response provided by the API, and should not be modified. */\n nextToken?: any;\n\n /** This parameter is used to get the next 'page' of results. The value used with the parameter is pulled directly from the response provided by the API, and should not be modified. */\n paginationToken?: any;\n\n /** This order in which to return results. */\n sortOrder?: string;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getInsights28hr method\n * \n * @public\n */\nexport interface GetInsights28hrOptions {\n /** A comma separated list of Engagement fields to display. */\n engagementfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getInsightsHistorical method\n * \n * @public\n */\nexport interface GetInsightsHistoricalOptions {\n /** A comma separated list of Engagement fields to display. */\n engagementfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getAnalytics method\n * \n * @public\n */\nexport interface GetAnalyticsOptions {\n /** A comma separated list of Analytics fields to display. */\n analyticsfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getQuoted method\n * \n * @public\n */\nexport interface GetQuotedOptions {\n /** The maximum number of results to be returned. */\n maxResults?: number;\n\n /** This parameter is used to get a specified 'page' of results. */\n paginationToken?: any;\n\n /** The set of entities to exclude (e.g. 'replies' or 'retweets'). */\n exclude?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getByIds method\n * \n * @public\n */\nexport interface GetByIdsOptions {\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getLikingUsers method\n * \n * @public\n */\nexport interface GetLikingUsersOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get the next 'page' of results. */\n paginationToken?: any;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for hideReply method\n * \n * @public\n */\nexport interface HideReplyOptions {\n /** Request body */\n body?: HideReplyRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Client for posts operations\n * \n * This client provides methods for interacting with the posts endpoints\n * of the X API. It handles authentication, request formatting, and response\n * parsing for all posts related operations.\n * \n * @category posts\n */\nexport class PostsClient {\n private client: Client;\n\n /**\n * Creates a new posts client instance\n * \n * @param client - The main X API client instance\n */\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Get Reposts\n * Retrieves a list of Posts that repost a specific Post by its ID.\n\n\n * @param id A single Post ID.\n\n\n\n\n * @returns {Promise<GetRepostsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getReposts(\n id: string,\n options: GetRepostsOptions = {}\n ): Promise<GetRepostsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/{id}/retweets';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetRepostsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Search all Posts\n * Retrieves Posts from the full archive matching a search query.\n\n\n\n * @param query One query/rule/filter for matching Posts. Refer to https://t.co/rulelength to identify the max query length.\n\n\n\n * @returns {Promise<SearchAllResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async searchAll(\n query: string,\n options: SearchAllOptions = {}\n ): Promise<SearchAllResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n startTime = undefined,\n\n endTime = undefined,\n\n sinceId = undefined,\n\n untilId = undefined,\n\n maxResults = undefined,\n\n nextToken = undefined,\n\n paginationToken = undefined,\n\n sortOrder = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/search/all';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (query !== undefined) {\n params.append('query', String(query));\n }\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (sinceId !== undefined) {\n params.append('since_id', String(sinceId));\n }\n\n if (untilId !== undefined) {\n params.append('until_id', String(untilId));\n }\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (nextToken !== undefined) {\n params.append('next_token', String(nextToken));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (sortOrder !== undefined) {\n params.append('sort_order', String(sortOrder));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<SearchAllResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Reposted by\n * Retrieves a list of Users who reposted a specific Post by its ID.\n\n\n * @param id A single Post ID.\n\n\n\n\n * @returns {Promise<GetRepostedByResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getRepostedBy(\n id: string,\n options: GetRepostedByOptions = {}\n ): Promise<GetRepostedByResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n userfields = [],\n\n expansions = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/{id}/retweeted_by';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetRepostedByResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get count of recent Posts\n * Retrieves the count of Posts from the last 7 days matching a search query.\n\n\n\n * @param query One query/rule/filter for matching Posts. Refer to https://t.co/rulelength to identify the max query length.\n\n\n\n * @returns {Promise<GetCountsRecentResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getCountsRecent(\n query: string,\n options: GetCountsRecentOptions = {}\n ): Promise<GetCountsRecentResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n startTime = undefined,\n\n endTime = undefined,\n\n sinceId = undefined,\n\n untilId = undefined,\n\n nextToken = undefined,\n\n paginationToken = undefined,\n\n granularity = undefined,\n\n searchCountfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/counts/recent';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (query !== undefined) {\n params.append('query', String(query));\n }\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (sinceId !== undefined) {\n params.append('since_id', String(sinceId));\n }\n\n if (untilId !== undefined) {\n params.append('until_id', String(untilId));\n }\n\n if (nextToken !== undefined) {\n params.append('next_token', String(nextToken));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (granularity !== undefined) {\n params.append('granularity', String(granularity));\n }\n\n if (searchCountfields !== undefined) {\n params.append('search_count.fields', searchCountfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetCountsRecentResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get count of all Posts\n * Retrieves the count of Posts matching a search query from the full archive.\n\n\n\n * @param query One query/rule/filter for matching Posts. Refer to https://t.co/rulelength to identify the max query length.\n\n\n\n * @returns {Promise<GetCountsAllResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getCountsAll(\n query: string,\n options: GetCountsAllOptions = {}\n ): Promise<GetCountsAllResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n startTime = undefined,\n\n endTime = undefined,\n\n sinceId = undefined,\n\n untilId = undefined,\n\n nextToken = undefined,\n\n paginationToken = undefined,\n\n granularity = undefined,\n\n searchCountfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/counts/all';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (query !== undefined) {\n params.append('query', String(query));\n }\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (sinceId !== undefined) {\n params.append('since_id', String(sinceId));\n }\n\n if (untilId !== undefined) {\n params.append('until_id', String(untilId));\n }\n\n if (nextToken !== undefined) {\n params.append('next_token', String(nextToken));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (granularity !== undefined) {\n params.append('granularity', String(granularity));\n }\n\n if (searchCountfields !== undefined) {\n params.append('search_count.fields', searchCountfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetCountsAllResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Post by ID\n * Retrieves details of a specific Post by its ID.\n\n\n * @param id A single Post ID.\n\n\n\n\n * @returns {Promise<GetByIdResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getById(\n id: string,\n options: GetByIdOptions = {}\n ): Promise<GetByIdResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/{id}';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetByIdResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Delete Post\n * Deletes a specific Post by its ID, if owned by the authenticated user.\n\n\n * @param id The ID of the Post to be deleted.\n\n\n\n\n * @returns {Promise<DeleteResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async delete(id: string): Promise<DeleteResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/tweets/{id}';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<DeleteResponse>(\n 'DELETE',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Search recent Posts\n * Retrieves Posts from the last 7 days matching a search query.\n\n\n\n * @param query One query/rule/filter for matching Posts. Refer to https://t.co/rulelength to identify the max query length.\n\n\n\n * @returns {Promise<SearchRecentResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async searchRecent(\n query: string,\n options: SearchRecentOptions = {}\n ): Promise<SearchRecentResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n startTime = undefined,\n\n endTime = undefined,\n\n sinceId = undefined,\n\n untilId = undefined,\n\n maxResults = undefined,\n\n nextToken = undefined,\n\n paginationToken = undefined,\n\n sortOrder = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/search/recent';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (query !== undefined) {\n params.append('query', String(query));\n }\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (sinceId !== undefined) {\n params.append('since_id', String(sinceId));\n }\n\n if (untilId !== undefined) {\n params.append('until_id', String(untilId));\n }\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (nextToken !== undefined) {\n params.append('next_token', String(nextToken));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (sortOrder !== undefined) {\n params.append('sort_order', String(sortOrder));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<SearchRecentResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get 28-hour Post insights\n * Retrieves engagement metrics for specified Posts over the last 28 hours.\n\n\n\n * @param tweetIds List of PostIds for 28hr metrics.\n\n\n\n * @param granularity granularity of metrics response.\n\n\n\n * @param requestedMetrics request metrics for historical request.\n\n\n\n * @returns {Promise<GetInsights28hrResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getInsights28hr(\n tweetIds: Array<any>,\n granularity: string,\n requestedMetrics: Array<any>,\n options: GetInsights28hrOptions = {}\n ): Promise<GetInsights28hrResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n engagementfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/insights/28hr';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (tweetIds !== undefined) {\n params.append('tweet_ids', tweetIds.join(','));\n }\n\n if (granularity !== undefined) {\n params.append('granularity', String(granularity));\n }\n\n if (requestedMetrics !== undefined) {\n params.append('requested_metrics', requestedMetrics.join(','));\n }\n\n if (engagementfields !== undefined) {\n params.append('engagement.fields', engagementfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetInsights28hrResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get historical Post insights\n * Retrieves historical engagement metrics for specified Posts within a defined time range.\n\n\n\n * @param tweetIds List of PostIds for historical metrics.\n\n\n\n * @param endTime YYYY-MM-DDTHH:mm:ssZ. The UTC timestamp representing the end of the time range.\n\n\n\n * @param startTime YYYY-MM-DDTHH:mm:ssZ. The UTC timestamp representing the start of the time range.\n\n\n\n * @param granularity granularity of metrics response.\n\n\n\n * @param requestedMetrics request metrics for historical request.\n\n\n\n * @returns {Promise<GetInsightsHistoricalResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getInsightsHistorical(\n tweetIds: Array<any>,\n endTime: string,\n startTime: string,\n granularity: string,\n requestedMetrics: Array<any>,\n options: GetInsightsHistoricalOptions = {}\n ): Promise<GetInsightsHistoricalResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n engagementfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/insights/historical';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (tweetIds !== undefined) {\n params.append('tweet_ids', tweetIds.join(','));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (granularity !== undefined) {\n params.append('granularity', String(granularity));\n }\n\n if (requestedMetrics !== undefined) {\n params.append('requested_metrics', requestedMetrics.join(','));\n }\n\n if (engagementfields !== undefined) {\n params.append('engagement.fields', engagementfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetInsightsHistoricalResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Post analytics\n * Retrieves analytics data for specified Posts within a defined time range.\n\n\n\n * @param ids A comma separated list of Post IDs. Up to 100 are allowed in a single request.\n\n\n\n * @param endTime YYYY-MM-DDTHH:mm:ssZ. The UTC timestamp representing the end of the time range.\n\n\n\n * @param startTime YYYY-MM-DDTHH:mm:ssZ. The UTC timestamp representing the start of the time range.\n\n\n\n * @param granularity The granularity for the search counts results.\n\n\n\n * @returns {Promise<GetAnalyticsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getAnalytics(\n ids: Array<any>,\n endTime: string,\n startTime: string,\n granularity: string,\n options: GetAnalyticsOptions = {}\n ): Promise<GetAnalyticsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n analyticsfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/analytics';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (ids !== undefined) {\n params.append('ids', ids.join(','));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (granularity !== undefined) {\n params.append('granularity', String(granularity));\n }\n\n if (analyticsfields !== undefined) {\n params.append('analytics.fields', analyticsfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetAnalyticsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Quoted Posts\n * Retrieves a list of Posts that quote a specific Post by its ID.\n\n\n * @param id A single Post ID.\n\n\n\n\n * @returns {Promise<GetQuotedResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getQuoted(\n id: string,\n options: GetQuotedOptions = {}\n ): Promise<GetQuotedResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n exclude = [],\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/{id}/quote_tweets';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (exclude !== undefined) {\n params.append('exclude', exclude.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetQuotedResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Posts by IDs\n * Retrieves details of multiple Posts by their IDs.\n\n\n\n * @param ids A comma separated list of Post IDs. Up to 100 are allowed in a single request.\n\n\n\n * @returns {Promise<GetByIdsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getByIds(\n ids: Array<any>,\n options: GetByIdsOptions = {}\n ): Promise<GetByIdsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (ids !== undefined) {\n params.append('ids', ids.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetByIdsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Create or Edit Post\n * Creates a new Post for the authenticated user, or edits an existing Post when edit_options are provided.\n\n\n\n * @param body Request body\n\n * @returns {Promise<CreateResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async create(body: CreateRequest): Promise<CreateResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/tweets';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: JSON.stringify(body || {}),\n\n // No optional parameters, using empty request options\n };\n\n return this.client.request<CreateResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Liking Users\n * Retrieves a list of Users who liked a specific Post by its ID.\n\n\n * @param id A single Post ID.\n\n\n\n\n * @returns {Promise<GetLikingUsersResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getLikingUsers(\n id: string,\n options: GetLikingUsersOptions = {}\n ): Promise<GetLikingUsersResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n userfields = [],\n\n expansions = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/{id}/liking_users';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetLikingUsersResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Hide reply\n * Hides or unhides a reply to a conversation owned by the authenticated user.\n\n\n * @param tweetId The ID of the reply that you want to hide or unhide.\n\n\n\n\n * @returns {Promise<HideReplyResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async hideReply(\n tweetId: string,\n options: HideReplyOptions = {}\n ): Promise<HideReplyResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/{tweet_id}/hidden';\n\n path = path.replace('{tweet_id}', encodeURIComponent(String(tweetId)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<HideReplyResponse>(\n 'PUT',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n}\n","/**\n * Models for posts operations\n */\nimport type * as Schemas from '../schemas.js';\n\n\n\n\n\n/**\n * Response for getReposts\n * \n * @public\n */\nexport type GetRepostsResponse = Schemas.Get2TweetsIdRetweetsResponse;\n/**\n * Response for searchAll\n * \n * @public\n */\nexport type SearchAllResponse = Schemas.Get2TweetsSearchAllResponse;\n/**\n * Response for getRepostedBy\n * \n * @public\n */\nexport type GetRepostedByResponse = Schemas.Get2TweetsIdRetweetedByResponse;\n/**\n * Response for getCountsRecent\n * \n * @public\n */\nexport type GetCountsRecentResponse = Schemas.Get2TweetsCountsRecentResponse;\n/**\n * Response for getCountsAll\n * \n * @public\n */\nexport type GetCountsAllResponse = Schemas.Get2TweetsCountsAllResponse;\n/**\n * Response for getById\n * \n * @public\n */\nexport type GetByIdResponse = Schemas.Get2TweetsIdResponse;\n/**\n * Response for delete\n * \n * @public\n */\nexport type DeleteResponse = Schemas.TweetDeleteResponse;\n/**\n * Response for searchRecent\n * \n * @public\n */\nexport type SearchRecentResponse = Schemas.Get2TweetsSearchRecentResponse;\n/**\n * Response for getInsights28hr\n * \n * @public\n */\nexport type GetInsights28hrResponse = Schemas.Get2Insights28hrResponse;\n/**\n * Response for getInsightsHistorical\n * \n * @public\n */\nexport type GetInsightsHistoricalResponse = Schemas.Get2InsightsHistoricalResponse;\n/**\n * Response for getAnalytics\n * \n * @public\n */\nexport type GetAnalyticsResponse = Schemas.Analytics;\n/**\n * Response for getQuoted\n * \n * @public\n */\nexport type GetQuotedResponse = Schemas.Get2TweetsIdQuoteTweetsResponse;\n/**\n * Response for getByIds\n * \n * @public\n */\nexport type GetByIdsResponse = Schemas.Get2TweetsResponse;\n/**\n * Request for create\n * \n * @public\n */\nexport type CreateRequest = Schemas.TweetCreateRequest;\n/**\n * Response for create\n * \n * @public\n */\nexport type CreateResponse = Schemas.TweetCreateResponse;\n/**\n * Response for getLikingUsers\n * \n * @public\n */\nexport type GetLikingUsersResponse = Schemas.Get2TweetsIdLikingUsersResponse;\n/**\n * Request for hideReply\n * \n * @public\n */\nexport type HideReplyRequest = Schemas.TweetHideRequest;\n/**\n * Response for hideReply\n * \n * @public\n */\nexport type HideReplyResponse = Schemas.TweetHideResponse;","/**\n * lists client for the X API.\n *\n * This module provides a client for interacting with the lists endpoints of the X API.\n */\n\nimport { Client, ApiResponse, RequestOptions } from '../client.js';\nimport {\n Paginator,\n PostPaginator,\n UserPaginator,\n EventPaginator,\n} from '../paginator.js';\nimport {\n GetMembersResponse,\n AddMemberRequest,\n AddMemberResponse,\n GetByIdResponse,\n UpdateRequest,\n UpdateResponse,\n DeleteResponse,\n CreateRequest,\n CreateResponse,\n GetFollowersResponse,\n RemoveMemberByUserIdResponse,\n GetPostsResponse,\n} from './models.js';\n\n/**\n * Options for getMembers method\n * \n * @public\n */\nexport interface GetMembersOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get a specified 'page' of results. */\n paginationToken?: any;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for addMember method\n * \n * @public\n */\nexport interface AddMemberOptions {\n /** Request body */\n body?: AddMemberRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getById method\n * \n * @public\n */\nexport interface GetByIdOptions {\n /** A comma separated list of List fields to display. */\n listfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for update method\n * \n * @public\n */\nexport interface UpdateOptions {\n /** Request body */\n body?: UpdateRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for create method\n * \n * @public\n */\nexport interface CreateOptions {\n /** Request body */\n body?: CreateRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getFollowers method\n * \n * @public\n */\nexport interface GetFollowersOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get a specified 'page' of results. */\n paginationToken?: any;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getPosts method\n * \n * @public\n */\nexport interface GetPostsOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get the next 'page' of results. */\n paginationToken?: any;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Client for lists operations\n * \n * This client provides methods for interacting with the lists endpoints\n * of the X API. It handles authentication, request formatting, and response\n * parsing for all lists related operations.\n * \n * @category lists\n */\nexport class ListsClient {\n private client: Client;\n\n /**\n * Creates a new lists client instance\n * \n * @param client - The main X API client instance\n */\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Get List members\n * Retrieves a list of Users who are members of a specific List by its ID.\n\n\n * @param id The ID of the List.\n\n\n\n\n * @returns {Promise<GetMembersResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getMembers(\n id: string,\n options: GetMembersOptions = {}\n ): Promise<GetMembersResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n userfields = [],\n\n expansions = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/lists/{id}/members';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetMembersResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Add List member\n * Adds a User to a specific List by its ID.\n\n\n * @param id The ID of the List for which to add a member.\n\n\n\n\n * @returns {Promise<AddMemberResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async addMember(\n id: string,\n options: AddMemberOptions = {}\n ): Promise<AddMemberResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/lists/{id}/members';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<AddMemberResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get List by ID\n * Retrieves details of a specific List by its ID.\n\n\n * @param id The ID of the List.\n\n\n\n\n * @returns {Promise<GetByIdResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getById(\n id: string,\n options: GetByIdOptions = {}\n ): Promise<GetByIdResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n listfields = [],\n\n expansions = [],\n\n userfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/lists/{id}';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (listfields !== undefined) {\n params.append('list.fields', listfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetByIdResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Update List\n * Updates the details of a specific List owned by the authenticated user by its ID.\n\n\n * @param id The ID of the List to modify.\n\n\n\n\n * @returns {Promise<UpdateResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async update(\n id: string,\n options: UpdateOptions = {}\n ): Promise<UpdateResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/lists/{id}';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<UpdateResponse>(\n 'PUT',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Delete List\n * Deletes a specific List owned by the authenticated user by its ID.\n\n\n * @param id The ID of the List to delete.\n\n\n\n\n * @returns {Promise<DeleteResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async delete(id: string): Promise<DeleteResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/lists/{id}';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<DeleteResponse>(\n 'DELETE',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Create List\n * Creates a new List for the authenticated user.\n\n\n\n * @returns {Promise<CreateResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async create(options: CreateOptions = {}): Promise<CreateResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/lists';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<CreateResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get List followers\n * Retrieves a list of Users who follow a specific List by its ID.\n\n\n * @param id The ID of the List.\n\n\n\n\n * @returns {Promise<GetFollowersResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getFollowers(\n id: string,\n options: GetFollowersOptions = {}\n ): Promise<GetFollowersResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n userfields = [],\n\n expansions = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/lists/{id}/followers';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetFollowersResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Remove List member\n * Removes a User from a specific List by its ID and the User’s ID.\n\n\n * @param id The ID of the List to remove a member.\n\n\n\n * @param userId The ID of User that will be removed from the List.\n\n\n\n\n * @returns {Promise<RemoveMemberByUserIdResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async removeMemberByUserId(\n id: string,\n userId: string\n ): Promise<RemoveMemberByUserIdResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/lists/{id}/members/{user_id}';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n path = path.replace('{user_id}', encodeURIComponent(String(userId)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<RemoveMemberByUserIdResponse>(\n 'DELETE',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get List Posts\n * Retrieves a list of Posts associated with a specific List by its ID.\n\n\n * @param id The ID of the List.\n\n\n\n\n * @returns {Promise<GetPostsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getPosts(\n id: string,\n options: GetPostsOptions = {}\n ): Promise<GetPostsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/lists/{id}/tweets';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetPostsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n}\n","/**\n * Models for lists operations\n */\nimport type * as Schemas from '../schemas.js';\n\n\n\n\n\n/**\n * Response for getMembers\n * \n * @public\n */\nexport type GetMembersResponse = Schemas.Get2ListsIdMembersResponse;\n/**\n * Request for addMember\n * \n * @public\n */\nexport type AddMemberRequest = Schemas.ListAddUserRequest;\n/**\n * Response for addMember\n * \n * @public\n */\nexport type AddMemberResponse = Schemas.ListMutateResponse;\n/**\n * Response for getById\n * \n * @public\n */\nexport type GetByIdResponse = Schemas.Get2ListsIdResponse;\n/**\n * Request for update\n * \n * @public\n */\nexport type UpdateRequest = Schemas.ListUpdateRequest;\n/**\n * Response for update\n * \n * @public\n */\nexport type UpdateResponse = Schemas.ListUpdateResponse;\n/**\n * Response for delete\n * \n * @public\n */\nexport type DeleteResponse = Schemas.ListDeleteResponse;\n/**\n * Request for create\n * \n * @public\n */\nexport type CreateRequest = Schemas.ListCreateRequest;\n/**\n * Response for create\n * \n * @public\n */\nexport type CreateResponse = Schemas.ListCreateResponse;\n/**\n * Response for getFollowers\n * \n * @public\n */\nexport type GetFollowersResponse = Schemas.Get2ListsIdFollowersResponse;\n/**\n * Response for removeMemberByUserId\n * \n * @public\n */\nexport type RemoveMemberByUserIdResponse = Schemas.ListMutateResponse;\n/**\n * Response for getPosts\n * \n * @public\n */\nexport type GetPostsResponse = Schemas.Get2ListsIdTweetsResponse;","/**\n * compliance client for the X API.\n *\n * This module provides a client for interacting with the compliance endpoints of the X API.\n */\n\nimport { Client, ApiResponse, RequestOptions } from '../client.js';\nimport {\n Paginator,\n PostPaginator,\n UserPaginator,\n EventPaginator,\n} from '../paginator.js';\nimport {\n GetJobsByIdResponse,\n GetJobsResponse,\n CreateJobsRequest,\n CreateJobsResponse,\n} from './models.js';\n\n/**\n * Options for getJobsById method\n * \n * @public\n */\nexport interface GetJobsByIdOptions {\n /** A comma separated list of ComplianceJob fields to display. */\n complianceJobfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getJobs method\n * \n * @public\n */\nexport interface GetJobsOptions {\n /** Status of Compliance Job to list. */\n status?: string;\n\n /** A comma separated list of ComplianceJob fields to display. */\n complianceJobfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Client for compliance operations\n * \n * This client provides methods for interacting with the compliance endpoints\n * of the X API. It handles authentication, request formatting, and response\n * parsing for all compliance related operations.\n * \n * @category compliance\n */\nexport class ComplianceClient {\n private client: Client;\n\n /**\n * Creates a new compliance client instance\n * \n * @param client - The main X API client instance\n */\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Get Compliance Job by ID\n * Retrieves details of a specific Compliance Job by its ID.\n\n\n * @param id The ID of the Compliance Job to retrieve.\n\n\n\n\n * @returns {Promise<GetJobsByIdResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getJobsById(\n id: string,\n options: GetJobsByIdOptions = {}\n ): Promise<GetJobsByIdResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n complianceJobfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/compliance/jobs/{id}';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (complianceJobfields !== undefined) {\n params.append('compliance_job.fields', complianceJobfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetJobsByIdResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Compliance Jobs\n * Retrieves a list of Compliance Jobs filtered by job type and optional status.\n\n\n\n * @param type Type of Compliance Job to list.\n\n\n\n * @returns {Promise<GetJobsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getJobs(\n type: string,\n options: GetJobsOptions = {}\n ): Promise<GetJobsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n status = undefined,\n\n complianceJobfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/compliance/jobs';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (type !== undefined) {\n params.append('type', String(type));\n }\n\n if (status !== undefined) {\n params.append('status', String(status));\n }\n\n if (complianceJobfields !== undefined) {\n params.append('compliance_job.fields', complianceJobfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetJobsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Create Compliance Job\n * Creates a new Compliance Job for the specified job type.\n\n\n\n * @param body Request body\n\n * @returns {Promise<CreateJobsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async createJobs(body: CreateJobsRequest): Promise<CreateJobsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/compliance/jobs';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: JSON.stringify(body || {}),\n\n // No optional parameters, using empty request options\n };\n\n return this.client.request<CreateJobsResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n}\n","/**\n * Models for compliance operations\n */\nimport type * as Schemas from '../schemas.js';\n\n\n\n\n\n/**\n * Response for getJobsById\n * \n * @public\n */\nexport type GetJobsByIdResponse = Schemas.Get2ComplianceJobsIdResponse;\n/**\n * Response for getJobs\n * \n * @public\n */\nexport type GetJobsResponse = Schemas.Get2ComplianceJobsResponse;\n/**\n * Request for createJobs\n * \n * @public\n */\nexport type CreateJobsRequest = Schemas.CreateComplianceJobRequest;\n/**\n * Response for createJobs\n * \n * @public\n */\nexport type CreateJobsResponse = Schemas.CreateComplianceJobResponse;","/**\n * media client for the X API.\n *\n * This module provides a client for interacting with the media endpoints of the X API.\n */\n\nimport { Client, ApiResponse, RequestOptions } from '../client.js';\nimport {\n Paginator,\n PostPaginator,\n UserPaginator,\n EventPaginator,\n} from '../paginator.js';\nimport {\n CreateMetadataRequest,\n CreateMetadataResponse,\n GetByKeysResponse,\n GetAnalyticsResponse,\n CreateSubtitlesRequest,\n CreateSubtitlesResponse,\n DeleteSubtitlesRequest,\n DeleteSubtitlesResponse,\n FinalizeUploadResponse,\n InitializeUploadRequest,\n InitializeUploadResponse,\n AppendUploadRequest,\n AppendUploadResponse,\n GetByKeyResponse,\n GetUploadStatusResponse,\n UploadRequest,\n UploadResponse,\n} from './models.js';\n\n/**\n * Options for createMetadata method\n * \n * @public\n */\nexport interface CreateMetadataOptions {\n /** Request body */\n body?: CreateMetadataRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getByKeys method\n * \n * @public\n */\nexport interface GetByKeysOptions {\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getAnalytics method\n * \n * @public\n */\nexport interface GetAnalyticsOptions {\n /** A comma separated list of MediaAnalytics fields to display. */\n mediaAnalyticsfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for createSubtitles method\n * \n * @public\n */\nexport interface CreateSubtitlesOptions {\n /** Request body */\n body?: CreateSubtitlesRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for deleteSubtitles method\n * \n * @public\n */\nexport interface DeleteSubtitlesOptions {\n /** Request body */\n body?: DeleteSubtitlesRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for initializeUpload method\n * \n * @public\n */\nexport interface InitializeUploadOptions {\n /** Request body */\n body?: InitializeUploadRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for appendUpload method\n * \n * @public\n */\nexport interface AppendUploadOptions {\n /** Request body */\n body?: AppendUploadRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getByKey method\n * \n * @public\n */\nexport interface GetByKeyOptions {\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getUploadStatus method\n * \n * @public\n */\nexport interface GetUploadStatusOptions {\n /** The command for the media upload request. */\n command?: string;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for upload method\n * \n * @public\n */\nexport interface UploadOptions {\n /** Request body */\n body?: UploadRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Client for media operations\n * \n * This client provides methods for interacting with the media endpoints\n * of the X API. It handles authentication, request formatting, and response\n * parsing for all media related operations.\n * \n * @category media\n */\nexport class MediaClient {\n private client: Client;\n\n /**\n * Creates a new media client instance\n * \n * @param client - The main X API client instance\n */\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Create Media metadata\n * Creates metadata for a Media file.\n\n\n\n * @returns {Promise<CreateMetadataResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async createMetadata(\n options: CreateMetadataOptions = {}\n ): Promise<CreateMetadataResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/media/metadata';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<CreateMetadataResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Media by media keys\n * Retrieves details of Media files by their media keys.\n\n\n\n * @param mediaKeys A comma separated list of Media Keys. Up to 100 are allowed in a single request.\n\n\n\n * @returns {Promise<GetByKeysResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getByKeys(\n mediaKeys: Array<any>,\n options: GetByKeysOptions = {}\n ): Promise<GetByKeysResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n mediafields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/media';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (mediaKeys !== undefined) {\n params.append('media_keys', mediaKeys.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetByKeysResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Media analytics\n * Retrieves analytics data for media.\n\n\n\n * @param mediaKeys A comma separated list of Media Keys. Up to 100 are allowed in a single request.\n\n\n\n * @param endTime YYYY-MM-DDTHH:mm:ssZ. The UTC timestamp representing the end of the time range.\n\n\n\n * @param startTime YYYY-MM-DDTHH:mm:ssZ. The UTC timestamp representing the start of the time range.\n\n\n\n * @param granularity The granularity for the search counts results.\n\n\n\n * @returns {Promise<GetAnalyticsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getAnalytics(\n mediaKeys: Array<any>,\n endTime: string,\n startTime: string,\n granularity: string,\n options: GetAnalyticsOptions = {}\n ): Promise<GetAnalyticsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n mediaAnalyticsfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/media/analytics';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (mediaKeys !== undefined) {\n params.append('media_keys', mediaKeys.join(','));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (granularity !== undefined) {\n params.append('granularity', String(granularity));\n }\n\n if (mediaAnalyticsfields !== undefined) {\n params.append('media_analytics.fields', mediaAnalyticsfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetAnalyticsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Create Media subtitles\n * Creates subtitles for a specific Media file.\n\n\n\n * @returns {Promise<CreateSubtitlesResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async createSubtitles(\n options: CreateSubtitlesOptions = {}\n ): Promise<CreateSubtitlesResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/media/subtitles';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<CreateSubtitlesResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Delete Media subtitles\n * Deletes subtitles for a specific Media file.\n\n\n\n * @returns {Promise<DeleteSubtitlesResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async deleteSubtitles(\n options: DeleteSubtitlesOptions = {}\n ): Promise<DeleteSubtitlesResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/media/subtitles';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<DeleteSubtitlesResponse>(\n 'DELETE',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Finalize Media upload\n * Finalizes a Media upload request.\n\n\n * @param id The media id of the targeted media to finalize.\n\n\n\n\n * @returns {Promise<FinalizeUploadResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async finalizeUpload(id: string): Promise<FinalizeUploadResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/media/upload/{id}/finalize';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<FinalizeUploadResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Initialize media upload\n * Initializes a media upload.\n\n\n\n * @returns {Promise<InitializeUploadResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async initializeUpload(\n options: InitializeUploadOptions = {}\n ): Promise<InitializeUploadResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/media/upload/initialize';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<InitializeUploadResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Append Media upload\n * Appends data to a Media upload request.\n\n\n * @param id The media identifier for the media to perform the append operation.\n\n\n\n\n * @returns {Promise<AppendUploadResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async appendUpload(\n id: string,\n options: AppendUploadOptions = {}\n ): Promise<AppendUploadResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/media/upload/{id}/append';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<AppendUploadResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Media by media key\n * Retrieves details of a specific Media file by its media key.\n\n\n * @param mediaKey A single Media Key.\n\n\n\n\n * @returns {Promise<GetByKeyResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getByKey(\n mediaKey: string,\n options: GetByKeyOptions = {}\n ): Promise<GetByKeyResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n mediafields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/media/{media_key}';\n\n path = path.replace('{media_key}', encodeURIComponent(String(mediaKey)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetByKeyResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Media upload status\n * Retrieves the status of a Media upload by its ID.\n\n\n\n * @param mediaId Media id for the requested media upload status.\n\n\n\n * @returns {Promise<GetUploadStatusResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getUploadStatus(\n mediaId: any,\n options: GetUploadStatusOptions = {}\n ): Promise<GetUploadStatusResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n command = undefined,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/media/upload';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (mediaId !== undefined) {\n params.append('media_id', String(mediaId));\n }\n\n if (command !== undefined) {\n params.append('command', String(command));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetUploadStatusResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Upload media\n * Uploads a media file for use in posts or other content.\n\n\n\n * @returns {Promise<UploadResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async upload(options: UploadOptions = {}): Promise<UploadResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/media/upload';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<UploadResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n}\n","/**\n * Models for media operations\n */\nimport type * as Schemas from '../schemas.js';\n\n\n\n\n\n/**\n * Request for createMetadata\n * \n * @public\n */\nexport type CreateMetadataRequest = Schemas.MetadataCreateRequest;\n/**\n * Response for createMetadata\n * \n * @public\n */\nexport type CreateMetadataResponse = Schemas.MetadataCreateResponse;\n/**\n * Response for getByKeys\n * \n * @public\n */\nexport type GetByKeysResponse = Schemas.Get2MediaResponse;\n/**\n * Response for getAnalytics\n * \n * @public\n */\nexport type GetAnalyticsResponse = Schemas.MediaAnalytics;\n/**\n * Request for createSubtitles\n * \n * @public\n */\nexport type CreateSubtitlesRequest = Schemas.SubtitlesCreateRequest;\n/**\n * Response for createSubtitles\n * \n * @public\n */\nexport type CreateSubtitlesResponse = Schemas.SubtitlesCreateResponse;\n/**\n * Request for deleteSubtitles\n * \n * @public\n */\nexport type DeleteSubtitlesRequest = Schemas.SubtitlesDeleteRequest;\n/**\n * Response for deleteSubtitles\n * \n * @public\n */\nexport type DeleteSubtitlesResponse = Schemas.SubtitlesDeleteResponse;\n/**\n * Response for finalizeUpload\n * \n * @public\n */\nexport type FinalizeUploadResponse = Schemas.MediaUploadResponse;\n/**\n * Request for initializeUpload\n * \n * @public\n */\nexport type InitializeUploadRequest = Schemas.MediaUploadConfigRequest;\n/**\n * Response for initializeUpload\n * \n * @public\n */\nexport type InitializeUploadResponse = Schemas.MediaUploadResponse;\n/**\n * Request for appendUpload\n * \n * @public\n */\nexport type AppendUploadRequest = Schemas.MediaUploadAppendRequest;\n/**\n * Response for appendUpload\n * \n * @public\n */\nexport type AppendUploadResponse = Schemas.MediaUploadAppendResponse;\n/**\n * Response for getByKey\n * \n * @public\n */\nexport type GetByKeyResponse = Schemas.Get2MediaMediaKeyResponse;\n/**\n * Response for getUploadStatus\n * \n * @public\n */\nexport type GetUploadStatusResponse = Schemas.MediaUploadResponse;\n/**\n * Request for upload\n * \n * @public\n */\nexport type UploadRequest = Schemas.MediaUploadRequestOneShot;\n/**\n * Response for upload\n * \n * @public\n */\nexport type UploadResponse = Schemas.MediaUploadResponse;","/**\n * direct messages client for the X API.\n *\n * This module provides a client for interacting with the direct messages endpoints of the X API.\n */\n\nimport { Client, ApiResponse, RequestOptions } from '../client.js';\nimport {\n Paginator,\n PostPaginator,\n UserPaginator,\n EventPaginator,\n} from '../paginator.js';\nimport {\n CreateByConversationIdRequest,\n CreateByConversationIdResponse,\n CreateConversationRequest,\n CreateConversationResponse,\n GetEventsResponse,\n GetEventsByIdResponse,\n DeleteEventsResponse,\n GetEventsByParticipantIdResponse,\n CreateByParticipantIdRequest,\n CreateByParticipantIdResponse,\n GetEventsByConversationIdResponse,\n} from './models.js';\n\n/**\n * Options for createByConversationId method\n * \n * @public\n */\nexport interface CreateByConversationIdOptions {\n /** Request body */\n body?: CreateByConversationIdRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for createConversation method\n * \n * @public\n */\nexport interface CreateConversationOptions {\n /** Request body */\n body?: CreateConversationRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getEvents method\n * \n * @public\n */\nexport interface GetEventsOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get a specified 'page' of results. */\n paginationToken?: any;\n\n /** The set of event_types to include in the results. */\n eventTypes?: Array<any>;\n\n /** A comma separated list of DmEvent fields to display. */\n dmEventfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getEventsById method\n * \n * @public\n */\nexport interface GetEventsByIdOptions {\n /** A comma separated list of DmEvent fields to display. */\n dmEventfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getEventsByParticipantId method\n * \n * @public\n */\nexport interface GetEventsByParticipantIdOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get a specified 'page' of results. */\n paginationToken?: any;\n\n /** The set of event_types to include in the results. */\n eventTypes?: Array<any>;\n\n /** A comma separated list of DmEvent fields to display. */\n dmEventfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for createByParticipantId method\n * \n * @public\n */\nexport interface CreateByParticipantIdOptions {\n /** Request body */\n body?: CreateByParticipantIdRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getEventsByConversationId method\n * \n * @public\n */\nexport interface GetEventsByConversationIdOptions {\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This parameter is used to get a specified 'page' of results. */\n paginationToken?: any;\n\n /** The set of event_types to include in the results. */\n eventTypes?: Array<any>;\n\n /** A comma separated list of DmEvent fields to display. */\n dmEventfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Client for direct messages operations\n * \n * This client provides methods for interacting with the direct messages endpoints\n * of the X API. It handles authentication, request formatting, and response\n * parsing for all direct messages related operations.\n * \n * @category direct messages\n */\nexport class DirectMessagesClient {\n private client: Client;\n\n /**\n * Creates a new direct messages client instance\n * \n * @param client - The main X API client instance\n */\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Create DM message by conversation ID\n * Sends a new direct message to a specific conversation by its ID.\n\n\n * @param dmConversationId The DM Conversation ID.\n\n\n\n\n * @returns {Promise<CreateByConversationIdResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async createByConversationId(\n dmConversationId: string,\n options: CreateByConversationIdOptions = {}\n ): Promise<CreateByConversationIdResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/dm_conversations/{dm_conversation_id}/messages';\n\n path = path.replace(\n '{dm_conversation_id}',\n encodeURIComponent(String(dmConversationId))\n );\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<CreateByConversationIdResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Create DM conversation\n * Initiates a new direct message conversation with specified participants.\n\n\n\n * @returns {Promise<CreateConversationResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async createConversation(\n options: CreateConversationOptions = {}\n ): Promise<CreateConversationResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/dm_conversations';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<CreateConversationResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get DM events\n * Retrieves a list of recent direct message events across all conversations.\n\n\n\n * @returns {Promise<GetEventsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getEvents(options: GetEventsOptions = {}): Promise<GetEventsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n eventTypes = [],\n\n dmEventfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n userfields = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/dm_events';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (eventTypes !== undefined) {\n params.append('event_types', eventTypes.join(','));\n }\n\n if (dmEventfields !== undefined) {\n params.append('dm_event.fields', dmEventfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetEventsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get DM event by ID\n * Retrieves details of a specific direct message event by its ID.\n\n\n * @param eventId dm event id.\n\n\n\n\n * @returns {Promise<GetEventsByIdResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getEventsById(\n eventId: string,\n options: GetEventsByIdOptions = {}\n ): Promise<GetEventsByIdResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n dmEventfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n userfields = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/dm_events/{event_id}';\n\n path = path.replace('{event_id}', encodeURIComponent(String(eventId)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (dmEventfields !== undefined) {\n params.append('dm_event.fields', dmEventfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetEventsByIdResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Delete DM event\n * Deletes a specific direct message event by its ID, if owned by the authenticated user.\n\n\n * @param eventId The ID of the direct-message event to delete.\n\n\n\n\n * @returns {Promise<DeleteEventsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async deleteEvents(eventId: string): Promise<DeleteEventsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/dm_events/{event_id}';\n\n path = path.replace('{event_id}', encodeURIComponent(String(eventId)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<DeleteEventsResponse>(\n 'DELETE',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get DM events for a DM conversation\n * Retrieves direct message events for a specific conversation.\n\n\n * @param participantId The ID of the participant user for the One to One DM conversation.\n\n\n\n\n * @returns {Promise<GetEventsByParticipantIdResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getEventsByParticipantId(\n participantId: string,\n options: GetEventsByParticipantIdOptions = {}\n ): Promise<GetEventsByParticipantIdResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n eventTypes = [],\n\n dmEventfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n userfields = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/dm_conversations/with/{participant_id}/dm_events';\n\n path = path.replace(\n '{participant_id}',\n encodeURIComponent(String(participantId))\n );\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (eventTypes !== undefined) {\n params.append('event_types', eventTypes.join(','));\n }\n\n if (dmEventfields !== undefined) {\n params.append('dm_event.fields', dmEventfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetEventsByParticipantIdResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Create DM message by participant ID\n * Sends a new direct message to a specific participant by their ID.\n\n\n * @param participantId The ID of the recipient user that will receive the DM.\n\n\n\n\n * @returns {Promise<CreateByParticipantIdResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async createByParticipantId(\n participantId: string,\n options: CreateByParticipantIdOptions = {}\n ): Promise<CreateByParticipantIdResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/dm_conversations/with/{participant_id}/messages';\n\n path = path.replace(\n '{participant_id}',\n encodeURIComponent(String(participantId))\n );\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<CreateByParticipantIdResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get DM events for a DM conversation\n * Retrieves direct message events for a specific conversation.\n\n\n * @param id The DM conversation ID.\n\n\n\n\n * @returns {Promise<GetEventsByConversationIdResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getEventsByConversationId(\n id: string,\n options: GetEventsByConversationIdOptions = {}\n ): Promise<GetEventsByConversationIdResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n paginationToken = undefined,\n\n eventTypes = [],\n\n dmEventfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n userfields = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/dm_conversations/{id}/dm_events';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (eventTypes !== undefined) {\n params.append('event_types', eventTypes.join(','));\n }\n\n if (dmEventfields !== undefined) {\n params.append('dm_event.fields', dmEventfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetEventsByConversationIdResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n}\n","/**\n * Models for direct messages operations\n */\nimport type * as Schemas from '../schemas.js';\n\n\n\n\n\n/**\n * Request for createByConversationId\n * \n * @public\n */\nexport type CreateByConversationIdRequest = Schemas.CreateMessageRequest;\n/**\n * Response for createByConversationId\n * \n * @public\n */\nexport type CreateByConversationIdResponse = Schemas.CreateDmEventResponse;\n/**\n * Request for createConversation\n * \n * @public\n */\nexport type CreateConversationRequest = Schemas.CreateDmConversationRequest;\n/**\n * Response for createConversation\n * \n * @public\n */\nexport type CreateConversationResponse = Schemas.CreateDmEventResponse;\n/**\n * Response for getEvents\n * \n * @public\n */\nexport type GetEventsResponse = Schemas.Get2DmEventsResponse;\n/**\n * Response for getEventsById\n * \n * @public\n */\nexport type GetEventsByIdResponse = Schemas.Get2DmEventsEventIdResponse;\n/**\n * Response for deleteEvents\n * \n * @public\n */\nexport type DeleteEventsResponse = Schemas.DeleteDmResponse;\n/**\n * Response for getEventsByParticipantId\n * \n * @public\n */\nexport type GetEventsByParticipantIdResponse = Schemas.Get2DmConversationsWithParticipantIdDmEventsResponse;\n/**\n * Request for createByParticipantId\n * \n * @public\n */\nexport type CreateByParticipantIdRequest = Schemas.CreateMessageRequest;\n/**\n * Response for createByParticipantId\n * \n * @public\n */\nexport type CreateByParticipantIdResponse = Schemas.CreateDmEventResponse;\n/**\n * Response for getEventsByConversationId\n * \n * @public\n */\nexport type GetEventsByConversationIdResponse = Schemas.Get2DmConversationsIdDmEventsResponse;","/**\n * account activity client for the X API.\n *\n * This module provides a client for interacting with the account activity endpoints of the X API.\n */\n\nimport { Client, ApiResponse, RequestOptions } from '../client.js';\nimport {\n Paginator,\n PostPaginator,\n UserPaginator,\n EventPaginator,\n} from '../paginator.js';\nimport {\n GetSubscriptionsResponse,\n DeleteSubscriptionResponse,\n CreateReplayJobResponse,\n GetSubscriptionCountResponse,\n ValidateSubscriptionResponse,\n CreateSubscriptionRequest,\n CreateSubscriptionResponse,\n} from './models.js';\n\n/**\n * Options for createSubscription method\n * \n * @public\n */\nexport interface CreateSubscriptionOptions {\n /** Request body */\n body?: CreateSubscriptionRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Client for account activity operations\n * \n * This client provides methods for interacting with the account activity endpoints\n * of the X API. It handles authentication, request formatting, and response\n * parsing for all account activity related operations.\n * \n * @category account activity\n */\nexport class AccountActivityClient {\n private client: Client;\n\n /**\n * Creates a new account activity client instance\n * \n * @param client - The main X API client instance\n */\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Get subscriptions\n * Retrieves a list of all active subscriptions for a given webhook.\n\n\n * @param webhookId The webhook ID to pull subscriptions for.\n\n\n\n\n * @returns {Promise<GetSubscriptionsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getSubscriptions(webhookId: string): Promise<GetSubscriptionsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path =\n '/2/account_activity/webhooks/{webhook_id}/subscriptions/all/list';\n\n path = path.replace('{webhook_id}', encodeURIComponent(String(webhookId)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<GetSubscriptionsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Delete subscription\n * Deletes an Account Activity subscription for the given webhook and user ID.\n\n\n * @param webhookId The webhook ID to check subscription against.\n\n\n\n * @param userId User ID to unsubscribe from.\n\n\n\n\n * @returns {Promise<DeleteSubscriptionResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async deleteSubscription(\n webhookId: string,\n userId: string\n ): Promise<DeleteSubscriptionResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path =\n '/2/account_activity/webhooks/{webhook_id}/subscriptions/{user_id}/all';\n\n path = path.replace('{webhook_id}', encodeURIComponent(String(webhookId)));\n\n path = path.replace('{user_id}', encodeURIComponent(String(userId)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<DeleteSubscriptionResponse>(\n 'DELETE',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Create replay job\n * Creates a replay job to retrieve activities from up to the past 5 days for all subscriptions associated with a given webhook.\n\n\n * @param webhookId The unique identifier for the webhook configuration.\n\n\n\n\n * @param fromDate The oldest (starting) UTC timestamp (inclusive) from which events will be provided, in `yyyymmddhhmm` format.\n\n\n\n * @param toDate The latest (ending) UTC timestamp (exclusive) up to which events will be provided, in `yyyymmddhhmm` format.\n\n\n\n * @returns {Promise<CreateReplayJobResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async createReplayJob(\n webhookId: string,\n fromDate: string,\n toDate: string\n ): Promise<CreateReplayJobResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path =\n '/2/account_activity/replay/webhooks/{webhook_id}/subscriptions/all';\n\n path = path.replace('{webhook_id}', encodeURIComponent(String(webhookId)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (fromDate !== undefined) {\n params.append('from_date', String(fromDate));\n }\n\n if (toDate !== undefined) {\n params.append('to_date', String(toDate));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<CreateReplayJobResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get subscription count\n * Retrieves a count of currently active Account Activity subscriptions.\n\n\n\n * @returns {Promise<GetSubscriptionCountResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getSubscriptionCount(): Promise<GetSubscriptionCountResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/account_activity/subscriptions/count';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<GetSubscriptionCountResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Validate subscription\n * Checks a user’s Account Activity subscription for a given webhook.\n\n\n * @param webhookId The webhook ID to check subscription against.\n\n\n\n\n * @returns {Promise<ValidateSubscriptionResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async validateSubscription(\n webhookId: string\n ): Promise<ValidateSubscriptionResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/account_activity/webhooks/{webhook_id}/subscriptions/all';\n\n path = path.replace('{webhook_id}', encodeURIComponent(String(webhookId)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<ValidateSubscriptionResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Create subscription\n * Creates an Account Activity subscription for the user and the given webhook.\n\n\n * @param webhookId The webhook ID to check subscription against.\n\n\n\n\n * @returns {Promise<CreateSubscriptionResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async createSubscription(\n webhookId: string,\n options: CreateSubscriptionOptions = {}\n ): Promise<CreateSubscriptionResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/account_activity/webhooks/{webhook_id}/subscriptions/all';\n\n path = path.replace('{webhook_id}', encodeURIComponent(String(webhookId)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<CreateSubscriptionResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n}\n","/**\n * Models for account activity operations\n */\nimport type * as Schemas from '../schemas.js';\n\n\n\n\n\n/**\n * Response for getSubscriptions\n * \n * @public\n */\nexport type GetSubscriptionsResponse = Schemas.SubscriptionsListGetResponse;\n/**\n * Response for deleteSubscription\n * \n * @public\n */\nexport type DeleteSubscriptionResponse = Schemas.SubscriptionsDeleteResponse;\n/**\n * Response for createReplayJob\n * \n * @public\n */\nexport type CreateReplayJobResponse = Schemas.ReplayJobCreateResponse;\n/**\n * Response for getSubscriptionCount\n * \n * @public\n */\nexport type GetSubscriptionCountResponse = Schemas.SubscriptionsCountGetResponse;\n/**\n * Response for validateSubscription\n * \n * @public\n */\nexport type ValidateSubscriptionResponse = Schemas.SubscriptionsGetResponse;\n/**\n * Request for createSubscription\n * \n * @public\n */\nexport type CreateSubscriptionRequest = Schemas.SubscriptionsCreateRequest;\n/**\n * Response for createSubscription\n * \n * @public\n */\nexport type CreateSubscriptionResponse = Schemas.SubscriptionsCreateResponse;","/**\n * spaces client for the X API.\n *\n * This module provides a client for interacting with the spaces endpoints of the X API.\n */\n\nimport { Client, ApiResponse, RequestOptions } from '../client.js';\nimport {\n Paginator,\n PostPaginator,\n UserPaginator,\n EventPaginator,\n} from '../paginator.js';\nimport {\n GetByIdResponse,\n GetByIdsResponse,\n GetPostsResponse,\n GetByCreatorIdsResponse,\n SearchResponse,\n GetBuyersResponse,\n} from './models.js';\n\n/**\n * Options for getById method\n * \n * @public\n */\nexport interface GetByIdOptions {\n /** A comma separated list of Space fields to display. */\n spacefields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Topic fields to display. */\n topicfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getByIds method\n * \n * @public\n */\nexport interface GetByIdsOptions {\n /** A comma separated list of Space fields to display. */\n spacefields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Topic fields to display. */\n topicfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getPosts method\n * \n * @public\n */\nexport interface GetPostsOptions {\n /** The number of Posts to fetch from the provided space. If not provided, the value will default to the maximum of 100. */\n maxResults?: number;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getByCreatorIds method\n * \n * @public\n */\nexport interface GetByCreatorIdsOptions {\n /** A comma separated list of Space fields to display. */\n spacefields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Topic fields to display. */\n topicfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for search method\n * \n * @public\n */\nexport interface SearchOptions {\n /** The state of Spaces to search for. */\n state?: string;\n\n /** The number of results to return. */\n maxResults?: number;\n\n /** A comma separated list of Space fields to display. */\n spacefields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Topic fields to display. */\n topicfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for getBuyers method\n * \n * @public\n */\nexport interface GetBuyersOptions {\n /** This parameter is used to get a specified 'page' of results. */\n paginationToken?: any;\n\n /** The maximum number of results. */\n maxResults?: number;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Client for spaces operations\n * \n * This client provides methods for interacting with the spaces endpoints\n * of the X API. It handles authentication, request formatting, and response\n * parsing for all spaces related operations.\n * \n * @category spaces\n */\nexport class SpacesClient {\n private client: Client;\n\n /**\n * Creates a new spaces client instance\n * \n * @param client - The main X API client instance\n */\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Get space by ID\n * Retrieves details of a specific space by its ID.\n\n\n * @param id The ID of the Space to be retrieved.\n\n\n\n\n * @returns {Promise<GetByIdResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getById(\n id: string,\n options: GetByIdOptions = {}\n ): Promise<GetByIdResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n spacefields = [],\n\n expansions = [],\n\n userfields = [],\n\n topicfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/spaces/{id}';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (spacefields !== undefined) {\n params.append('space.fields', spacefields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (topicfields !== undefined) {\n params.append('topic.fields', topicfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetByIdResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Spaces by IDs\n * Retrieves details of multiple Spaces by their IDs.\n\n\n\n * @param ids The list of Space IDs to return.\n\n\n\n * @returns {Promise<GetByIdsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getByIds(\n ids: Array<any>,\n options: GetByIdsOptions = {}\n ): Promise<GetByIdsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n spacefields = [],\n\n expansions = [],\n\n userfields = [],\n\n topicfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/spaces';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (ids !== undefined) {\n params.append('ids', ids.join(','));\n }\n\n if (spacefields !== undefined) {\n params.append('space.fields', spacefields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (topicfields !== undefined) {\n params.append('topic.fields', topicfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetByIdsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Space Posts\n * Retrieves a list of Posts shared in a specific Space by its ID.\n\n\n * @param id The ID of the Space to be retrieved.\n\n\n\n\n * @returns {Promise<GetPostsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getPosts(\n id: string,\n options: GetPostsOptions = {}\n ): Promise<GetPostsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n maxResults = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/spaces/{id}/tweets';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetPostsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Spaces by creator IDs\n * Retrieves details of Spaces created by specified User IDs.\n\n\n\n * @param userIds The IDs of Users to search through.\n\n\n\n * @returns {Promise<GetByCreatorIdsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getByCreatorIds(\n userIds: Array<any>,\n options: GetByCreatorIdsOptions = {}\n ): Promise<GetByCreatorIdsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n spacefields = [],\n\n expansions = [],\n\n userfields = [],\n\n topicfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/spaces/by/creator_ids';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (userIds !== undefined) {\n params.append('user_ids', userIds.join(','));\n }\n\n if (spacefields !== undefined) {\n params.append('space.fields', spacefields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (topicfields !== undefined) {\n params.append('topic.fields', topicfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetByCreatorIdsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Search Spaces\n * Retrieves a list of Spaces matching the specified search query.\n\n\n\n * @param query The search query.\n\n\n\n * @returns {Promise<SearchResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async search(\n query: string,\n options: SearchOptions = {}\n ): Promise<SearchResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n state = undefined,\n\n maxResults = undefined,\n\n spacefields = [],\n\n expansions = [],\n\n userfields = [],\n\n topicfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/spaces/search';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (query !== undefined) {\n params.append('query', String(query));\n }\n\n if (state !== undefined) {\n params.append('state', String(state));\n }\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (spacefields !== undefined) {\n params.append('space.fields', spacefields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (topicfields !== undefined) {\n params.append('topic.fields', topicfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<SearchResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get Space ticket buyers\n * Retrieves a list of Users who purchased tickets to a specific Space by its ID.\n\n\n * @param id The ID of the Space to be retrieved.\n\n\n\n\n * @returns {Promise<GetBuyersResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getBuyers(\n id: string,\n options: GetBuyersOptions = {}\n ): Promise<GetBuyersResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n paginationToken = undefined,\n\n maxResults = undefined,\n\n userfields = [],\n\n expansions = [],\n\n tweetfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/spaces/{id}/buyers';\n\n path = path.replace('{id}', encodeURIComponent(String(id)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetBuyersResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n}\n","/**\n * Models for spaces operations\n */\nimport type * as Schemas from '../schemas.js';\n\n\n\n\n\n/**\n * Response for getById\n * \n * @public\n */\nexport type GetByIdResponse = Schemas.Get2SpacesIdResponse;\n/**\n * Response for getByIds\n * \n * @public\n */\nexport type GetByIdsResponse = Schemas.Get2SpacesResponse;\n/**\n * Response for getPosts\n * \n * @public\n */\nexport type GetPostsResponse = Schemas.Get2SpacesIdTweetsResponse;\n/**\n * Response for getByCreatorIds\n * \n * @public\n */\nexport type GetByCreatorIdsResponse = Schemas.Get2SpacesByCreatorIdsResponse;\n/**\n * Response for search\n * \n * @public\n */\nexport type SearchResponse = Schemas.Get2SpacesSearchResponse;\n/**\n * Response for getBuyers\n * \n * @public\n */\nexport type GetBuyersResponse = Schemas.Get2SpacesIdBuyersResponse;","/**\n * Event-driven streaming utilities for the X API.\n * \n * This module provides event-driven streaming interfaces that are more user-friendly\n * than manual ReadableStream management.\n */\n\n// Event types for the stream (using string literals for simplicity)\n// Based on actual Twitter API behavior from documentation\nexport const StreamEvent = {\n Data: 'data', // When JSON data arrives\n KeepAlive: 'keepAlive', // 20-second heartbeat (newline character)\n Error: 'error', // HTTP errors, ConnectionException, operational-disconnect\n Close: 'close', // When stream ends\n};\n\n// Event data types\nexport interface StreamDataEvent {\n data: any;\n includes?: any;\n matching_rules?: any[];\n}\n\nexport interface StreamErrorEvent {\n error: Error;\n // Additional error details from the API response\n code?: string;\n status?: number;\n}\n\n/**\n * Event-driven stream class for handling streaming data from the X API.\n * \n * This class provides an event-driven interface for working with streaming endpoints,\n * allowing you to listen to 'data', 'keepAlive', 'error', and 'close' events.\n * \n * @public\n */\nexport class EventDrivenStream {\n private webStream: ReadableStream<Uint8Array> | null = null;\n private reader: ReadableStreamDefaultReader<Uint8Array> | null = null;\n private decoder: TextDecoder;\n private isConnected: boolean = false;\n private isClosed: boolean = false;\n private buffer: string = '';\n private eventListeners: Map<string, Function[]> = new Map();\n private autoReconnect: boolean = false;\n private reconnectAttempts: number = 0;\n private maxReconnectAttempts: number = 5;\n private reconnectDelay: number = 1000;\n\n constructor() {\n this.decoder = new TextDecoder();\n this.setupEventListeners();\n }\n\n /**\n * Initialize the stream with a Web ReadableStream\n */\n async connect(webStream: ReadableStream<Uint8Array>): Promise<void> {\n if (this.isConnected) {\n throw new Error('Stream is already connected');\n }\n\n this.webStream = webStream;\n this.isConnected = true;\n this.isClosed = false;\n this.reconnectAttempts = 0;\n\n this.emit(StreamEvent.Data, { message: 'Stream connected' });\n this.startReading(); // Don't await this - it runs in the background\n }\n\n /**\n * Start reading from the stream\n */\n private async startReading(): Promise<void> {\n if (!this.webStream || !this.isConnected) {\n return;\n }\n\n this.reader = this.webStream.getReader();\n\n try {\n while (this.isConnected && !this.isClosed) {\n const { done, value } = await this.reader.read();\n\n if (done) {\n this.handleConnectionClosed();\n break;\n }\n\n if (value) {\n await this.processChunk(value);\n }\n }\n } catch (error) {\n this.handleConnectionError(error as Error);\n } finally {\n this.cleanup();\n }\n }\n\n /**\n * Process incoming data chunks\n */\n private async processChunk(value: Uint8Array): Promise<void> {\n const chunk = this.decoder.decode(value, { stream: true });\n this.buffer += chunk;\n\n // Process complete lines (ending with newline)\n let boundary;\n while ((boundary = this.buffer.indexOf('\\n')) !== -1) {\n const line = this.buffer.substring(0, boundary);\n this.buffer = this.buffer.substring(boundary + 1);\n\n if (line.trim()) {\n try {\n const data = JSON.parse(line);\n\n // Check if it's a keep-alive signal (20-second heartbeat)\n if (this.isKeepAlive(data)) {\n this.emit(StreamEvent.KeepAlive, { data });\n continue;\n }\n\n // Emit data event for actual content\n this.emit(StreamEvent.Data, data);\n } catch (parseError) {\n // Skip invalid JSON lines - these are usually incomplete chunks\n console.warn('Skipping invalid JSON:', line.substring(0, 100));\n }\n }\n }\n }\n\n /**\n * Check if data is a keep-alive signal (20-second heartbeat)\n * Twitter sends newline characters every 20 seconds to prevent timeouts\n */\n private isKeepAlive(data: any): boolean {\n // Twitter sends empty objects or just newline characters as keep-alive\n return !data.data && !data.includes && !data.matching_rules && !data.errors;\n }\n\n /**\n * Handle connection errors\n */\n private handleConnectionError(error: Error): void {\n this.isConnected = false;\n\n // Emit the error as-is (API returns the actual error details)\n this.emit(StreamEvent.Error, { error });\n\n if (\n this.autoReconnect &&\n this.reconnectAttempts < this.maxReconnectAttempts\n ) {\n this.attemptReconnect();\n }\n }\n\n /**\n * Handle connection closed\n */\n private handleConnectionClosed(): void {\n this.isConnected = false;\n this.emit(StreamEvent.Close, { message: 'Connection closed' });\n }\n\n /**\n * Attempt to reconnect\n */\n private async attemptReconnect(): Promise<void> {\n this.reconnectAttempts++;\n this.emit(StreamEvent.Data, {\n message: `Reconnect attempt ${this.reconnectAttempts}/${this\n .maxReconnectAttempts}`,\n });\n\n // Wait before reconnecting\n await new Promise(resolve =>\n setTimeout(resolve, this.reconnectDelay * this.reconnectAttempts)\n );\n\n try {\n // This would need to be implemented based on how you get a new stream\n // For now, we'll just emit the events\n this.emit(StreamEvent.Error, {\n error: new Error('Reconnect not implemented in this example'),\n });\n } catch (error) {\n this.emit(StreamEvent.Error, { error: error as Error });\n }\n }\n\n /**\n * Clean up resources\n */\n private cleanup(): void {\n if (this.reader) {\n try {\n // Try to release the lock - it will throw if already released\n this.reader.releaseLock();\n } catch (error) {\n // Ignore errors when releasing the lock (already released)\n console.debug('Reader lock already released or error:', error);\n }\n this.reader = null;\n }\n this.buffer = '';\n }\n\n /**\n * Close the stream\n */\n close(): void {\n this.isClosed = true;\n this.isConnected = false;\n this.cleanup();\n this.emit(StreamEvent.Close, { message: 'Stream closed by user' });\n }\n\n /**\n * Add event listener\n */\n on(event: string, listener: Function): this {\n if (!this.eventListeners.has(event)) {\n this.eventListeners.set(event, []);\n }\n this.eventListeners.get(event)!.push(listener);\n return this;\n }\n\n /**\n * Remove event listener\n */\n off(event: string, listener: Function): this {\n const listeners = this.eventListeners.get(event);\n if (listeners) {\n const index = listeners.indexOf(listener);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n }\n return this;\n }\n\n /**\n * Emit event to listeners\n */\n private emit(event: string, data: any): void {\n const listeners = this.eventListeners.get(event);\n if (listeners) {\n listeners.forEach(listener => {\n try {\n listener(data);\n } catch (error) {\n console.error(`Error in ${event} listener:`, error);\n }\n });\n }\n }\n\n /**\n * Setup default event listeners\n */\n private setupEventListeners(): void {\n // Default error handling\n this.on(StreamEvent.Error, (eventData: StreamErrorEvent) => {\n console.error('Stream error:', eventData.error);\n });\n }\n\n /**\n * Enable/disable auto-reconnect\n */\n set autoReconnectEnabled(enabled: boolean) {\n this.autoReconnect = enabled;\n }\n\n get autoReconnectEnabled(): boolean {\n return this.autoReconnect;\n }\n\n /**\n * Set max reconnect attempts\n */\n set maxReconnectAttemptsCount(count: number) {\n this.maxReconnectAttempts = count;\n }\n\n get maxReconnectAttemptsCount(): number {\n return this.maxReconnectAttempts;\n }\n\n /**\n * Async iterator for tweets\n */\n async *[Symbol.asyncIterator](): AsyncGenerator<\n StreamDataEvent,\n void,\n unknown\n > {\n const dataQueue: StreamDataEvent[] = [];\n let isComplete = false;\n let hasError = false;\n let error: Error | null = null;\n\n // Set up listeners\n const dataListener = (eventData: any) => {\n dataQueue.push(eventData);\n };\n\n const errorListener = (eventData: StreamErrorEvent) => {\n hasError = true;\n error = eventData.error;\n };\n\n const closeListener = () => {\n isComplete = true;\n };\n\n this.on(StreamEvent.Data, dataListener);\n this.on(StreamEvent.Error, errorListener);\n this.on(StreamEvent.Close, closeListener);\n\n try {\n while (!isComplete && !hasError) {\n if (dataQueue.length > 0) {\n yield dataQueue.shift()!;\n } else {\n // Wait a bit for more data\n await new Promise(resolve => setTimeout(resolve, 10));\n }\n }\n\n if (hasError && error) {\n throw error;\n }\n } finally {\n // Clean up listeners\n this.off(StreamEvent.Data, dataListener);\n this.off(StreamEvent.Error, errorListener);\n this.off(StreamEvent.Close, closeListener);\n }\n }\n}\n","/**\n * Stream client for the X API.\n *\n * This module provides a client for interacting with the streaming endpoints of the X API.\n */\n\nimport { Client, ApiResponse, RequestOptions } from '../client.js';\nimport { EventDrivenStream, StreamEvent } from './event_driven_stream.js';\nimport {\n PostsComplianceResponse,\n LikesComplianceResponse,\n LikesFirehoseResponse,\n PostsFirehoseEnResponse,\n PostsFirehoseJaResponse,\n PostsSample10Response,\n GetRulesResponse,\n UpdateRulesResponse,\n UsersComplianceResponse,\n PostsFirehosePtResponse,\n PostsSampleResponse,\n LabelsComplianceResponse,\n PostsFirehoseKoResponse,\n LikesSample10Response,\n GetRuleCountsResponse,\n PostsResponse,\n PostsFirehoseResponse,\n} from './models.js';\n\n/**\n * Options for postsCompliance method\n * \n * @public\n */\nexport interface PostsComplianceStreamingOptions {\n /** The number of minutes of backfill requested. */\n backfillMinutes?: number;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The earliest UTC timestamp from which the Post Compliance events will be provided. */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The latest UTC timestamp to which the Post Compliance events will be provided. */\n endTime?: string;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n /** Additional headers */\n headers?: Record<string, string>;\n /** AbortSignal for cancelling the request */\n signal?: AbortSignal;\n}\n/**\n * Options for likesCompliance method\n * \n * @public\n */\nexport interface LikesComplianceStreamingOptions {\n /** The number of minutes of backfill requested. */\n backfillMinutes?: number;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The earliest UTC timestamp from which the Likes Compliance events will be provided. */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The latest UTC timestamp from which the Likes Compliance events will be provided. */\n endTime?: string;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n /** Additional headers */\n headers?: Record<string, string>;\n /** AbortSignal for cancelling the request */\n signal?: AbortSignal;\n}\n/**\n * Options for likesFirehose method\n * \n * @public\n */\nexport interface LikesFirehoseStreamingOptions {\n /** The number of minutes of backfill requested. */\n backfillMinutes?: number;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The earliest UTC timestamp to which the Likes will be provided. */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The latest UTC timestamp to which the Posts will be provided. */\n endTime?: string;\n\n /** A comma separated list of LikeWithTweetAuthor fields to display. */\n likeWithTweetAuthorfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n /** Additional headers */\n headers?: Record<string, string>;\n /** AbortSignal for cancelling the request */\n signal?: AbortSignal;\n}\n/**\n * Options for postsFirehoseEn method\n * \n * @public\n */\nexport interface PostsFirehoseEnStreamingOptions {\n /** The number of minutes of backfill requested. */\n backfillMinutes?: number;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The earliest UTC timestamp to which the Posts will be provided. */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The latest UTC timestamp to which the Posts will be provided. */\n endTime?: string;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n /** Additional headers */\n headers?: Record<string, string>;\n /** AbortSignal for cancelling the request */\n signal?: AbortSignal;\n}\n/**\n * Options for postsFirehoseJa method\n * \n * @public\n */\nexport interface PostsFirehoseJaStreamingOptions {\n /** The number of minutes of backfill requested. */\n backfillMinutes?: number;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The earliest UTC timestamp to which the Posts will be provided. */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The latest UTC timestamp to which the Posts will be provided. */\n endTime?: string;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n /** Additional headers */\n headers?: Record<string, string>;\n /** AbortSignal for cancelling the request */\n signal?: AbortSignal;\n}\n/**\n * Options for postsSample10 method\n * \n * @public\n */\nexport interface PostsSample10StreamingOptions {\n /** The number of minutes of backfill requested. */\n backfillMinutes?: number;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The earliest UTC timestamp to which the Posts will be provided. */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The latest UTC timestamp to which the Posts will be provided. */\n endTime?: string;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n /** Additional headers */\n headers?: Record<string, string>;\n /** AbortSignal for cancelling the request */\n signal?: AbortSignal;\n}\n/**\n * Options for getRules method\n * \n * @public\n */\nexport interface GetRulesStreamingOptions {\n /** A comma-separated list of Rule IDs. */\n ids?: Array<any>;\n\n /** The maximum number of results. */\n maxResults?: number;\n\n /** This value is populated by passing the 'next_token' returned in a request to paginate through results. */\n paginationToken?: string;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n /** Additional headers */\n headers?: Record<string, string>;\n /** AbortSignal for cancelling the request */\n signal?: AbortSignal;\n}\n/**\n * Options for updateRules method\n * \n * @public\n */\nexport interface UpdateRulesStreamingOptions {\n /** Dry Run can be used with both the add and delete action, with the expected result given, but without actually taking any action in the system (meaning the end state will always be as it was when the request was submitted). This is particularly useful to validate rule changes. */\n dryRun?: boolean;\n\n /** Delete All can be used to delete all of the rules associated this client app, it should be specified with no other parameters. Once deleted, rules cannot be recovered. */\n deleteAll?: boolean;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n /** Additional headers */\n headers?: Record<string, string>;\n /** AbortSignal for cancelling the request */\n signal?: AbortSignal;\n}\n/**\n * Options for usersCompliance method\n * \n * @public\n */\nexport interface UsersComplianceStreamingOptions {\n /** The number of minutes of backfill requested. */\n backfillMinutes?: number;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The earliest UTC timestamp from which the User Compliance events will be provided. */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The latest UTC timestamp from which the User Compliance events will be provided. */\n endTime?: string;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n /** Additional headers */\n headers?: Record<string, string>;\n /** AbortSignal for cancelling the request */\n signal?: AbortSignal;\n}\n/**\n * Options for postsFirehosePt method\n * \n * @public\n */\nexport interface PostsFirehosePtStreamingOptions {\n /** The number of minutes of backfill requested. */\n backfillMinutes?: number;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The earliest UTC timestamp to which the Posts will be provided. */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The latest UTC timestamp to which the Posts will be provided. */\n endTime?: string;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n /** Additional headers */\n headers?: Record<string, string>;\n /** AbortSignal for cancelling the request */\n signal?: AbortSignal;\n}\n/**\n * Options for postsSample method\n * \n * @public\n */\nexport interface PostsSampleStreamingOptions {\n /** The number of minutes of backfill requested. */\n backfillMinutes?: number;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n /** Additional headers */\n headers?: Record<string, string>;\n /** AbortSignal for cancelling the request */\n signal?: AbortSignal;\n}\n/**\n * Options for labelsCompliance method\n * \n * @public\n */\nexport interface LabelsComplianceStreamingOptions {\n /** The number of minutes of backfill requested. */\n backfillMinutes?: number;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The earliest UTC timestamp from which the Post labels will be provided. */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The latest UTC timestamp from which the Post labels will be provided. */\n endTime?: string;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n /** Additional headers */\n headers?: Record<string, string>;\n /** AbortSignal for cancelling the request */\n signal?: AbortSignal;\n}\n/**\n * Options for postsFirehoseKo method\n * \n * @public\n */\nexport interface PostsFirehoseKoStreamingOptions {\n /** The number of minutes of backfill requested. */\n backfillMinutes?: number;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The earliest UTC timestamp to which the Posts will be provided. */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The latest UTC timestamp to which the Posts will be provided. */\n endTime?: string;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n /** Additional headers */\n headers?: Record<string, string>;\n /** AbortSignal for cancelling the request */\n signal?: AbortSignal;\n}\n/**\n * Options for likesSample10 method\n * \n * @public\n */\nexport interface LikesSample10StreamingOptions {\n /** The number of minutes of backfill requested. */\n backfillMinutes?: number;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The earliest UTC timestamp to which the Likes will be provided. */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The latest UTC timestamp to which the Posts will be provided. */\n endTime?: string;\n\n /** A comma separated list of LikeWithTweetAuthor fields to display. */\n likeWithTweetAuthorfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n /** Additional headers */\n headers?: Record<string, string>;\n /** AbortSignal for cancelling the request */\n signal?: AbortSignal;\n}\n/**\n * Options for getRuleCounts method\n * \n * @public\n */\nexport interface GetRuleCountsStreamingOptions {\n /** A comma separated list of RulesCount fields to display. */\n rulesCountfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n /** Additional headers */\n headers?: Record<string, string>;\n /** AbortSignal for cancelling the request */\n signal?: AbortSignal;\n}\n/**\n * Options for posts method\n * \n * @public\n */\nexport interface PostsStreamingOptions {\n /** The number of minutes of backfill requested. */\n backfillMinutes?: number;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The earliest UTC timestamp from which the Posts will be provided. */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The latest UTC timestamp to which the Posts will be provided. */\n endTime?: string;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n /** Additional headers */\n headers?: Record<string, string>;\n /** AbortSignal for cancelling the request */\n signal?: AbortSignal;\n}\n/**\n * Options for postsFirehose method\n * \n * @public\n */\nexport interface PostsFirehoseStreamingOptions {\n /** The number of minutes of backfill requested. */\n backfillMinutes?: number;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The earliest UTC timestamp to which the Posts will be provided. */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The latest UTC timestamp to which the Posts will be provided. */\n endTime?: string;\n\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: Array<any>;\n\n /** A comma separated list of fields to expand. */\n expansions?: Array<any>;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: Array<any>;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: Array<any>;\n\n /** A comma separated list of User fields to display. */\n userfields?: Array<any>;\n\n /** A comma separated list of Place fields to display. */\n placefields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n /** Additional headers */\n headers?: Record<string, string>;\n /** AbortSignal for cancelling the request */\n signal?: AbortSignal;\n}\n\nexport class StreamClient {\n private client: Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Stream Posts compliance data\n * Streams all compliance data related to Posts.\n * \n * Returns an event-driven stream that's easy to use.\n * Use .on() to listen for events like 'data', 'error', 'close'.\n * Also supports async iteration with for await...of.\n\n\n\n * @param partition The partition number.\n\n\n\n * @returns {Promise<EventDrivenStream>} Event-driven stream for handling streaming data\n */\n async postsCompliance(\n partition: number,\n options: PostsComplianceStreamingOptions = {}\n ): Promise<EventDrivenStream> {\n // Validate authentication requirements\n\n const requiredAuthTypes = [];\n\n requiredAuthTypes.push('BearerToken');\n\n this.client.validateAuthentication(requiredAuthTypes, 'postsCompliance');\n\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n backfillMinutes = undefined,\n\n startTime = undefined,\n\n endTime = undefined,\n\n headers = {},\n signal,\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/compliance/stream';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (backfillMinutes !== undefined) {\n params.append('backfill_minutes', String(backfillMinutes));\n }\n\n params.append('partition', String(partition));\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n // Make the authenticated request using the main client's request method\n // We need raw: true to get the raw Response object for streaming\n const url = path + (params.toString() ? `?${params.toString()}` : '');\n\n // For streaming requests, we don't want to timeout the initial connection\n // Instead, we'll handle timeouts at the stream level\n const response = (await this.client.request('GET', url, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n\n signal: signal,\n raw: true, // Get raw Response object for streaming\n timeout: 0, // Disable timeout for streaming requests\n ...requestOptions,\n })) as Response;\n\n // Handle errors\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n // Return the readable stream\n // The response.body is the actual ReadableStream for streaming\n if (!response.body) {\n throw new Error('Response body is not available for streaming');\n }\n\n // Wrap the ReadableStream in an event-driven interface\n const eventStream = new EventDrivenStream();\n await eventStream.connect(response.body);\n return eventStream;\n }\n\n /**\n * Stream Likes compliance data\n * Streams all compliance data related to Likes for Users.\n * \n * Returns an event-driven stream that's easy to use.\n * Use .on() to listen for events like 'data', 'error', 'close'.\n * Also supports async iteration with for await...of.\n\n\n\n * @returns {Promise<EventDrivenStream>} Event-driven stream for handling streaming data\n */\n async likesCompliance(\n options: LikesComplianceStreamingOptions = {}\n ): Promise<EventDrivenStream> {\n // Validate authentication requirements\n\n const requiredAuthTypes = [];\n\n requiredAuthTypes.push('BearerToken');\n\n this.client.validateAuthentication(requiredAuthTypes, 'likesCompliance');\n\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n backfillMinutes = undefined,\n\n startTime = undefined,\n\n endTime = undefined,\n\n headers = {},\n signal,\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/likes/compliance/stream';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (backfillMinutes !== undefined) {\n params.append('backfill_minutes', String(backfillMinutes));\n }\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n // Make the authenticated request using the main client's request method\n // We need raw: true to get the raw Response object for streaming\n const url = path + (params.toString() ? `?${params.toString()}` : '');\n\n // For streaming requests, we don't want to timeout the initial connection\n // Instead, we'll handle timeouts at the stream level\n const response = (await this.client.request('GET', url, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n\n signal: signal,\n raw: true, // Get raw Response object for streaming\n timeout: 0, // Disable timeout for streaming requests\n ...requestOptions,\n })) as Response;\n\n // Handle errors\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n // Return the readable stream\n // The response.body is the actual ReadableStream for streaming\n if (!response.body) {\n throw new Error('Response body is not available for streaming');\n }\n\n // Wrap the ReadableStream in an event-driven interface\n const eventStream = new EventDrivenStream();\n await eventStream.connect(response.body);\n return eventStream;\n }\n\n /**\n * Stream all Likes\n * Streams all public Likes in real-time.\n * \n * Returns an event-driven stream that's easy to use.\n * Use .on() to listen for events like 'data', 'error', 'close'.\n * Also supports async iteration with for await...of.\n\n\n\n * @param partition The partition number.\n\n\n\n * @returns {Promise<EventDrivenStream>} Event-driven stream for handling streaming data\n */\n async likesFirehose(\n partition: number,\n options: LikesFirehoseStreamingOptions = {}\n ): Promise<EventDrivenStream> {\n // Validate authentication requirements\n\n const requiredAuthTypes = [];\n\n requiredAuthTypes.push('BearerToken');\n\n this.client.validateAuthentication(requiredAuthTypes, 'likesFirehose');\n\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n backfillMinutes = undefined,\n\n startTime = undefined,\n\n endTime = undefined,\n\n likeWithTweetAuthorfields = [],\n\n expansions = [],\n\n userfields = [],\n\n tweetfields = [],\n\n headers = {},\n signal,\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/likes/firehose/stream';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (backfillMinutes !== undefined) {\n params.append('backfill_minutes', String(backfillMinutes));\n }\n\n params.append('partition', String(partition));\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (likeWithTweetAuthorfields !== undefined) {\n params.append(\n 'like_with_tweet_author.fields',\n likeWithTweetAuthorfields.join(',')\n );\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Make the authenticated request using the main client's request method\n // We need raw: true to get the raw Response object for streaming\n const url = path + (params.toString() ? `?${params.toString()}` : '');\n\n // For streaming requests, we don't want to timeout the initial connection\n // Instead, we'll handle timeouts at the stream level\n const response = (await this.client.request('GET', url, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n\n signal: signal,\n raw: true, // Get raw Response object for streaming\n timeout: 0, // Disable timeout for streaming requests\n ...requestOptions,\n })) as Response;\n\n // Handle errors\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n // Return the readable stream\n // The response.body is the actual ReadableStream for streaming\n if (!response.body) {\n throw new Error('Response body is not available for streaming');\n }\n\n // Wrap the ReadableStream in an event-driven interface\n const eventStream = new EventDrivenStream();\n await eventStream.connect(response.body);\n return eventStream;\n }\n\n /**\n * Stream English Posts\n * Streams all public English-language Posts in real-time.\n * \n * Returns an event-driven stream that's easy to use.\n * Use .on() to listen for events like 'data', 'error', 'close'.\n * Also supports async iteration with for await...of.\n\n\n\n * @param partition The partition number.\n\n\n\n * @returns {Promise<EventDrivenStream>} Event-driven stream for handling streaming data\n */\n async postsFirehoseEn(\n partition: number,\n options: PostsFirehoseEnStreamingOptions = {}\n ): Promise<EventDrivenStream> {\n // Validate authentication requirements\n\n const requiredAuthTypes = [];\n\n requiredAuthTypes.push('BearerToken');\n\n this.client.validateAuthentication(requiredAuthTypes, 'postsFirehoseEn');\n\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n backfillMinutes = undefined,\n\n startTime = undefined,\n\n endTime = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n headers = {},\n signal,\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/firehose/stream/lang/en';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (backfillMinutes !== undefined) {\n params.append('backfill_minutes', String(backfillMinutes));\n }\n\n params.append('partition', String(partition));\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Make the authenticated request using the main client's request method\n // We need raw: true to get the raw Response object for streaming\n const url = path + (params.toString() ? `?${params.toString()}` : '');\n\n // For streaming requests, we don't want to timeout the initial connection\n // Instead, we'll handle timeouts at the stream level\n const response = (await this.client.request('GET', url, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n\n signal: signal,\n raw: true, // Get raw Response object for streaming\n timeout: 0, // Disable timeout for streaming requests\n ...requestOptions,\n })) as Response;\n\n // Handle errors\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n // Return the readable stream\n // The response.body is the actual ReadableStream for streaming\n if (!response.body) {\n throw new Error('Response body is not available for streaming');\n }\n\n // Wrap the ReadableStream in an event-driven interface\n const eventStream = new EventDrivenStream();\n await eventStream.connect(response.body);\n return eventStream;\n }\n\n /**\n * Stream Japanese Posts\n * Streams all public Japanese-language Posts in real-time.\n * \n * Returns an event-driven stream that's easy to use.\n * Use .on() to listen for events like 'data', 'error', 'close'.\n * Also supports async iteration with for await...of.\n\n\n\n * @param partition The partition number.\n\n\n\n * @returns {Promise<EventDrivenStream>} Event-driven stream for handling streaming data\n */\n async postsFirehoseJa(\n partition: number,\n options: PostsFirehoseJaStreamingOptions = {}\n ): Promise<EventDrivenStream> {\n // Validate authentication requirements\n\n const requiredAuthTypes = [];\n\n requiredAuthTypes.push('BearerToken');\n\n this.client.validateAuthentication(requiredAuthTypes, 'postsFirehoseJa');\n\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n backfillMinutes = undefined,\n\n startTime = undefined,\n\n endTime = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n headers = {},\n signal,\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/firehose/stream/lang/ja';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (backfillMinutes !== undefined) {\n params.append('backfill_minutes', String(backfillMinutes));\n }\n\n params.append('partition', String(partition));\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Make the authenticated request using the main client's request method\n // We need raw: true to get the raw Response object for streaming\n const url = path + (params.toString() ? `?${params.toString()}` : '');\n\n // For streaming requests, we don't want to timeout the initial connection\n // Instead, we'll handle timeouts at the stream level\n const response = (await this.client.request('GET', url, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n\n signal: signal,\n raw: true, // Get raw Response object for streaming\n timeout: 0, // Disable timeout for streaming requests\n ...requestOptions,\n })) as Response;\n\n // Handle errors\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n // Return the readable stream\n // The response.body is the actual ReadableStream for streaming\n if (!response.body) {\n throw new Error('Response body is not available for streaming');\n }\n\n // Wrap the ReadableStream in an event-driven interface\n const eventStream = new EventDrivenStream();\n await eventStream.connect(response.body);\n return eventStream;\n }\n\n /**\n * Stream 10% sampled Posts\n * Streams a 10% sample of public Posts in real-time.\n * \n * Returns an event-driven stream that's easy to use.\n * Use .on() to listen for events like 'data', 'error', 'close'.\n * Also supports async iteration with for await...of.\n\n\n\n * @param partition The partition number.\n\n\n\n * @returns {Promise<EventDrivenStream>} Event-driven stream for handling streaming data\n */\n async postsSample10(\n partition: number,\n options: PostsSample10StreamingOptions = {}\n ): Promise<EventDrivenStream> {\n // Validate authentication requirements\n\n const requiredAuthTypes = [];\n\n requiredAuthTypes.push('BearerToken');\n\n this.client.validateAuthentication(requiredAuthTypes, 'postsSample10');\n\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n backfillMinutes = undefined,\n\n startTime = undefined,\n\n endTime = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n headers = {},\n signal,\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/sample10/stream';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (backfillMinutes !== undefined) {\n params.append('backfill_minutes', String(backfillMinutes));\n }\n\n params.append('partition', String(partition));\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Make the authenticated request using the main client's request method\n // We need raw: true to get the raw Response object for streaming\n const url = path + (params.toString() ? `?${params.toString()}` : '');\n\n // For streaming requests, we don't want to timeout the initial connection\n // Instead, we'll handle timeouts at the stream level\n const response = (await this.client.request('GET', url, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n\n signal: signal,\n raw: true, // Get raw Response object for streaming\n timeout: 0, // Disable timeout for streaming requests\n ...requestOptions,\n })) as Response;\n\n // Handle errors\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n // Return the readable stream\n // The response.body is the actual ReadableStream for streaming\n if (!response.body) {\n throw new Error('Response body is not available for streaming');\n }\n\n // Wrap the ReadableStream in an event-driven interface\n const eventStream = new EventDrivenStream();\n await eventStream.connect(response.body);\n return eventStream;\n }\n\n /**\n * Stream Users compliance data\n * Streams all compliance data related to Users.\n * \n * Returns an event-driven stream that's easy to use.\n * Use .on() to listen for events like 'data', 'error', 'close'.\n * Also supports async iteration with for await...of.\n\n\n\n * @param partition The partition number.\n\n\n\n * @returns {Promise<EventDrivenStream>} Event-driven stream for handling streaming data\n */\n async usersCompliance(\n partition: number,\n options: UsersComplianceStreamingOptions = {}\n ): Promise<EventDrivenStream> {\n // Validate authentication requirements\n\n const requiredAuthTypes = [];\n\n requiredAuthTypes.push('BearerToken');\n\n this.client.validateAuthentication(requiredAuthTypes, 'usersCompliance');\n\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n backfillMinutes = undefined,\n\n startTime = undefined,\n\n endTime = undefined,\n\n headers = {},\n signal,\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/users/compliance/stream';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (backfillMinutes !== undefined) {\n params.append('backfill_minutes', String(backfillMinutes));\n }\n\n params.append('partition', String(partition));\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n // Make the authenticated request using the main client's request method\n // We need raw: true to get the raw Response object for streaming\n const url = path + (params.toString() ? `?${params.toString()}` : '');\n\n // For streaming requests, we don't want to timeout the initial connection\n // Instead, we'll handle timeouts at the stream level\n const response = (await this.client.request('GET', url, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n\n signal: signal,\n raw: true, // Get raw Response object for streaming\n timeout: 0, // Disable timeout for streaming requests\n ...requestOptions,\n })) as Response;\n\n // Handle errors\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n // Return the readable stream\n // The response.body is the actual ReadableStream for streaming\n if (!response.body) {\n throw new Error('Response body is not available for streaming');\n }\n\n // Wrap the ReadableStream in an event-driven interface\n const eventStream = new EventDrivenStream();\n await eventStream.connect(response.body);\n return eventStream;\n }\n\n /**\n * Stream Portuguese Posts\n * Streams all public Portuguese-language Posts in real-time.\n * \n * Returns an event-driven stream that's easy to use.\n * Use .on() to listen for events like 'data', 'error', 'close'.\n * Also supports async iteration with for await...of.\n\n\n\n * @param partition The partition number.\n\n\n\n * @returns {Promise<EventDrivenStream>} Event-driven stream for handling streaming data\n */\n async postsFirehosePt(\n partition: number,\n options: PostsFirehosePtStreamingOptions = {}\n ): Promise<EventDrivenStream> {\n // Validate authentication requirements\n\n const requiredAuthTypes = [];\n\n requiredAuthTypes.push('BearerToken');\n\n this.client.validateAuthentication(requiredAuthTypes, 'postsFirehosePt');\n\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n backfillMinutes = undefined,\n\n startTime = undefined,\n\n endTime = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n headers = {},\n signal,\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/firehose/stream/lang/pt';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (backfillMinutes !== undefined) {\n params.append('backfill_minutes', String(backfillMinutes));\n }\n\n params.append('partition', String(partition));\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Make the authenticated request using the main client's request method\n // We need raw: true to get the raw Response object for streaming\n const url = path + (params.toString() ? `?${params.toString()}` : '');\n\n // For streaming requests, we don't want to timeout the initial connection\n // Instead, we'll handle timeouts at the stream level\n const response = (await this.client.request('GET', url, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n\n signal: signal,\n raw: true, // Get raw Response object for streaming\n timeout: 0, // Disable timeout for streaming requests\n ...requestOptions,\n })) as Response;\n\n // Handle errors\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n // Return the readable stream\n // The response.body is the actual ReadableStream for streaming\n if (!response.body) {\n throw new Error('Response body is not available for streaming');\n }\n\n // Wrap the ReadableStream in an event-driven interface\n const eventStream = new EventDrivenStream();\n await eventStream.connect(response.body);\n return eventStream;\n }\n\n /**\n * Stream sampled Posts\n * Streams a 1% sample of public Posts in real-time.\n * \n * Returns an event-driven stream that's easy to use.\n * Use .on() to listen for events like 'data', 'error', 'close'.\n * Also supports async iteration with for await...of.\n\n\n\n * @returns {Promise<EventDrivenStream>} Event-driven stream for handling streaming data\n */\n async postsSample(\n options: PostsSampleStreamingOptions = {}\n ): Promise<EventDrivenStream> {\n // Validate authentication requirements\n\n const requiredAuthTypes = [];\n\n requiredAuthTypes.push('BearerToken');\n\n this.client.validateAuthentication(requiredAuthTypes, 'postsSample');\n\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n backfillMinutes = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n headers = {},\n signal,\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/sample/stream';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (backfillMinutes !== undefined) {\n params.append('backfill_minutes', String(backfillMinutes));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Make the authenticated request using the main client's request method\n // We need raw: true to get the raw Response object for streaming\n const url = path + (params.toString() ? `?${params.toString()}` : '');\n\n // For streaming requests, we don't want to timeout the initial connection\n // Instead, we'll handle timeouts at the stream level\n const response = (await this.client.request('GET', url, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n\n signal: signal,\n raw: true, // Get raw Response object for streaming\n timeout: 0, // Disable timeout for streaming requests\n ...requestOptions,\n })) as Response;\n\n // Handle errors\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n // Return the readable stream\n // The response.body is the actual ReadableStream for streaming\n if (!response.body) {\n throw new Error('Response body is not available for streaming');\n }\n\n // Wrap the ReadableStream in an event-driven interface\n const eventStream = new EventDrivenStream();\n await eventStream.connect(response.body);\n return eventStream;\n }\n\n /**\n * Stream Post labels\n * Streams all labeling events applied to Posts.\n * \n * Returns an event-driven stream that's easy to use.\n * Use .on() to listen for events like 'data', 'error', 'close'.\n * Also supports async iteration with for await...of.\n\n\n\n * @returns {Promise<EventDrivenStream>} Event-driven stream for handling streaming data\n */\n async labelsCompliance(\n options: LabelsComplianceStreamingOptions = {}\n ): Promise<EventDrivenStream> {\n // Validate authentication requirements\n\n const requiredAuthTypes = [];\n\n requiredAuthTypes.push('BearerToken');\n\n this.client.validateAuthentication(requiredAuthTypes, 'labelsCompliance');\n\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n backfillMinutes = undefined,\n\n startTime = undefined,\n\n endTime = undefined,\n\n headers = {},\n signal,\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/label/stream';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (backfillMinutes !== undefined) {\n params.append('backfill_minutes', String(backfillMinutes));\n }\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n // Make the authenticated request using the main client's request method\n // We need raw: true to get the raw Response object for streaming\n const url = path + (params.toString() ? `?${params.toString()}` : '');\n\n // For streaming requests, we don't want to timeout the initial connection\n // Instead, we'll handle timeouts at the stream level\n const response = (await this.client.request('GET', url, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n\n signal: signal,\n raw: true, // Get raw Response object for streaming\n timeout: 0, // Disable timeout for streaming requests\n ...requestOptions,\n })) as Response;\n\n // Handle errors\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n // Return the readable stream\n // The response.body is the actual ReadableStream for streaming\n if (!response.body) {\n throw new Error('Response body is not available for streaming');\n }\n\n // Wrap the ReadableStream in an event-driven interface\n const eventStream = new EventDrivenStream();\n await eventStream.connect(response.body);\n return eventStream;\n }\n\n /**\n * Stream Korean Posts\n * Streams all public Korean-language Posts in real-time.\n * \n * Returns an event-driven stream that's easy to use.\n * Use .on() to listen for events like 'data', 'error', 'close'.\n * Also supports async iteration with for await...of.\n\n\n\n * @param partition The partition number.\n\n\n\n * @returns {Promise<EventDrivenStream>} Event-driven stream for handling streaming data\n */\n async postsFirehoseKo(\n partition: number,\n options: PostsFirehoseKoStreamingOptions = {}\n ): Promise<EventDrivenStream> {\n // Validate authentication requirements\n\n const requiredAuthTypes = [];\n\n requiredAuthTypes.push('BearerToken');\n\n this.client.validateAuthentication(requiredAuthTypes, 'postsFirehoseKo');\n\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n backfillMinutes = undefined,\n\n startTime = undefined,\n\n endTime = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n headers = {},\n signal,\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/firehose/stream/lang/ko';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (backfillMinutes !== undefined) {\n params.append('backfill_minutes', String(backfillMinutes));\n }\n\n params.append('partition', String(partition));\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Make the authenticated request using the main client's request method\n // We need raw: true to get the raw Response object for streaming\n const url = path + (params.toString() ? `?${params.toString()}` : '');\n\n // For streaming requests, we don't want to timeout the initial connection\n // Instead, we'll handle timeouts at the stream level\n const response = (await this.client.request('GET', url, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n\n signal: signal,\n raw: true, // Get raw Response object for streaming\n timeout: 0, // Disable timeout for streaming requests\n ...requestOptions,\n })) as Response;\n\n // Handle errors\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n // Return the readable stream\n // The response.body is the actual ReadableStream for streaming\n if (!response.body) {\n throw new Error('Response body is not available for streaming');\n }\n\n // Wrap the ReadableStream in an event-driven interface\n const eventStream = new EventDrivenStream();\n await eventStream.connect(response.body);\n return eventStream;\n }\n\n /**\n * Stream sampled Likes\n * Streams a 10% sample of public Likes in real-time.\n * \n * Returns an event-driven stream that's easy to use.\n * Use .on() to listen for events like 'data', 'error', 'close'.\n * Also supports async iteration with for await...of.\n\n\n\n * @param partition The partition number.\n\n\n\n * @returns {Promise<EventDrivenStream>} Event-driven stream for handling streaming data\n */\n async likesSample10(\n partition: number,\n options: LikesSample10StreamingOptions = {}\n ): Promise<EventDrivenStream> {\n // Validate authentication requirements\n\n const requiredAuthTypes = [];\n\n requiredAuthTypes.push('BearerToken');\n\n this.client.validateAuthentication(requiredAuthTypes, 'likesSample10');\n\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n backfillMinutes = undefined,\n\n startTime = undefined,\n\n endTime = undefined,\n\n likeWithTweetAuthorfields = [],\n\n expansions = [],\n\n userfields = [],\n\n tweetfields = [],\n\n headers = {},\n signal,\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/likes/sample10/stream';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (backfillMinutes !== undefined) {\n params.append('backfill_minutes', String(backfillMinutes));\n }\n\n params.append('partition', String(partition));\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (likeWithTweetAuthorfields !== undefined) {\n params.append(\n 'like_with_tweet_author.fields',\n likeWithTweetAuthorfields.join(',')\n );\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n // Make the authenticated request using the main client's request method\n // We need raw: true to get the raw Response object for streaming\n const url = path + (params.toString() ? `?${params.toString()}` : '');\n\n // For streaming requests, we don't want to timeout the initial connection\n // Instead, we'll handle timeouts at the stream level\n const response = (await this.client.request('GET', url, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n\n signal: signal,\n raw: true, // Get raw Response object for streaming\n timeout: 0, // Disable timeout for streaming requests\n ...requestOptions,\n })) as Response;\n\n // Handle errors\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n // Return the readable stream\n // The response.body is the actual ReadableStream for streaming\n if (!response.body) {\n throw new Error('Response body is not available for streaming');\n }\n\n // Wrap the ReadableStream in an event-driven interface\n const eventStream = new EventDrivenStream();\n await eventStream.connect(response.body);\n return eventStream;\n }\n\n /**\n * Stream filtered Posts\n * Streams Posts in real-time matching the active rule set.\n * \n * Returns an event-driven stream that's easy to use.\n * Use .on() to listen for events like 'data', 'error', 'close'.\n * Also supports async iteration with for await...of.\n\n\n\n * @returns {Promise<EventDrivenStream>} Event-driven stream for handling streaming data\n */\n async posts(options: PostsStreamingOptions = {}): Promise<EventDrivenStream> {\n // Validate authentication requirements\n\n const requiredAuthTypes = [];\n\n requiredAuthTypes.push('BearerToken');\n\n this.client.validateAuthentication(requiredAuthTypes, 'posts');\n\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n backfillMinutes = undefined,\n\n startTime = undefined,\n\n endTime = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n headers = {},\n signal,\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/search/stream';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (backfillMinutes !== undefined) {\n params.append('backfill_minutes', String(backfillMinutes));\n }\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Make the authenticated request using the main client's request method\n // We need raw: true to get the raw Response object for streaming\n const url = path + (params.toString() ? `?${params.toString()}` : '');\n\n // For streaming requests, we don't want to timeout the initial connection\n // Instead, we'll handle timeouts at the stream level\n const response = (await this.client.request('GET', url, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n\n signal: signal,\n raw: true, // Get raw Response object for streaming\n timeout: 0, // Disable timeout for streaming requests\n ...requestOptions,\n })) as Response;\n\n // Handle errors\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n // Return the readable stream\n // The response.body is the actual ReadableStream for streaming\n if (!response.body) {\n throw new Error('Response body is not available for streaming');\n }\n\n // Wrap the ReadableStream in an event-driven interface\n const eventStream = new EventDrivenStream();\n await eventStream.connect(response.body);\n return eventStream;\n }\n\n /**\n * Stream all Posts\n * Streams all public Posts in real-time.\n * \n * Returns an event-driven stream that's easy to use.\n * Use .on() to listen for events like 'data', 'error', 'close'.\n * Also supports async iteration with for await...of.\n\n\n\n * @param partition The partition number.\n\n\n\n * @returns {Promise<EventDrivenStream>} Event-driven stream for handling streaming data\n */\n async postsFirehose(\n partition: number,\n options: PostsFirehoseStreamingOptions = {}\n ): Promise<EventDrivenStream> {\n // Validate authentication requirements\n\n const requiredAuthTypes = [];\n\n requiredAuthTypes.push('BearerToken');\n\n this.client.validateAuthentication(requiredAuthTypes, 'postsFirehose');\n\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n backfillMinutes = undefined,\n\n startTime = undefined,\n\n endTime = undefined,\n\n tweetfields = [],\n\n expansions = [],\n\n mediafields = [],\n\n pollfields = [],\n\n userfields = [],\n\n placefields = [],\n\n headers = {},\n signal,\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/firehose/stream';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (backfillMinutes !== undefined) {\n params.append('backfill_minutes', String(backfillMinutes));\n }\n\n params.append('partition', String(partition));\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', tweetfields.join(','));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', expansions.join(','));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', mediafields.join(','));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', pollfields.join(','));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', userfields.join(','));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', placefields.join(','));\n }\n\n // Make the authenticated request using the main client's request method\n // We need raw: true to get the raw Response object for streaming\n const url = path + (params.toString() ? `?${params.toString()}` : '');\n\n // For streaming requests, we don't want to timeout the initial connection\n // Instead, we'll handle timeouts at the stream level\n const response = (await this.client.request('GET', url, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n\n signal: signal,\n raw: true, // Get raw Response object for streaming\n timeout: 0, // Disable timeout for streaming requests\n ...requestOptions,\n })) as Response;\n\n // Handle errors\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n // Return the readable stream\n // The response.body is the actual ReadableStream for streaming\n if (!response.body) {\n throw new Error('Response body is not available for streaming');\n }\n\n // Wrap the ReadableStream in an event-driven interface\n const eventStream = new EventDrivenStream();\n await eventStream.connect(response.body);\n return eventStream;\n }\n\n /**\n * Get stream rules\n * Retrieves the active rule set or a subset of rules for the filtered stream.\n * \n * @returns Promise with the API response\n */\n async getRules(\n options: GetRulesStreamingOptions = {}\n ): Promise<GetRulesResponse> {\n // Validate authentication requirements\n\n const requiredAuthTypes = [];\n\n requiredAuthTypes.push('BearerToken');\n\n this.client.validateAuthentication(requiredAuthTypes, 'getRules');\n\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n ids = [],\n\n maxResults = undefined,\n\n paginationToken = undefined,\n\n headers = {},\n signal,\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/search/stream/rules';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (ids !== undefined) {\n params.append('ids', ids.join(','));\n }\n\n if (maxResults !== undefined) {\n params.append('max_results', String(maxResults));\n }\n\n if (paginationToken !== undefined) {\n params.append('pagination_token', String(paginationToken));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n signal: signal,\n\n ...requestOptions,\n };\n\n // Make the request\n return this.client.request<GetRulesResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Update stream rules\n * Adds or deletes rules from the active rule set for the filtered stream.\n * \n * @returns Promise with the API response\n */\n async updateRules(\n body: any,\n options: UpdateRulesStreamingOptions = {}\n ): Promise<UpdateRulesResponse> {\n // Validate authentication requirements\n\n const requiredAuthTypes = [];\n\n requiredAuthTypes.push('BearerToken');\n\n this.client.validateAuthentication(requiredAuthTypes, 'updateRules');\n\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n dryRun = undefined,\n\n deleteAll = undefined,\n\n headers = {},\n signal,\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/search/stream/rules';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (dryRun !== undefined) {\n params.append('dry_run', String(dryRun));\n }\n\n if (deleteAll !== undefined) {\n params.append('delete_all', String(deleteAll));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n signal: signal,\n\n body: JSON.stringify(body),\n\n ...requestOptions,\n };\n\n // Make the request\n return this.client.request<UpdateRulesResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get stream rule counts\n * Retrieves the count of rules in the active rule set for the filtered stream.\n * \n * @returns Promise with the API response\n */\n async getRuleCounts(\n options: GetRuleCountsStreamingOptions = {}\n ): Promise<GetRuleCountsResponse> {\n // Validate authentication requirements\n\n const requiredAuthTypes = [];\n\n requiredAuthTypes.push('BearerToken');\n\n this.client.validateAuthentication(requiredAuthTypes, 'getRuleCounts');\n\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n rulesCountfields = [],\n\n headers = {},\n signal,\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/search/stream/rules/counts';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (rulesCountfields !== undefined) {\n params.append('rules_count.fields', rulesCountfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n signal: signal,\n\n ...requestOptions,\n };\n\n // Make the request\n return this.client.request<GetRuleCountsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n}\n","/**\n * activity client for the X API.\n *\n * This module provides a client for interacting with the activity endpoints of the X API.\n */\n\nimport { Client, ApiResponse, RequestOptions } from '../client.js';\nimport {\n Paginator,\n PostPaginator,\n UserPaginator,\n EventPaginator,\n} from '../paginator.js';\nimport {\n UpdateSubscriptionRequest,\n UpdateSubscriptionResponse,\n DeleteSubscriptionResponse,\n StreamResponse,\n GetSubscriptionsResponse,\n CreateSubscriptionRequest,\n CreateSubscriptionResponse,\n} from './models.js';\n\n/**\n * Options for updateSubscription method\n * \n * @public\n */\nexport interface UpdateSubscriptionOptions {\n /** Request body */\n body?: UpdateSubscriptionRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for stream method\n * \n * @public\n */\nexport interface StreamOptions {\n /** The number of minutes of backfill requested. */\n backfillMinutes?: number;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The earliest UTC timestamp from which the Post labels will be provided. */\n startTime?: string;\n\n /** YYYY-MM-DDTHH:mm:ssZ. The latest UTC timestamp from which the Post labels will be provided. */\n endTime?: string;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for createSubscription method\n * \n * @public\n */\nexport interface CreateSubscriptionOptions {\n /** Request body */\n body?: CreateSubscriptionRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Client for activity operations\n * \n * This client provides methods for interacting with the activity endpoints\n * of the X API. It handles authentication, request formatting, and response\n * parsing for all activity related operations.\n * \n * @category activity\n */\nexport class ActivityClient {\n private client: Client;\n\n /**\n * Creates a new activity client instance\n * \n * @param client - The main X API client instance\n */\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Update X activity subscription\n * Updates a subscription for an X activity event\n\n\n * @param subscriptionId The ID of the subscription to update.\n\n\n\n\n * @returns {Promise<UpdateSubscriptionResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async updateSubscription(\n subscriptionId: string,\n options: UpdateSubscriptionOptions = {}\n ): Promise<UpdateSubscriptionResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/activity/subscriptions/{subscription_id}';\n\n path = path.replace(\n '{subscription_id}',\n encodeURIComponent(String(subscriptionId))\n );\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<UpdateSubscriptionResponse>(\n 'PUT',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Deletes X activity subscription\n * Deletes a subscription for an X activity event\n\n\n * @param subscriptionId The ID of the subscription to delete.\n\n\n\n\n * @returns {Promise<DeleteSubscriptionResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async deleteSubscription(\n subscriptionId: string\n ): Promise<DeleteSubscriptionResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/activity/subscriptions/{subscription_id}';\n\n path = path.replace(\n '{subscription_id}',\n encodeURIComponent(String(subscriptionId))\n );\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<DeleteSubscriptionResponse>(\n 'DELETE',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Activity Stream\n * Stream of X Activities\n\n\n\n * @returns {Promise<StreamResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async stream(options: StreamOptions = {}): Promise<StreamResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n backfillMinutes = undefined,\n\n startTime = undefined,\n\n endTime = undefined,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/activity/stream';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (backfillMinutes !== undefined) {\n params.append('backfill_minutes', String(backfillMinutes));\n }\n\n if (startTime !== undefined) {\n params.append('start_time', String(startTime));\n }\n\n if (endTime !== undefined) {\n params.append('end_time', String(endTime));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<StreamResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get X activity subscriptions\n * Get a list of active subscriptions for XAA\n\n\n\n * @returns {Promise<GetSubscriptionsResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getSubscriptions(): Promise<GetSubscriptionsResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/activity/subscriptions';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<GetSubscriptionsResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Create X activity subscription\n * Creates a subscription for an X activity event\n\n\n\n * @returns {Promise<CreateSubscriptionResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async createSubscription(\n options: CreateSubscriptionOptions = {}\n ): Promise<CreateSubscriptionResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/activity/subscriptions';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<CreateSubscriptionResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n}\n","/**\n * Models for activity operations\n */\nimport type * as Schemas from '../schemas.js';\n\n\n\n\n\n/**\n * Request for updateSubscription\n * \n * @public\n */\nexport type UpdateSubscriptionRequest = Schemas.ActivitySubscriptionUpdateRequest;\n/**\n * Response for updateSubscription\n * \n * @public\n */\nexport type UpdateSubscriptionResponse = Schemas.ActivitySubscriptionUpdateResponse;\n/**\n * Response for deleteSubscription\n * \n * @public\n */\nexport type DeleteSubscriptionResponse = Schemas.ActivitySubscriptionDeleteResponse;\n/**\n * Response for stream\n * \n * @public\n */\nexport type StreamResponse = Schemas.ActivityStreamingResponse;\n/**\n * Response for getSubscriptions\n * \n * @public\n */\nexport type GetSubscriptionsResponse = Schemas.ActivitySubscriptionGetResponse;\n/**\n * Request for createSubscription\n * \n * @public\n */\nexport type CreateSubscriptionRequest = Schemas.ActivitySubscriptionCreateRequest;\n/**\n * Response for createSubscription\n * \n * @public\n */\nexport type CreateSubscriptionResponse = Schemas.ActivitySubscriptionCreateResponse;","/**\n * webhooks client for the X API.\n *\n * This module provides a client for interacting with the webhooks endpoints of the X API.\n */\n\nimport { Client, ApiResponse, RequestOptions } from '../client.js';\nimport {\n Paginator,\n PostPaginator,\n UserPaginator,\n EventPaginator,\n} from '../paginator.js';\nimport {\n ValidateResponse,\n DeleteResponse,\n GetStreamLinksResponse,\n CreateStreamLinkResponse,\n DeleteStreamLinkResponse,\n GetResponse,\n CreateRequest,\n CreateResponse,\n} from './models.js';\n\n/**\n * Options for createStreamLink method\n * \n * @public\n */\nexport interface CreateStreamLinkOptions {\n /** A comma separated list of Tweet fields to display. */\n tweetfields?: string;\n\n /** A comma separated list of fields to expand. */\n expansions?: string;\n\n /** A comma separated list of Media fields to display. */\n mediafields?: string;\n\n /** A comma separated list of Poll fields to display. */\n pollfields?: string;\n\n /** A comma separated list of User fields to display. */\n userfields?: string;\n\n /** A comma separated list of Place fields to display. */\n placefields?: string;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for get method\n * \n * @public\n */\nexport interface GetOptions {\n /** A comma separated list of WebhookConfig fields to display. */\n webhookConfigfields?: Array<any>;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Options for create method\n * \n * @public\n */\nexport interface CreateOptions {\n /** Request body */\n body?: CreateRequest;\n\n /** Additional request options */\n requestOptions?: RequestOptions;\n}\n\n/**\n * Client for webhooks operations\n * \n * This client provides methods for interacting with the webhooks endpoints\n * of the X API. It handles authentication, request formatting, and response\n * parsing for all webhooks related operations.\n * \n * @category webhooks\n */\nexport class WebhooksClient {\n private client: Client;\n\n /**\n * Creates a new webhooks client instance\n * \n * @param client - The main X API client instance\n */\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Validate webhook\n * Triggers a CRC check for a given webhook.\n\n\n * @param webhookId The ID of the webhook to check.\n\n\n\n\n * @returns {Promise<ValidateResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async validate(webhookId: string): Promise<ValidateResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/webhooks/{webhook_id}';\n\n path = path.replace('{webhook_id}', encodeURIComponent(String(webhookId)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<ValidateResponse>(\n 'PUT',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Delete webhook\n * Deletes an existing webhook configuration.\n\n\n * @param webhookId The ID of the webhook to delete.\n\n\n\n\n * @returns {Promise<DeleteResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async delete(webhookId: string): Promise<DeleteResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/webhooks/{webhook_id}';\n\n path = path.replace('{webhook_id}', encodeURIComponent(String(webhookId)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<DeleteResponse>(\n 'DELETE',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get stream links\n * Get a list of webhook links associated with a filtered stream ruleset.\n\n\n\n * @returns {Promise<GetStreamLinksResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async getStreamLinks(): Promise<GetStreamLinksResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/tweets/search/webhooks';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<GetStreamLinksResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Create stream link\n * Creates a link to deliver FilteredStream events to the given webhook.\n\n\n * @param webhookId The webhook ID to link to your FilteredStream ruleset.\n\n\n\n\n * @returns {Promise<CreateStreamLinkResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async createStreamLink(\n webhookId: string,\n options: CreateStreamLinkOptions = {}\n ): Promise<CreateStreamLinkResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n tweetfields = undefined,\n\n expansions = undefined,\n\n mediafields = undefined,\n\n pollfields = undefined,\n\n userfields = undefined,\n\n placefields = undefined,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/tweets/search/webhooks/{webhook_id}';\n\n path = path.replace('{webhook_id}', encodeURIComponent(String(webhookId)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (tweetfields !== undefined) {\n params.append('tweet.fields', String(tweetfields));\n }\n\n if (expansions !== undefined) {\n params.append('expansions', String(expansions));\n }\n\n if (mediafields !== undefined) {\n params.append('media.fields', String(mediafields));\n }\n\n if (pollfields !== undefined) {\n params.append('poll.fields', String(pollfields));\n }\n\n if (userfields !== undefined) {\n params.append('user.fields', String(userfields));\n }\n\n if (placefields !== undefined) {\n params.append('place.fields', String(placefields));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<CreateStreamLinkResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Delete stream link\n * Deletes a link from FilteredStream events to the given webhook.\n\n\n * @param webhookId The webhook ID to link to your FilteredStream ruleset.\n\n\n\n\n * @returns {Promise<DeleteStreamLinkResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async deleteStreamLink(webhookId: string): Promise<DeleteStreamLinkResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/tweets/search/webhooks/{webhook_id}';\n\n path = path.replace('{webhook_id}', encodeURIComponent(String(webhookId)));\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<DeleteStreamLinkResponse>(\n 'DELETE',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Get webhook\n * Get a list of webhook configs associated with a client app.\n\n\n\n * @returns {Promise<GetResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async get(options: GetOptions = {}): Promise<GetResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n webhookConfigfields = [],\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/webhooks';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n if (webhookConfigfields !== undefined) {\n params.append('webhook_config.fields', webhookConfigfields.join(','));\n }\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n ...requestOptions,\n };\n\n return this.client.request<GetResponse>(\n 'GET',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n\n /**\n * Create webhook\n * Creates a new webhook configuration.\n\n\n\n * @returns {Promise<CreateResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async create(options: CreateOptions = {}): Promise<CreateResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const {\n body,\n\n requestOptions: requestOptions = {},\n } =\n options || {};\n\n // Build the path with path parameters\n let path = '/2/webhooks';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n body: body ? JSON.stringify(body) : undefined,\n\n ...requestOptions,\n };\n\n return this.client.request<CreateResponse>(\n 'POST',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n}\n","/**\n * Models for webhooks operations\n */\nimport type * as Schemas from '../schemas.js';\n\n\n\n\n\n/**\n * Response for validate\n * \n * @public\n */\nexport type ValidateResponse = Schemas.WebhookConfigPutResponse;\n/**\n * Response for delete\n * \n * @public\n */\nexport type DeleteResponse = Schemas.WebhookConfigDeleteResponse;\n/**\n * Response for getStreamLinks\n * \n * @public\n */\nexport type GetStreamLinksResponse = Schemas.WebhookLinksGetResponse;\n/**\n * Response for createStreamLink\n * \n * @public\n */\nexport type CreateStreamLinkResponse = Schemas.WebhookLinksCreateResponse;\n/**\n * Response for deleteStreamLink\n * \n * @public\n */\nexport type DeleteStreamLinkResponse = Schemas.WebhookLinksDeleteResponse;\n/**\n * Response for get\n * \n * @public\n */\nexport type GetResponse = Schemas.Get2WebhooksResponse;\n/**\n * Request for create\n * \n * @public\n */\nexport type CreateRequest = Schemas.WebhookConfigCreateRequest;\n/**\n * Response for create\n * \n * @public\n */\nexport type CreateResponse = Schemas.WebhookConfigCreateResponse;","/**\n * connections client for the X API.\n *\n * This module provides a client for interacting with the connections endpoints of the X API.\n */\n\nimport { Client, ApiResponse, RequestOptions } from '../client.js';\nimport {\n Paginator,\n PostPaginator,\n UserPaginator,\n EventPaginator,\n} from '../paginator.js';\nimport { DeleteAllResponse } from './models.js';\n\n/**\n * Client for connections operations\n * \n * This client provides methods for interacting with the connections endpoints\n * of the X API. It handles authentication, request formatting, and response\n * parsing for all connections related operations.\n * \n * @category connections\n */\nexport class ConnectionsClient {\n private client: Client;\n\n /**\n * Creates a new connections client instance\n * \n * @param client - The main X API client instance\n */\n constructor(client: Client) {\n this.client = client;\n }\n\n /**\n * Terminate all connections\n * Terminates all active streaming connections for the authenticated application.\n\n\n\n * @returns {Promise<DeleteAllResponse>} Promise resolving to the API response\n */\n // Overload 1: Default behavior (unwrapped response)\n async deleteAll(): Promise<DeleteAllResponse> {\n // Destructure options (exclude path parameters, they're already function params)\n\n const requestOptions = {};\n\n // Build the path with path parameters\n let path = '/2/connections/all';\n\n // Build query parameters\n const params = new URLSearchParams();\n\n // Prepare request options\n const finalRequestOptions: RequestOptions = {\n // No optional parameters, using empty request options\n };\n\n return this.client.request<DeleteAllResponse>(\n 'DELETE',\n path + (params.toString() ? `?${params.toString()}` : ''),\n finalRequestOptions\n );\n }\n}\n","/**\n * Models for connections operations\n */\nimport type * as Schemas from '../schemas.js';\n\n\n\n\n\n/**\n * Response for deleteAll\n * \n * @public\n */\nexport type DeleteAllResponse = Schemas.KillAllConnectionsResponse;","/**\n * Main client for the X API.\n *\n * This module provides the main client class for interacting with the X API.\n */\n\nimport { httpClient } from \"./http-client.js\";\nimport { \n Paginator, \n PostPaginator, \n UserPaginator, \n EventPaginator\n} from \"./paginator.js\";\n\n\n\nimport { UsageClient } from \"./usage/index.js\";\n\n\n\nimport { CommunitiesClient } from \"./communities/index.js\";\n\n\n\nimport { TrendsClient } from \"./trends/index.js\";\n\n\n\nimport { GeneralClient } from \"./general/index.js\";\n\n\n\nimport { UsersClient } from \"./users/index.js\";\n\n\n\nimport { CommunityNotesClient } from \"./community_notes/index.js\";\n\n\n\nimport { PostsClient } from \"./posts/index.js\";\n\n\n\nimport { ListsClient } from \"./lists/index.js\";\n\n\n\nimport { ComplianceClient } from \"./compliance/index.js\";\n\n\n\nimport { MediaClient } from \"./media/index.js\";\n\n\n\nimport { DirectMessagesClient } from \"./direct_messages/index.js\";\n\n\n\nimport { AccountActivityClient } from \"./account_activity/index.js\";\n\n\n\nimport { SpacesClient } from \"./spaces/index.js\";\n\n\n\nimport { StreamClient } from \"./stream/client.js\";\n\n\n\nimport { ActivityClient } from \"./activity/index.js\";\n\n\n\nimport { WebhooksClient } from \"./webhooks/index.js\";\n\n\n\nimport { ConnectionsClient } from \"./connections/index.js\";\n\n\n\n/**\n * Configuration options for the X API client\n */\nexport interface ClientConfig {\n /** Base URL for API requests */\n baseUrl?: string;\n /** Bearer token for authentication */\n bearerToken?: string;\n /** OAuth2 access token */\n accessToken?: string;\n /** OAuth1 instance for authentication */\n oauth1?: any;\n /** Custom headers to include in requests */\n headers?: Record<string, string>;\n /** Request timeout in milliseconds */\n timeout?: number;\n /** Whether to automatically retry failed requests */\n retry?: boolean;\n /** Maximum number of retry attempts */\n maxRetries?: number;\n /** User agent string */\n userAgent?: string;\n}\n\n/**\n * API Error class for handling X API errors\n */\nexport class ApiError extends Error {\n public readonly status: number;\n public readonly statusText: string;\n public readonly headers: Headers;\n public readonly data?: any;\n\n constructor(message: string, status: number, statusText: string, headers: Headers, data?: any) {\n super(message);\n this.name = 'ApiError';\n this.status = status;\n this.statusText = statusText;\n this.headers = headers;\n this.data = data;\n }\n}\n\n/**\n * Request options for API calls\n */\nexport interface RequestOptions {\n /** Request timeout in milliseconds */\n timeout?: number;\n /** Additional headers */\n headers?: Record<string, string>;\n /** Request signal for cancellation */\n signal?: AbortSignal;\n /** Request body */\n body?: string;\n /** Return raw HTTP wrapper instead of parsed body */\n raw?: boolean;\n}\n\n/**\n * Response wrapper with metadata\n */\nexport interface ApiResponse<T = any> {\n /** Response body */\n body: T;\n /** Response headers */\n headers: Headers;\n /** HTTP status code */\n status: number;\n /** HTTP status text */\n statusText: string;\n /** Response URL */\n url: string;\n}\n\n/**\n * Pagination metadata\n */\nexport interface PaginationMeta {\n /** Next page token */\n next_token?: string;\n /** Previous page token */\n previous_token?: string;\n /** Total count */\n total_count?: number;\n /** Result count */\n result_count?: number;\n}\n\n\n/**\n * Main client class for the X API\n * \n * This is the primary entry point for interacting with the X API. It provides\n * access to all API endpoints through specialized client modules and handles\n * authentication, request configuration, and error handling.\n * \n * @example\n * ```typescript\n * import { Client } from 'x-api-sdk';\n * \n * const client = new Client({\n * bearerToken: 'your-bearer-token'\n * });\n * \n * // Get user information\n * const user = await client.users.getUser('783214');\n * \n * // Get followers with pagination\n * const followers = await client.users.getFollowers('783214', {\n * maxResults: 10,\n * userFields: ['id', 'name', 'username']\n * });\n * \n * // Iterate through followers\n * for await (const follower of followers) {\n * console.log(follower.username);\n * }\n * ```\n * \n * @category Client\n */\nexport class Client {\n /** Base URL for API requests */\n readonly baseUrl: string;\n /** Bearer token for authentication */\n readonly bearerToken?: string;\n /** OAuth2 access token */\n readonly accessToken?: string;\n /** OAuth1 instance for authentication */\n readonly oauth1?: any;\n /** Headers for requests */\n readonly headers: Headers;\n /** Request timeout in milliseconds */\n readonly timeout: number;\n /** Whether to automatically retry failed requests */\n readonly retry: boolean;\n /** Maximum number of retry attempts */\n readonly maxRetries: number;\n /** User agent string */\n readonly userAgent: string;\n\n /** HTTP client for making requests */\n readonly httpClient = httpClient;\n\n\n /** usage client */\n readonly usage: UsageClient;\n\n /** communities client */\n readonly communities: CommunitiesClient;\n\n /** trends client */\n readonly trends: TrendsClient;\n\n /** general client */\n readonly general: GeneralClient;\n\n /** users client */\n readonly users: UsersClient;\n\n /** community notes client */\n readonly communityNotes: CommunityNotesClient;\n\n /** posts client */\n readonly posts: PostsClient;\n\n /** lists client */\n readonly lists: ListsClient;\n\n /** compliance client */\n readonly compliance: ComplianceClient;\n\n /** media client */\n readonly media: MediaClient;\n\n /** direct messages client */\n readonly directMessages: DirectMessagesClient;\n\n /** account activity client */\n readonly accountActivity: AccountActivityClient;\n\n /** spaces client */\n readonly spaces: SpacesClient;\n\n /** stream client */\n readonly stream: StreamClient;\n\n /** activity client */\n readonly activity: ActivityClient;\n\n /** webhooks client */\n readonly webhooks: WebhooksClient;\n\n /** connections client */\n readonly connections: ConnectionsClient;\n\n\n /**\n * Creates a new X API client instance\n * \n * @param config - Configuration options for the client\n * \n * @example\n * ```typescript\n * // Bearer token authentication\n * const client = new Client({\n * bearerToken: 'your-bearer-token'\n * });\n * \n * // OAuth2 authentication\n * const client = new Client({\n * accessToken: 'your-access-token'\n * });\n * \n * // OAuth1 authentication\n * const client = new Client({\n * oauth1: oauth1Instance\n * });\n * ```\n */\n constructor(config: ClientConfig | any) {\n // Handle OAuth1 instance passed directly\n if (config && typeof config === 'object' && config.accessToken && config.accessToken.accessToken && config.accessToken.accessTokenSecret) {\n // This is an OAuth1 instance\n this.oauth1 = config;\n this.baseUrl = \"https://api.x.com\";\n } else {\n // This is a regular config object\n const clientConfig = config as ClientConfig;\n this.baseUrl = clientConfig.baseUrl || \"https://api.x.com\";\n this.bearerToken = clientConfig.bearerToken;\n this.accessToken = clientConfig.accessToken;\n this.oauth1 = clientConfig.oauth1;\n }\n \n this.timeout = (config as ClientConfig).timeout || 30000;\n this.retry = (config as ClientConfig).retry ?? true;\n this.maxRetries = (config as ClientConfig).maxRetries || 3;\n this.userAgent = (config as ClientConfig).userAgent || \"x-api-sdk/1.0.0\";\n \n // Initialize headers\n const defaultHeaders: Record<string, string> = {\n 'User-Agent': this.userAgent,\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n ...((config as ClientConfig).headers || {}),\n };\n \n this.headers = httpClient.createHeaders(defaultHeaders);\n\n\n this.usage = new UsageClient(this);\n\n this.communities = new CommunitiesClient(this);\n\n this.trends = new TrendsClient(this);\n\n this.general = new GeneralClient(this);\n\n this.users = new UsersClient(this);\n\n this.communityNotes = new CommunityNotesClient(this);\n\n this.posts = new PostsClient(this);\n\n this.lists = new ListsClient(this);\n\n this.compliance = new ComplianceClient(this);\n\n this.media = new MediaClient(this);\n\n this.directMessages = new DirectMessagesClient(this);\n\n this.accountActivity = new AccountActivityClient(this);\n\n this.spaces = new SpacesClient(this);\n\n this.stream = new StreamClient(this);\n\n this.activity = new ActivityClient(this);\n\n this.webhooks = new WebhooksClient(this);\n\n this.connections = new ConnectionsClient(this);\n\n }\n\n /**\n * Make an authenticated request to the X API\n * \n * This method handles authentication, request formatting, and error handling\n * for all API requests. It automatically adds the appropriate authentication\n * headers based on the client configuration.\n * \n * @param method - HTTP method (GET, POST, PUT, DELETE, etc.)\n * @param path - API endpoint path (e.g., '/2/users/by/username/username')\n * @param options - Request options including timeout, headers, and body\n * @returns Promise that resolves to the parsed response data\n * \n * @example\n * ```typescript\n * // GET request\n * const user = await client.request('GET', '/2/users/by/username/username', {\n * timeout: 5000\n * });\n * \n * // POST request with body\n * const result = await client.request('POST', '/2/tweets', {\n * body: JSON.stringify({ text: 'Hello World!' })\n * });\n * ```\n * \n * @throws {ApiError} When the API returns an error response\n */\n async request<T = any>(\n method: string,\n path: string,\n options: RequestOptions = {}\n ): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const headers = new Headers(this.headers);\n \n // Add authentication headers\n if (this.bearerToken) {\n headers.set('Authorization', `Bearer ${this.bearerToken}`);\n } else if (this.accessToken) {\n headers.set('Authorization', `Bearer ${this.accessToken}`);\n } else if (this.oauth1 && this.oauth1.accessToken) {\n // OAuth1 authentication - build proper OAuth1 header\n try {\n const oauthHeader = await this.oauth1.buildRequestHeader(method, url, options.body || '');\n headers.set('Authorization', oauthHeader);\n \n // Remove Content-Type for OAuth1 requests if it's application/json\n // OAuth1 typically expects application/x-www-form-urlencoded or no content type\n if (headers.get('Content-Type') === 'application/json') {\n headers.delete('Content-Type');\n }\n } catch (error) {\n throw new Error(`Failed to build OAuth1 header: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n \n // Add custom headers\n if (options.headers) {\n Object.entries(options.headers).forEach(([key, value]) => {\n headers.set(key, value);\n });\n }\n\n try {\n const response = await this.httpClient.request(url, {\n method,\n headers,\n signal: options.signal,\n body: options.body,\n timeout: options.timeout !== undefined ? options.timeout : this.timeout,\n });\n\n if (!response.ok) {\n let errorData: any;\n try {\n errorData = await response.json();\n } catch {\n errorData = await response.text();\n }\n \n throw new ApiError(\n errorData && errorData.message ? errorData.message : `HTTP ${response.status}: ${response.statusText}`,\n response.status,\n response.statusText,\n response.headers,\n errorData\n );\n }\n\n // For streaming requests, return the raw Response object\n if (options.raw) {\n return response as any; // Return the actual Response object for streaming\n }\n\n let data: T;\n const contentType = response.headers.get('content-type');\n if (contentType && contentType.includes('application/json')) {\n data = await response.json();\n } else {\n data = await response.text() as T;\n }\n\n // Return parsed body for non-streaming requests\n return data;\n } catch (error) {\n if (error instanceof ApiError) {\n throw error;\n }\n throw new ApiError(\n error instanceof Error ? error.message : 'Request failed',\n 0,\n 'NETWORK_ERROR',\n new Headers(),\n error\n );\n }\n }\n\n /**\n * Check if the OAuth2 token is expired\n */\n isTokenExpired(): boolean {\n // TODO: Implement token expiration check\n return false;\n }\n\n /**\n * Refresh the OAuth2 token\n */\n async refreshToken(): Promise<void> {\n // TODO: Implement token refresh\n }\n\n /**\n * Get the current authentication status\n */\n isAuthenticated(): boolean {\n return !!(this.bearerToken || this.accessToken || (this.oauth1 && this.oauth1.accessToken));\n }\n\n /**\n * Map OpenAPI security scheme names to internal authentication types\n * @param securitySchemeName The security scheme name from OpenAPI\n * @returns Array of internal authentication types\n */\n public mapSecuritySchemeToAuthTypes(securitySchemeName: string): string[] {\n // Mappings for X/Twitter API security schemes\n const schemeMapping: Record<string, string[]> = {\n 'BearerToken': ['bearer_token'], // App-only OAuth2.0\n 'OAuth2UserToken': ['oauth2_user_context'], // OAuth2.0 User Context\n 'UserToken': ['oauth1'], // OAuth1.0a User Context\n // Fallback mappings for common variations\n 'OAuth2': ['bearer_token', 'oauth2_user_context'],\n 'OAuth1': ['oauth1'],\n 'Bearer': ['bearer_token'],\n 'OAuth2User': ['oauth2_user_context'],\n 'OAuth1User': ['oauth1'],\n };\n\n return schemeMapping[securitySchemeName] || [securitySchemeName.toLowerCase()];\n }\n\n /**\n * Validate that the required authentication method is available\n * @param requiredAuthTypes Array of required authentication types (OpenAPI security scheme names)\n * @param operationName Name of the operation for error messages\n */\n public validateAuthentication(requiredAuthTypes: string[], operationName: string): void {\n if (requiredAuthTypes.length === 0) {\n return; // No authentication required\n }\n\n const availableAuthTypes: string[] = [];\n \n if (this.bearerToken) {\n availableAuthTypes.push('bearer_token');\n }\n if (this.accessToken) {\n availableAuthTypes.push('oauth2_user_context');\n }\n if (this.oauth1 && this.oauth1.accessToken) {\n availableAuthTypes.push('oauth1');\n }\n\n // Map OpenAPI security schemes to internal auth types\n const mappedRequiredTypes = requiredAuthTypes.flatMap(scheme => \n this.mapSecuritySchemeToAuthTypes(scheme)\n );\n\n // Check if any of the required auth types are available\n const hasRequiredAuth = mappedRequiredTypes.some(required => \n availableAuthTypes.includes(required)\n );\n\n if (!hasRequiredAuth) {\n const availableStr = availableAuthTypes.length > 0 ? availableAuthTypes.join(', ') : 'none';\n const requiredStr = requiredAuthTypes.join(', ');\n throw new Error(\n `Authentication required for ${operationName}. ` +\n `Required: ${requiredStr}. ` +\n `Available: ${availableStr}. ` +\n `Please configure the appropriate authentication method.`\n );\n }\n }\n\n /**\n * Get available authentication types\n */\n getAvailableAuthTypes(): string[] {\n const authTypes: string[] = [];\n if (this.bearerToken) authTypes.push('bearer_token');\n if (this.accessToken) authTypes.push('oauth2_user_context');\n if (this.oauth1 && this.oauth1.accessToken) authTypes.push('oauth1');\n return authTypes;\n }\n} ","/**\n * Environment-agnostic cryptographic utilities for the X API SDK.\n * Provides HMAC-SHA1 implementation that works in both Node.js and browser environments.\n */\n\n/**\n * HMAC-SHA1 implementation that works in both Node.js and browser environments\n */\nexport class CryptoUtils {\n /**\n * Generate HMAC-SHA1 signature\n * @param key Signing key\n * @param message Message to sign\n * @returns Base64 encoded signature\n */\n static async hmacSha1(key: string, message: string): Promise<string> {\n // Try to use native Node.js crypto first\n if (\n typeof process !== 'undefined' &&\n process.versions &&\n process.versions.node\n ) {\n try {\n return await this._nodeHmacSha1(key, message);\n } catch (error) {\n // Fall back to Web Crypto API or polyfill\n console.warn('Node.js crypto failed, falling back:', error);\n }\n }\n\n // Try Web Crypto API (modern browsers)\n if (typeof crypto !== 'undefined' && crypto.subtle) {\n try {\n return await this._webCryptoHmacSha1(key, message);\n } catch (error) {\n // Fall back to polyfill\n console.warn('Web Crypto API failed, falling back:', error);\n }\n }\n\n // Fall back to polyfill implementation\n return this._polyfillHmacSha1(key, message);\n }\n\n /**\n * Node.js native HMAC-SHA1 implementation\n */\n private static async _nodeHmacSha1(\n key: string,\n message: string\n ): Promise<string> {\n // Dynamic import for Node.js crypto module (ES module compatible)\n const crypto = await import('crypto');\n const hmac = crypto.createHmac('sha1', key);\n hmac.update(message);\n return hmac.digest('base64');\n }\n\n /**\n * Web Crypto API HMAC-SHA1 implementation\n */\n private static async _webCryptoHmacSha1(\n key: string,\n message: string\n ): Promise<string> {\n // Convert string key to ArrayBuffer\n const keyBuffer = this._stringToArrayBuffer(key);\n const messageBuffer = this._stringToArrayBuffer(message);\n\n // Import the key\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n keyBuffer,\n { name: 'HMAC', hash: 'SHA-1' },\n false,\n ['sign']\n );\n\n // Sign the message\n const signature = await crypto.subtle.sign(\n 'HMAC',\n cryptoKey,\n messageBuffer\n );\n\n // Convert to base64\n return this._arrayBufferToBase64(signature);\n }\n\n /**\n * Polyfill HMAC-SHA1 implementation using pure JavaScript\n * This is a fallback that works everywhere but is slower\n */\n private static _polyfillHmacSha1(key: string, message: string): string {\n // For now, throw an error to indicate that proper crypto is needed\n // This will help identify when the fallback is being used\n throw new Error(\n 'HMAC-SHA1 polyfill not implemented. Please ensure Node.js crypto or Web Crypto API is available.'\n );\n\n // In a real implementation, you would use a library like crypto-js:\n // import CryptoJS from 'crypto-js';\n // return CryptoJS.HmacSHA1(message, key).toString(CryptoJS.enc.Base64);\n }\n\n /**\n * Convert string to ArrayBuffer\n */\n private static _stringToArrayBuffer(str: string): ArrayBuffer {\n const buffer = new ArrayBuffer(str.length);\n const view = new Uint8Array(buffer);\n for (let i = 0; i < str.length; i++) {\n view[i] = str.charCodeAt(i);\n }\n return buffer;\n }\n\n /**\n * Convert ArrayBuffer to base64 string\n */\n private static _arrayBufferToBase64(buffer: ArrayBuffer): string {\n const bytes = new Uint8Array(buffer);\n let binary = '';\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n }\n\n /**\n * Generate a random nonce for OAuth\n * @param length Length of the nonce\n * @returns Random nonce string\n */\n static generateNonce(length: number = 32): string {\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n // Use crypto.getRandomValues if available\n const array = new Uint8Array(length);\n crypto.getRandomValues(array);\n return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join(\n ''\n );\n } else {\n // Fallback to Math.random (less secure but functional)\n let result = '';\n const characters =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n for (let i = 0; i < length; i++) {\n result += characters.charAt(\n Math.floor(Math.random() * characters.length)\n );\n }\n return result;\n }\n }\n\n /**\n * Generate timestamp for OAuth\n * @returns Unix timestamp as string\n */\n static generateTimestamp(): string {\n return Math.floor(Date.now() / 1000).toString();\n }\n\n /**\n * Generate a cryptographically secure random string for PKCE code verifier\n * @param length Length of the code verifier (43-128 characters recommended)\n * @returns Random code verifier string\n */\n static generateCodeVerifier(length: number = 128): string {\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n // Use crypto.getRandomValues if available\n const array = new Uint8Array(length);\n crypto.getRandomValues(array);\n // Convert to base64url encoding (RFC 7636)\n return this._base64UrlEncode(array);\n } else {\n // Fallback to Math.random (less secure but functional)\n const characters =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';\n let result = '';\n for (let i = 0; i < length; i++) {\n result += characters.charAt(\n Math.floor(Math.random() * characters.length)\n );\n }\n return result;\n }\n }\n\n /**\n * Generate PKCE code challenge from code verifier\n * @param codeVerifier The code verifier string\n * @returns Base64url encoded SHA256 hash of the code verifier\n */\n static async generateCodeChallenge(codeVerifier: string): Promise<string> {\n // Try to use native Node.js crypto first\n if (\n typeof process !== 'undefined' &&\n process.versions &&\n process.versions.node\n ) {\n try {\n return await this._nodeSha256(codeVerifier);\n } catch (error) {\n console.warn('Node.js crypto failed for SHA256, falling back:', error);\n }\n }\n\n // Try Web Crypto API (modern browsers)\n if (typeof crypto !== 'undefined' && crypto.subtle) {\n try {\n return await this._webCryptoSha256(codeVerifier);\n } catch (error) {\n console.warn('Web Crypto API failed for SHA256, falling back:', error);\n }\n }\n\n // Fall back to polyfill implementation\n return this._polyfillSha256(codeVerifier);\n }\n\n /**\n * Node.js native SHA256 implementation for PKCE\n */\n private static async _nodeSha256(message: string): Promise<string> {\n const crypto = await import('crypto');\n const hash = crypto.createHash('sha256');\n hash.update(message);\n const digest = hash.digest();\n return this._base64UrlEncode(digest);\n }\n\n /**\n * Web Crypto API SHA256 implementation for PKCE\n */\n private static async _webCryptoSha256(message: string): Promise<string> {\n const messageBuffer = this._stringToArrayBuffer(message);\n const hashBuffer = await crypto.subtle.digest('SHA-256', messageBuffer);\n return this._base64UrlEncode(hashBuffer);\n }\n\n /**\n * Polyfill SHA256 implementation for PKCE\n * This is a fallback that works everywhere but is slower\n */\n private static _polyfillSha256(message: string): string {\n // For now, throw an error to indicate that proper crypto is needed\n throw new Error(\n 'SHA256 polyfill not implemented. Please ensure Node.js crypto or Web Crypto API is available.'\n );\n\n // In a real implementation, you would use a library like crypto-js:\n // import CryptoJS from 'crypto-js';\n // return CryptoJS.SHA256(message).toString(CryptoJS.enc.Base64url);\n }\n\n /**\n * Convert ArrayBuffer or Uint8Array to base64url encoding (RFC 7636)\n */\n private static _base64UrlEncode(buffer: ArrayBuffer | Uint8Array): string {\n const bytes =\n buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n let binary = '';\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n // Convert to base64url: replace + with -, / with _, and remove padding =\n return btoa(binary)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n }\n}\n\n/**\n * Convenience function for HMAC-SHA1\n * @param key Signing key\n * @param message Message to sign\n * @returns Promise that resolves to base64 encoded signature\n */\nexport async function hmacSha1(key: string, message: string): Promise<string> {\n return CryptoUtils.hmacSha1(key, message);\n}\n\n/**\n * Convenience function for generating nonce\n * @param length Length of the nonce\n * @returns Random nonce string\n */\nexport function generateNonce(length: number = 32): string {\n return CryptoUtils.generateNonce(length);\n}\n\n/**\n * Convenience function for generating timestamp\n * @returns Unix timestamp as string\n */\nexport function generateTimestamp(): string {\n return CryptoUtils.generateTimestamp();\n}\n\n/**\n * Convenience function for generating PKCE code verifier\n * @param length Length of the code verifier\n * @returns Random code verifier string\n */\nexport function generateCodeVerifier(length: number = 128): string {\n return CryptoUtils.generateCodeVerifier(length);\n}\n\n/**\n * Convenience function for generating PKCE code challenge\n * @param codeVerifier The code verifier string\n * @returns Promise that resolves to base64url encoded SHA256 hash\n */\nexport async function generateCodeChallenge(\n codeVerifier: string\n): Promise<string> {\n return CryptoUtils.generateCodeChallenge(codeVerifier);\n}\n","/**\n * OAuth2 authentication utilities for the X API.\n */\n\nimport { CryptoUtils, generateCodeVerifier, generateCodeChallenge } from './crypto_utils.js';\n\n/**\n * OAuth2 configuration options\n */\nexport interface OAuth2Config {\n /** Client ID */\n clientId: string;\n /** Client secret (optional for public clients) */\n clientSecret?: string;\n /** Redirect URI */\n redirectUri: string;\n /** Scopes to request */\n scope?: string[];\n}\n\n/**\n * OAuth2 token response\n */\nexport interface OAuth2Token {\n /** Access token */\n access_token: string;\n /** Token type */\n token_type: string;\n /** Expiration time in seconds */\n expires_in: number;\n /** Refresh token */\n refresh_token?: string;\n /** Scopes granted */\n scope?: string;\n}\n\n/**\n * OAuth2 authentication handler\n */\nexport class OAuth2 {\n private config: OAuth2Config;\n private token?: OAuth2Token;\n private codeVerifier?: string;\n private codeChallenge?: string;\n\n constructor(config: OAuth2Config) {\n this.config = {\n scope: ['tweet.read', 'users.read'],\n ...config\n };\n }\n\n /**\n * Get the authorization URL\n * @param state Optional state parameter for security\n * @returns Authorization URL\n */\n async getAuthorizationUrl(state?: string): Promise<string> {\n const params = new URLSearchParams({\n response_type: 'code',\n client_id: this.config.clientId,\n redirect_uri: this.config.redirectUri,\n scope: this.config.scope?.join(' ') || '',\n state: state || ''\n });\n\n // PKCE parameters are handled separately - not generated automatically\n\n return `https://x.com/i/oauth2/authorize?${params.toString()}`;\n }\n\n /**\n * Exchange authorization code for tokens\n * @param code Authorization code from callback\n * @param codeVerifier Optional code verifier for PKCE\n * @returns Promise with OAuth2 token\n */\n async exchangeCode(code: string, codeVerifier?: string): Promise<OAuth2Token> {\n const params = new URLSearchParams({\n grant_type: 'authorization_code',\n code,\n redirect_uri: this.config.redirectUri\n });\n\n // Add PKCE code verifier if provided\n if (codeVerifier) {\n params.append('code_verifier', codeVerifier);\n }\n\n // Prepare headers\n const headers: Record<string, string> = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n };\n\n // Add Basic Auth header if client secret is provided (optional but recommended)\n if (this.config.clientSecret) {\n const credentials = this._base64Encode(`${this.config.clientId}:${this.config.clientSecret}`);\n headers['Authorization'] = `Basic ${credentials}`;\n } else {\n // Only add client_id to body if no client_secret (public client)\n params.append('client_id', this.config.clientId);\n }\n \n const response = await fetch('https://api.x.com/2/oauth2/token', {\n method: 'POST',\n headers,\n body: params.toString()\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => response.text());\n throw new Error(`HTTP error! status: ${response.status}, body: ${JSON.stringify(errorData)}`);\n }\n\n const data = await response.json();\n this.token = {\n access_token: data.access_token,\n token_type: data.token_type,\n expires_in: data.expires_in,\n refresh_token: data.refresh_token,\n scope: data.scope\n };\n\n return this.token;\n }\n\n /**\n * Get the current token\n * @returns Current OAuth2 token if available\n */\n getToken(): OAuth2Token | undefined {\n return this.token;\n }\n\n /**\n * Get the current code verifier (for PKCE)\n * @returns Current code verifier if available\n */\n getCodeVerifier(): string | undefined {\n return this.codeVerifier;\n }\n\n\n /**\n * Manually set PKCE parameters\n * @param codeVerifier The code verifier to use\n * @param codeChallenge Optional code challenge (will be generated if not provided)\n */\n async setPkceParameters(codeVerifier: string, codeChallenge?: string): Promise<void> {\n this.codeVerifier = codeVerifier;\n if (codeChallenge) {\n this.codeChallenge = codeChallenge;\n } else {\n this.codeChallenge = await generateCodeChallenge(codeVerifier);\n }\n }\n\n /**\n * Get the current code challenge (for PKCE)\n * @returns Current code challenge if available\n */\n getCodeChallenge(): string | undefined {\n return this.codeChallenge;\n }\n\n /**\n * Base64 encode a string (with fallback for environments without btoa)\n * @param str String to encode\n * @returns Base64 encoded string\n */\n private _base64Encode(str: string): string {\n if (typeof btoa !== 'undefined') {\n return btoa(str);\n } else if (typeof Buffer !== 'undefined') {\n // Node.js fallback\n return Buffer.from(str, 'utf8').toString('base64');\n } else {\n // Manual base64 encoding fallback\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n let result = '';\n let i = 0;\n while (i < str.length) {\n const a = str.charCodeAt(i++);\n const b = i < str.length ? str.charCodeAt(i++) : 0;\n const c = i < str.length ? str.charCodeAt(i++) : 0;\n const bitmap = (a << 16) | (b << 8) | c;\n result += chars.charAt((bitmap >> 18) & 63);\n result += chars.charAt((bitmap >> 12) & 63);\n result += i - 2 < str.length ? chars.charAt((bitmap >> 6) & 63) : '=';\n result += i - 1 < str.length ? chars.charAt(bitmap & 63) : '=';\n }\n return result;\n }\n }\n} ","/**\n * OAuth1 authentication utilities for the X API.\n */\n\nimport { CryptoUtils, generateNonce, generateTimestamp } from './crypto_utils.js';\n\n/**\n * OAuth1 configuration options\n */\nexport interface OAuth1Config {\n /** API Key (Consumer Key) */\n apiKey: string;\n /** API Secret (Consumer Secret) */\n apiSecret: string;\n /** Callback URL for OAuth flow */\n callback: string;\n /** Access Token (if already obtained) */\n accessToken?: string;\n /** Access Token Secret (if already obtained) */\n accessTokenSecret?: string;\n}\n\n/**\n * OAuth1 request token response\n */\nexport interface OAuth1RequestToken {\n /** OAuth token */\n oauthToken: string;\n /** OAuth token secret */\n oauthTokenSecret: string;\n}\n\n/**\n * OAuth1 access token response\n */\nexport interface OAuth1AccessToken {\n /** Access token */\n accessToken: string;\n /** Access token secret */\n accessTokenSecret: string;\n}\n\n/**\n * OAuth1 authentication handler\n */\nexport class OAuth1 {\n private config: OAuth1Config;\n public requestToken?: OAuth1RequestToken;\n public accessToken?: OAuth1AccessToken;\n\n constructor(config: OAuth1Config) {\n this.config = config;\n \n // If access token is provided, set it\n if (config.accessToken && config.accessTokenSecret) {\n this.accessToken = {\n accessToken: config.accessToken,\n accessTokenSecret: config.accessTokenSecret\n };\n }\n }\n\n /**\n * Get the authorization URL for OAuth1 flow\n * @param loginWithX Whether to use \"Log in with X\" flow\n * @returns Authorization URL\n */\n getAuthorizationUrl(loginWithX: boolean = false): string {\n if (!this.requestToken) {\n throw new Error('Request token not obtained. Call getRequestToken() first.');\n }\n\n const baseUrl = loginWithX \n ? 'https://x.com/i/oauth/authenticate'\n : 'https://x.com/oauth/authorize';\n\n const params = new URLSearchParams({\n oauth_token: this.requestToken.oauthToken\n });\n\n return `${baseUrl}?${params.toString()}`;\n }\n\n /**\n * Get request token to start OAuth1 flow\n * @returns Promise with request token\n */\n async getRequestToken(): Promise<OAuth1RequestToken> {\n const url = 'https://api.x.com/oauth/request_token';\n \n const params = new URLSearchParams({\n oauth_callback: this.config.callback\n });\n\n const response = await fetch(`${url}?${params.toString()}`, {\n method: 'POST',\n headers: {\n 'Authorization': await this._buildOAuthHeader('POST', url, params.toString())\n }\n });\n\n if (!response.ok) {\n throw new Error(`Failed to get request token: ${response.status} ${response.statusText}`);\n }\n\n const responseText = await response.text();\n const responseParams = new URLSearchParams(responseText);\n \n this.requestToken = {\n oauthToken: responseParams.get('oauth_token')!,\n oauthTokenSecret: responseParams.get('oauth_token_secret')!\n };\n\n return this.requestToken;\n }\n\n /**\n * Exchange verifier for access token\n * @param verifier OAuth verifier from callback or PIN\n * @returns Promise with access token\n */\n async getAccessToken(verifier: string): Promise<OAuth1AccessToken> {\n if (!this.requestToken) {\n throw new Error('Request token not obtained. Call getRequestToken() first.');\n }\n\n const url = 'https://api.x.com/oauth/access_token';\n \n const params = new URLSearchParams({\n oauth_token: this.requestToken.oauthToken,\n oauth_verifier: verifier\n });\n\n const response = await fetch(`${url}?${params.toString()}`, {\n method: 'POST',\n headers: {\n 'Authorization': await this._buildOAuthHeader('POST', url, params.toString())\n }\n });\n\n if (!response.ok) {\n throw new Error(`Failed to get access token: ${response.status} ${response.statusText}`);\n }\n\n const responseText = await response.text();\n const responseParams = new URLSearchParams(responseText);\n \n this.accessToken = {\n accessToken: responseParams.get('oauth_token')!,\n accessTokenSecret: responseParams.get('oauth_token_secret')!\n };\n\n return this.accessToken;\n }\n\n /**\n * Build OAuth1 authorization header\n * @param method HTTP method\n * @param url Request URL\n * @param body Request body\n * @returns Promise that resolves to OAuth1 authorization header string\n */\n private async _buildOAuthHeader(method: string, url: string, body: string): Promise<string> {\n const timestamp = generateTimestamp();\n const nonce = generateNonce();\n \n const oauthParams: Record<string, string> = {\n oauth_consumer_key: this.config.apiKey,\n oauth_nonce: nonce,\n oauth_signature_method: 'HMAC-SHA1',\n oauth_timestamp: timestamp,\n oauth_version: '1.0'\n };\n\n // Add request token if available\n if (this.requestToken) {\n oauthParams['oauth_token'] = this.requestToken.oauthToken;\n }\n\n // Add access token if available\n if (this.accessToken) {\n oauthParams['oauth_token'] = this.accessToken.accessToken;\n }\n\n // Build signature base string\n const paramString = this._buildParamString(oauthParams, body);\n const signatureBase = `${method.toUpperCase()}&${this._encode(url)}&${this._encode(paramString)}`;\n \n // Generate signature\n const signingKey = `${this._encode(this.config.apiSecret)}&${this._encode(\n this.requestToken?.oauthTokenSecret || this.accessToken?.accessTokenSecret || ''\n )}`;\n \n const signature = await CryptoUtils.hmacSha1(signingKey, signatureBase);\n oauthParams['oauth_signature'] = signature;\n\n // Build authorization header\n const headerParams = Object.entries(oauthParams)\n .map(([key, value]) => `${key}=\"${this._encode(value)}\"`)\n .join(', ');\n\n return `OAuth ${headerParams}`;\n }\n\n /**\n * Build parameter string for OAuth signature\n * @param oauthParams OAuth parameters\n * @param body Request body\n * @returns Parameter string\n */\n private _buildParamString(oauthParams: Record<string, string>, body: string): string {\n const allParams = { ...oauthParams };\n \n // Parse body parameters if present\n if (body) {\n try {\n const bodyParams = new URLSearchParams(body);\n bodyParams.forEach((value, key) => {\n allParams[key] = value;\n });\n } catch (error) {\n // If body parsing fails, ignore it\n console.warn('Failed to parse body parameters:', error);\n }\n }\n\n // Sort parameters alphabetically\n const sortedParams = Object.entries(allParams).sort(([a], [b]) => a.localeCompare(b));\n \n return sortedParams\n .map(([key, value]) => `${this._encode(key)}=${this._encode(value)}`)\n .join('&');\n }\n\n /**\n * URL encode string according to OAuth1 specification\n * @param str String to encode\n * @returns Encoded string\n */\n private _encode(str: string): string {\n return encodeURIComponent(str)\n .replace(/!/g, '%21')\n .replace(/\\*/g, '%2A')\n .replace(/'/g, '%27')\n .replace(/\\(/g, '%28')\n .replace(/\\)/g, '%29')\n .replace(/%7E/g, '~');\n }\n\n /**\n * Convenience method to start the OAuth1 flow\n * @param loginWithX Whether to use \"Log in with X\" flow\n * @returns Promise that resolves to the authorization URL\n */\n async startOAuthFlow(loginWithX: boolean = false): Promise<string> {\n await this.getRequestToken();\n return this.getAuthorizationUrl(loginWithX);\n }\n\n /**\n * Build OAuth1 authorization header for API requests\n * @param method HTTP method\n * @param url Request URL\n * @param body Request body\n * @returns Promise that resolves to OAuth1 authorization header string\n */\n async buildRequestHeader(method: string, url: string, body: string = ''): Promise<string> {\n if (!this.accessToken) {\n throw new Error('Access token not available. Complete OAuth1 flow first.');\n }\n\n // Extract query parameters from URL if present\n let urlWithoutQuery = url;\n let queryParams = '';\n \n try {\n const urlObj = new URL(url);\n if (urlObj.search) {\n queryParams = urlObj.search.substring(1); // Remove the '?' prefix\n urlWithoutQuery = urlObj.origin + urlObj.pathname;\n }\n } catch (error) {\n // If URL parsing fails, use the original URL\n console.warn('Failed to parse URL for OAuth1:', error);\n }\n\n // Combine query parameters with body parameters\n let allParams = '';\n if (queryParams && body) {\n allParams = `${queryParams}&${body}`;\n } else if (queryParams) {\n allParams = queryParams;\n } else if (body) {\n allParams = body;\n }\n\n return this._buildOAuthHeader(method, urlWithoutQuery, allParams);\n }\n} ","/**\n * OpenAPI Schema Types\n * Auto-generated from OpenAPI components/schemas\n *\n * @internal\n */\n\n/**\nThe unique identifier of an Activity event.\n *\n * @public\n */\nexport type ActivityEventId = string; /**\nAn activity event or error that can be returned by the x activity streaming API.\n *\n * @public\n */\nexport interface ActivityStreamingResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nAn XActivity subscription.\n *\n * @public\n */\nexport interface ActivitySubscription {\n /** none */ createdAt: string;\n /** none */ eventType: string;\n filter: ActivitySubscriptionFilter;\n subscriptionId: ActivitySubscriptionId;\n /** none */ tag?: string;\n /** none */ updatedAt: string;\n webhookId?: WebhookConfigId;\n} /**\nSchema type for ActivitySubscriptionCreateRequest\n *\n * @public\n */\nexport interface ActivitySubscriptionCreateRequest {\n /** none */ eventType:\n | 'ProfileBioUpdate'\n | 'ProfilePictureUpdate'\n | 'ProfileBannerPictureUpdate'\n | 'ProfileScreennameUpdate'\n | 'ProfileGeoUpdate'\n | 'ProfileUrlUpdate'\n | 'ProfileVerifiedBadgeUpdate';\n filter: ActivitySubscriptionFilter;\n /** none */ tag?: string;\n webhookId?: WebhookConfigId;\n} /**\nSchema type for ActivitySubscriptionCreateResponse\n *\n * @public\n */\nexport interface ActivitySubscriptionCreateResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for ActivitySubscriptionDeleteResponse\n *\n * @public\n */\nexport interface ActivitySubscriptionDeleteResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n /** none */ meta?: Record<string, any>;\n} /**\nAn XAA subscription.\n *\n * @public\n */\nexport interface ActivitySubscriptionFilter {\n userId?: UserId;\n} /**\nSchema type for ActivitySubscriptionGetResponse\n *\n * @public\n */\nexport interface ActivitySubscriptionGetResponse {\n /** none */ data?: Array<ActivitySubscription>;\n /** none */ errors?: Array<Problem>;\n /** none */ meta?: Record<string, any>;\n} /**\nThe unique identifier of this subscription.\n *\n * @public\n */\nexport type ActivitySubscriptionId = string; /**\nSchema type for ActivitySubscriptionUpdateRequest\n *\n * @public\n */\nexport interface ActivitySubscriptionUpdateRequest {\n /** none */ tag?: string;\n webhookId?: WebhookConfigId;\n} /**\nSchema type for ActivitySubscriptionUpdateResponse\n *\n * @public\n */\nexport interface ActivitySubscriptionUpdateResponse {\n /** none */ data?: Record<string, any>;\n}\n/**\nSchema type for AddOrDeleteRulesRequest\n *\n * @public\n */\nexport type AddOrDeleteRulesRequest = any; /**\nA response from modifying user-specified stream filtering rules.\n *\n * @public\n */\nexport interface AddOrDeleteRulesResponse {\n /** All user-specified stream filtering rules that were created. */ data?: Array<\n Rule\n >;\n /** none */ errors?: Array<Problem>;\n meta: RulesResponseMetadata;\n} /**\nA request to add a user-specified stream filtering rule.\n *\n * @public\n */\nexport interface AddRulesRequest {\n /** none */ add: Array<RuleNoId>;\n} /**\nThe sum of results returned in this response.\n *\n * @public\n */\nexport type Aggregate = number; /**\nSchema type for AllowDownloadStatus\n *\n * @public\n */\nexport interface AllowDownloadStatus {\n /** none */ allowDownload?: boolean;\n} /**\nClient App Rule Counts for all applications in the project\n *\n * @public\n */\nexport type AllProjectClientApps = Array<\n AppRulesCount\n>; /**\nSchema type for AltText\n *\n * @public\n */\nexport interface AltText {\n /** Description of media ( <= 1000 characters ) */ text: string;\n} /**\nSchema type for Analytics\n *\n * @public\n */\nexport interface Analytics {\n /** none */ data?: Array<Record<string, any>>;\n /** none */ errors?: Array<Problem>;\n}\n/**\nSchema type for AnimatedGif\n *\n * @public\n */\nexport type AnimatedGif = any; /**\nA count of user-provided stream filtering rules at the client application level.\n *\n * @public\n */\nexport interface AppRulesCount {\n clientAppId?: ClientAppId;\n /** Number of rules for client application */ ruleCount?: number;\n} /**\nSchema type for AudiencePolicy\n *\n * @public\n */\nexport interface AudiencePolicy {\n /** none */ creatorSubscriptions?: Array<'Any'>;\n /** none */ xSubscriptions?: Array<'Any'>;\n} /**\nSchema type for BookmarkAddRequest\n *\n * @public\n */\nexport interface BookmarkAddRequest {\n tweetId: TweetId;\n} /**\nThe unique identifier of this Bookmark folder.\n *\n * @public\n */\nexport type BookmarkFolderId = string; /**\nSchema type for BookmarkFolderPostsResponse\n *\n * @public\n */\nexport interface BookmarkFolderPostsResponse {\n /** none */ data?: Array<Record<string, any>>;\n /** none */ errors?: Array<Problem>;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for BookmarkFoldersResponse\n *\n * @public\n */\nexport interface BookmarkFoldersResponse {\n /** none */ data?: Array<Record<string, any>>;\n /** none */ errors?: Array<Problem>;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for BookmarkMutationResponse\n *\n * @public\n */\nexport interface BookmarkMutationResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n}\n/**\nSchema type for CashtagEntity\n *\n * @public\n */\nexport type CashtagEntity = any; /**\nRepresent the portion of text recognized as a Cashtag, and its start and end position within the text.\n *\n * @public\n */\nexport interface CashtagFields {\n /** none */ tag: string;\n} /**\nThe ID of the client application\n *\n * @public\n */\nexport type ClientAppId = string; /**\nUsage per client app\n *\n * @public\n */\nexport interface ClientAppUsage {\n /** The unique identifier for this project */ clientAppId?: string;\n /** The usage value */ usage?: Array<UsageFields>;\n /** The number of results returned */ usageResultCount?: number;\n}\n/**\nYour client has gone away.\n *\n * @public\n */\nexport type ClientDisconnectedProblem = any;\n/**\nA problem that indicates your client is forbidden from making this request.\n *\n * @public\n */\nexport type ClientForbiddenProblem = any; /**\nA X Community is a curated group of Posts.\n *\n * @public\n */\nexport interface Community {\n /** none */ createdAt?: string;\n id: CommunityId;\n /** The name of this Community. */ name: string;\n} /**\nThe unique identifier of this Community.\n *\n * @public\n */\nexport type CommunityId = string; /**\nSchema type for ComplianceJob\n *\n * @public\n */\nexport interface ComplianceJob {\n createdAt: CreatedAt;\n downloadExpiresAt: DownloadExpiration;\n downloadUrl: DownloadUrl;\n id: JobId;\n name?: ComplianceJobName;\n status: ComplianceJobStatus;\n type: ComplianceJobType;\n uploadExpiresAt: UploadExpiration;\n uploadUrl: UploadUrl;\n} /**\nUser-provided name for a compliance job.\n *\n * @public\n */\nexport type ComplianceJobName = string; /**\nStatus of a compliance job.\n *\n * @public\n */\nexport type ComplianceJobStatus =\n | 'created'\n | 'in_progress'\n | 'failed'\n | 'complete'\n | 'expired'; /**\nType of compliance job to list.\n *\n * @public\n */\nexport type ComplianceJobType = 'tweets' | 'users';\n/**\nYou cannot create a new job if one is already in progress.\n *\n * @public\n */\nexport type ConflictProblem = any;\n/**\nA problem that indicates something is wrong with the connection.\n *\n * @public\n */\nexport type ConnectionExceptionProblem = any; /**\nSchema type for ContentExpiration\n *\n * @public\n */\nexport interface ContentExpiration {\n /** Expiration time for content as a Unix timestamp in seconds */ timestampSec: number;\n} /**\nAnnotation inferred from the Tweet text.\n *\n * @public\n */\nexport interface ContextAnnotation {\n domain: ContextAnnotationDomainFields;\n entity: ContextAnnotationEntityFields;\n} /**\nRepresents the data for the context annotation domain.\n *\n * @public\n */\nexport interface ContextAnnotationDomainFields {\n /** Description of the context annotation domain. */ description?: string;\n /** The unique id for a context annotation domain. */ id: string;\n /** Name of the context annotation domain. */ name?: string;\n} /**\nRepresents the data for the context annotation entity.\n *\n * @public\n */\nexport interface ContextAnnotationEntityFields {\n /** Description of the context annotation entity. */ description?: string;\n /** The unique id for a context annotation entity. */ id: string;\n /** Name of the context annotation entity. */ name?: string;\n} /**\nA two-letter ISO 3166-1 alpha-2 country code.\n *\n * @public\n */\nexport type CountryCode = string; /**\nSchema type for CreateAttachmentsMessageRequest\n *\n * @public\n */\nexport interface CreateAttachmentsMessageRequest {\n attachments: DmAttachments;\n /** Text of the message. */ text?: string;\n} /**\nA request to create a new batch compliance job.\n *\n * @public\n */\nexport interface CreateComplianceJobRequest {\n name?: ComplianceJobName;\n /** If true, this endpoint will return a pre-signed URL with resumable uploads enabled. */ resumable?: boolean;\n /** Type of compliance job to list. */ type: 'tweets' | 'users';\n} /**\nSchema type for CreateComplianceJobResponse\n *\n * @public\n */\nexport interface CreateComplianceJobResponse {\n data?: ComplianceJob;\n /** none */ errors?: Array<Problem>;\n} /**\nCreation time of the compliance job.\n *\n * @public\n */\nexport type CreatedAt = string; /**\nSchema type for CreateDmConversationRequest\n *\n * @public\n */\nexport interface CreateDmConversationRequest {\n /** The conversation type that is being created. */ conversationType: 'Group';\n message: CreateMessageRequest;\n participantIds: DmParticipants;\n} /**\nSchema type for CreateDmEventResponse\n *\n * @public\n */\nexport interface CreateDmEventResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n}\n/**\nSchema type for CreateMessageRequest\n *\n * @public\n */\nexport type CreateMessageRequest = any; /**\nSchema type for CreateNoteRequest\n *\n * @public\n */\nexport interface CreateNoteRequest {\n info: NoteInfo;\n postId: TweetId;\n /** If true, the note being submitted is only for testing the capability of the bot, and won't be publicly visible. If false, the note being submitted will be a new proposed note on the product. */ testMode: boolean;\n} /**\nSchema type for CreateNoteResponse\n *\n * @public\n */\nexport interface CreateNoteResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for CreateTextMessageRequest\n *\n * @public\n */\nexport interface CreateTextMessageRequest {\n attachments?: DmAttachments;\n /** Text of the message. */ text: string;\n} /**\nSchema type for DeleteDmResponse\n *\n * @public\n */\nexport interface DeleteDmResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for DeleteNoteResponse\n *\n * @public\n */\nexport interface DeleteNoteResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nA response from deleting user-specified stream filtering rules.\n *\n * @public\n */\nexport interface DeleteRulesRequest {\n /** IDs and values of all deleted user-specified stream filtering rules. */ delete: Record<\n string,\n any\n >;\n}\n/**\nA problem that indicates that the resource requested violates the precepts of this API.\n *\n * @public\n */\nexport type DisallowedResourceProblem = any; /**\nRepresent a boundary range (start and end zero-based indices) for the portion of text that is displayed for a post. `start` must be smaller than `end`. The start index is inclusive, the end index is exclusive.\n *\n * @public\n */\nexport type DisplayTextRange = Array<\n number\n>; /**\nAttachments to a DM Event.\n *\n * @public\n */\nexport type DmAttachments = Array<\n DmMediaAttachment\n>; /**\nUnique identifier of a DM conversation. This can either be a numeric string, or a pair of numeric strings separated by a '-' character in the case of one-on-one DM Conversations.\n *\n * @public\n */\nexport type DmConversationId = string; /**\nSchema type for DmEvent\n *\n * @public\n */\nexport interface DmEvent {\n /** Specifies the type of attachments (if any) present in this DM. */ attachments?: Record<\n string,\n any\n >;\n /** none */ cashtags?: Array<CashtagEntity>;\n /** none */ createdAt?: string;\n dmConversationId?: DmConversationId;\n /** none */ eventType: string;\n /** none */ hashtags?: Array<HashtagEntity>;\n id: DmEventId;\n /** none */ mentions?: Array<MentionEntity>;\n /** A list of participants for a ParticipantsJoin or ParticipantsLeave event_type. */ participantIds?: Array<\n UserId\n >;\n /** A list of Posts this DM refers to. */ referencedTweets?: Array<\n Record<string, any>\n >;\n senderId?: UserId;\n /** none */ text?: string;\n /** none */ urls?: Array<UrlEntityDm>;\n} /**\nUnique identifier of a DM Event.\n *\n * @public\n */\nexport type DmEventId = string; /**\nSchema type for DmMediaAttachment\n *\n * @public\n */\nexport interface DmMediaAttachment {\n mediaId: MediaId;\n} /**\nParticipants for the DM Conversation.\n *\n * @public\n */\nexport type DmParticipants = Array<\n UserId\n>; /**\nSchema type for DomainRestrictions\n *\n * @public\n */\nexport interface DomainRestrictions {\n /** List of whitelisted domains */ whitelist: Array<string>;\n} /**\nExpiration time of the download URL.\n *\n * @public\n */\nexport type DownloadExpiration = string; /**\nURL from which the user will retrieve their compliance results.\n *\n * @public\n */\nexport type DownloadUrl = string;\n/**\nThe rule you have submitted is a duplicate.\n *\n * @public\n */\nexport type DuplicateRuleProblem = any; /**\nThe end time of the bucket.\n *\n * @public\n */\nexport type End = string; /**\nAn Engagement Api Response.\n *\n * @public\n */\nexport interface Engagement {\n /** none */ errors?: Array<Record<string, any>>;\n /** none */ measurement?: Record<string, any>;\n} /**\nRepresent a boundary range (start and end index) for a recognized entity (for example a hashtag or a mention). `start` must be smaller than `end`. The start index is inclusive, the end index is exclusive.\n *\n * @public\n */\nexport interface EntityIndicesInclusiveExclusive {\n /** Index (zero-based) at which position this entity ends. The index is exclusive. */ end: number;\n /** Index (zero-based) at which position this entity starts. The index is inclusive. */ start: number;\n} /**\nRepresent a boundary range (start and end index) for a recognized entity (for example a hashtag or a mention). `start` must be smaller than `end`. The start index is inclusive, the end index is inclusive.\n *\n * @public\n */\nexport interface EntityIndicesInclusiveInclusive {\n /** Index (zero-based) at which position this entity ends. The index is inclusive. */ end: number;\n /** Index (zero-based) at which position this entity starts. The index is inclusive. */ start: number;\n} /**\nSchema type for Error\n *\n * @public\n */\nexport interface Error {\n /** none */ code: number;\n /** none */ message: string;\n} /**\nSchema type for EvaluateNoteRequest\n *\n * @public\n */\nexport interface EvaluateNoteRequest {\n /** Text for the community note. */ noteText: string;\n postId: TweetId;\n} /**\nSchema type for EvaluateNoteResponse\n *\n * @public\n */\nexport interface EvaluateNoteResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Expansions\n *\n * @public\n */\nexport interface Expansions {\n /** none */ media?: Array<Media>;\n /** none */ places?: Array<Place>;\n /** none */ polls?: Array<Poll>;\n /** none */ topics?: Array<Topic>;\n /** none */ tweets?: Array<Tweet>;\n /** none */ users?: Array<User>;\n}\n/**\nA problem that indicates that you are not allowed to see a particular field on a Tweet, User, etc.\n *\n * @public\n */\nexport type FieldUnauthorizedProblem = any; /**\nA Tweet or error that can be returned by the streaming Tweet API. The values returned with a successful streamed Tweet includes the user provided rules that the Tweet matched.\n *\n * @public\n */\nexport interface FilteredStreamingTweetResponse {\n data?: Tweet;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** The list of rules which matched the Tweet */ matchingRules?: Array<\n Record<string, any>\n >;\n} /**\nSchema type for FoundMediaOrigin\n *\n * @public\n */\nexport interface FoundMediaOrigin {\n /** Unique Identifier of media within provider ( <= 24 characters )) */ id: string;\n /** The media provider (e.g., 'giphy') that sourced the media ( <= 8 Characters ) */ provider: string;\n} /**\nSchema type for FullTextEntities\n *\n * @public\n */\nexport interface FullTextEntities {\n /** none */ annotations?: Array<any>;\n /** none */ cashtags?: Array<CashtagEntity>;\n /** none */ hashtags?: Array<HashtagEntity>;\n /** none */ mentions?: Array<MentionEntity>;\n /** none */ urls?: Array<UrlEntity>;\n}\n/**\nA generic problem with no additional information beyond that provided by the HTTP status code.\n *\n * @public\n */\nexport type GenericProblem = any; /**\nSchema type for Geo\n *\n * @public\n */\nexport interface Geo {\n /** none */ bbox: Array<number>;\n geometry?: Point;\n /** none */ properties: Record<string, any>;\n /** none */ type: 'Feature';\n}\n/**\nSchema type for GeoRestrictions\n *\n * @public\n */\nexport type GeoRestrictions = any; /**\nSchema type for Get2CommunitiesIdResponse\n *\n * @public\n */\nexport interface Get2CommunitiesIdResponse {\n data?: Community;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Get2CommunitiesSearchResponse\n *\n * @public\n */\nexport interface Get2CommunitiesSearchResponse {\n /** none */ data?: Array<Community>;\n /** none */ errors?: Array<Problem>;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2ComplianceJobsIdResponse\n *\n * @public\n */\nexport interface Get2ComplianceJobsIdResponse {\n data?: ComplianceJob;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Get2ComplianceJobsResponse\n *\n * @public\n */\nexport interface Get2ComplianceJobsResponse {\n /** none */ data?: Array<ComplianceJob>;\n /** none */ errors?: Array<Problem>;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2DmConversationsIdDmEventsResponse\n *\n * @public\n */\nexport interface Get2DmConversationsIdDmEventsResponse {\n /** none */ data?: Array<DmEvent>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2DmConversationsWithParticipantIdDmEventsResponse\n *\n * @public\n */\nexport interface Get2DmConversationsWithParticipantIdDmEventsResponse {\n /** none */ data?: Array<DmEvent>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2DmEventsEventIdResponse\n *\n * @public\n */\nexport interface Get2DmEventsEventIdResponse {\n data?: DmEvent;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2DmEventsResponse\n *\n * @public\n */\nexport interface Get2DmEventsResponse {\n /** none */ data?: Array<DmEvent>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2FdxAccountsAccountidContactResponse\n *\n * @public\n */\nexport interface Get2FdxAccountsAccountidContactResponse {\n data?: PlaidAccountContact;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Get2FdxAccountsAccountidPayment-networksResponse\n *\n * @public\n */\nexport interface Get2FdxAccountsAccountidPayment_networksResponse {\n /** none */ data?: Array<PlaidAccountPaymentNetwork>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Get2FdxAccountsAccountidResponse\n *\n * @public\n */\nexport interface Get2FdxAccountsAccountidResponse {\n data?: PlaidAccount;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Get2FdxAccountsAccountidTransactionsResponse\n *\n * @public\n */\nexport interface Get2FdxAccountsAccountidTransactionsResponse {\n /** none */ data?: Array<PlaidAccountTransaction>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Get2FdxCustomersCurrentResponse\n *\n * @public\n */\nexport interface Get2FdxCustomersCurrentResponse {\n data?: PlaidCustomer;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Get2Insights28hrResponse\n *\n * @public\n */\nexport interface Get2Insights28hrResponse {\n /** none */ data?: Array<Engagement>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Get2InsightsHistoricalResponse\n *\n * @public\n */\nexport interface Get2InsightsHistoricalResponse {\n /** none */ data?: Array<Engagement>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Get2LikesFirehoseStreamResponse\n *\n * @public\n */\nexport interface Get2LikesFirehoseStreamResponse {\n data?: LikeWithTweetAuthor;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2LikesSample10StreamResponse\n *\n * @public\n */\nexport interface Get2LikesSample10StreamResponse {\n data?: LikeWithTweetAuthor;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2ListsIdFollowersResponse\n *\n * @public\n */\nexport interface Get2ListsIdFollowersResponse {\n /** none */ data?: Array<User>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2ListsIdMembersResponse\n *\n * @public\n */\nexport interface Get2ListsIdMembersResponse {\n /** none */ data?: Array<User>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2ListsIdResponse\n *\n * @public\n */\nexport interface Get2ListsIdResponse {\n data?: List;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2ListsIdTweetsResponse\n *\n * @public\n */\nexport interface Get2ListsIdTweetsResponse {\n /** none */ data?: Array<Tweet>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2MediaAnalyticsResponse\n *\n * @public\n */\nexport interface Get2MediaAnalyticsResponse {\n data?: MediaAnalytics;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Get2MediaMediaKeyResponse\n *\n * @public\n */\nexport interface Get2MediaMediaKeyResponse {\n data?: Media;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Get2MediaResponse\n *\n * @public\n */\nexport interface Get2MediaResponse {\n /** none */ data?: Array<Media>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Get2NotesSearchNotesWrittenResponse\n *\n * @public\n */\nexport interface Get2NotesSearchNotesWrittenResponse {\n /** none */ data?: Array<Note>;\n /** none */ errors?: Array<Problem>;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2NotesSearchPostsEligibleForNotesResponse\n *\n * @public\n */\nexport interface Get2NotesSearchPostsEligibleForNotesResponse {\n /** none */ data?: Array<Tweet>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2SpacesByCreatorIdsResponse\n *\n * @public\n */\nexport interface Get2SpacesByCreatorIdsResponse {\n /** none */ data?: Array<Space>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2SpacesIdBuyersResponse\n *\n * @public\n */\nexport interface Get2SpacesIdBuyersResponse {\n /** none */ data?: Array<User>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2SpacesIdResponse\n *\n * @public\n */\nexport interface Get2SpacesIdResponse {\n data?: Space;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2SpacesIdTweetsResponse\n *\n * @public\n */\nexport interface Get2SpacesIdTweetsResponse {\n /** none */ data?: Array<Tweet>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2SpacesResponse\n *\n * @public\n */\nexport interface Get2SpacesResponse {\n /** none */ data?: Array<Space>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2SpacesSearchResponse\n *\n * @public\n */\nexport interface Get2SpacesSearchResponse {\n /** none */ data?: Array<Space>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2TrendsByWoeidWoeidResponse\n *\n * @public\n */\nexport interface Get2TrendsByWoeidWoeidResponse {\n /** none */ data?: Array<Trend>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Get2TweetsAnalyticsResponse\n *\n * @public\n */\nexport interface Get2TweetsAnalyticsResponse {\n data?: Analytics;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Get2TweetsCountsAllResponse\n *\n * @public\n */\nexport interface Get2TweetsCountsAllResponse {\n /** none */ data?: Array<SearchCount>;\n /** none */ errors?: Array<Problem>;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2TweetsCountsRecentResponse\n *\n * @public\n */\nexport interface Get2TweetsCountsRecentResponse {\n /** none */ data?: Array<SearchCount>;\n /** none */ errors?: Array<Problem>;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2TweetsFirehoseStreamLangEnResponse\n *\n * @public\n */\nexport interface Get2TweetsFirehoseStreamLangEnResponse {\n data?: Tweet;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2TweetsFirehoseStreamLangJaResponse\n *\n * @public\n */\nexport interface Get2TweetsFirehoseStreamLangJaResponse {\n data?: Tweet;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2TweetsFirehoseStreamLangKoResponse\n *\n * @public\n */\nexport interface Get2TweetsFirehoseStreamLangKoResponse {\n data?: Tweet;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2TweetsFirehoseStreamLangPtResponse\n *\n * @public\n */\nexport interface Get2TweetsFirehoseStreamLangPtResponse {\n data?: Tweet;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2TweetsFirehoseStreamResponse\n *\n * @public\n */\nexport interface Get2TweetsFirehoseStreamResponse {\n data?: Tweet;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2TweetsIdLikingUsersResponse\n *\n * @public\n */\nexport interface Get2TweetsIdLikingUsersResponse {\n /** none */ data?: Array<User>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2TweetsIdQuoteTweetsResponse\n *\n * @public\n */\nexport interface Get2TweetsIdQuoteTweetsResponse {\n /** none */ data?: Array<Tweet>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2TweetsIdResponse\n *\n * @public\n */\nexport interface Get2TweetsIdResponse {\n data?: Tweet;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2TweetsIdRetweetedByResponse\n *\n * @public\n */\nexport interface Get2TweetsIdRetweetedByResponse {\n /** none */ data?: Array<User>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2TweetsIdRetweetsResponse\n *\n * @public\n */\nexport interface Get2TweetsIdRetweetsResponse {\n /** none */ data?: Array<Tweet>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2TweetsResponse\n *\n * @public\n */\nexport interface Get2TweetsResponse {\n /** none */ data?: Array<Tweet>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2TweetsSample10StreamResponse\n *\n * @public\n */\nexport interface Get2TweetsSample10StreamResponse {\n data?: Tweet;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2TweetsSampleStreamResponse\n *\n * @public\n */\nexport interface Get2TweetsSampleStreamResponse {\n data?: Tweet;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2TweetsSearchAllResponse\n *\n * @public\n */\nexport interface Get2TweetsSearchAllResponse {\n /** none */ data?: Array<Tweet>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2TweetsSearchRecentResponse\n *\n * @public\n */\nexport interface Get2TweetsSearchRecentResponse {\n /** none */ data?: Array<Tweet>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2TweetsSearchStreamResponse\n *\n * @public\n */\nexport interface Get2TweetsSearchStreamResponse {\n data?: Tweet;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2TweetsSearchStreamRulesCountsResponse\n *\n * @public\n */\nexport interface Get2TweetsSearchStreamRulesCountsResponse {\n data?: RulesCount;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Get2UsageTweetsResponse\n *\n * @public\n */\nexport interface Get2UsageTweetsResponse {\n data?: Usage;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Get2UsersByResponse\n *\n * @public\n */\nexport interface Get2UsersByResponse {\n /** none */ data?: Array<User>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2UsersByUsernameUsernameResponse\n *\n * @public\n */\nexport interface Get2UsersByUsernameUsernameResponse {\n data?: User;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2UsersIdBlockingResponse\n *\n * @public\n */\nexport interface Get2UsersIdBlockingResponse {\n /** none */ data?: Array<User>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2UsersIdBookmarksResponse\n *\n * @public\n */\nexport interface Get2UsersIdBookmarksResponse {\n /** none */ data?: Array<Tweet>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2UsersIdFollowedListsResponse\n *\n * @public\n */\nexport interface Get2UsersIdFollowedListsResponse {\n /** none */ data?: Array<List>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2UsersIdFollowersResponse\n *\n * @public\n */\nexport interface Get2UsersIdFollowersResponse {\n /** none */ data?: Array<User>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2UsersIdFollowingResponse\n *\n * @public\n */\nexport interface Get2UsersIdFollowingResponse {\n /** none */ data?: Array<User>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2UsersIdLikedTweetsResponse\n *\n * @public\n */\nexport interface Get2UsersIdLikedTweetsResponse {\n /** none */ data?: Array<Tweet>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2UsersIdListMembershipsResponse\n *\n * @public\n */\nexport interface Get2UsersIdListMembershipsResponse {\n /** none */ data?: Array<List>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2UsersIdMentionsResponse\n *\n * @public\n */\nexport interface Get2UsersIdMentionsResponse {\n /** none */ data?: Array<Tweet>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2UsersIdMutingResponse\n *\n * @public\n */\nexport interface Get2UsersIdMutingResponse {\n /** none */ data?: Array<User>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2UsersIdOwnedListsResponse\n *\n * @public\n */\nexport interface Get2UsersIdOwnedListsResponse {\n /** none */ data?: Array<List>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2UsersIdPinnedListsResponse\n *\n * @public\n */\nexport interface Get2UsersIdPinnedListsResponse {\n /** none */ data?: Array<List>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2UsersIdResponse\n *\n * @public\n */\nexport interface Get2UsersIdResponse {\n data?: User;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2UsersIdTimelinesReverseChronologicalResponse\n *\n * @public\n */\nexport interface Get2UsersIdTimelinesReverseChronologicalResponse {\n /** none */ data?: Array<Tweet>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2UsersIdTweetsResponse\n *\n * @public\n */\nexport interface Get2UsersIdTweetsResponse {\n /** none */ data?: Array<Tweet>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2UsersMeResponse\n *\n * @public\n */\nexport interface Get2UsersMeResponse {\n data?: User;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2UsersPersonalizedTrendsResponse\n *\n * @public\n */\nexport interface Get2UsersPersonalizedTrendsResponse {\n /** none */ data?: Array<PersonalizedTrend>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Get2UsersRepostsOfMeResponse\n *\n * @public\n */\nexport interface Get2UsersRepostsOfMeResponse {\n /** none */ data?: Array<Tweet>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2UsersResponse\n *\n * @public\n */\nexport interface Get2UsersResponse {\n /** none */ data?: Array<User>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for Get2UsersSearchResponse\n *\n * @public\n */\nexport interface Get2UsersSearchResponse {\n /** none */ data?: Array<User>;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n /** none */ meta?: Record<string, any>;\n} /**\nSchema type for Get2WebhooksResponse\n *\n * @public\n */\nexport interface Get2WebhooksResponse {\n /** none */ data?: Array<WebhookConfig>;\n /** none */ errors?: Array<Problem>;\n /** none */ meta?: Record<string, any>;\n}\n/**\nSchema type for HashtagEntity\n *\n * @public\n */\nexport type HashtagEntity = any; /**\nRepresent the portion of text recognized as a Hashtag, and its start and end position within the text.\n *\n * @public\n */\nexport interface HashtagFields {\n /** The text of the Hashtag. */ tag: string;\n} /**\nHTTP Status Code.\n *\n * @public\n */\nexport type HttpStatusCode = number;\n/**\nA problem that indicates this request is invalid.\n *\n * @public\n */\nexport type InvalidRequestProblem = any;\n/**\nThe rule you have submitted is invalid.\n *\n * @public\n */\nexport type InvalidRuleProblem = any; /**\nCompliance Job ID.\n *\n * @public\n */\nexport type JobId = string; /**\nSchema type for KillAllConnectionsResponse\n *\n * @public\n */\nexport interface KillAllConnectionsResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for LikeComplianceSchema\n *\n * @public\n */\nexport interface LikeComplianceSchema {\n delete: UnlikeComplianceSchema;\n} /**\nThe unique identifier of this Like.\n *\n * @public\n */\nexport type LikeId = string;\n/**\nLikes compliance stream events.\n *\n * @public\n */\nexport type LikesComplianceStreamResponse = any; /**\nA Like event, with the tweet author user and the tweet being liked\n *\n * @public\n */\nexport interface LikeWithTweetAuthor {\n /** Creation time of the Tweet. */ createdAt?: string;\n id?: LikeId;\n likedTweetId?: TweetId;\n /** Timestamp in milliseconds of creation. */ timestampMs?: number;\n tweetAuthorId?: UserId;\n} /**\nA X List is a curated group of accounts.\n *\n * @public\n */\nexport interface List {\n /** none */ createdAt?: string;\n /** none */ description?: string;\n /** none */ followerCount?: number;\n id: ListId;\n /** none */ memberCount?: number;\n /** The name of this List. */ name: string;\n ownerId?: UserId;\n /** none */ private?: boolean;\n} /**\nSchema type for ListAddUserRequest\n *\n * @public\n */\nexport interface ListAddUserRequest {\n userId: UserId;\n} /**\nSchema type for ListCreateRequest\n *\n * @public\n */\nexport interface ListCreateRequest {\n /** none */ description?: string;\n /** none */ name: string;\n /** none */ private?: boolean;\n} /**\nSchema type for ListCreateResponse\n *\n * @public\n */\nexport interface ListCreateResponse {\n /** A X List is a curated group of accounts. */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for ListDeleteResponse\n *\n * @public\n */\nexport interface ListDeleteResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for ListFollowedRequest\n *\n * @public\n */\nexport interface ListFollowedRequest {\n listId: ListId;\n} /**\nSchema type for ListFollowedResponse\n *\n * @public\n */\nexport interface ListFollowedResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nThe unique identifier of this List.\n *\n * @public\n */\nexport type ListId = string; /**\nSchema type for ListMutateResponse\n *\n * @public\n */\nexport interface ListMutateResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for ListPinnedRequest\n *\n * @public\n */\nexport interface ListPinnedRequest {\n listId: ListId;\n} /**\nSchema type for ListPinnedResponse\n *\n * @public\n */\nexport interface ListPinnedResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for ListUnpinResponse\n *\n * @public\n */\nexport interface ListUnpinResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for ListUpdateRequest\n *\n * @public\n */\nexport interface ListUpdateRequest {\n /** none */ description?: string;\n /** none */ name?: string;\n /** none */ private?: boolean;\n} /**\nSchema type for ListUpdateResponse\n *\n * @public\n */\nexport interface ListUpdateResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for ManagementInfo\n *\n * @public\n */\nexport interface ManagementInfo {\n /** Indicates if the media is managed by Media Studio */ managed: boolean;\n} /**\nSchema type for Media\n *\n * @public\n */\nexport interface Media {\n height?: MediaHeight;\n mediaKey?: MediaKey;\n /** none */ type: string;\n width?: MediaWidth;\n} /**\nSchema type for MediaAnalytics\n *\n * @public\n */\nexport interface MediaAnalytics {\n /** none */ data?: Array<Record<string, any>>;\n /** none */ errors?: Array<Problem>;\n} /**\nA string enum value which identifies a media use-case. This identifier is used to enforce use-case specific constraints (e.g. file size, video duration) and enable advanced features.\n *\n * @public\n */\nexport type MediaCategory =\n | 'amplify_video'\n | 'tweet_gif'\n | 'tweet_image'\n | 'tweet_video'\n | 'dm_gif'\n | 'dm_image'\n | 'dm_video'\n | 'subtitles'; /**\nA string enum value which identifies a media use-case. This identifier is used to enforce use-case specific constraints (e.g. file size) and enable advanced features.\n *\n * @public\n */\nexport type MediaCategoryOneShot =\n | 'tweet_image'\n | 'dm_image'\n | 'subtitles'; /**\nThe media category of uploaded media to which subtitles should be added/deleted\n *\n * @public\n */\nexport type MediaCategorySubtitles =\n | 'AmplifyVideo'\n | 'TweetVideo'; /**\nThe height of the media in pixels.\n *\n * @public\n */\nexport type MediaHeight = number; /**\nThe unique identifier of this Media.\n *\n * @public\n */\nexport type MediaId = string; /**\nThe Media Key identifier for this attachment.\n *\n * @public\n */\nexport type MediaKey = string; /**\nSchema type for MediaMetrics\n *\n * @public\n */\nexport interface MediaMetrics {\n /** Tracks the number of clicks on a call-to-action URL */ ctaUrlClicks?: number;\n /** Tracks the number of clicks to watch a video or media content */ ctaWatchClicks?: number;\n /** Tracks the number of times a video or media is played from a user tap */ playFromTap?: number;\n /** Tracks the number of times a video reaches 25% of its duration */ playback25?: number;\n /** Tracks the number of times a video reaches 50% of its duration */ playback50?: number;\n /** Tracks the number of times a video reaches 75% of its duration */ playback75?: number;\n /** Tracks the number of times a video is played to completion */ playbackComplete?: number;\n /** Tracks the number of times a video playback is initiated */ playbackStart?: number;\n /** Tracks the number of times a video is viewed */ videoViews?: number;\n /** Tracks the total time spent watching a video, measured in milliseconds */ watchTimeMs?: number;\n} /**\nThe file to upload.\n *\n * @public\n */\nexport type MediaPayloadBinary = string; /**\nThe file to upload.\n *\n * @public\n */\nexport type MediaPayloadByte = string;\n/**\nSchema type for MediaSegments\n *\n * @public\n */\nexport type MediaSegments = any; /**\nSchema type for MediaTimestampedMetrics\n *\n * @public\n */\nexport interface MediaTimestampedMetrics {\n metrics?: MediaMetrics;\n /** ISO8601 Time */ timestamp?: string;\n}\n/**\nSchema type for MediaUploadAppendRequest\n *\n * @public\n */\nexport type MediaUploadAppendRequest = any; /**\nA response from getting a media upload request status.\n *\n * @public\n */\nexport interface MediaUploadAppendResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for MediaUploadConfigRequest\n *\n * @public\n */\nexport interface MediaUploadConfigRequest {\n /** none */ additionalOwners?: Array<UserId>;\n mediaCategory?: MediaCategory;\n /** The type of media. */ mediaType?:\n | 'video/mp4'\n | 'video/webm'\n | 'video/mp2t'\n | 'video/quicktime'\n | 'text/srt'\n | 'text/vtt'\n | 'image/jpeg'\n | 'image/gif'\n | 'image/bmp'\n | 'image/png'\n | 'image/webp'\n | 'image/pjpeg'\n | 'image/tiff'\n | 'model/gltf-binary'\n | 'model/vnd.usdz+zip';\n /** Whether this media is shared or not. */ shared?: boolean;\n /** The total size of the media upload in bytes. */ totalBytes?: number;\n} /**\nSchema type for MediaUploadRequestOneShot\n *\n * @public\n */\nexport interface MediaUploadRequestOneShot {\n /** none */ additionalOwners?: Array<UserId>;\n /** none */ media: any;\n mediaCategory: MediaCategoryOneShot;\n /** The type of image or subtitle. */ mediaType?:\n | 'text/srt'\n | 'text/vtt'\n | 'image/jpeg'\n | 'image/bmp'\n | 'image/png'\n | 'image/webp'\n | 'image/pjpeg'\n | 'image/tiff';\n /** Whether this media is shared or not. */ shared?: boolean;\n} /**\nA response from getting a media upload request status.\n *\n * @public\n */\nexport interface MediaUploadResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nThe width of the media in pixels.\n *\n * @public\n */\nexport type MediaWidth = number;\n/**\nSchema type for MentionEntity\n *\n * @public\n */\nexport type MentionEntity = any; /**\nRepresent the portion of text recognized as a User mention, and its start and end position within the text.\n *\n * @public\n */\nexport interface MentionFields {\n id?: UserId;\n username: UserName;\n} /**\nSchema type for MetadataCreateRequest\n *\n * @public\n */\nexport interface MetadataCreateRequest {\n id: MediaId;\n /** none */ metadata?: Record<string, any>;\n} /**\nSchema type for MetadataCreateResponse\n *\n * @public\n */\nexport interface MetadataCreateResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for Metrics\n *\n * @public\n */\nexport interface Metrics {\n /** Tracks number of App Install Attempts */ appInstallAttempts?: number;\n /** Tracks number of App opens */ appOpens?: number;\n /** Tracks number of Detail expands */ detailExpands?: number;\n /** Tracks number of Email Tweet actions */ emailTweet?: number;\n /** Tracks total Engagements */ engagements?: number;\n /** Tracks number of Follows */ follows?: number;\n /** Tracks number of Hashtag clicks */ hashtagClicks?: number;\n /** Tracks number of Impressions */ impressions?: number;\n /** Tracks number of Likes */ likes?: number;\n /** Tracks number of Link clicks */ linkClicks?: number;\n /** Tracks number of Media engagements */ mediaEngagements?: number;\n /** Tracks number of Media views */ mediaViews?: number;\n /** Tracks number of Permalink clicks */ permalinkClicks?: number;\n /** Tracks number of Profile visits */ profileVisits?: number;\n /** Tracks number of Quote Tweets */ quoteTweets?: number;\n /** Tracks number of Replies */ replies?: number;\n /** Tracks number of Retweets */ retweets?: number;\n /** Tracks number of URL clicks */ urlClicks?: number;\n /** Tracks number of User Profile clicks */ userProfileClicks?: number;\n} /**\nCommunity Note misleading tags type.\n *\n * @public\n */\nexport type MisleadingTags =\n | 'disputed_claim_as_fact'\n | 'factual_error'\n | 'manipulated_media'\n | 'misinterpreted_satire'\n | 'missing_important_context'\n | 'other'\n | 'outdated_information'; /**\nSchema type for MuteUserMutationResponse\n *\n * @public\n */\nexport interface MuteUserMutationResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for MuteUserRequest\n *\n * @public\n */\nexport interface MuteUserRequest {\n targetUserId: UserId;\n} /**\nThe newest id in this response.\n *\n * @public\n */\nexport type NewestId = string; /**\nThe next token.\n *\n * @public\n */\nexport type NextToken = string;\n/**\nA problem that indicates the user's rule set is not compliant.\n *\n * @public\n */\nexport type NonCompliantRulesProblem = any; /**\nA X Community Note is a note on a Post.\n *\n * @public\n */\nexport interface Note {\n id: NoteId;\n info?: NoteInfo;\n postId: TweetId;\n status?: NoteRatingStatus;\n testResult?: NoteTestResult;\n} /**\nCommunity Note classification type.\n *\n * @public\n */\nexport type NoteClassification =\n | 'misinformed_or_potentially_misleading'\n | 'not_misleading'; /**\nThe unique identifier of this Community Note.\n *\n * @public\n */\nexport type NoteId = string; /**\nA X Community Note is a note on a Post.\n *\n * @public\n */\nexport interface NoteInfo {\n classification: NoteClassification;\n /** none */ misleadingTags: Array<MisleadingTags>;\n /** The text summary in the Community Note. */ text: string;\n /** Whether the note provided trustworthy links. */ trustworthySources: boolean;\n} /**\nCommunity Note rating status\n *\n * @public\n */\nexport type NoteRatingStatus =\n | 'currently_rated_helpful'\n | 'currently_rated_not_helpful'\n | 'firm_reject'\n | 'insufficient_consensus'\n | 'minimum_ratings_not_met'\n | 'needs_more_ratings'\n | 'needs_your_help'; /**\nThe evaluation result of a community note.\n *\n * @public\n */\nexport interface NoteTestResult {\n /** Score bucket from the evaluator result. */ evaluatorScoreBucket?: string;\n /** The type of the evaluator. */ evaluatorType?: string;\n} /**\nThe note content of the Tweet.\n *\n * @public\n */\nexport type NoteTweetText = string;\n/**\nA problem that indicates your client application does not have the required OAuth1 permissions for the requested endpoint.\n *\n * @public\n */\nexport type Oauth1PermissionsProblem = any; /**\nThe oldest id in this response.\n *\n * @public\n */\nexport type OldestId = string;\n/**\nYou have been disconnected for operational reasons.\n *\n * @public\n */\nexport type OperationalDisconnectProblem = any; /**\nA base32 pagination token.\n *\n * @public\n */\nexport type PaginationToken32 = string; /**\nA base36 pagination token.\n *\n * @public\n */\nexport type PaginationToken36 = string; /**\nA 'long' pagination token.\n *\n * @public\n */\nexport type PaginationTokenLong = string; /**\nA trend.\n *\n * @public\n */\nexport interface PersonalizedTrend {\n /** Category of this trend. */ category?: string;\n /** Number of posts pertaining to this trend. */ postCount?: number;\n /** Name of the trend. */ trendName?: string;\n /** Time since this is trending. */ trendingSince?: string;\n}\n/**\nSchema type for Photo\n *\n * @public\n */\nexport type Photo = any; /**\nSchema type for Place\n *\n * @public\n */\nexport interface Place {\n /** none */ containedWithin?: Array<PlaceId>;\n /** The full name of the county in which this place exists. */ country?: string;\n countryCode?: CountryCode;\n /** The full name of this place. */ fullName: string;\n geo?: Geo;\n id: PlaceId;\n /** The human readable name of this place. */ name?: string;\n placeType?: PlaceType;\n} /**\nThe identifier for this place.\n *\n * @public\n */\nexport type PlaceId = string; /**\nSchema type for PlaceType\n *\n * @public\n */\nexport type PlaceType =\n | 'poi'\n | 'neighborhood'\n | 'city'\n | 'admin'\n | 'country'\n | 'unknown'; /**\nDescriptor for a Plaid account.\n *\n * @public\n */\nexport interface PlaidAccount {\n /** The category of the account (e.g., personal, business). */ accountCategory: string;\n /** The Plaid account ID. */ accountId: string;\n /** The last 2-4 digits of the account number. */ accountNumberDisplay: string;\n /** The type of the account (e.g., checking, savings). */ accountType: string;\n /** The available balance of the account. */ availableBalance?: number;\n currency: PlaidCurrency;\n /** The current balance of the account. */ currentBalance?: number;\n /** The nickname of the account. */ nickname?: string;\n /** The name of the product associated with the account. */ productName: string;\n /** The status of the account. */ status: string;\n} /**\nContact information associated with a Plaid account.\n *\n * @public\n */\nexport interface PlaidAccountContact {\n /** List of addresses associated with the account holder. */ addresses: Array<\n PlaidAddress\n >;\n /** List of email addresses associated with the account holder. */ emails: Array<\n string\n >;\n name: PlaidName;\n /** Relationship of the contact to the account. */ relationship?: string;\n /** List of telephone numbers associated with the account holder. */ telephones: Array<\n PlaidTelephone\n >;\n} /**\nPayment network details associated with the account.\n *\n * @public\n */\nexport interface PlaidAccountPaymentNetwork {\n /** The bank ID associated with the account. */ bankId: string;\n /** The payment network identifier. */ identifier: string;\n /** Indicates if transfers into the account are supported. */ transferIn: boolean;\n /** Indicates if transfers out of the account are supported. */ transferOut: boolean;\n /** The type of payment network (e.g., ACH, SEPA). */ type: string;\n} /**\nDescriptor for a Plaid account.\n *\n * @public\n */\nexport interface PlaidAccountTransaction {\n /** The category of the account (e.g., personal, business). */ accountCategory: string;\n /** The amount transacted. */ amount: number;\n /** Memo for transaction (e.g. CREDIT) */ debitCreditMemo: string;\n /** The transaction description */ description: string;\n /** The timestamp when the transaction was posted. */ postedTimestamp?: string;\n /** The status of the transaction. */ status: string;\n /** The identifier for the transaction. */ transactionId: string;\n /** The timestamp when the transaction occurred. */ transactionTimestamp: string;\n} /**\nAddress information for the account holder.\n *\n * @public\n */\nexport interface PlaidAddress {\n /** The city of the address. */ city: string;\n /** The country of the address (ISO 3166-1 alpha-2 code). */ country: string;\n /** The first line of the address. */ line1: string;\n /** The second line of the address. */ line2?: string;\n /** The postal code of the address. */ postalCode?: string;\n /** The region or state of the address. */ region?: string;\n} /**\nCurrency information.\n *\n * @public\n */\nexport interface PlaidCurrency {\n /** The ISO 4217 currency code. */ currencyCode: string;\n} /**\nA user id for the plaid customer\n *\n * @public\n */\nexport interface PlaidCustomer {\n customerId?: UserId;\n} /**\nName information for the account holder.\n *\n * @public\n */\nexport interface PlaidName {\n /** The first name of the account holder. */ first: string;\n /** The last name of the account holder. */ last: string;\n} /**\nTelephone information for the account holder.\n *\n * @public\n */\nexport interface PlaidTelephone {\n /** The country code for the phone number (e.g., '+1'). */ country: string;\n /** The phone number. */ number: string;\n /** The type of phone number (e.g., 'mobile'). */ type: string;\n} /**\nA [GeoJson Point](https://tools.ietf.org/html/rfc7946#section-3.1.2) geometry object.\n *\n * @public\n */\nexport interface Point {\n coordinates: Position;\n /** none */ type: 'Point';\n} /**\nRepresent a Poll attached to a Tweet.\n *\n * @public\n */\nexport interface Poll {\n /** none */ durationMinutes?: number;\n /** none */ endDatetime?: string;\n id: PollId;\n /** none */ options: Array<PollOption>;\n /** none */ votingStatus?: 'open' | 'closed';\n} /**\nUnique identifier of this poll.\n *\n * @public\n */\nexport type PollId = string; /**\nDescribes a choice in a Poll object.\n *\n * @public\n */\nexport interface PollOption {\n label: PollOptionLabel;\n /** Position of this choice in the poll. */ position: number;\n /** Number of users who voted for this choice. */ votes: number;\n} /**\nThe text of a poll choice.\n *\n * @public\n */\nexport type PollOptionLabel = string; /**\nA [GeoJson Position](https://tools.ietf.org/html/rfc7946#section-3.1.1) in the format `[longitude,latitude]`.\n *\n * @public\n */\nexport type Position = Array<\n number\n>; /**\nSchema type for PreviewImage\n *\n * @public\n */\nexport interface PreviewImage {\n /** none */ mediaKey: Record<string, any>;\n} /**\nThe previous token.\n *\n * @public\n */\nexport type PreviousToken = string; /**\nAn HTTP Problem Details object, as defined in IETF RFC 7807 (https://tools.ietf.org/html/rfc7807).\n *\n * @public\n */\nexport interface Problem {\n /** none */ detail?: string;\n /** none */ status?: number;\n /** none */ title: string;\n /** none */ type: string;\n} /**\nSchema type for ProcessingInfo\n *\n * @public\n */\nexport interface ProcessingInfo {\n /** Number of seconds to check again for status */ checkAfterSecs?: number;\n /** Percent of upload progress */ progressPercent?: number;\n /** State of upload */ state?:\n | 'succeeded'\n | 'in_progress'\n | 'pending'\n | 'failed';\n} /**\nConfirmation that the replay job request was accepted.\n *\n * @public\n */\nexport interface ReplayJobCreateResponse {\n /** The UTC timestamp indicating when the replay job was created. */ createdAt: string;\n /** The unique identifier for the initiated replay job. */ jobId: string;\n} /**\nShows who can reply a Tweet. Fields returned are everyone, mentioned_users, and following.\n *\n * @public\n */\nexport type ReplySettings =\n | 'everyone'\n | 'mentionedUsers'\n | 'following'\n | 'other'; /**\nShows who can reply a Tweet. Fields returned are everyone, mentioned_users, subscribers, verified and following.\n *\n * @public\n */\nexport type ReplySettingsWithVerifiedUsers =\n | 'everyone'\n | 'mentionedUsers'\n | 'following'\n | 'other'\n | 'subscribers'\n | 'verified';\n/**\nA problem that indicates that a given Tweet, User, etc. does not exist.\n *\n * @public\n */\nexport type ResourceNotFoundProblem = any;\n/**\nA problem that indicates you are not allowed to see a particular Tweet, User, etc.\n *\n * @public\n */\nexport type ResourceUnauthorizedProblem = any;\n/**\nA problem that indicates a particular Tweet, User, etc. is not available to you.\n *\n * @public\n */\nexport type ResourceUnavailableProblem = any; /**\nThe number of results returned in this response.\n *\n * @public\n */\nexport type ResultCount = number; /**\nA user-provided stream filtering rule.\n *\n * @public\n */\nexport interface Rule {\n id?: RuleId;\n tag?: RuleTag;\n value: RuleValue;\n} /**\nUnique identifier of this rule.\n *\n * @public\n */\nexport type RuleId = string; /**\nA user-provided stream filtering rule.\n *\n * @public\n */\nexport interface RuleNoId {\n tag?: RuleTag;\n value: RuleValue;\n}\n/**\nYou have exceeded the maximum number of rules.\n *\n * @public\n */\nexport type RulesCapProblem = any; /**\nA count of user-provided stream filtering rules at the application and project levels.\n *\n * @public\n */\nexport interface RulesCount {\n allProjectClientApps?: AllProjectClientApps;\n /** Cap of number of rules allowed per client application */ capPerClientApp?: number;\n /** Cap of number of rules allowed per project */ capPerProject?: number;\n clientAppRulesCount?: AppRulesCount;\n /** Number of rules for project */ projectRulesCount?: number;\n} /**\nSchema type for RulesLookupResponse\n *\n * @public\n */\nexport interface RulesLookupResponse {\n /** none */ data?: Array<Rule>;\n meta: RulesResponseMetadata;\n}\n/**\nSchema type for RulesRequestSummary\n *\n * @public\n */\nexport type RulesRequestSummary = any; /**\nSchema type for RulesResponseMetadata\n *\n * @public\n */\nexport interface RulesResponseMetadata {\n nextToken?: NextToken;\n /** Number of Rules in result set. */ resultCount?: number;\n /** none */ sent: string;\n summary?: RulesRequestSummary;\n} /**\nA tag meant for the labeling of user provided rules.\n *\n * @public\n */\nexport type RuleTag = string; /**\nThe filterlang value of the rule.\n *\n * @public\n */\nexport type RuleValue = string; /**\nRepresent a Search Count Result.\n *\n * @public\n */\nexport interface SearchCount {\n end: End;\n start: Start;\n tweetCount: TweetCount;\n} /**\nSchema type for SensitiveMediaWarning\n *\n * @public\n */\nexport interface SensitiveMediaWarning {\n /** Indicates if the content contains adult material */ adultContent?: boolean;\n /** Indicates if the content depicts graphic violence */ graphicViolence?: boolean;\n /** Indicates if the content has other sensitive characteristics */ other?: boolean;\n} /**\nSchema type for SharedInfo\n *\n * @public\n */\nexport interface SharedInfo {\n /** Indicates if the media is shared in direct messages */ shared: boolean;\n} /**\nSchema type for Space\n *\n * @public\n */\nexport interface Space {\n /** Creation time of the Space. */ createdAt?: string;\n creatorId?: UserId;\n /** End time of the Space. */ endedAt?: string;\n /** The user ids for the hosts of the Space. */ hostIds?: Array<UserId>;\n id: SpaceId;\n /** An array of user ids for people who were invited to a Space. */ invitedUserIds?: Array<\n UserId\n >;\n /** Denotes if the Space is a ticketed Space. */ isTicketed?: boolean;\n /** The language of the Space. */ lang?: string;\n /** The number of participants in a Space. */ participantCount?: number;\n /** A date time stamp for when a Space is scheduled to begin. */ scheduledStart?: string;\n /** An array of user ids for people who were speakers in a Space. */ speakerIds?: Array<\n UserId\n >;\n /** When the Space was started as a date string. */ startedAt?: string;\n /** The current state of the Space. */ state: 'live' | 'scheduled' | 'ended';\n /** The number of people who have either purchased a ticket or set a reminder for this Space. */ subscriberCount?: number;\n /** The title of the Space. */ title?: string;\n /** The topics of a Space, as selected by its creator. */ topics?: Array<\n Record<string, any>\n >;\n /** When the Space was last updated. */ updatedAt?: string;\n} /**\nThe unique identifier of this Space.\n *\n * @public\n */\nexport type SpaceId = string; /**\nThe start time of the bucket.\n *\n * @public\n */\nexport type Start = string; /**\nSchema type for Sticker\n *\n * @public\n */\nexport interface Sticker {\n /** width-to-height ratio of the media */ aspectRatio?: number;\n /** A unique identifier for the group of annotations associated with the media */ groupAnnotationId?: number;\n /** Unique identifier for sticker */ id?: string;\n /** A unique identifier for the sticker set associated with the media */ stickerSetAnnotationId?: number;\n /** Scale or rotate the media on the x-axis */ transformA?: number;\n /** Skew the media on the x-axis */ transformB?: number;\n /** Skew the media on the y-axis */ transformC?: number;\n /** Scale or rotate the media on the y-axis */ transformD?: number;\n /** Scale or rotate the media on the x-axis */ transformTx?: number;\n /** The vertical translation (shift) value for the media */ transformTy?: number;\n} /**\nSchema type for StickerInfo\n *\n * @public\n */\nexport interface StickerInfo {\n /** Stickers list must not be empty and should not exceed 25 */ stickers: Array<\n Sticker\n >;\n} /**\nSchema type for StreamingLikeResponseV2\n *\n * @public\n */\nexport interface StreamingLikeResponseV2 {\n data?: LikeWithTweetAuthor;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for StreamingTweetResponse\n *\n * @public\n */\nexport interface StreamingTweetResponse {\n data?: Tweet;\n /** none */ errors?: Array<Problem>;\n includes?: Expansions;\n} /**\nSchema type for SubscriptionsCountGetResponse\n *\n * @public\n */\nexport interface SubscriptionsCountGetResponse {\n /** The count of active subscriptions across all webhooks */ data?: Record<\n string,\n any\n >;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for SubscriptionsCreateRequest\n *\n * @public\n */\nexport type SubscriptionsCreateRequest = Record<\n string,\n any\n>; /**\nSchema type for SubscriptionsCreateResponse\n *\n * @public\n */\nexport interface SubscriptionsCreateResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for SubscriptionsDeleteResponse\n *\n * @public\n */\nexport interface SubscriptionsDeleteResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for SubscriptionsGetResponse\n *\n * @public\n */\nexport interface SubscriptionsGetResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for SubscriptionsListGetResponse\n *\n * @public\n */\nexport interface SubscriptionsListGetResponse {\n /** The list of active subscriptions for a specified webhook */ data?: Record<\n string,\n any\n >;\n /** none */ errors?: Array<Problem>;\n} /**\nThe language code should be a BCP47 code (e.g. 'EN\", \"SP\")\n *\n * @public\n */\nexport type SubtitleLanguageCode = string; /**\nSchema type for Subtitles\n *\n * @public\n */\nexport interface Subtitles {\n /** Language name in a human readable form */ displayName?: string;\n id?: MediaId;\n languageCode?: SubtitleLanguageCode;\n} /**\nSchema type for SubtitlesCreateRequest\n *\n * @public\n */\nexport interface SubtitlesCreateRequest {\n id?: MediaId;\n mediaCategory?: MediaCategorySubtitles;\n subtitles?: Subtitles;\n} /**\nSchema type for SubtitlesCreateResponse\n *\n * @public\n */\nexport interface SubtitlesCreateResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for SubtitlesDeleteRequest\n *\n * @public\n */\nexport interface SubtitlesDeleteRequest {\n id?: MediaId;\n languageCode?: SubtitleLanguageCode;\n mediaCategory?: MediaCategorySubtitles;\n} /**\nSchema type for SubtitlesDeleteResponse\n *\n * @public\n */\nexport interface SubtitlesDeleteResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for TimestampedMetrics\n *\n * @public\n */\nexport interface TimestampedMetrics {\n metrics?: Metrics;\n /** ISO8601 Time */ timestamp?: string;\n} /**\nThe topic of a Space, as selected by its creator.\n *\n * @public\n */\nexport interface Topic {\n /** The description of the given topic. */ description?: string;\n id: TopicId;\n /** The name of the given topic. */ name: string;\n} /**\nUnique identifier of this Topic.\n *\n * @public\n */\nexport type TopicId = string; /**\nA trend.\n *\n * @public\n */\nexport interface Trend {\n /** Name of the trend. */ trendName?: string;\n /** Number of Posts in this trend. */ tweetCount?: number;\n} /**\nSchema type for Tweet\n *\n * @public\n */\nexport interface Tweet {\n /** Specifies the type of attachments (if any) present in this Tweet. */ attachments?: Record<\n string,\n any\n >;\n authorId?: UserId;\n communityId?: CommunityId;\n /** none */ contextAnnotations?: Array<ContextAnnotation>;\n conversationId?: TweetId;\n /** Creation time of the Tweet. */ createdAt?: string;\n displayTextRange?: DisplayTextRange;\n /** none */ editControls?: Record<string, any>;\n /** A list of Tweet Ids in this Tweet chain. */ editHistoryTweetIds?: Array<\n TweetId\n >;\n entities?: FullTextEntities;\n /** The location tagged on the Tweet, if the user provided one. */ geo?: Record<\n string,\n any\n >;\n id?: TweetId;\n inReplyToUserId?: UserId;\n /** Language of the Tweet, if detected by X. Returned as a BCP47 language tag. */ lang?: string;\n /** Nonpublic engagement metrics for the Tweet at the time of the request. */ nonPublicMetrics?: Record<\n string,\n any\n >;\n /** The full-content of the Tweet, including text beyond 280 characters. */ noteTweet?: Record<\n string,\n any\n >;\n /** Organic nonpublic engagement metrics for the Tweet at the time of the request. */ organicMetrics?: Record<\n string,\n any\n >;\n /** Indicates if this Tweet contains URLs marked as sensitive, for example content suitable for mature audiences. */ possiblySensitive?: boolean;\n /** Promoted nonpublic engagement metrics for the Tweet at the time of the request. */ promotedMetrics?: Record<\n string,\n any\n >;\n /** Engagement metrics for the Tweet at the time of the request. */ publicMetrics?: Record<\n string,\n any\n >;\n /** A list of Posts this Tweet refers to. For example, if the parent Tweet is a Retweet, a Quoted Tweet or a Reply, it will include the related Tweet referenced to by its parent. */ referencedTweets?: Array<\n Record<string, any>\n >;\n replySettings?: ReplySettingsWithVerifiedUsers;\n /** The scopes for this tweet */ scopes?: Record<string, any>;\n /** This is deprecated. */ source?: string;\n /** none */ suggestedSourceLinks?: Array<UrlEntity>;\n text?: TweetText;\n username?: UserName;\n withheld?: TweetWithheld;\n}\n/**\nTweet compliance data.\n *\n * @public\n */\nexport type TweetComplianceData = any; /**\nSchema type for TweetComplianceSchema\n *\n * @public\n */\nexport interface TweetComplianceSchema {\n /** Event time. */ eventAt: string;\n quoteTweetId?: TweetId;\n /** none */ tweet: Record<string, any>;\n}\n/**\nTweet compliance stream events.\n *\n * @public\n */\nexport type TweetComplianceStreamResponse = any; /**\nThe count for the bucket.\n *\n * @public\n */\nexport type TweetCount = number; /**\nSchema type for TweetCreateRequest\n *\n * @public\n */\nexport interface TweetCreateRequest {\n /** Card Uri Parameter. This is mutually exclusive from Quote Tweet Id, Poll, Media, and Direct Message Deep Link. */ cardUri?: string;\n communityId?: CommunityId;\n /** Link to take the conversation from the public timeline to a private Direct Message. */ directMessageDeepLink?: string;\n /** Options for editing an existing Post. When provided, this request will edit the specified Post instead of creating a new one. */ editOptions?: Record<\n string,\n any\n >;\n /** Exclusive Tweet for super followers. */ forSuperFollowersOnly?: boolean;\n /** Place ID being attached to the Tweet for geo location. */ geo?: Record<\n string,\n any\n >;\n /** Media information being attached to created Tweet. This is mutually exclusive from Quote Tweet Id, Poll, and Card URI. */ media?: Record<\n string,\n any\n >;\n /** Nullcasted (promoted-only) Posts do not appear in the public timeline and are not served to followers. */ nullcast?: boolean;\n /** Poll options for a Tweet with a poll. This is mutually exclusive from Media, Quote Tweet Id, and Card URI. */ poll?: Record<\n string,\n any\n >;\n quoteTweetId?: TweetId;\n /** Tweet information of the Tweet being replied to. */ reply?: Record<\n string,\n any\n >;\n /** Settings to indicate who can reply to the Tweet. */ replySettings?:\n | 'following'\n | 'mentionedUsers'\n | 'subscribers'\n | 'verified';\n /** Share community post with followers too. */ shareWithFollowers?: boolean;\n text?: TweetText;\n} /**\nSchema type for TweetCreateResponse\n *\n * @public\n */\nexport interface TweetCreateResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for TweetDeleteComplianceSchema\n *\n * @public\n */\nexport interface TweetDeleteComplianceSchema {\n delete: TweetComplianceSchema;\n} /**\nSchema type for TweetDeleteResponse\n *\n * @public\n */\nexport interface TweetDeleteResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for TweetDropComplianceSchema\n *\n * @public\n */\nexport interface TweetDropComplianceSchema {\n drop: TweetComplianceSchema;\n} /**\nSchema type for TweetEditComplianceObjectSchema\n *\n * @public\n */\nexport interface TweetEditComplianceObjectSchema {\n /** none */ editTweetIds: Array<TweetId>;\n /** Event time. */ eventAt: string;\n initialTweetId: TweetId;\n /** none */ tweet: Record<string, any>;\n} /**\nSchema type for TweetEditComplianceSchema\n *\n * @public\n */\nexport interface TweetEditComplianceSchema {\n tweetEdit: TweetEditComplianceObjectSchema;\n} /**\nSchema type for TweetHideRequest\n *\n * @public\n */\nexport interface TweetHideRequest {\n /** none */ hidden: boolean;\n} /**\nSchema type for TweetHideResponse\n *\n * @public\n */\nexport interface TweetHideResponse {\n /** none */ data?: Record<string, any>;\n} /**\nUnique identifier of this Tweet. This is returned as a string in order to avoid complications with languages and tools that cannot handle large integers.\n *\n * @public\n */\nexport type TweetId = string;\n/**\nTweet label data.\n *\n * @public\n */\nexport type TweetLabelData = any;\n/**\nTweet label stream events.\n *\n * @public\n */\nexport type TweetLabelStreamResponse = any; /**\nSchema type for TweetNotice\n *\n * @public\n */\nexport interface TweetNotice {\n /** If the label is being applied or removed. Possible values are ‘apply’ or ‘remove’. */ application: string;\n /** Information shown on the Tweet label */ details?: string;\n /** Event time. */ eventAt: string;\n /** The type of label on the Tweet */ eventType: string;\n /** Link to more information about this kind of label */ extendedDetailsUrl?: string;\n /** Title/header of the Tweet label */ labelTitle?: string;\n /** none */ tweet: Record<string, any>;\n} /**\nSchema type for TweetNoticeSchema\n *\n * @public\n */\nexport interface TweetNoticeSchema {\n publicTweetNotice: TweetNotice;\n} /**\nSchema type for TweetTakedownComplianceSchema\n *\n * @public\n */\nexport interface TweetTakedownComplianceSchema {\n /** Event time. */ eventAt: string;\n quoteTweetId?: TweetId;\n /** none */ tweet: Record<string, any>;\n /** none */ withheldInCountries: Array<CountryCode>;\n} /**\nThe content of the Tweet.\n *\n * @public\n */\nexport type TweetText = string; /**\nSchema type for TweetUndropComplianceSchema\n *\n * @public\n */\nexport interface TweetUndropComplianceSchema {\n undrop: TweetComplianceSchema;\n} /**\nSchema type for TweetUnviewable\n *\n * @public\n */\nexport interface TweetUnviewable {\n /** If the label is being applied or removed. Possible values are ‘apply’ or ‘remove’. */ application: string;\n /** Event time. */ eventAt: string;\n /** none */ tweet: Record<string, any>;\n} /**\nSchema type for TweetUnviewableSchema\n *\n * @public\n */\nexport interface TweetUnviewableSchema {\n publicTweetUnviewable: TweetUnviewable;\n} /**\nIndicates withholding details for [withheld content](https://help.twitter.com/en/rules-and-policies/tweet-withheld-by-country).\n *\n * @public\n */\nexport interface TweetWithheld {\n /** Indicates if the content is being withheld for on the basis of copyright infringement. */ copyright: boolean;\n /** Provides a list of countries where this content is not available. */ countryCodes: Array<\n CountryCode\n >;\n /** Indicates whether the content being withheld is the `tweet` or a `user`. */ scope?:\n | 'tweet'\n | 'user';\n} /**\nSchema type for TweetWithheldComplianceSchema\n *\n * @public\n */\nexport interface TweetWithheldComplianceSchema {\n withheld: TweetTakedownComplianceSchema;\n} /**\nSchema type for UnlikeComplianceSchema\n *\n * @public\n */\nexport interface UnlikeComplianceSchema {\n /** Event time. */ eventAt: string;\n /** none */ favorite: Record<string, any>;\n}\n/**\nA problem that indicates that the authentication used is not supported.\n *\n * @public\n */\nexport type UnsupportedAuthenticationProblem = any; /**\nExpiration time of the upload URL.\n *\n * @public\n */\nexport type UploadExpiration = string; /**\nSchema type for UploadSource\n *\n * @public\n */\nexport interface UploadSource {\n /** Records the source (e.g., app, device) from which the media was uploaded */ uploadSource: string;\n} /**\nURL to which the user will upload their Tweet or user IDs.\n *\n * @public\n */\nexport type UploadUrl = string; /**\nA validly formatted URL.\n *\n * @public\n */\nexport type Url = string;\n/**\nRepresent the portion of text recognized as a URL, and its start and end position within the text.\n *\n * @public\n */\nexport type UrlEntity = any;\n/**\nRepresent the portion of text recognized as a URL, and its start and end position within the text.\n *\n * @public\n */\nexport type UrlEntityDm = any; /**\nRepresent the portion of text recognized as a URL.\n *\n * @public\n */\nexport interface UrlFields {\n /** Description of the URL landing page. */ description?: string;\n /** The URL as displayed in the X client. */ displayUrl?: string;\n expandedUrl?: Url;\n /** none */ images?: Array<UrlImage>;\n mediaKey?: MediaKey;\n status?: HttpStatusCode;\n /** Title of the page the URL points to. */ title?: string;\n /** Fully resolved url. */ unwoundUrl?: string;\n url: Url;\n} /**\nRepresent the information for the URL image.\n *\n * @public\n */\nexport interface UrlImage {\n height?: MediaHeight;\n url?: Url;\n width?: MediaWidth;\n} /**\nUsage per client app\n *\n * @public\n */\nexport interface Usage {\n /** Number of days left for the Tweet cap to reset */ capResetDay?: number;\n /** The daily usage breakdown for each Client Application a project */ dailyClientAppUsage?: Array<\n ClientAppUsage\n >;\n /** The daily usage breakdown for a project */ dailyProjectUsage?: Record<\n string,\n any\n >;\n /** Total number of Posts that can be read in this project per month */ projectCap?: number;\n /** The unique identifier for this project */ projectId?: string;\n /** The number of Posts read in this project */ projectUsage?: number;\n}\n/**\nA problem that indicates that a usage cap has been exceeded.\n *\n * @public\n */\nexport type UsageCapExceededProblem = any; /**\nRepresents the data for Usage\n *\n * @public\n */\nexport interface UsageFields {\n /** The time period for the usage */ date?: string;\n /** The usage value */ usage?: number;\n} /**\nThe X User object.\n *\n * @public\n */\nexport interface User {\n /** Metadata about a user's affiliation. */ affiliation?: Record<string, any>;\n /** Returns detailed information about the relationship between two users. */ connectionStatus?: Array<\n | 'follow_request_received'\n | 'follow_request_sent'\n | 'blocking'\n | 'followed_by'\n | 'following'\n | 'muting'\n >;\n /** Creation time of this User. */ createdAt?: string;\n /** The text of this User's profile description (also known as bio), if the User provided one. */ description?: string;\n /** A list of metadata found in the User's profile description. */ entities?: Record<\n string,\n any\n >;\n id: UserId;\n /** The location specified in the User's profile, if the User provided one. As this is a freeform value, it may not indicate a valid location, but it may be fuzzily evaluated when performing searches with location queries. */ location?: string;\n mostRecentTweetId?: TweetId;\n /** The friendly name of this User, as shown on their profile. */ name: string;\n pinnedTweetId?: TweetId;\n /** The URL to the profile banner for this User. */ profileBannerUrl?: string;\n /** The URL to the profile image for this User. */ profileImageUrl?: string;\n /** Indicates if this User has chosen to protect their Posts (in other words, if this User's Posts are private). */ protected?: boolean;\n /** A list of metrics for this User. */ publicMetrics?: Record<string, any>;\n /** Indicates if you can send a DM to this User */ receivesYourDm?: boolean;\n /** The X Blue subscription type of the user, eg: Basic, Premium, PremiumPlus or None. */ subscriptionType?:\n | 'Basic'\n | 'Premium'\n | 'PremiumPlus'\n | 'None';\n /** The URL specified in the User's profile. */ url?: string;\n username: UserName;\n /** Indicate if this User is a verified X User. */ verified?: boolean;\n /** The X Blue verified type of the user, eg: blue, government, business or none. */ verifiedType?:\n | 'blue'\n | 'government'\n | 'business'\n | 'none';\n withheld?: UserWithheld;\n}\n/**\nUser compliance data.\n *\n * @public\n */\nexport type UserComplianceData = any; /**\nSchema type for UserComplianceSchema\n *\n * @public\n */\nexport interface UserComplianceSchema {\n /** Event time. */ eventAt: string;\n /** none */ user: Record<string, any>;\n}\n/**\nUser compliance stream events.\n *\n * @public\n */\nexport type UserComplianceStreamResponse = any; /**\nSchema type for UserDeleteComplianceSchema\n *\n * @public\n */\nexport interface UserDeleteComplianceSchema {\n userDelete: UserComplianceSchema;\n} /**\nUnique identifier of this User. This is returned as a string in order to avoid complications with languages and tools that cannot handle large integers.\n *\n * @public\n */\nexport type UserId = string; /**\nUnique identifier of this User. The value must be the same as the authenticated user.\n *\n * @public\n */\nexport type UserIdMatchesAuthenticatedUser = string; /**\nThe X handle (screen name) of this user.\n *\n * @public\n */\nexport type UserName = string; /**\nSchema type for UserProfileModificationComplianceSchema\n *\n * @public\n */\nexport interface UserProfileModificationComplianceSchema {\n userProfileModification: UserProfileModificationObjectSchema;\n} /**\nSchema type for UserProfileModificationObjectSchema\n *\n * @public\n */\nexport interface UserProfileModificationObjectSchema {\n /** Event time. */ eventAt: string;\n /** none */ newValue: string;\n /** none */ profileField: string;\n /** none */ user: Record<string, any>;\n} /**\nSchema type for UserProtectComplianceSchema\n *\n * @public\n */\nexport interface UserProtectComplianceSchema {\n userProtect: UserComplianceSchema;\n} /**\nSchema type for UserScrubGeoObjectSchema\n *\n * @public\n */\nexport interface UserScrubGeoObjectSchema {\n /** Event time. */ eventAt: string;\n upToTweetId: TweetId;\n /** none */ user: Record<string, any>;\n} /**\nSchema type for UserScrubGeoSchema\n *\n * @public\n */\nexport interface UserScrubGeoSchema {\n scrubGeo: UserScrubGeoObjectSchema;\n} /**\nSchema type for UsersDMBlockCreateResponse\n *\n * @public\n */\nexport interface UsersDMBlockCreateResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for UsersDMUnBlockCreateResponse\n *\n * @public\n */\nexport interface UsersDMUnBlockCreateResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nThe the search string by which to query for users.\n *\n * @public\n */\nexport type UserSearchQueryVnext = string; /**\nSchema type for UsersFollowingCreateRequest\n *\n * @public\n */\nexport interface UsersFollowingCreateRequest {\n targetUserId: UserId;\n} /**\nSchema type for UsersFollowingCreateResponse\n *\n * @public\n */\nexport interface UsersFollowingCreateResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for UsersFollowingDeleteResponse\n *\n * @public\n */\nexport interface UsersFollowingDeleteResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for UsersLikesCreateRequest\n *\n * @public\n */\nexport interface UsersLikesCreateRequest {\n tweetId: TweetId;\n} /**\nSchema type for UsersLikesCreateResponse\n *\n * @public\n */\nexport interface UsersLikesCreateResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for UsersLikesDeleteResponse\n *\n * @public\n */\nexport interface UsersLikesDeleteResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for UsersRetweetsCreateRequest\n *\n * @public\n */\nexport interface UsersRetweetsCreateRequest {\n tweetId: TweetId;\n} /**\nSchema type for UsersRetweetsCreateResponse\n *\n * @public\n */\nexport interface UsersRetweetsCreateResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for UsersRetweetsDeleteResponse\n *\n * @public\n */\nexport interface UsersRetweetsDeleteResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for UserSuspendComplianceSchema\n *\n * @public\n */\nexport interface UserSuspendComplianceSchema {\n userSuspend: UserComplianceSchema;\n} /**\nSchema type for UserTakedownComplianceSchema\n *\n * @public\n */\nexport interface UserTakedownComplianceSchema {\n /** Event time. */ eventAt: string;\n /** none */ user: Record<string, any>;\n /** none */ withheldInCountries: Array<CountryCode>;\n} /**\nSchema type for UserUndeleteComplianceSchema\n *\n * @public\n */\nexport interface UserUndeleteComplianceSchema {\n userUndelete: UserComplianceSchema;\n} /**\nSchema type for UserUnprotectComplianceSchema\n *\n * @public\n */\nexport interface UserUnprotectComplianceSchema {\n userUnprotect: UserComplianceSchema;\n} /**\nSchema type for UserUnsuspendComplianceSchema\n *\n * @public\n */\nexport interface UserUnsuspendComplianceSchema {\n userUnsuspend: UserComplianceSchema;\n} /**\nIndicates withholding details for [withheld content](https://help.twitter.com/en/rules-and-policies/tweet-withheld-by-country).\n *\n * @public\n */\nexport interface UserWithheld {\n /** Provides a list of countries where this content is not available. */ countryCodes: Array<\n CountryCode\n >;\n /** Indicates that the content being withheld is a `user`. */ scope?: 'user';\n} /**\nSchema type for UserWithheldComplianceSchema\n *\n * @public\n */\nexport interface UserWithheldComplianceSchema {\n userWithheld: UserTakedownComplianceSchema;\n} /**\nSchema type for Variant\n *\n * @public\n */\nexport interface Variant {\n /** The bit rate of the media. */ bitRate?: number;\n /** The content type of the media. */ contentType?: string;\n /** The url to the media. */ url?: string;\n} /**\nAn array of all available variants of the media.\n *\n * @public\n */\nexport type Variants = Array<Variant>;\n/**\nSchema type for Video\n *\n * @public\n */\nexport type Video = any; /**\nA Webhook Configuration\n *\n * @public\n */\nexport interface WebhookConfig {\n /** none */ createdAt: string;\n id: WebhookConfigId;\n /** The callback URL of the webhook. */ url: string;\n /** none */ valid: boolean;\n} /**\nSchema type for WebhookConfigCreateRequest\n *\n * @public\n */\nexport interface WebhookConfigCreateRequest {\n /** none */ url: string;\n} /**\nA Webhook Configuration\n *\n * @public\n */\nexport interface WebhookConfigCreateResponse {\n /** none */ createdAt: string;\n id: WebhookConfigId;\n /** The callback URL of the webhook. */ url: string;\n /** none */ valid: boolean;\n} /**\nSchema type for WebhookConfigDeleteResponse\n *\n * @public\n */\nexport interface WebhookConfigDeleteResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nThe unique identifier of this webhook config.\n *\n * @public\n */\nexport type WebhookConfigId = string; /**\nSchema type for WebhookConfigPutResponse\n *\n * @public\n */\nexport interface WebhookConfigPutResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for WebhookLinksCreateResponse\n *\n * @public\n */\nexport interface WebhookLinksCreateResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for WebhookLinksDeleteResponse\n *\n * @public\n */\nexport interface WebhookLinksDeleteResponse {\n /** none */ data?: Record<string, any>;\n /** none */ errors?: Array<Problem>;\n} /**\nSchema type for WebhookLinksGetResponse\n *\n * @public\n */\nexport interface WebhookLinksGetResponse {\n /** The list of active webhook links for a given stream */ data?: Record<\n string,\n any\n >;\n /** none */ errors?: Array<Problem>;\n}\n","/**\n * Models for stream operations\n */\nimport type * as Schemas from '../schemas.js';\n\n\n\n\n\n/**\n * Response for postsCompliance\n * \n * @public\n */\nexport type PostsComplianceResponse = Schemas.TweetComplianceStreamResponse;\n/**\n * Response for likesCompliance\n * \n * @public\n */\nexport type LikesComplianceResponse = Schemas.LikesComplianceStreamResponse;\n/**\n * Response for likesFirehose\n * \n * @public\n */\nexport type LikesFirehoseResponse = Schemas.StreamingLikeResponseV2;\n/**\n * Response for postsFirehoseEn\n * \n * @public\n */\nexport type PostsFirehoseEnResponse = Schemas.StreamingTweetResponse;\n/**\n * Response for postsFirehoseJa\n * \n * @public\n */\nexport type PostsFirehoseJaResponse = Schemas.StreamingTweetResponse;\n/**\n * Response for postsSample10\n * \n * @public\n */\nexport type PostsSample10Response = Schemas.Get2TweetsSample10StreamResponse;\n/**\n * Response for getRules\n * \n * @public\n */\nexport type GetRulesResponse = Schemas.RulesLookupResponse;\n/**\n * Request for updateRules\n * \n * @public\n */\nexport type UpdateRulesRequest = Schemas.AddOrDeleteRulesRequest;\n/**\n * Response for updateRules\n * \n * @public\n */\nexport type UpdateRulesResponse = Schemas.AddOrDeleteRulesResponse;\n/**\n * Response for usersCompliance\n * \n * @public\n */\nexport type UsersComplianceResponse = Schemas.UserComplianceStreamResponse;\n/**\n * Response for postsFirehosePt\n * \n * @public\n */\nexport type PostsFirehosePtResponse = Schemas.StreamingTweetResponse;\n/**\n * Response for postsSample\n * \n * @public\n */\nexport type PostsSampleResponse = Schemas.StreamingTweetResponse;\n/**\n * Response for labelsCompliance\n * \n * @public\n */\nexport type LabelsComplianceResponse = Schemas.TweetLabelStreamResponse;\n/**\n * Response for postsFirehoseKo\n * \n * @public\n */\nexport type PostsFirehoseKoResponse = Schemas.StreamingTweetResponse;\n/**\n * Response for likesSample10\n * \n * @public\n */\nexport type LikesSample10Response = Schemas.StreamingLikeResponseV2;\n/**\n * Response for getRuleCounts\n * \n * @public\n */\nexport type GetRuleCountsResponse = Schemas.Get2TweetsSearchStreamRulesCountsResponse;\n/**\n * Response for posts\n * \n * @public\n */\nexport type PostsResponse = Schemas.FilteredStreamingTweetResponse;\n/**\n * Response for postsFirehose\n * \n * @public\n */\nexport type PostsFirehoseResponse = Schemas.StreamingTweetResponse;","/**\n * Pagination utilities for the X API.\n * \n * This module provides comprehensive pagination support for the X API, including\n * automatic iteration, manual page control, and metadata access.\n * \n * @category Pagination\n */\n\n/**\n * Paginated response interface\n * \n * Represents the structure of a paginated API response from the X API.\n * \n * @template T - The type of items in the response\n */\nexport interface PaginatedResponse<T> {\n /** Array of items in the current page */\n data: T[];\n /** Pagination metadata */\n meta?: {\n /** Number of results in the current page */\n result_count?: number;\n /** Token for fetching the next page */\n next_token?: string;\n /** Token for fetching the previous page */\n previous_token?: string;\n };\n /** Additional included objects (users, tweets, etc.) */\n includes?: Record<string, any>;\n /** Any errors in the response */\n errors?: Array<any>;\n}\n\n\n/**\n * X API paginator with rich functionality\n * \n * This class provides comprehensive pagination support for the X API, including:\n * - Automatic iteration with `for await...of` loops\n * - Manual page control with `fetchNext()` and `fetchPrevious()`\n * - Metadata access for pagination tokens and counts\n * - Error handling and rate limit detection\n * - Support for both forward and backward pagination\n * \n * @template T - The type of items being paginated\n * \n * @example\n * ```typescript\n * // Automatic iteration\n * const followers = await client.users.getFollowers('783214');\n * for await (const follower of followers) {\n * console.log(follower.username);\n * }\n * \n * // Manual control\n * const followers = await client.users.getFollowers('783214');\n * await followers.fetchNext();\n * console.log(followers.items.length); // Number of followers\n * console.log(followers.meta.next_token); // Next page token\n * \n * // Check status\n * if (!followers.done) {\n * await followers.fetchNext();\n * }\n * ```\n * \n * @category Pagination\n */\nexport class Paginator<T> implements AsyncIterable<T> {\n private fetchPage: (token?: string) => Promise<PaginatedResponse<T>>;\n private currentToken?: string;\n private previousToken?: string;\n private hasMore: boolean = true;\n private isDone: boolean = false;\n private allItems: T[] = [];\n private currentMeta?: any;\n private currentIncludes?: Record<string, any>;\n private currentErrors?: Array<any>;\n private rateLimitHit: boolean = false;\n\n /**\n * Creates a new paginator instance\n * \n * @param fetchPage - Function that fetches a page of data given a pagination token\n */\n constructor(fetchPage: (token?: string) => Promise<PaginatedResponse<T>>) {\n this.fetchPage = fetchPage;\n }\n\n /**\n * Get all fetched items\n */\n get items(): T[] {\n return [...this.allItems];\n }\n\n /**\n * Get current pagination metadata\n */\n get meta(): any {\n return this.currentMeta;\n }\n\n /**\n * Get current includes data\n */\n get includes(): Record<string, any> | undefined {\n return this.currentIncludes;\n }\n\n /**\n * Get current errors\n */\n get errors(): Array<any> | undefined {\n return this.currentErrors;\n }\n\n /**\n * Check if pagination is done\n */\n get done(): boolean {\n return this.isDone || this.rateLimitHit;\n }\n\n /**\n * Check if rate limit was hit\n */\n get rateLimited(): boolean {\n return this.rateLimitHit;\n }\n\n /**\n * Fetch the next page and add items to current instance\n * \n * This method fetches the next page of data and appends the items to the\n * current paginator instance. It updates the pagination state and metadata.\n * \n * @example\n * ```typescript\n * const followers = await client.users.getFollowers('783214');\n * await followers.fetchNext(); // Fetch first page\n * console.log(followers.items.length); // Number of followers\n * \n * if (!followers.done) {\n * await followers.fetchNext(); // Fetch second page\n * console.log(followers.items.length); // Total followers across pages\n * }\n * ```\n * \n * @throws {Error} When the API request fails\n */\n async fetchNext(): Promise<void> {\n if (this.done) {\n return;\n }\n\n try {\n const response = await this.fetchPage(this.currentToken);\n \n // Update tokens\n this.previousToken = this.currentToken;\n this.currentToken = response.meta?.next_token;\n \n // Update state\n this.hasMore = !!this.currentToken;\n this.isDone = !this.hasMore;\n \n // Add new items to collection\n if (response.data) {\n this.allItems.push(...response.data);\n }\n \n // Update metadata\n this.currentMeta = response.meta;\n this.currentIncludes = response.includes;\n this.currentErrors = response.errors;\n \n } catch (error: any) {\n // Check if it's a rate limit error\n if (error.status === 429 || error.message?.includes('rate limit')) {\n this.rateLimitHit = true;\n }\n throw error;\n }\n }\n\n /**\n * Get next page as a new instance\n * \n * This method creates a new paginator instance that starts from the next page,\n * without affecting the current paginator's state.\n * \n * @example\n * ```typescript\n * const followers = await client.users.getFollowers('783214');\n * await followers.fetchNext(); // Fetch first page\n * \n * if (!followers.done) {\n * const nextPage = await followers.next(); // Get next page as new instance\n * console.log(followers.items.length); // Still first page\n * console.log(nextPage.items.length); // Second page\n * }\n * ```\n * \n * @returns New paginator instance for the next page\n */\n async next(): Promise<Paginator<T>> {\n if (this.done) {\n return new Paginator(this.fetchPage);\n }\n\n const nextPaginator = new Paginator(this.fetchPage);\n nextPaginator.currentToken = this.currentToken;\n await nextPaginator.fetchNext();\n return nextPaginator;\n }\n\n /**\n * Fetch previous page (if supported)\n */\n async fetchPrevious(): Promise<void> {\n if (!this.previousToken) {\n return;\n }\n\n try {\n const response = await this.fetchPage(this.previousToken);\n \n // Update tokens\n this.currentToken = this.previousToken;\n this.previousToken = response.meta?.previous_token;\n \n // Update state\n this.hasMore = !!this.currentToken;\n this.isDone = !this.hasMore;\n \n // Replace items with previous page items\n this.allItems = response.data || [];\n \n // Update metadata\n this.currentMeta = response.meta;\n this.currentIncludes = response.includes;\n this.currentErrors = response.errors;\n \n } catch (error: any) {\n if (error.status === 429 || error.message?.includes('rate limit')) {\n this.rateLimitHit = true;\n }\n throw error;\n }\n }\n\n /**\n * Get previous page as a new instance\n */\n async previous(): Promise<Paginator<T>> {\n if (!this.previousToken) {\n return new Paginator(this.fetchPage);\n }\n\n const prevPaginator = new Paginator(this.fetchPage);\n prevPaginator.currentToken = this.previousToken;\n await prevPaginator.fetchNext();\n return prevPaginator;\n }\n\n /**\n * Fetch up to a specified number of additional items\n */\n async fetchLast(count: number): Promise<void> {\n let fetched = 0;\n \n while (!this.done && fetched < count) {\n const beforeCount = this.allItems.length;\n await this.fetchNext();\n const afterCount = this.allItems.length;\n fetched += (afterCount - beforeCount);\n }\n }\n\n /**\n * Reset paginator to initial state\n */\n reset(): void {\n this.currentToken = undefined;\n this.previousToken = undefined;\n this.hasMore = true;\n this.isDone = false;\n this.allItems = [];\n this.currentMeta = undefined;\n this.currentIncludes = undefined;\n this.currentErrors = undefined;\n this.rateLimitHit = false;\n }\n\n /**\n * Iterator for all fetched items\n */\n *[Symbol.iterator](): Iterator<T> {\n for (const item of this.allItems) {\n yield item;\n }\n }\n\n /**\n * Async iterator that fetches pages automatically\n */\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n let lastYieldedIndex = 0;\n \n // First, yield all currently fetched items\n for (let i = lastYieldedIndex; i < this.allItems.length; i++) {\n yield this.allItems[i];\n }\n lastYieldedIndex = this.allItems.length;\n\n // Then continue fetching and yielding new items\n while (!this.done) {\n await this.fetchNext();\n \n // Yield only new items since last iteration\n for (let i = lastYieldedIndex; i < this.allItems.length; i++) {\n yield this.allItems[i];\n }\n lastYieldedIndex = this.allItems.length;\n }\n }\n}\n\n/**\n * Specialized paginators for different data types\n */\n\n/**\n * Paginator for posts\n */\nexport class PostPaginator extends Paginator<any> {\n get posts(): any[] {\n return this.items;\n }\n}\n\n/**\n * Paginator for users\n */\nexport class UserPaginator extends Paginator<any> {\n get users(): any[] {\n return this.items;\n }\n}\n\n\n\n/**\n * Paginator for events (like DM events)\n */\nexport class EventPaginator extends Paginator<any> {\n get events(): any[] {\n return this.items;\n }\n} ","/**\n * X API SDK\n *\n * A modern TypeScript/JavaScript SDK for interacting with the X API.\n * Built with full TypeScript support, React hooks, and Next.js integration.\n */\n\n// Automatic polyfill setup for Node.js environments\nif (typeof process !== 'undefined' && process.versions && process.versions.node) {\n // Node.js environment - set up polyfills if needed\n if (typeof globalThis.fetch === 'undefined' || typeof globalThis.Headers === 'undefined') {\n try {\n // Try to use native Node.js fetch (Node 18+)\n if (typeof globalThis.fetch === 'function' && typeof globalThis.Headers === 'function') {\n // Native APIs are available, no polyfills needed\n } else {\n // Need to set up polyfills for older Node.js versions\n const nodeFetch = require('node-fetch');\n const { Headers: NodeHeaders } = nodeFetch;\n \n if (typeof globalThis.fetch === 'undefined') {\n (globalThis as any).fetch = nodeFetch.default || nodeFetch;\n }\n if (typeof globalThis.Headers === 'undefined') {\n (globalThis as any).Headers = NodeHeaders;\n }\n }\n } catch (error) {\n // If node-fetch is not available, provide a helpful error\n console.warn(\n 'X API SDK: node-fetch not found. For Node.js environments, please install node-fetch:\\n' +\n 'npm install node-fetch\\n' +\n 'Or upgrade to Node.js 18+ for native fetch support.'\n );\n }\n }\n}\n\n// Main client\nexport { Client } from './client.js';\nexport type { ClientConfig } from './client.js';\n\n// Error handling\nexport { ApiError } from './client.js';\nexport type { RequestOptions, ApiResponse, PaginationMeta } from './client.js';\n\n// HTTP client\nexport { httpClient, HttpClient } from './http-client.js';\nexport type { RequestOptions as HttpClientRequestOptions, HttpResponse } from './http-client.js';\n\n// Authentication\nexport { OAuth2 } from './oauth2_auth.js';\nexport type { OAuth2Config, OAuth2Token } from './oauth2_auth.js';\nexport { OAuth1 } from './oauth1_auth.js';\nexport type { OAuth1Config, OAuth1RequestToken, OAuth1AccessToken } from './oauth1_auth.js';\n\n// Crypto utilities\nexport { CryptoUtils, hmacSha1, generateNonce, generateTimestamp, generateCodeVerifier, generateCodeChallenge } from './crypto_utils.js';\n\n// Streaming\nexport type { StreamListener, TweetStreamListener } from './stream_listener.js';\n\n// Schema types (export all OpenAPI schema types)\nexport * as Schemas from './schemas.js';\n\n// Client modules (export client classes and types)\n\nexport { UsageClient } from './usage/client.js';\n// Export all types (Request, Response, Options) from this module as a namespace\nexport * as Usage from './usage/models.js';\n\nexport { CommunitiesClient } from './communities/client.js';\n// Export all types (Request, Response, Options) from this module as a namespace\nexport * as Communities from './communities/models.js';\n\nexport { TrendsClient } from './trends/client.js';\n// Export all types (Request, Response, Options) from this module as a namespace\nexport * as Trends from './trends/models.js';\n\nexport { GeneralClient } from './general/client.js';\n// Export all types (Request, Response, Options) from this module as a namespace\nexport * as General from './general/models.js';\n\nexport { UsersClient } from './users/client.js';\n// Export all types (Request, Response, Options) from this module as a namespace\nexport * as Users from './users/models.js';\n\nexport { CommunityNotesClient } from './community_notes/client.js';\n// Export all types (Request, Response, Options) from this module as a namespace\nexport * as CommunityNotes from './community_notes/models.js';\n\nexport { PostsClient } from './posts/client.js';\n// Export all types (Request, Response, Options) from this module as a namespace\nexport * as Posts from './posts/models.js';\n\nexport { ListsClient } from './lists/client.js';\n// Export all types (Request, Response, Options) from this module as a namespace\nexport * as Lists from './lists/models.js';\n\nexport { ComplianceClient } from './compliance/client.js';\n// Export all types (Request, Response, Options) from this module as a namespace\nexport * as Compliance from './compliance/models.js';\n\nexport { MediaClient } from './media/client.js';\n// Export all types (Request, Response, Options) from this module as a namespace\nexport * as Media from './media/models.js';\n\nexport { DirectMessagesClient } from './direct_messages/client.js';\n// Export all types (Request, Response, Options) from this module as a namespace\nexport * as DirectMessages from './direct_messages/models.js';\n\nexport { AccountActivityClient } from './account_activity/client.js';\n// Export all types (Request, Response, Options) from this module as a namespace\nexport * as AccountActivity from './account_activity/models.js';\n\nexport { SpacesClient } from './spaces/client.js';\n// Export all types (Request, Response, Options) from this module as a namespace\nexport * as Spaces from './spaces/models.js';\n\nexport { StreamClient } from './stream/client.js';\n// Export all types (Request, Response, Options) from this module as a namespace\nexport * as Stream from './stream/models.js';\n\nexport { ActivityClient } from './activity/client.js';\n// Export all types (Request, Response, Options) from this module as a namespace\nexport * as Activity from './activity/models.js';\n\nexport { WebhooksClient } from './webhooks/client.js';\n// Export all types (Request, Response, Options) from this module as a namespace\nexport * as Webhooks from './webhooks/models.js';\n\nexport { ConnectionsClient } from './connections/client.js';\n// Export all types (Request, Response, Options) from this module as a namespace\nexport * as Connections from './connections/models.js';\n\n\n// Utilities\nexport * from './paginator.js'; "]}