@phpsandbox/sdk 0.0.24 → 0.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../node_modules/retry/lib/retry_operation.js", "../../node_modules/retry/lib/retry.js", "../../node_modules/retry/index.js", "../../node_modules/async-retry/lib/index.js", "../../src/index.ts", "../../src/types.ts", "../../node_modules/nanoid/url-alphabet/index.js", "../../node_modules/nanoid/index.browser.js", "../../src/filesystem.ts", "../../src/errors/index.ts", "../../src/utils/promise.ts", "../../src/terminal.ts", "../../src/container.ts", "../../src/auth.ts", "../../src/lsp.ts", "../../src/composer.ts", "../../src/log.ts", "../../src/laravel.ts", "../../src/repl.ts", "../../src/shell.ts", "../../node_modules/@msgpack/msgpack/src/utils/utf8.ts", "../../node_modules/@msgpack/msgpack/src/ExtData.ts", "../../node_modules/@msgpack/msgpack/src/DecodeError.ts", "../../node_modules/@msgpack/msgpack/src/utils/int.ts", "../../node_modules/@msgpack/msgpack/src/timestamp.ts", "../../node_modules/@msgpack/msgpack/src/ExtensionCodec.ts", "../../node_modules/@msgpack/msgpack/src/utils/typedArrays.ts", "../../node_modules/@msgpack/msgpack/src/Encoder.ts", "../../node_modules/@msgpack/msgpack/src/encode.ts", "../../node_modules/@msgpack/msgpack/src/utils/prettyByte.ts", "../../node_modules/@msgpack/msgpack/src/CachedKeyDecoder.ts", "../../node_modules/@msgpack/msgpack/src/Decoder.ts", "../../node_modules/@msgpack/msgpack/src/decode.ts", "../../src/socket/index.ts", "../../node_modules/reconnecting-websocket/dist/reconnecting-websocket-mjs.js", "../../node_modules/isomorphic-ws/browser.js", "../../src/utils/disposable.ts", "../../node_modules/mitt/src/index.ts", "../../src/events/index.ts", "../../src/git.ts", "../../src/beacon/index.ts", "../../src/beacon/navigator.ts"],
4
- "sourcesContent": ["function RetryOperation(timeouts, options) {\n // Compatibility for the old (timeouts, retryForever) signature\n if (typeof options === 'boolean') {\n options = { forever: options };\n }\n\n this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n this._timeouts = timeouts;\n this._options = options || {};\n this._maxRetryTime = options && options.maxRetryTime || Infinity;\n this._fn = null;\n this._errors = [];\n this._attempts = 1;\n this._operationTimeout = null;\n this._operationTimeoutCb = null;\n this._timeout = null;\n this._operationStart = null;\n this._timer = null;\n\n if (this._options.forever) {\n this._cachedTimeouts = this._timeouts.slice(0);\n }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n this._attempts = 1;\n this._timeouts = this._originalTimeouts.slice(0);\n}\n\nRetryOperation.prototype.stop = function() {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n if (this._timer) {\n clearTimeout(this._timer);\n }\n\n this._timeouts = [];\n this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n if (!err) {\n return false;\n }\n var currentTime = new Date().getTime();\n if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n this._errors.push(err);\n this._errors.unshift(new Error('RetryOperation timeout occurred'));\n return false;\n }\n\n this._errors.push(err);\n\n var timeout = this._timeouts.shift();\n if (timeout === undefined) {\n if (this._cachedTimeouts) {\n // retry forever, only keep last error\n this._errors.splice(0, this._errors.length - 1);\n timeout = this._cachedTimeouts.slice(-1);\n } else {\n return false;\n }\n }\n\n var self = this;\n this._timer = setTimeout(function() {\n self._attempts++;\n\n if (self._operationTimeoutCb) {\n self._timeout = setTimeout(function() {\n self._operationTimeoutCb(self._attempts);\n }, self._operationTimeout);\n\n if (self._options.unref) {\n self._timeout.unref();\n }\n }\n\n self._fn(self._attempts);\n }, timeout);\n\n if (this._options.unref) {\n this._timer.unref();\n }\n\n return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n this._fn = fn;\n\n if (timeoutOps) {\n if (timeoutOps.timeout) {\n this._operationTimeout = timeoutOps.timeout;\n }\n if (timeoutOps.cb) {\n this._operationTimeoutCb = timeoutOps.cb;\n }\n }\n\n var self = this;\n if (this._operationTimeoutCb) {\n this._timeout = setTimeout(function() {\n self._operationTimeoutCb();\n }, self._operationTimeout);\n }\n\n this._operationStart = new Date().getTime();\n\n this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n console.log('Using RetryOperation.try() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n console.log('Using RetryOperation.start() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n if (this._errors.length === 0) {\n return null;\n }\n\n var counts = {};\n var mainError = null;\n var mainErrorCount = 0;\n\n for (var i = 0; i < this._errors.length; i++) {\n var error = this._errors[i];\n var message = error.message;\n var count = (counts[message] || 0) + 1;\n\n counts[message] = count;\n\n if (count >= mainErrorCount) {\n mainError = error;\n mainErrorCount = count;\n }\n }\n\n return mainError;\n};\n", "var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n var timeouts = exports.timeouts(options);\n return new RetryOperation(timeouts, {\n forever: options && (options.forever || options.retries === Infinity),\n unref: options && options.unref,\n maxRetryTime: options && options.maxRetryTime\n });\n};\n\nexports.timeouts = function(options) {\n if (options instanceof Array) {\n return [].concat(options);\n }\n\n var opts = {\n retries: 10,\n factor: 2,\n minTimeout: 1 * 1000,\n maxTimeout: Infinity,\n randomize: false\n };\n for (var key in options) {\n opts[key] = options[key];\n }\n\n if (opts.minTimeout > opts.maxTimeout) {\n throw new Error('minTimeout is greater than maxTimeout');\n }\n\n var timeouts = [];\n for (var i = 0; i < opts.retries; i++) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n if (options && options.forever && !timeouts.length) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n // sort the array numerically ascending\n timeouts.sort(function(a,b) {\n return a - b;\n });\n\n return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n var random = (opts.randomize)\n ? (Math.random() + 1)\n : 1;\n\n var timeout = Math.round(random * Math.max(opts.minTimeout, 1) * Math.pow(opts.factor, attempt));\n timeout = Math.min(timeout, opts.maxTimeout);\n\n return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n if (options instanceof Array) {\n methods = options;\n options = null;\n }\n\n if (!methods) {\n methods = [];\n for (var key in obj) {\n if (typeof obj[key] === 'function') {\n methods.push(key);\n }\n }\n }\n\n for (var i = 0; i < methods.length; i++) {\n var method = methods[i];\n var original = obj[method];\n\n obj[method] = function retryWrapper(original) {\n var op = exports.operation(options);\n var args = Array.prototype.slice.call(arguments, 1);\n var callback = args.pop();\n\n args.push(function(err) {\n if (op.retry(err)) {\n return;\n }\n if (err) {\n arguments[0] = op.mainError();\n }\n callback.apply(this, arguments);\n });\n\n op.attempt(function() {\n original.apply(obj, args);\n });\n }.bind(obj, original);\n obj[method].options = options;\n }\n};\n", "module.exports = require('./lib/retry');", "// Packages\nvar retrier = require('retry');\n\nfunction retry(fn, opts) {\n function run(resolve, reject) {\n var options = opts || {};\n var op;\n\n // Default `randomize` to true\n if (!('randomize' in options)) {\n options.randomize = true;\n }\n\n op = retrier.operation(options);\n\n // We allow the user to abort retrying\n // this makes sense in the cases where\n // knowledge is obtained that retrying\n // would be futile (e.g.: auth errors)\n\n function bail(err) {\n reject(err || new Error('Aborted'));\n }\n\n function onError(err, num) {\n if (err.bail) {\n bail(err);\n return;\n }\n\n if (!op.retry(err)) {\n reject(op.mainError());\n } else if (options.onRetry) {\n options.onRetry(err, num);\n }\n }\n\n function runAttempt(num) {\n var val;\n\n try {\n val = fn(bail, num);\n } catch (err) {\n onError(err, num);\n return;\n }\n\n Promise.resolve(val)\n .then(resolve)\n .catch(function catchIt(err) {\n onError(err, num);\n });\n }\n\n op.attempt(runAttempt);\n }\n\n return new Promise(run);\n}\n\nmodule.exports = retry;\n", "import { Filesystem, FilesystemActions, FilesystemEvents } from './filesystem.js';\nimport Terminal, { TerminalEvents, TerminalActions } from './terminal.js';\nimport Container, { ContainerActions, ContainerEvents, PortInfo, TelemetryFeature } from './container.js';\nimport Auth, { AuthActions } from './auth.js';\nimport Lsp, { LspActions, LspEvents } from './lsp.js';\nimport Composer, { ComposerActions, ComposerEvents } from './composer.js';\nimport Log, { LogActions, LogEvents } from './log.js';\nimport Laravel, { LaravelActions, LaravelEvents } from './laravel.js';\nimport Repl, { ReplActions, ReplEvents } from './repl.js';\nimport Shell, { ShellEvents, ShellActions } from './shell.js';\nimport { Transport } from './socket/index.js';\nimport EventManager, { EventDispatcher } from './events/index.js';\nimport Git, { GitActions, GitEvents } from './git.js';\nimport { Disposable } from './types.js';\nimport { Beacon, BeaconOptions, createBeacon } from './beacon/index.js';\n\nexport * from './types.js';\nexport { Transport } from './socket/index.js';\nexport * from './lsp.js';\nexport * from './filesystem.js';\nexport * from './container.js';\nexport * from './shell.js';\nexport * from './terminal.js';\nexport * from './git.js';\nexport * from './utils/promise.js';\nexport * from './beacon/index.js';\nexport * from './errors/index.js';\n\ninterface Result<TType extends 'success' | 'error' | 'running', TData extends object> {\n type: TType;\n message: string;\n data: TData;\n}\n\nexport type NotebookInitResponse = { env: { name: string; value: string }[]; previewUrl: string; ports: PortInfo[] };\nexport type NotebookInitProgressKind = 'phase' | 'log' | 'heartbeat';\n\nexport interface NotebookInitProgress {\n message: string;\n details?: string;\n kind?: NotebookInitProgressKind;\n step?: string;\n line?: string;\n chunk?: string;\n command?: string;\n}\n\nexport type NotebookInitErrorCode = 'github_import_credential_missing';\n\nexport interface NotebookInitErrorData {\n errorCode?: NotebookInitErrorCode;\n details?: string;\n retryable?: boolean;\n suggestedAction?: string;\n provider?: string;\n repository?: string;\n branch?: string | null;\n}\n\nexport type NotebookInitSuccessResult = Result<'success', NotebookInitResponse>;\nexport type NotebookInitFailureResult = Result<'error', NotebookInitErrorData>;\nexport type NotebookInitResult = NotebookInitSuccessResult | NotebookInitFailureResult;\nexport interface NotebookActions {\n 'notebook.init': Action<{ force?: boolean; files: { [path: string]: string } }, NotebookInitResult>;\n 'notebook.update': Action<null>;\n}\n\nexport interface NotebookEvents {\n 'lsp.response': object;\n 'lsp.close': { code: number; reason: string };\n 'init.event': NotebookInitProgress;\n 'notebook.initialized': NotebookInitResult;\n}\n\nexport interface CallOption {\n responseEvent?: string;\n timeout?: number;\n abortSignal?: AbortSignal;\n}\n\nexport interface OkraError {\n code: number;\n message: string;\n}\n\nexport interface Action<Args = object, Response = void> {\n args: Args;\n response: Response;\n}\n\nexport type Events = TerminalEvents &\n ContainerEvents &\n LspEvents &\n ComposerEvents &\n LogEvents &\n LaravelEvents &\n NotebookEvents &\n ReplEvents &\n ShellEvents &\n FilesystemEvents &\n GitEvents;\n\ninterface SystemActions {\n ping: Action<object, 'pong'>;\n}\n\nexport type Invokable = SystemActions &\n TerminalActions &\n ContainerActions &\n FilesystemActions &\n AuthActions &\n LspActions &\n LaravelActions &\n ComposerActions &\n LogActions &\n NotebookActions &\n ReplActions &\n ShellActions &\n GitActions;\n\nexport interface CreateNotebookImportAuthInput {\n access_token: string;\n}\n\nexport interface CreateNotebookImportInput {\n provider: 'github';\n repo: string;\n branch?: string;\n auth: CreateNotebookImportAuthInput;\n}\n\nexport interface CreateNotebookInput {\n title: string;\n visibility: 'public' | 'private' | 'unlisted';\n import?: CreateNotebookImportInput;\n}\n\nexport class NotebookInitError extends Error {\n constructor(\n public readonly message: string,\n public readonly data: NotebookInitErrorData = {}\n ) {\n super(message);\n this.name = 'NotebookInitError';\n }\n}\n\nexport class ApiError extends Error {\n public readonly status: number;\n\n constructor(\n public readonly response: Response,\n public readonly body: string\n ) {\n super(`PHPSandbox API Error: ${response.status} ${response.statusText} - ${body}`);\n this.status = response.status;\n }\n}\n\nexport class NotebookApi {\n public constructor(private readonly client: Client) {}\n\n public async create(template: string, input: Partial<CreateNotebookInput> = {}, init = true): Promise<NotebookInstance> {\n const response = await this.client.post<NotebookData>('/notebook', { template, ...input });\n const instance = new NotebookInstance(response.data, this.client);\n\n if (!init) {\n return instance;\n }\n\n return this.init(instance);\n }\n\n public async get(id: string): Promise<NotebookInstance> {\n const response = await this.client.get<NotebookData>(`/notebook/${id}`);\n\n return new NotebookInstance(response.data, this.client);\n }\n\n public async update(id: string, input: Partial<CreateNotebookInput> = {}): Promise<NotebookInstance> {\n const response = await this.client.put<NotebookData>(`/notebook/${id}`, input);\n\n return new NotebookInstance(response.data, this.client);\n }\n\n public async delete(id: string): Promise<void> {\n await this.client.delete<void>(`/notebook/${id}`);\n }\n\n public async fork(id: string): Promise<NotebookInstance> {\n const response = await this.client.post<NotebookData>(`/notebook/${id}/fork`);\n\n return this.init(new NotebookInstance(response.data, this.client));\n }\n\n public async open(id: string): Promise<NotebookInstance> {\n const response = await this.client.get<NotebookData>(`/notebook/${id}`);\n\n return new NotebookInstance(response.data, this.client);\n }\n\n public openFromData(data: NotebookData): Promise<NotebookInstance> {\n return this.init(new NotebookInstance(data, this.client));\n }\n\n private async init(instance: NotebookInstance): Promise<NotebookInstance> {\n await instance.ready();\n\n return instance;\n }\n}\n\nexport interface PHPSandboxClientOptions {\n debug?: boolean;\n startClosed?: boolean;\n telemetry?: Set<TelemetryFeature>;\n fetch?: typeof globalThis.fetch;\n}\n\nexport class Client {\n public readonly notebook: NotebookApi;\n public readonly options: PHPSandboxClientOptions;\n\n private readonly fetch: typeof globalThis.fetch = globalThis.fetch;\n\n private readonly baseUrl: string;\n\n private readonly headers: Record<string, string>;\n\n public constructor(token: string, url: string = 'https://api.phpsandbox.io/v1', options: PHPSandboxClientOptions = {}) {\n this.notebook = new NotebookApi(this);\n this.options = Object.assign({ startClosed: true }, options);\n this.baseUrl = url;\n\n if (options.fetch) {\n this.fetch = options.fetch;\n }\n\n this.headers = {\n 'Accept': 'application/json',\n 'Authorization': `Bearer ${token}`,\n 'Content-Type': 'application/json',\n };\n }\n\n public get<T extends unknown>(path: string): Promise<{ data: T }> {\n return this.makeRequest('GET', path);\n }\n\n public post<T extends unknown>(path: string, body?: unknown): Promise<{ data: T }> {\n return this.makeRequest('POST', path, { body: body ? JSON.stringify(body) : undefined });\n }\n\n public delete<T extends unknown>(path: string): Promise<{ data: T }> {\n return this.makeRequest('DELETE', path);\n }\n\n public put<T extends unknown>(path: string, body?: unknown): Promise<{ data: T }> {\n return this.makeRequest('PUT', path, { body: body ? JSON.stringify(body) : undefined });\n }\n\n private async makeRequest(method: string, path: string, init?: RequestInit) {\n const response = await this.fetch(\n new Request(new URL(`v1/${path.replace(/^\\//, '')}`, this.baseUrl), {\n method,\n ...init,\n headers: this.headers,\n })\n );\n\n if (!response.ok) {\n throw new ApiError(response, await response.text());\n }\n\n return { data: await response.json() };\n }\n}\n\nexport class PHPSandbox extends Client {}\n\nexport interface NotebookData {\n id: string;\n okraUrl: string;\n type: string;\n}\n\nexport class NotebookInstance {\n public readonly file: Filesystem;\n public readonly terminal: Terminal;\n public readonly auth: Auth;\n public readonly lsp: Lsp;\n public readonly composer: Composer;\n public readonly log: Log;\n public readonly repl: Repl;\n public readonly container: Container;\n public readonly laravel: Laravel;\n public readonly shell: Shell;\n public readonly git: Git;\n private readonly socket: Transport;\n public readonly emitter: EventDispatcher;\n\n public initialized: NotebookInitResult | false = false;\n\n #initPromise: Promise<NotebookInitSuccessResult>;\n\n private readonly disposables: Disposable[] = [];\n\n public constructor(\n public readonly data: NotebookData,\n protected client: Client\n ) {\n this.emitter = EventManager.createInstance();\n this.socket = new Transport(data.okraUrl, this.emitter, {\n debug: client.options.debug,\n startClosed: client.options.startClosed,\n });\n this.watchConnection();\n\n this.#initPromise = this.#init();\n\n this.file = new Filesystem(this);\n this.terminal = new Terminal(this);\n this.auth = new Auth(this);\n this.lsp = new Lsp(this);\n this.composer = new Composer(this);\n this.log = new Log(this);\n this.repl = new Repl(this);\n this.container = new Container(this);\n this.laravel = new Laravel(this);\n this.shell = new Shell(this);\n this.git = new Git(this);\n }\n\n public async ready(): Promise<NotebookInitSuccessResult> {\n const ready = async () => {\n /**\n * If ready is called, ensure the websocket is open so server-driven\n * initialization can begin, but do not block on an extra ping roundtrip.\n */\n if (this.client.options.startClosed && !this.socket.isConnected) {\n await this.socket.connect();\n }\n\n return this.#initPromise;\n };\n\n // Let the underlying ReconnectingWebSocket handle connection retries\n // Just apply a reasonable timeout for the entire initialization process\n return ready();\n }\n\n public fork(): Promise<NotebookInstance> {\n return this.client.notebook.fork(this.data.id);\n }\n\n public delete(): Promise<void> {\n return this.client.notebook.delete(this.data.id);\n }\n\n public stop(): Promise<void> {\n return this.container.stop();\n }\n\n public restart(): Promise<void> {\n return this.container.start();\n }\n\n public invoke<T extends keyof Invokable>(\n action: T,\n data: Invokable[T]['args'] = {},\n options: CallOption = {}\n ): Promise<Invokable[T]['response']> {\n return this.socket.invoke(action, data || {}, options);\n }\n\n public ping() {\n return this.invoke('ping');\n }\n\n public listen<T extends keyof Events>(event: T, handler: (data: Events[T]) => void) {\n const disposable = this.emitter.listen(event as string, handler);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n public dispose(): void {\n this.disposables.forEach((d) => d.dispose());\n !this.socket.isClosed && this.socket.disconnect();\n }\n\n public connected(): Promise<NotebookInstance> {\n if (this.socket.isConnected) {\n return Promise.resolve(this);\n }\n\n return new Promise((resolve, reject) => {\n try {\n this.socket.onDidConnect(() => resolve(this));\n this.socket.onDidClose(() => reject(new Error('Connection closed')));\n } catch (e) {\n reject(e);\n }\n });\n }\n\n public whenConnected(): Promise<NotebookInstance> {\n if (this.socket.isConnected) {\n return Promise.resolve(this);\n }\n\n return new Promise((resolve, reject) => {\n try {\n this.socket.onDidConnect(() => resolve(this));\n } catch (e) {\n reject(e);\n }\n });\n }\n\n private watchConnection(): void {\n this.socket.onDidConnect(() => {\n this.socket.emit('okra.connected');\n if (this.client.options.telemetry) {\n this.container.enableTelemetry(this.client.options.telemetry);\n }\n });\n\n this.socket.onDidClose(() => {\n this.socket.emit('okra.disconnected');\n this.initialized = false;\n });\n }\n\n public onDidConnect(handler: () => void): Disposable {\n this.socket.removeListener('okra.connected', handler);\n\n const disposable = this.socket.listen('okra.connected', handler);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n public onDidDisconnect(handler: () => void): Disposable {\n const disposable = this.socket.listen('okra.disconnected', handler);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n #init(): Promise<NotebookInitSuccessResult> {\n this.#initPromise = new Promise<NotebookInitSuccessResult>((resolve, reject) => {\n const initializationListener = this.onDidInitialize((result: NotebookInitResult) => {\n initializationListener.dispose();\n this.initialized = result;\n if (result.type === 'error') {\n reject(new NotebookInitError(result.message, result.data as NotebookInitErrorData));\n return;\n }\n\n resolve(result);\n });\n });\n\n return this.#initPromise;\n }\n\n public update() {\n return this.invoke('notebook.update');\n }\n\n public onDidInitialize(handler: (result: NotebookInitResult) => void) {\n return this.listen('notebook.initialized', handler);\n }\n\n public async reconnect(): Promise<NotebookInstance> {\n const whenConnected = this.whenConnected();\n // Use the socket's reconnect method which preserves listeners\n // and uses the underlying ReconnectingWebSocket mechanism\n this.socket.reconnect();\n\n // Reset initialization state\n this.initialized = false;\n\n // Wait for the socket to reconnect\n await whenConnected;\n\n // Re-initialize the notebook\n this.#init();\n \n // Wait for initialization to complete\n return this.ready().then(() => this);\n }\n\n public async beacon(iframe: HTMLIFrameElement, options?: BeaconOptions): Promise<Beacon> {\n const result = await this.ready();\n iframe.src = result.data.previewUrl;\n return createBeacon(iframe, options);\n }\n}\n", "export type ErrorCode = 500 | 400 | 401 | 403 | 404 | 409 | 422 | 429 | 5000;\n\nexport class ErrorEvent extends Error {\n public constructor(\n public readonly code: ErrorCode,\n public readonly message: string,\n public readonly raw: object = {}\n ) {\n super(message);\n }\n}\n\nexport class RateLimitError extends ErrorEvent {\n public constructor(message: string, raw: object = {}) {\n super(429, message, raw);\n }\n}\n\nexport class PHPSandboxError extends ErrorEvent {}\n\nexport interface Disposable {\n dispose: () => void;\n}\n", "export const urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n", "/* @ts-self-types=\"./index.d.ts\" */\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nexport let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nexport let customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << Math.log2(alphabet.length - 1)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step | 0\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length >= size) return id\n }\n }\n }\n}\nexport let customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size | 0, random)\nexport let nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array((size |= 0)))\n while (size--) {\n id += scopedUrlAlphabet[bytes[size] & 63]\n }\n return id\n}\n", "import type { Action, Disposable, NotebookInstance } from './index.js';\nimport { ErrorEvent } from './types.js';\nimport { nanoid } from 'nanoid';\n\nexport interface FileInfo {\n binary: boolean;\n contents: string | null;\n language: string;\n}\n\nexport interface FileResult {\n name: string;\n directory: string;\n relativePath: string;\n /**\n * Same value as `relativePath`.\n */\n path: string;\n}\n\nexport enum FileType {\n /**\n * File is unknown (neither file, directory nor symbolic link).\n */\n Unknown = 0,\n /**\n * File is a normal file.\n */\n File = 1,\n /**\n * File is a directory.\n */\n Directory = 2,\n /**\n * File is a symbolic link.\n *\n * Note: even when the file is a symbolic link, you can test for\n * `FileType.File` and `FileType.Directory` to know the type of\n * the target the link points to.\n */\n SymbolicLink = 64,\n}\n\nexport interface Stats {\n mtime: number;\n size: number;\n ctime: number;\n type: FileType;\n permissions?: number;\n}\n\nexport interface FileOverwriteOptions {\n overwrite: boolean;\n}\n\nexport interface FileWriteOptions extends FileOverwriteOptions {\n create: boolean;\n unlock: boolean;\n atomic: false | { postfix: string };\n}\n\nexport interface FileDeleteOptions {\n recursive: boolean;\n useTrash: boolean;\n atomic: false | { postfix: string };\n}\n\nexport interface SearchOptions {\n /**\n * The maximum number of results to be returned.\n */\n maxResults?: number;\n\n /**\n * Files that match an `includes` glob pattern should be included in the search.\n */\n includes: string[];\n\n /**\n * Files that match an `excludes` glob pattern should be excluded from the search.\n */\n excludes: string[];\n\n /**\n * Whether external files that exclude files, like .gitignore, should be respected.\n * See the vscode setting `\"search.useIgnoreFiles\"`.\n */\n useIgnoreFiles: boolean;\n\n /**\n * Whether symlinks should be followed while searching.\n * See the vscode setting `\"search.followSymlinks\"`.\n */\n followSymlinks: boolean;\n\n /**\n * Whether global files that exclude files, like .gitignore, should be respected.\n * See the vscode setting `\"search.useGlobalIgnoreFiles\"`.\n */\n useGlobalIgnoreFiles: boolean;\n\n /**\n * Whether files in parent directories that exclude files, like .gitignore, should be respected.\n * See the vscode setting `\"search.useParentIgnoreFiles\"`.\n */\n useParentIgnoreFiles: boolean;\n}\n\nexport interface FileSearchOptions extends SearchOptions {\n /**\n * The maximum number of results to be returned.\n */\n maxResults?: number;\n}\n\nexport interface TextSearchPreviewOptions {\n /**\n * The maximum number of lines in the preview.\n * Only search providers that support multiline search will ever return more than one line in the match.\n */\n matchLines: number;\n\n /**\n * The maximum number of characters included per line.\n */\n charsPerLine: number;\n}\n\nexport interface TextSearchQuery {\n id?: string;\n /**\n * The text pattern to search for.\n */\n pattern: string;\n\n /**\n * Whether or not `pattern` should match multiple lines of text.\n */\n isMultiline?: boolean;\n\n /**\n * Whether or not `pattern` should be interpreted as a regular expression.\n */\n isRegExp?: boolean;\n\n /**\n * Whether or not the search should be case-sensitive.\n */\n isCaseSensitive?: boolean;\n\n /**\n * Whether or not to search for whole word matches only.\n */\n isWordMatch?: boolean;\n}\n\nexport interface TextSearchOptions extends SearchOptions {\n /**\n * The maximum number of results to be returned.\n */\n maxResults: number;\n\n /**\n * Options to specify the size of the result text preview.\n */\n previewOptions?: TextSearchPreviewOptions;\n\n /**\n * Exclude files larger than `maxFileSize` in bytes.\n */\n maxFileSize?: number;\n\n /**\n * Interpret files using this encoding.\n * See the vscode setting `\"files.encoding\"`\n */\n encoding?: string;\n\n /**\n * Number of lines of context to include before each match.\n */\n beforeContext?: number;\n\n /**\n * Number of lines of context to include after each match.\n */\n afterContext?: number;\n}\n\n/**\n * A line of context surrounding a TextSearchMatch.\n */\nexport interface TextSearchContext {\n /**\n * The uri for the matching document.\n */\n path: string;\n\n /**\n * One line of text.\n * previewOptions.charsPerLine applies to this\n */\n text: string;\n\n /**\n * The line number of this line of context.\n */\n lineNumber: number;\n}\n\n/**\n * A preview of the text result.\n */\nexport interface TextSearchMatchPreview {\n /**\n * The matching lines of text, or a portion of the matching line that contains the match.\n */\n text: string;\n\n /**\n * The Range within `text` corresponding to the text of the match.\n * The number of matches must match the TextSearchMatch's range property.\n */\n matches: SearchRange[];\n}\n\nexport interface SearchRange {\n startLine: number;\n startColumn: number;\n endLine: number;\n endColumn: number;\n}\n\n/**\n * A match from a text search\n */\nexport interface TextSearchMatch {\n lineNumber: number;\n\n /**\n * The uri for the matching document.\n */\n path: string;\n\n /**\n * The range of the match within the document, or multiple ranges for multiple matches.\n */\n ranges: SearchRange[];\n\n /**\n * A preview of the text match.\n */\n preview: TextSearchMatchPreview;\n}\n\n/**\n * A line of context surrounding a TextSearchMatch.\n */\nexport interface TextSearchContext {\n /**\n * The uri for the matching document.\n */\n path: string;\n\n /**\n * One line of text.\n * previewOptions.charsPerLine applies to this\n */\n text: string;\n\n /**\n * The line number of this line of context.\n */\n lineNumber: number;\n}\n\nexport type TextSearchResult = TextSearchMatch | TextSearchContext;\n\ninterface RelativePattern {\n /**\n * A base file path to which this pattern will be matched against relatively.\n */\n readonly base: string;\n /**\n * A file glob pattern like `*.{ts,js}` that will be matched on file paths\n * relative to the base path.\n *\n * Example: Given a base of `/home/work/folder` and a file path of `/home/work/folder/index.js`,\n * the file glob pattern will match on `index.js`.\n */\n readonly pattern: string;\n}\n\ninterface WatchOptionsWithoutCorrelation {\n /**\n * Set to `true` to watch for changes recursively in a folder\n * and all of its children.\n */\n recursive: boolean;\n /**\n * A set of glob patterns or paths to exclude from watching.\n * Paths can be relative or absolute and when relative are\n * resolved against the watched folder. Glob patterns are\n * always matched relative to the watched folder.\n */\n excludes: string[];\n /**\n * An optional set of glob patterns or paths to include for\n * watching. If not provided, all paths are considered for\n * events.\n * Paths can be relative or absolute and when relative are\n * resolved against the watched folder. Glob patterns are\n * always matched relative to the watched folder.\n */\n includes?: Array<string | RelativePattern>;\n /**\n * If provided, allows to filter the events that the watcher should consider\n * for emitting. If not provided, all events are emitted.\n *\n * For example, to emit added and updated events, set to:\n * `FileChangeFilter.ADDED | FileChangeFilter.UPDATED`.\n */\n filter?: FileChangeFilter;\n}\ninterface WatchOptions extends WatchOptionsWithoutCorrelation {\n /**\n * If provided, file change events from the watcher that\n * are a result of this watch request will carry the same\n * id.\n */\n readonly correlationId?: number;\n}\n\ndeclare const enum FileChangeFilter {\n UPDATED = 2,\n ADDED = 4,\n DELETED = 8,\n}\n\n/**\n * Possible changes that can occur to a file.\n */\nexport enum FileChangeType {\n UPDATED = 1,\n ADDED = 2,\n DELETED = 3,\n}\n\n/**\n * Identifies a single change in a file.\n */\nexport interface FileChange {\n /**\n * The type of change that occurred to the file.\n */\n type: FileChangeType;\n /**\n * Whether the change is a file or a directory.\n */\n isFile: boolean;\n\n /**\n * Whether the file exists.\n */\n exists: boolean;\n\n /**\n * The unified resource identifier of the file that changed.\n */\n readonly path: string;\n /**\n * If provided when starting the file watcher, the correlation\n * identifier will match the original file watching request as\n * a way to identify the original component that is interested\n * in the change.\n */\n readonly cId?: number;\n}\n\nexport interface ReadFileRangeResult {\n lineStart: number;\n lineEnd: number;\n content: string;\n error: string | null;\n}\n\nexport interface FilesystemActions {\n 'fs.info': Action<{ path: string }, FileInfo>;\n 'fs.write': Action<{ path: string; contents: string }, boolean>;\n 'fs.mkdir': Action<{ path: string }, boolean>;\n 'fs.remove': Action<{ path: string; type: 'file' | 'directory' }, boolean>;\n 'fs.move': Action<{ from: string; to: string }, boolean>;\n 'fs.find': Action<{ query: string; options: FileSearchOptions }, FileResult[]>;\n 'fs.textSearch': Action<{ query: TextSearchQuery; options: TextSearchOptions }, [boolean, TextSearchMatch[]]>;\n 'fs.readFile': Action<\n { path: string; lineRange?: { lineStart: number; lineEnd: number } },\n string | Uint8Array | ReadFileRangeResult\n >;\n 'fs.writeFile': Action<{ path: string; contents: Uint8Array; options: FileWriteOptions }, void>;\n 'fs.stat': Action<{ path: string }, Stats>;\n 'fs.rename': Action<{ from: string; to: string; options: FileOverwriteOptions }, void>;\n 'fs.delete': Action<{ path: string; options: FileDeleteOptions }, void>;\n 'fs.copy': Action<{ source: string; destination: string; options: FileOverwriteOptions }, void>;\n 'fs.readDirectory': Action<{ path: string; include: string[]; exclude: string[] }, [string, FileType, number | null][]>;\n 'fs.createDirectory': Action<{ path: string }, void>;\n 'fs.watch': Action<{ path: string; options: WatchOptions }, void>;\n 'fs.download': Action<{ id: string; exclude?: string[]; include?: string[] }, void>;\n 'fs.unwatch': Action<{ path: string }, void>;\n 'fs.tree': Action<{ path: string }, string>;\n 'fs.tail': Action<{ path: string; lines: number }, string>;\n}\n\ninterface FilesystemEventData {\n 'fs.watch': FileChange;\n 'fs.download': Uint8Array;\n 'fs.text.search': TextSearchResult | false;\n}\n\ntype PrefixKey<K extends keyof FilesystemEventData> = `${K}.${string}`;\n\nexport type FilesystemEvents = FilesystemEventData & {\n [K in keyof FilesystemEventData as PrefixKey<K>]: FilesystemEventData[K];\n};\n\nexport enum FilesystemErrorType {\n Unavailable = 'Unavailable',\n NoPermissions = 'NoPermissions',\n FileExists = 'FileExists',\n FileNotFound = 'FileNotFound',\n FileIsADirectory = 'FileIsADirectory',\n FileNotADirectory = 'FileNotADirectory',\n}\n\nexport class FilesystemError extends ErrorEvent {\n public constructor(\n inner: ErrorEvent,\n public readonly name: FilesystemErrorType\n ) {\n super(inner.code, inner.message);\n }\n}\n\nclass FilesystemSubscription {\n public constructor(\n private path: string,\n private okra: NotebookInstance,\n private disposable: Disposable\n ) {}\n\n public dispose(): void {\n this.okra.invoke('fs.unwatch', { path: this.path });\n this.disposable.dispose();\n }\n}\n\nexport class Filesystem {\n private watches: Map<string, { options: WatchOptions; path: string; onDidChange: (e: FileChange) => void }> = new Map();\n\n public constructor(protected okra: NotebookInstance) {\n this.watchOkraConnection();\n }\n\n private watchOkraConnection(): void {\n this.okra.onDidConnect(() => {\n for (const { path, options, onDidChange } of this.watches.values()) {\n this.watch(path, options, onDidChange);\n }\n });\n }\n\n public info(path: string): Promise<FileInfo> {\n return this.okra.invoke('fs.info', { path });\n }\n\n public write(path: string, contents: string): Promise<boolean> {\n return this.okra.invoke('fs.write', { path, contents: contents });\n }\n\n public find(\n query: string,\n options: Partial<FileSearchOptions> = {\n useIgnoreFiles: false,\n followSymlinks: false,\n useGlobalIgnoreFiles: false,\n useParentIgnoreFiles: false,\n }\n ): Promise<FileResult[]> {\n return this.okra.invoke('fs.find', {\n query,\n options: Object.assign(options, {\n includes: [],\n excludes: [\n '**/storage',\n '**/vendor',\n '**/node_modules',\n '**/.git',\n '**/.svn',\n '**/.hg',\n '**/CVS',\n '**/.DS_Store',\n '**/Thumbs.db',\n '**/*.crswap',\n ],\n useIgnoreFiles: false,\n followSymlinks: false,\n useGlobalIgnoreFiles: false,\n useParentIgnoreFiles: false,\n }),\n });\n }\n\n public search(\n query: TextSearchQuery,\n options?: Partial<TextSearchOptions>,\n onMatch?: (result: TextSearchResult | false) => boolean | Promise<boolean> | void | Promise<void>\n ): Promise<[boolean, TextSearchMatch[]]> {\n if (!query.id) {\n query.id = nanoid();\n }\n\n const defaultOptions: TextSearchOptions = {\n maxResults: 5,\n afterContext: 2,\n beforeContext: 2,\n includes: [],\n excludes: [\n '**/.git',\n '**/.svn',\n '**/.hg',\n '**/CVS',\n '**/.DS_Store',\n '**/Thumbs.db',\n '**/*.crswap',\n '**/node_modules',\n '**/vendor',\n '**/bower_components',\n '**/*.code-search',\n ],\n useIgnoreFiles: true,\n followSymlinks: true,\n useGlobalIgnoreFiles: true,\n useParentIgnoreFiles: true,\n encoding: 'utf-8',\n previewOptions: {\n matchLines: 5,\n charsPerLine: 1000,\n },\n };\n\n const sid = query.id;\n const localOnMatch = async (result: TextSearchResult | false) => {\n if (result === false) {\n disposable.dispose();\n }\n\n if (onMatch) {\n const ret = await Promise.resolve(onMatch(result));\n if (ret === false) {\n disposable.dispose();\n }\n }\n };\n\n const disposable = this.okra.listen(`fs.text.search.${sid}`, localOnMatch);\n\n return this.okra\n .invoke('fs.textSearch', { query, options: { ...defaultOptions, ...options } })\n .finally(() => disposable.dispose());\n }\n\n public mkdir(path: string): Promise<boolean> {\n return this.okra.invoke('fs.mkdir', { path });\n }\n\n public move(from: string, to: string): Promise<boolean> {\n return this.okra.invoke('fs.move', { from, to });\n }\n\n public remove(path: string, type: 'file' | 'directory'): Promise<boolean> {\n return this.okra.invoke('fs.remove', { path, type });\n }\n\n public readFile(path: string): Promise<Uint8Array>;\n public readFile(path: string, lineRange: { lineStart: number; lineEnd: number }): Promise<ReadFileRangeResult>;\n public async readFile(\n path: string,\n lineRange?: { lineStart: number; lineEnd: number }\n ): Promise<Uint8Array | ReadFileRangeResult> {\n try {\n const content = await this.okra.invoke('fs.readFile', { path, lineRange });\n if (content instanceof Uint8Array) {\n return content;\n }\n\n if (typeof content === 'string') {\n return new TextEncoder().encode(content);\n }\n\n return content;\n } catch (e) {\n this.handleError(e);\n }\n }\n\n public tail(path: string, lines: number = 10): Promise<string> {\n return this.okra.invoke('fs.tail', { path, lines }).catch((e) => this.handleError(e));\n }\n\n public writeFile(path: string, contents: Uint8Array, options: FileWriteOptions): Promise<void> {\n return this.okra\n .invoke('fs.writeFile', {\n path,\n contents,\n options,\n })\n .catch((e) => this.handleError(e));\n }\n\n public stat(path: string): Promise<Stats> {\n return this.okra.invoke('fs.stat', { path }).catch((e) => this.handleError(e));\n }\n\n public rename(from: string, to: string, options: FileOverwriteOptions): Promise<void> {\n return this.okra.invoke('fs.rename', { from, to, options }).catch((e) => this.handleError(e));\n }\n\n public delete(path: string, options: FileDeleteOptions): Promise<void> {\n return this.okra.invoke('fs.delete', { path, options }).catch((e) => this.handleError(e));\n }\n\n public copy(source: string, destination: string, options: FileOverwriteOptions): Promise<void> {\n return this.okra.invoke('fs.copy', { source, destination, options }).catch((e) => this.handleError(e));\n }\n\n public readDirectory(\n path: string,\n include: string[] = [],\n exclude: string[] = []\n ): Promise<[string, FileType, number | null][]> {\n return this.okra.invoke('fs.readDirectory', { path, include, exclude }).catch((e) => this.handleError(e));\n }\n\n public createDirectory(path: string): Promise<void> {\n return this.okra.invoke('fs.createDirectory', { path }).catch((e) => this.handleError(e));\n }\n\n public watch(path: string, options: WatchOptions, onDidChange: (e: FileChange) => void): FilesystemSubscription {\n const disposable = this.okra.listen(`fs.watch.${path}`, onDidChange);\n const wrappedDisposable = {\n dispose: () => {\n disposable.dispose();\n this.okra.invoke('fs.unwatch', { path });\n },\n };\n const subscription = new FilesystemSubscription(path, this.okra, wrappedDisposable);\n this.watches.set(path, { options, path, onDidChange });\n\n this.okra.invoke('fs.watch', { path, options });\n\n return subscription;\n }\n\n public exists(path: string): Promise<boolean> {\n return this.stat(path)\n .then(() => true)\n .catch(() => false);\n }\n\n public async download(chunk?: (data: Uint8Array) => void, exclude?: string[], include?: string[]): Promise<Blob> {\n const id = nanoid();\n const stream = !!chunk;\n const chunks: Uint8Array[] = [];\n this.okra.listen(\n `fs.download.${id}`,\n stream\n ? chunk\n : (data) => {\n chunks.push(data);\n }\n );\n\n return this.okra\n .invoke('fs.download', { id, exclude, include })\n .then(() => new Blob(chunks as BlobPart[], { type: 'application/octet-stream' }));\n }\n\n public tree(path: string = '/'): Promise<string> {\n return this.okra.invoke('fs.tree', { path });\n }\n\n protected handleError(e: unknown): never {\n if (e instanceof ErrorEvent && 'name' in e.raw) {\n throw new FilesystemError(e, e.raw.name as FilesystemErrorType);\n }\n\n throw e;\n }\n}\n", "export class PromiseTimeoutError extends Error {\n public constructor(\n message: string,\n public time: number\n ) {\n super(message);\n }\n}\n\nexport class SendTimeoutError extends PromiseTimeoutError {\n static fromPromiseTimeoutError(error: PromiseTimeoutError) {\n return new SendTimeoutError(error.message, error.time);\n }\n}\n", "/**\n * @see https://advancedweb.hu/how-to-add-timeout-to-a-promise-in-javascript\n *\n * @param prom\n * @param time\n * @param exception\n */\n\nimport { PromiseTimeoutError } from \"../errors/index.js\";\n\nexport const timeout = <T>(prom: Promise<T>, time: number): Promise<T> => {\n let timer: ReturnType<typeof setTimeout>;\n return Promise.race([\n prom,\n new Promise<never>(\n (_r, rej) => (timer = setTimeout(rej, time, new PromiseTimeoutError('Timeout before promise can resolve', time)))\n ),\n ]).finally(() => clearTimeout(timer));\n};\n\n/**\n * Wraps an async function to ensure it only executes once. \n * Subsequent calls return the memoized promise result.\n * \n * @param fn The async function to execute once\n * @returns A wrapped function that memoizes the first execution\n */\nexport const once = <T>(fn: () => Promise<T>): (() => Promise<T>) => {\n let result: Promise<T> | null = null;\n return () => result || (result = fn());\n};\n", "import { Action, Disposable, NotebookInstance } from './index.js';\nimport { nanoid } from 'nanoid';\nimport { once } from './utils/promise.js';\nexport interface Task {\n id: string;\n command: string | string[];\n kind: string;\n created: boolean;\n}\n\nexport interface TerminalCreateInput {\n id: string;\n kind: string;\n size: [number, number];\n command?: string | string[];\n env?: Record<string, string>;\n cwd?: string;\n}\n\nexport interface TerminalSpawnInput {\n command: string | string[];\n opts: { id: string } & SpawnOptions;\n}\n\nexport interface TerminalEventData {\n 'terminal.output': {\n output: string;\n id: string;\n };\n 'terminal.started': Task;\n 'terminal.stopped': Task & { exitCode: number };\n 'terminal.close': Task & { exitCode: number };\n}\n\ntype PrefixKey<K extends keyof TerminalEventData> = `${K}.${string}`;\ntype TerminalEventPattern = PrefixKey<keyof TerminalEventData>;\nexport type TerminalEvents = TerminalEventData & {\n [K in TerminalEventPattern]: K extends `terminal.output.${string}`\n ? TerminalEventData['terminal.output']\n : Task & { exitCode: number };\n};\n\nexport interface TerminalActions {\n 'terminal.input': Action<{ id: string; input: string }>;\n 'terminal.list': Action<{}, Task[]>;\n 'terminal.start': Action;\n 'terminal.create': Action<TerminalCreateInput, Task>;\n 'terminal.spawn': Action<TerminalSpawnInput, Task>;\n 'terminal.resize': Action<{ id: string; width: number; height: number }, boolean>;\n 'terminal.close': Action<{ id: string }, boolean>;\n}\n\nexport interface SandboxProcess {\n exit: Promise<number>;\n\n input: WritableStream<string>;\n\n output: ReadableStream<string>;\n\n kill(): Promise<boolean>;\n\n resize(dimensions: { cols: number; rows: number }): void;\n}\n\nexport interface SpawnOptions {\n cwd?: string;\n\n env?: Record<string, string | number | boolean>;\n\n output?: boolean;\n\n terminal?: {\n cols: number;\n rows: number;\n };\n\n id?: string;\n osc?: boolean;\n tty?: boolean;\n\n abortSignal?: AbortSignal;\n}\n\nexport default class Terminal {\n constructor(protected okra: NotebookInstance) {}\n\n public list() {\n return this.okra.invoke('terminal.list');\n }\n\n public start() {\n return this.okra.invoke('terminal.start');\n }\n\n public create(input: TerminalCreateInput) {\n return this.okra.invoke('terminal.create', input);\n }\n\n public onStarted(handler: (t: Task) => void): void {\n this.okra.listen('terminal.started', handler);\n }\n\n public resize(id: string, size: [number, number]) {\n return this.okra.invoke('terminal.resize', { id, width: size[0], height: size[1] });\n }\n\n public onOutput(id: string, handler: (data: TerminalEvents['terminal.output']) => void): void {\n this.okra.listen(`terminal.output.${id}`, handler);\n }\n\n public input(id: string, input: string) {\n return this.okra.invoke('terminal.input', { id, input });\n }\n\n public listen<T extends keyof TerminalEvents>(event: T, handler: (data: TerminalEvents[T]) => void): Disposable {\n return this.okra.listen(event, handler);\n }\n\n public async spawn(command: string, args: string[], opts?: SpawnOptions): Promise<SandboxProcess & Task> {\n const id = opts?.id || nanoid();\n const disposables = new Set<Disposable>();\n const dispose = () => {\n for (const disposable of disposables) {\n disposable.dispose();\n }\n disposables.clear();\n };\n\n const input = new WritableStream<string>({\n write: (chunk) => {\n this.input(id, chunk);\n },\n close: dispose,\n });\n\n const output = new ReadableStream<string>({\n start: (controller) => {\n disposables.add(\n this.listen(`terminal.output.${id}`, (data) => {\n controller.enqueue(data.output);\n })\n );\n },\n cancel: dispose,\n });\n\n const exit = new Promise<number>((resolve) => {\n disposables.add(\n this.listen(`terminal.close.${id}`, (data) => {\n dispose();\n resolve(data.exitCode);\n })\n );\n });\n\n const kill = once(() => {\n dispose();\n return this.okra.invoke('terminal.close', { id });\n });\n\n const resize = (dimensions: { cols: number; rows: number }) => {\n this.okra.invoke('terminal.resize', { id, width: dimensions.cols, height: dimensions.rows });\n };\n\n const { abortSignal, ...otherOpts } = opts ?? {};\n if (abortSignal) {\n abortSignal.addEventListener('abort', kill);\n }\n\n const result = await this.okra.invoke(\n 'terminal.spawn',\n {\n command: [command, ...args],\n opts: {\n id,\n ...otherOpts,\n },\n },\n { abortSignal }\n );\n\n return {\n exit,\n input,\n output,\n kill,\n resize,\n ...result,\n };\n }\n}\n", "import { Action, Disposable, NotebookInstance } from './index.js';\n\ninterface Stat {\n usage: number;\n limit: number;\n}\n\nexport interface ContainerStats {\n cpu: Stat;\n memory: Stat;\n disk: Stat;\n}\n\nexport enum NotebookState {\n RUNNING = 'running',\n STOPPED = 'stopped',\n STARTING = 'starting',\n STOPPING = 'stopping',\n KILLED = 'killed',\n ERROR = 'error',\n PROVISIONING = 'provisioning',\n}\n\nexport interface ContainerEvents {\n 'container.stats': ContainerStats;\n 'container.ports': PortInfo[];\n}\n\nexport interface PortInfo {\n subdomain: string;\n url: string;\n default: boolean;\n port: number;\n}\n\nexport type TelemetryFeature = 'stats' | 'logs' | 'ports';\n\nexport interface ContainerActions {\n 'container.start': Action<{}, void>;\n 'container.stop': Action<{}, void>;\n 'container.state': Action<{}, { state: NotebookState }>;\n 'container.opened-ports': Action<{}, PortInfo[]>;\n 'container.set-php': Action<{ version: string }, { version: string }>;\n 'container.stream-telemetry': Action<{ features: TelemetryFeature[] }, void>;\n 'container.stop-telemetry': Action<{}, void>;\n}\n\nexport default class Container {\n constructor(protected okra: NotebookInstance) {}\n\n public start() {\n return this.okra.invoke('container.start');\n }\n\n public stop() {\n return this.okra.invoke('container.stop');\n }\n\n public state() {\n return this.okra.invoke('container.state');\n }\n\n public openedPorts() {\n return this.okra.invoke('container.opened-ports');\n }\n\n public setPhp(version: string) {\n return this.okra.invoke('container.set-php', { version });\n }\n\n public enableTelemetry(features: Set<TelemetryFeature>) {\n return this.okra.invoke('container.stream-telemetry', { features: Array.from(features) });\n }\n\n public stopTelemetry() {\n return this.okra.invoke('container.stop-telemetry');\n }\n\n public listen<T extends keyof ContainerEvents>(event: T, handler: (data: ContainerEvents[T]) => void) {\n return this.okra.listen(event, handler);\n }\n\n public onPort(handler: (port: PortInfo, type: 'open' | 'close') => void): Disposable {\n let ports: PortInfo[] = [];\n return this.listen('container.ports', (newPorts) => {\n for (const port of newPorts) {\n if (!ports.some((p) => p.port === port.port)) {\n handler(port, 'open');\n }\n }\n\n for (const port of ports) {\n if (!newPorts.some((p) => p.port === port.port)) {\n handler(port, 'close');\n }\n }\n ports = newPorts;\n });\n }\n}\n", "import { Action, NotebookInstance } from './index.js';\n\nexport interface AuthActions {\n 'auth.login': Action<{ newConnectionData: string }, boolean>;\n 'auth.logout': Action<null>;\n}\n\nexport default class Auth {\n constructor(protected okra: NotebookInstance) {}\n\n public logout() {\n return this.okra.invoke('auth.logout');\n }\n\n public login(newConnectionData: string) {\n return this.okra.invoke('auth.login', { newConnectionData });\n }\n}\n", "import { Action, NotebookInstance } from './index.js';\n\nexport interface LspActions {\n 'lsp.message': Action<{ message: string; id: string }>;\n 'lsp.close': Action<{ id: string }>;\n 'lsp.start': Action<{ id: string }>;\n}\n\ninterface LspEventData {\n 'lsp.response': object;\n 'lsp.closed': { code: number; reason: string };\n 'lsp.error': { message: string };\n}\n\ntype PrefixKey<K extends keyof LspEventData> = `${K}.${string}`;\nexport type LspEvents = LspEventData & {\n [K in keyof LspEventData as PrefixKey<K>]: LspEventData[K];\n};\n\nexport default class Lsp {\n constructor(protected okra: NotebookInstance) {}\n\n public message(id: string, message: string) {\n return this.okra.invoke('lsp.message', { id, message });\n }\n\n public listen<T extends keyof LspEventData>(id: string, event: T, cb: (data: LspEventData[T]) => void) {\n this.okra.listen(`${event}.${id}`, (e) => cb(e as LspEventData[T]));\n }\n\n public onClose(id: string, cb: (code: number, reason: string) => void): void {\n this.listen(id, 'lsp.closed', (e) => cb(e.code, e.reason));\n }\n\n public onError(id: string, cb: (message: string) => void): void {\n this.listen(id, 'lsp.error', (e) => cb(e.message));\n }\n\n public onClientDisconnect(cb: (code: number, message: string) => void): void {\n this.okra.onDidDisconnect(() => cb(1000, 'OKRA DISCONNECTED'));\n }\n\n public onResponse(id: string, cb: (data: string) => void): void {\n this.listen(id, 'lsp.response', (e) => cb(JSON.stringify(e)));\n }\n\n public close(id: string) {\n return this.okra.invoke('lsp.close', { id });\n }\n\n public start(id: string) {\n return this.okra.invoke('lsp.start', { id });\n }\n\n public connection(id: string) {\n return LspConnection.create(id, this);\n }\n\n public whenSocketConnected() {\n return this.okra.whenConnected();\n }\n}\n\nexport class LspConnection {\n public constructor(\n public readonly id: string,\n private readonly lsp: Lsp\n ) {}\n\n public send(content: string) {\n return this.lsp.message(this.id, content);\n }\n\n public onMessage(cb: (data: string) => void) {\n this.lsp.onResponse(this.id, cb);\n }\n\n public onError(cb: (message: string) => void) {\n this.lsp.onError(this.id, cb);\n }\n\n public onClose(cb: (code: number, reason: string) => void) {\n this.lsp.onClose(this.id, cb);\n }\n\n public dispose() {\n this.lsp.close(this.id);\n }\n\n public start() {\n this.lsp.start(this.id);\n }\n\n public onClientDisconnect(cb: (code: number, message: string) => void) {\n this.lsp.onClientDisconnect(cb);\n }\n\n public whenSocketConnected() {\n return this.lsp.whenSocketConnected();\n }\n\n public static create(id: string, lsp: Lsp): LspConnection {\n return new LspConnection(id, lsp);\n }\n}\n", "import { Action, NotebookInstance } from './index.js';\n\nexport interface ComposerEvents {\n 'composer.log': string;\n}\n\nexport interface Result {\n exitCode: number;\n output: string;\n}\n\nexport interface ComposerPackage {\n name: string;\n _installedVersion: string;\n installationMode: 'require' | 'require-dev';\n _installed: boolean;\n}\n\nexport interface ComposerActions {\n 'composer.invoke': Action<{ command: ComposerCommand; args: Argument; options: Options }, Result>;\n 'composer.dump-autoload': Action<undefined, { message: string; success: boolean }>;\n 'composer.packages': Action<undefined, ComposerPackage[]>;\n}\n\nexport type ComposerCommand = 'install' | 'update' | 'require' | 'remove' | 'search' | 'show';\n\nexport type Argument<Name extends string = string, Type extends string | string[] = string | string[]> = Record<Name, Type>;\n\nexport type Options<\n Name extends string = string,\n Type extends string | string[] | boolean = string | string[] | boolean,\n> = Record<Name, Type>;\n\nexport default class Composer {\n constructor(protected okra: NotebookInstance) {}\n\n public invoke(command: ComposerCommand, args: Argument = {}, options: Options = {}) {\n return this.okra.invoke('composer.invoke', { command, args, options });\n }\n\n public dumpAutoload() {\n return this.okra.invoke('composer.dump-autoload');\n }\n\n public install(options: Options = {}): Promise<Result> {\n return this.invoke('install', {}, options);\n }\n\n public update(args: Argument<'packages'>, options: Options = {}): Promise<Result> {\n return this.invoke('update', args, options);\n }\n\n public require(packages: Argument<'packages'>, options: Options = {}): Promise<Result> {\n return this.invoke('require', packages, options);\n }\n\n public remove(args: Argument<'packages'>, options: Options = {}): Promise<Result> {\n return this.invoke('remove', args, options);\n }\n\n public stream(fn: (data: string) => void) {\n return this.okra.listen('composer.log', fn);\n }\n\n public packages() {\n return this.okra.invoke('composer.packages');\n }\n}\n", "import { NotebookInstance } from './index.js';\n\nexport interface LogEvents {\n 'notebook.log': string;\n}\n\nexport interface LogActions {}\n\nexport default class Log {\n constructor(protected okra: NotebookInstance) {}\n\n public stream(fn: (data: string) => void) {\n return this.okra.listen('notebook.log', fn);\n }\n public listen<T extends keyof LogEvents>(event: T, handler: (data: LogEvents[T]) => void): void {\n this.okra.listen(event, handler);\n }\n}\n", "import { Action, NotebookInstance } from './index.js';\n\nexport interface Down {\n except: string[];\n redirect: string | null;\n retry: string | null;\n refresh: string | null;\n secret: string | null;\n status: number;\n template: string | null;\n}\n\nexport interface LaravelEvents {}\nexport interface LaravelActions {\n 'laravel.maintenance.info': Action<{}, Down>;\n 'laravel.maintenance.toggle': Action<Down | {}, Down>;\n}\n\nexport default class Lravel {\n constructor(protected okra: NotebookInstance) {}\n\n public maintenanceInfo() {\n return this.okra.invoke('laravel.maintenance.info', {});\n }\n\n public toggleMaintenance(down: Down | {}) {\n return this.okra.invoke('laravel.maintenance.toggle', down);\n }\n}\n", "import { Action, NotebookInstance } from './index.js';\n\ninterface ReplOption {\n prependWith?: string;\n appendWith?: string;\n}\n\nexport interface EvalResult {\n exitCode: number;\n args: string;\n}\n\nexport interface ReplActions {\n 'repl.eval': Action<{ code: string; args: string; repl: ReplOption }, EvalResult>;\n 'repl.write': Action<{ input: string }>;\n 'repl.stop': Action<{}, void>;\n 'repl.start': Action<{}>;\n 'repl.resize': Action<{ cols: number; rows: number }>;\n}\n\nexport interface ReplEvents {\n 'repl.output': string;\n}\n\nexport default class Repl {\n constructor(protected okra: NotebookInstance) {}\n\n public eval(code: string, args: string = '', repl: ReplOption = { prependWith: '', appendWith: '' }) {\n return this.okra.invoke('repl.eval', { code, args, repl });\n }\n\n public write(input: string) {\n return this.okra.invoke('repl.write', { input });\n }\n\n public stop() {\n return this.okra.invoke('repl.stop');\n }\n\n public start() {\n return this.okra.invoke('repl.start');\n }\n\n public resize(cols: number, rows: number) {\n return this.okra.invoke('repl.resize', { cols, rows });\n }\n\n public listen<T extends keyof ReplEvents>(event: T, handler: (data: ReplEvents[T]) => void): void {\n this.okra.listen(event, handler);\n }\n\n public onOutput(handler: (data: ReplEvents['repl.output']) => void): void {\n this.okra.listen('repl.output', handler);\n }\n}\n", "import { Action, NotebookInstance } from './index.js';\n\nexport interface ShellEvents {}\n\nexport interface ShellActions {\n 'shell.exec': Action<{ command: string|string }, { output: string; exitCode: number }>;\n}\n\nexport class CommandError extends Error {\n constructor(\n public output: string,\n public exitCode: number\n ) {\n super(output);\n }\n}\n\nclass Result {\n constructor(\n public output: string,\n public exitCode: number\n ) {}\n\n public throw() {\n if (this.exitCode !== 0) {\n throw new CommandError(this.output, this.exitCode);\n }\n\n return this;\n }\n}\n\nexport default class Shell {\n constructor(protected okra: NotebookInstance) {}\n\n public async exec(command: string|string): Promise<Result> {\n const result = await this.okra.invoke('shell.exec', { command });\n\n return new Result(result.output, result.exitCode);\n }\n}\n", "export function utf8Count(str: string): number {\n const strLength = str.length;\n\n let byteLength = 0;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n byteLength++;\n continue;\n } else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n byteLength += 2;\n } else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n byteLength += 3;\n } else {\n // 4-byte\n byteLength += 4;\n }\n }\n }\n return byteLength;\n}\n\nexport function utf8EncodeJs(str: string, output: Uint8Array, outputOffset: number): void {\n const strLength = str.length;\n let offset = outputOffset;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n output[offset++] = value;\n continue;\n } else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n output[offset++] = ((value >> 6) & 0x1f) | 0xc0;\n } else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n output[offset++] = ((value >> 12) & 0x0f) | 0xe0;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n } else {\n // 4-byte\n output[offset++] = ((value >> 18) & 0x07) | 0xf0;\n output[offset++] = ((value >> 12) & 0x3f) | 0x80;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n }\n\n output[offset++] = (value & 0x3f) | 0x80;\n }\n}\n\n// TextEncoder and TextDecoder are standardized in whatwg encoding:\n// https://encoding.spec.whatwg.org/\n// and available in all the modern browsers:\n// https://caniuse.com/textencoder\n// They are available in Node.js since v12 LTS as well:\n// https://nodejs.org/api/globals.html#textencoder\n\nconst sharedTextEncoder = new TextEncoder();\n\n// This threshold should be determined by benchmarking, which might vary in engines and input data.\n// Run `npx ts-node benchmark/encode-string.ts` for details.\nconst TEXT_ENCODER_THRESHOLD = 50;\n\nexport function utf8EncodeTE(str: string, output: Uint8Array, outputOffset: number): void {\n sharedTextEncoder.encodeInto(str, output.subarray(outputOffset));\n}\n\nexport function utf8Encode(str: string, output: Uint8Array, outputOffset: number): void {\n if (str.length > TEXT_ENCODER_THRESHOLD) {\n utf8EncodeTE(str, output, outputOffset);\n } else {\n utf8EncodeJs(str, output, outputOffset);\n }\n}\n\nconst CHUNK_SIZE = 0x1_000;\n\nexport function utf8DecodeJs(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n let offset = inputOffset;\n const end = offset + byteLength;\n\n const units: Array<number> = [];\n let result = \"\";\n while (offset < end) {\n const byte1 = bytes[offset++]!;\n if ((byte1 & 0x80) === 0) {\n // 1 byte\n units.push(byte1);\n } else if ((byte1 & 0xe0) === 0xc0) {\n // 2 bytes\n const byte2 = bytes[offset++]! & 0x3f;\n units.push(((byte1 & 0x1f) << 6) | byte2);\n } else if ((byte1 & 0xf0) === 0xe0) {\n // 3 bytes\n const byte2 = bytes[offset++]! & 0x3f;\n const byte3 = bytes[offset++]! & 0x3f;\n units.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);\n } else if ((byte1 & 0xf8) === 0xf0) {\n // 4 bytes\n const byte2 = bytes[offset++]! & 0x3f;\n const byte3 = bytes[offset++]! & 0x3f;\n const byte4 = bytes[offset++]! & 0x3f;\n let unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;\n if (unit > 0xffff) {\n unit -= 0x10000;\n units.push(((unit >>> 10) & 0x3ff) | 0xd800);\n unit = 0xdc00 | (unit & 0x3ff);\n }\n units.push(unit);\n } else {\n units.push(byte1);\n }\n\n if (units.length >= CHUNK_SIZE) {\n result += String.fromCharCode(...units);\n units.length = 0;\n }\n }\n\n if (units.length > 0) {\n result += String.fromCharCode(...units);\n }\n\n return result;\n}\n\nconst sharedTextDecoder = new TextDecoder();\n\n// This threshold should be determined by benchmarking, which might vary in engines and input data.\n// Run `npx ts-node benchmark/decode-string.ts` for details.\nconst TEXT_DECODER_THRESHOLD = 200;\n\nexport function utf8DecodeTD(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n const stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength);\n return sharedTextDecoder.decode(stringBytes);\n}\n\nexport function utf8Decode(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n if (byteLength > TEXT_DECODER_THRESHOLD) {\n return utf8DecodeTD(bytes, inputOffset, byteLength);\n } else {\n return utf8DecodeJs(bytes, inputOffset, byteLength);\n }\n}\n", "/**\n * ExtData is used to handle Extension Types that are not registered to ExtensionCodec.\n */\nexport class ExtData {\n readonly type: number;\n readonly data: Uint8Array | ((pos: number) => Uint8Array);\n\n constructor(type: number, data: Uint8Array | ((pos: number) => Uint8Array)) {\n this.type = type;\n this.data = data;\n }\n}\n", "export class DecodeError extends Error {\n constructor(message: string) {\n super(message);\n\n // fix the prototype chain in a cross-platform way\n const proto: typeof DecodeError.prototype = Object.create(DecodeError.prototype);\n Object.setPrototypeOf(this, proto);\n\n Object.defineProperty(this, \"name\", {\n configurable: true,\n enumerable: false,\n value: DecodeError.name,\n });\n }\n}\n", "// Integer Utility\n\nexport const UINT32_MAX = 0xffff_ffff;\n\n// DataView extension to handle int64 / uint64,\n// where the actual range is 53-bits integer (a.k.a. safe integer)\n\nexport function setUint64(view: DataView, offset: number, value: number): void {\n const high = value / 0x1_0000_0000;\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\n\nexport function setInt64(view: DataView, offset: number, value: number): void {\n const high = Math.floor(value / 0x1_0000_0000);\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\n\nexport function getInt64(view: DataView, offset: number): number {\n const high = view.getInt32(offset);\n const low = view.getUint32(offset + 4);\n return high * 0x1_0000_0000 + low;\n}\n\nexport function getUint64(view: DataView, offset: number): number {\n const high = view.getUint32(offset);\n const low = view.getUint32(offset + 4);\n return high * 0x1_0000_0000 + low;\n}\n", "// https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type\nimport { DecodeError } from \"./DecodeError.ts\";\nimport { getInt64, setInt64 } from \"./utils/int.ts\";\n\nexport const EXT_TIMESTAMP = -1;\n\nexport type TimeSpec = {\n sec: number;\n nsec: number;\n};\n\nconst TIMESTAMP32_MAX_SEC = 0x100000000 - 1; // 32-bit unsigned int\nconst TIMESTAMP64_MAX_SEC = 0x400000000 - 1; // 34-bit unsigned int\n\nexport function encodeTimeSpecToTimestamp({ sec, nsec }: TimeSpec): Uint8Array {\n if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) {\n // Here sec >= 0 && nsec >= 0\n if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) {\n // timestamp 32 = { sec32 (unsigned) }\n const rv = new Uint8Array(4);\n const view = new DataView(rv.buffer);\n view.setUint32(0, sec);\n return rv;\n } else {\n // timestamp 64 = { nsec30 (unsigned), sec34 (unsigned) }\n const secHigh = sec / 0x100000000;\n const secLow = sec & 0xffffffff;\n const rv = new Uint8Array(8);\n const view = new DataView(rv.buffer);\n // nsec30 | secHigh2\n view.setUint32(0, (nsec << 2) | (secHigh & 0x3));\n // secLow32\n view.setUint32(4, secLow);\n return rv;\n }\n } else {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n const rv = new Uint8Array(12);\n const view = new DataView(rv.buffer);\n view.setUint32(0, nsec);\n setInt64(view, 4, sec);\n return rv;\n }\n}\n\nexport function encodeDateToTimeSpec(date: Date): TimeSpec {\n const msec = date.getTime();\n const sec = Math.floor(msec / 1e3);\n const nsec = (msec - sec * 1e3) * 1e6;\n\n // Normalizes { sec, nsec } to ensure nsec is unsigned.\n const nsecInSec = Math.floor(nsec / 1e9);\n return {\n sec: sec + nsecInSec,\n nsec: nsec - nsecInSec * 1e9,\n };\n}\n\nexport function encodeTimestampExtension(object: unknown): Uint8Array | null {\n if (object instanceof Date) {\n const timeSpec = encodeDateToTimeSpec(object);\n return encodeTimeSpecToTimestamp(timeSpec);\n } else {\n return null;\n }\n}\n\nexport function decodeTimestampToTimeSpec(data: Uint8Array): TimeSpec {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n // data may be 32, 64, or 96 bits\n switch (data.byteLength) {\n case 4: {\n // timestamp 32 = { sec32 }\n const sec = view.getUint32(0);\n const nsec = 0;\n return { sec, nsec };\n }\n case 8: {\n // timestamp 64 = { nsec30, sec34 }\n const nsec30AndSecHigh2 = view.getUint32(0);\n const secLow32 = view.getUint32(4);\n const sec = (nsec30AndSecHigh2 & 0x3) * 0x100000000 + secLow32;\n const nsec = nsec30AndSecHigh2 >>> 2;\n return { sec, nsec };\n }\n case 12: {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n\n const sec = getInt64(view, 4);\n const nsec = view.getUint32(0);\n return { sec, nsec };\n }\n default:\n throw new DecodeError(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${data.length}`);\n }\n}\n\nexport function decodeTimestampExtension(data: Uint8Array): Date {\n const timeSpec = decodeTimestampToTimeSpec(data);\n return new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6);\n}\n\nexport const timestampExtension = {\n type: EXT_TIMESTAMP,\n encode: encodeTimestampExtension,\n decode: decodeTimestampExtension,\n};\n", "// ExtensionCodec to handle MessagePack extensions\n\nimport { ExtData } from \"./ExtData.ts\";\nimport { timestampExtension } from \"./timestamp.ts\";\n\nexport type ExtensionDecoderType<ContextType> = (\n data: Uint8Array,\n extensionType: number,\n context: ContextType,\n) => unknown;\n\nexport type ExtensionEncoderType<ContextType> = (\n input: unknown,\n context: ContextType,\n) => Uint8Array | ((dataPos: number) => Uint8Array) | null;\n\n// immutable interface to ExtensionCodec\nexport type ExtensionCodecType<ContextType> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __brand?: ContextType;\n tryToEncode(object: unknown, context: ContextType): ExtData | null;\n decode(data: Uint8Array, extType: number, context: ContextType): unknown;\n};\n\nexport class ExtensionCodec<ContextType = undefined> implements ExtensionCodecType<ContextType> {\n public static readonly defaultCodec: ExtensionCodecType<undefined> = new ExtensionCodec();\n\n // ensures ExtensionCodecType<X> matches ExtensionCodec<X>\n // this will make type errors a lot more clear\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __brand?: ContextType;\n\n // built-in extensions\n private readonly builtInEncoders: Array<ExtensionEncoderType<ContextType> | undefined | null> = [];\n private readonly builtInDecoders: Array<ExtensionDecoderType<ContextType> | undefined | null> = [];\n\n // custom extensions\n private readonly encoders: Array<ExtensionEncoderType<ContextType> | undefined | null> = [];\n private readonly decoders: Array<ExtensionDecoderType<ContextType> | undefined | null> = [];\n\n public constructor() {\n this.register(timestampExtension);\n }\n\n public register({\n type,\n encode,\n decode,\n }: {\n type: number;\n encode: ExtensionEncoderType<ContextType>;\n decode: ExtensionDecoderType<ContextType>;\n }): void {\n if (type >= 0) {\n // custom extensions\n this.encoders[type] = encode;\n this.decoders[type] = decode;\n } else {\n // built-in extensions\n const index = -1 - type;\n this.builtInEncoders[index] = encode;\n this.builtInDecoders[index] = decode;\n }\n }\n\n public tryToEncode(object: unknown, context: ContextType): ExtData | null {\n // built-in extensions\n for (let i = 0; i < this.builtInEncoders.length; i++) {\n const encodeExt = this.builtInEncoders[i];\n if (encodeExt != null) {\n const data = encodeExt(object, context);\n if (data != null) {\n const type = -1 - i;\n return new ExtData(type, data);\n }\n }\n }\n\n // custom extensions\n for (let i = 0; i < this.encoders.length; i++) {\n const encodeExt = this.encoders[i];\n if (encodeExt != null) {\n const data = encodeExt(object, context);\n if (data != null) {\n const type = i;\n return new ExtData(type, data);\n }\n }\n }\n\n if (object instanceof ExtData) {\n // to keep ExtData as is\n return object;\n }\n return null;\n }\n\n public decode(data: Uint8Array, type: number, context: ContextType): unknown {\n const decodeExt = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type];\n if (decodeExt) {\n return decodeExt(data, type, context);\n } else {\n // decode() does not fail, returns ExtData instead.\n return new ExtData(type, data);\n }\n }\n}\n", "function isArrayBufferLike(buffer: unknown): buffer is ArrayBufferLike {\n return (\n buffer instanceof ArrayBuffer || (typeof SharedArrayBuffer !== \"undefined\" && buffer instanceof SharedArrayBuffer)\n );\n}\n\nexport function ensureUint8Array(\n buffer: ArrayLike<number> | Uint8Array<ArrayBufferLike> | ArrayBufferView | ArrayBufferLike,\n): Uint8Array<ArrayBufferLike> {\n if (buffer instanceof Uint8Array) {\n return buffer;\n } else if (ArrayBuffer.isView(buffer)) {\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n } else if (isArrayBufferLike(buffer)) {\n return new Uint8Array(buffer);\n } else {\n // ArrayLike<number>\n return Uint8Array.from(buffer);\n }\n}\n", "import { utf8Count, utf8Encode } from \"./utils/utf8.ts\";\nimport { ExtensionCodec } from \"./ExtensionCodec.ts\";\nimport { setInt64, setUint64 } from \"./utils/int.ts\";\nimport { ensureUint8Array } from \"./utils/typedArrays.ts\";\nimport type { ExtData } from \"./ExtData.ts\";\nimport type { ContextOf } from \"./context.ts\";\nimport type { ExtensionCodecType } from \"./ExtensionCodec.ts\";\n\nexport const DEFAULT_MAX_DEPTH = 100;\nexport const DEFAULT_INITIAL_BUFFER_SIZE = 2048;\n\nexport type EncoderOptions<ContextType = undefined> = Partial<\n Readonly<{\n extensionCodec: ExtensionCodecType<ContextType>;\n\n /**\n * Encodes bigint as Int64 or Uint64 if it's set to true.\n * {@link forceIntegerToFloat} does not affect bigint.\n * Depends on ES2020's {@link DataView#setBigInt64} and\n * {@link DataView#setBigUint64}.\n *\n * Defaults to false.\n */\n useBigInt64: boolean;\n\n /**\n * The maximum depth in nested objects and arrays.\n *\n * Defaults to 100.\n */\n maxDepth: number;\n\n /**\n * The initial size of the internal buffer.\n *\n * Defaults to 2048.\n */\n initialBufferSize: number;\n\n /**\n * If `true`, the keys of an object is sorted. In other words, the encoded\n * binary is canonical and thus comparable to another encoded binary.\n *\n * Defaults to `false`. If enabled, it spends more time in encoding objects.\n */\n sortKeys: boolean;\n /**\n * If `true`, non-integer numbers are encoded in float32, not in float64 (the default).\n *\n * Only use it if precisions don't matter.\n *\n * Defaults to `false`.\n */\n forceFloat32: boolean;\n\n /**\n * If `true`, an object property with `undefined` value are ignored.\n * e.g. `{ foo: undefined }` will be encoded as `{}`, as `JSON.stringify()` does.\n *\n * Defaults to `false`. If enabled, it spends more time in encoding objects.\n */\n ignoreUndefined: boolean;\n\n /**\n * If `true`, integer numbers are encoded as floating point numbers,\n * with the `forceFloat32` option taken into account.\n *\n * Defaults to `false`.\n */\n forceIntegerToFloat: boolean;\n }>\n> &\n ContextOf<ContextType>;\n\nexport class Encoder<ContextType = undefined> {\n private readonly extensionCodec: ExtensionCodecType<ContextType>;\n private readonly context: ContextType;\n private readonly useBigInt64: boolean;\n private readonly maxDepth: number;\n private readonly initialBufferSize: number;\n private readonly sortKeys: boolean;\n private readonly forceFloat32: boolean;\n private readonly ignoreUndefined: boolean;\n private readonly forceIntegerToFloat: boolean;\n\n private pos: number;\n private view: DataView;\n private bytes: Uint8Array;\n\n private entered = false;\n\n public constructor(options?: EncoderOptions<ContextType>) {\n this.extensionCodec = options?.extensionCodec ?? (ExtensionCodec.defaultCodec as ExtensionCodecType<ContextType>);\n this.context = (options as { context: ContextType } | undefined)?.context as ContextType; // needs a type assertion because EncoderOptions has no context property when ContextType is undefined\n\n this.useBigInt64 = options?.useBigInt64 ?? false;\n this.maxDepth = options?.maxDepth ?? DEFAULT_MAX_DEPTH;\n this.initialBufferSize = options?.initialBufferSize ?? DEFAULT_INITIAL_BUFFER_SIZE;\n this.sortKeys = options?.sortKeys ?? false;\n this.forceFloat32 = options?.forceFloat32 ?? false;\n this.ignoreUndefined = options?.ignoreUndefined ?? false;\n this.forceIntegerToFloat = options?.forceIntegerToFloat ?? false;\n\n this.pos = 0;\n this.view = new DataView(new ArrayBuffer(this.initialBufferSize));\n this.bytes = new Uint8Array(this.view.buffer);\n }\n\n private clone() {\n // Because of slightly special argument `context`,\n // type assertion is needed.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return new Encoder<ContextType>({\n extensionCodec: this.extensionCodec,\n context: this.context,\n useBigInt64: this.useBigInt64,\n maxDepth: this.maxDepth,\n initialBufferSize: this.initialBufferSize,\n sortKeys: this.sortKeys,\n forceFloat32: this.forceFloat32,\n ignoreUndefined: this.ignoreUndefined,\n forceIntegerToFloat: this.forceIntegerToFloat,\n } as any);\n }\n\n private reinitializeState() {\n this.pos = 0;\n }\n\n /**\n * This is almost equivalent to {@link Encoder#encode}, but it returns an reference of the encoder's internal buffer and thus much faster than {@link Encoder#encode}.\n *\n * @returns Encodes the object and returns a shared reference the encoder's internal buffer.\n */\n public encodeSharedRef(object: unknown): Uint8Array {\n if (this.entered) {\n const instance = this.clone();\n return instance.encodeSharedRef(object);\n }\n\n try {\n this.entered = true;\n\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.subarray(0, this.pos);\n } finally {\n this.entered = false;\n }\n }\n\n /**\n * @returns Encodes the object and returns a copy of the encoder's internal buffer.\n */\n public encode(object: unknown): Uint8Array {\n if (this.entered) {\n const instance = this.clone();\n return instance.encode(object);\n }\n\n try {\n this.entered = true;\n\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.slice(0, this.pos);\n } finally {\n this.entered = false;\n }\n }\n\n private doEncode(object: unknown, depth: number): void {\n if (depth > this.maxDepth) {\n throw new Error(`Too deep objects in depth ${depth}`);\n }\n\n if (object == null) {\n this.encodeNil();\n } else if (typeof object === \"boolean\") {\n this.encodeBoolean(object);\n } else if (typeof object === \"number\") {\n if (!this.forceIntegerToFloat) {\n this.encodeNumber(object);\n } else {\n this.encodeNumberAsFloat(object);\n }\n } else if (typeof object === \"string\") {\n this.encodeString(object);\n } else if (this.useBigInt64 && typeof object === \"bigint\") {\n this.encodeBigInt64(object);\n } else {\n this.encodeObject(object, depth);\n }\n }\n\n private ensureBufferSizeToWrite(sizeToWrite: number) {\n const requiredSize = this.pos + sizeToWrite;\n\n if (this.view.byteLength < requiredSize) {\n this.resizeBuffer(requiredSize * 2);\n }\n }\n\n private resizeBuffer(newSize: number) {\n const newBuffer = new ArrayBuffer(newSize);\n const newBytes = new Uint8Array(newBuffer);\n const newView = new DataView(newBuffer);\n\n newBytes.set(this.bytes);\n\n this.view = newView;\n this.bytes = newBytes;\n }\n\n private encodeNil() {\n this.writeU8(0xc0);\n }\n\n private encodeBoolean(object: boolean) {\n if (object === false) {\n this.writeU8(0xc2);\n } else {\n this.writeU8(0xc3);\n }\n }\n\n private encodeNumber(object: number): void {\n if (!this.forceIntegerToFloat && Number.isSafeInteger(object)) {\n if (object >= 0) {\n if (object < 0x80) {\n // positive fixint\n this.writeU8(object);\n } else if (object < 0x100) {\n // uint 8\n this.writeU8(0xcc);\n this.writeU8(object);\n } else if (object < 0x10000) {\n // uint 16\n this.writeU8(0xcd);\n this.writeU16(object);\n } else if (object < 0x100000000) {\n // uint 32\n this.writeU8(0xce);\n this.writeU32(object);\n } else if (!this.useBigInt64) {\n // uint 64\n this.writeU8(0xcf);\n this.writeU64(object);\n } else {\n this.encodeNumberAsFloat(object);\n }\n } else {\n if (object >= -0x20) {\n // negative fixint\n this.writeU8(0xe0 | (object + 0x20));\n } else if (object >= -0x80) {\n // int 8\n this.writeU8(0xd0);\n this.writeI8(object);\n } else if (object >= -0x8000) {\n // int 16\n this.writeU8(0xd1);\n this.writeI16(object);\n } else if (object >= -0x80000000) {\n // int 32\n this.writeU8(0xd2);\n this.writeI32(object);\n } else if (!this.useBigInt64) {\n // int 64\n this.writeU8(0xd3);\n this.writeI64(object);\n } else {\n this.encodeNumberAsFloat(object);\n }\n }\n } else {\n this.encodeNumberAsFloat(object);\n }\n }\n\n private encodeNumberAsFloat(object: number): void {\n if (this.forceFloat32) {\n // float 32\n this.writeU8(0xca);\n this.writeF32(object);\n } else {\n // float 64\n this.writeU8(0xcb);\n this.writeF64(object);\n }\n }\n\n private encodeBigInt64(object: bigint): void {\n if (object >= BigInt(0)) {\n // uint 64\n this.writeU8(0xcf);\n this.writeBigUint64(object);\n } else {\n // int 64\n this.writeU8(0xd3);\n this.writeBigInt64(object);\n }\n }\n\n private writeStringHeader(byteLength: number) {\n if (byteLength < 32) {\n // fixstr\n this.writeU8(0xa0 + byteLength);\n } else if (byteLength < 0x100) {\n // str 8\n this.writeU8(0xd9);\n this.writeU8(byteLength);\n } else if (byteLength < 0x10000) {\n // str 16\n this.writeU8(0xda);\n this.writeU16(byteLength);\n } else if (byteLength < 0x100000000) {\n // str 32\n this.writeU8(0xdb);\n this.writeU32(byteLength);\n } else {\n throw new Error(`Too long string: ${byteLength} bytes in UTF-8`);\n }\n }\n\n private encodeString(object: string) {\n const maxHeaderSize = 1 + 4;\n\n const byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8Encode(object, this.bytes, this.pos);\n this.pos += byteLength;\n }\n\n private encodeObject(object: unknown, depth: number) {\n // try to encode objects with custom codec first of non-primitives\n const ext = this.extensionCodec.tryToEncode(object, this.context);\n if (ext != null) {\n this.encodeExtension(ext);\n } else if (Array.isArray(object)) {\n this.encodeArray(object, depth);\n } else if (ArrayBuffer.isView(object)) {\n this.encodeBinary(object);\n } else if (typeof object === \"object\") {\n this.encodeMap(object as Record<string, unknown>, depth);\n } else {\n // symbol, function and other special object come here unless extensionCodec handles them.\n throw new Error(`Unrecognized object: ${Object.prototype.toString.apply(object)}`);\n }\n }\n\n private encodeBinary(object: ArrayBufferView) {\n const size = object.byteLength;\n if (size < 0x100) {\n // bin 8\n this.writeU8(0xc4);\n this.writeU8(size);\n } else if (size < 0x10000) {\n // bin 16\n this.writeU8(0xc5);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // bin 32\n this.writeU8(0xc6);\n this.writeU32(size);\n } else {\n throw new Error(`Too large binary: ${size}`);\n }\n const bytes = ensureUint8Array(object);\n this.writeU8a(bytes);\n }\n\n private encodeArray(object: Array<unknown>, depth: number) {\n const size = object.length;\n if (size < 16) {\n // fixarray\n this.writeU8(0x90 + size);\n } else if (size < 0x10000) {\n // array 16\n this.writeU8(0xdc);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // array 32\n this.writeU8(0xdd);\n this.writeU32(size);\n } else {\n throw new Error(`Too large array: ${size}`);\n }\n for (const item of object) {\n this.doEncode(item, depth + 1);\n }\n }\n\n private countWithoutUndefined(object: Record<string, unknown>, keys: ReadonlyArray<string>): number {\n let count = 0;\n\n for (const key of keys) {\n if (object[key] !== undefined) {\n count++;\n }\n }\n\n return count;\n }\n\n private encodeMap(object: Record<string, unknown>, depth: number) {\n const keys = Object.keys(object);\n if (this.sortKeys) {\n keys.sort();\n }\n\n const size = this.ignoreUndefined ? this.countWithoutUndefined(object, keys) : keys.length;\n\n if (size < 16) {\n // fixmap\n this.writeU8(0x80 + size);\n } else if (size < 0x10000) {\n // map 16\n this.writeU8(0xde);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // map 32\n this.writeU8(0xdf);\n this.writeU32(size);\n } else {\n throw new Error(`Too large map object: ${size}`);\n }\n\n for (const key of keys) {\n const value = object[key];\n\n if (!(this.ignoreUndefined && value === undefined)) {\n this.encodeString(key);\n this.doEncode(value, depth + 1);\n }\n }\n }\n\n private encodeExtension(ext: ExtData) {\n if (typeof ext.data === \"function\") {\n const data = ext.data(this.pos + 6);\n const size = data.length;\n\n if (size >= 0x100000000) {\n throw new Error(`Too large extension object: ${size}`);\n }\n\n this.writeU8(0xc9);\n this.writeU32(size);\n this.writeI8(ext.type);\n this.writeU8a(data);\n return;\n }\n\n const size = ext.data.length;\n if (size === 1) {\n // fixext 1\n this.writeU8(0xd4);\n } else if (size === 2) {\n // fixext 2\n this.writeU8(0xd5);\n } else if (size === 4) {\n // fixext 4\n this.writeU8(0xd6);\n } else if (size === 8) {\n // fixext 8\n this.writeU8(0xd7);\n } else if (size === 16) {\n // fixext 16\n this.writeU8(0xd8);\n } else if (size < 0x100) {\n // ext 8\n this.writeU8(0xc7);\n this.writeU8(size);\n } else if (size < 0x10000) {\n // ext 16\n this.writeU8(0xc8);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // ext 32\n this.writeU8(0xc9);\n this.writeU32(size);\n } else {\n throw new Error(`Too large extension object: ${size}`);\n }\n this.writeI8(ext.type);\n this.writeU8a(ext.data);\n }\n\n private writeU8(value: number) {\n this.ensureBufferSizeToWrite(1);\n\n this.view.setUint8(this.pos, value);\n this.pos++;\n }\n\n private writeU8a(values: ArrayLike<number>) {\n const size = values.length;\n this.ensureBufferSizeToWrite(size);\n\n this.bytes.set(values, this.pos);\n this.pos += size;\n }\n\n private writeI8(value: number) {\n this.ensureBufferSizeToWrite(1);\n\n this.view.setInt8(this.pos, value);\n this.pos++;\n }\n\n private writeU16(value: number) {\n this.ensureBufferSizeToWrite(2);\n\n this.view.setUint16(this.pos, value);\n this.pos += 2;\n }\n\n private writeI16(value: number) {\n this.ensureBufferSizeToWrite(2);\n\n this.view.setInt16(this.pos, value);\n this.pos += 2;\n }\n\n private writeU32(value: number) {\n this.ensureBufferSizeToWrite(4);\n\n this.view.setUint32(this.pos, value);\n this.pos += 4;\n }\n\n private writeI32(value: number) {\n this.ensureBufferSizeToWrite(4);\n\n this.view.setInt32(this.pos, value);\n this.pos += 4;\n }\n\n private writeF32(value: number) {\n this.ensureBufferSizeToWrite(4);\n\n this.view.setFloat32(this.pos, value);\n this.pos += 4;\n }\n\n private writeF64(value: number) {\n this.ensureBufferSizeToWrite(8);\n\n this.view.setFloat64(this.pos, value);\n this.pos += 8;\n }\n\n private writeU64(value: number) {\n this.ensureBufferSizeToWrite(8);\n\n setUint64(this.view, this.pos, value);\n this.pos += 8;\n }\n\n private writeI64(value: number) {\n this.ensureBufferSizeToWrite(8);\n\n setInt64(this.view, this.pos, value);\n this.pos += 8;\n }\n\n private writeBigUint64(value: bigint) {\n this.ensureBufferSizeToWrite(8);\n\n this.view.setBigUint64(this.pos, value);\n this.pos += 8;\n }\n\n private writeBigInt64(value: bigint) {\n this.ensureBufferSizeToWrite(8);\n\n this.view.setBigInt64(this.pos, value);\n this.pos += 8;\n }\n}\n", "import { Encoder } from \"./Encoder.ts\";\nimport type { EncoderOptions } from \"./Encoder.ts\";\nimport type { SplitUndefined } from \"./context.ts\";\n\n/**\n * It encodes `value` in the MessagePack format and\n * returns a byte buffer.\n *\n * The returned buffer is a slice of a larger `ArrayBuffer`, so you have to use its `#byteOffset` and `#byteLength` in order to convert it to another typed arrays including NodeJS `Buffer`.\n */\nexport function encode<ContextType = undefined>(\n value: unknown,\n options?: EncoderOptions<SplitUndefined<ContextType>>,\n): Uint8Array {\n const encoder = new Encoder(options);\n return encoder.encodeSharedRef(value);\n}\n", "export function prettyByte(byte: number): string {\n return `${byte < 0 ? \"-\" : \"\"}0x${Math.abs(byte).toString(16).padStart(2, \"0\")}`;\n}\n", "import { utf8DecodeJs } from \"./utils/utf8.ts\";\n\nconst DEFAULT_MAX_KEY_LENGTH = 16;\nconst DEFAULT_MAX_LENGTH_PER_KEY = 16;\n\nexport interface KeyDecoder {\n canBeCached(byteLength: number): boolean;\n decode(bytes: Uint8Array, inputOffset: number, byteLength: number): string;\n}\ninterface KeyCacheRecord {\n readonly bytes: Uint8Array;\n readonly str: string;\n}\n\nexport class CachedKeyDecoder implements KeyDecoder {\n hit = 0;\n miss = 0;\n private readonly caches: Array<Array<KeyCacheRecord>>;\n readonly maxKeyLength: number;\n readonly maxLengthPerKey: number;\n\n constructor(maxKeyLength = DEFAULT_MAX_KEY_LENGTH, maxLengthPerKey = DEFAULT_MAX_LENGTH_PER_KEY) {\n this.maxKeyLength = maxKeyLength;\n this.maxLengthPerKey = maxLengthPerKey;\n\n // avoid `new Array(N)`, which makes a sparse array,\n // because a sparse array is typically slower than a non-sparse array.\n this.caches = [];\n for (let i = 0; i < this.maxKeyLength; i++) {\n this.caches.push([]);\n }\n }\n\n public canBeCached(byteLength: number): boolean {\n return byteLength > 0 && byteLength <= this.maxKeyLength;\n }\n\n private find(bytes: Uint8Array, inputOffset: number, byteLength: number): string | null {\n const records = this.caches[byteLength - 1]!;\n\n FIND_CHUNK: for (const record of records) {\n const recordBytes = record.bytes;\n\n for (let j = 0; j < byteLength; j++) {\n if (recordBytes[j] !== bytes[inputOffset + j]) {\n continue FIND_CHUNK;\n }\n }\n return record.str;\n }\n return null;\n }\n\n private store(bytes: Uint8Array, value: string) {\n const records = this.caches[bytes.length - 1]!;\n const record: KeyCacheRecord = { bytes, str: value };\n\n if (records.length >= this.maxLengthPerKey) {\n // `records` are full!\n // Set `record` to an arbitrary position.\n records[(Math.random() * records.length) | 0] = record;\n } else {\n records.push(record);\n }\n }\n\n public decode(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n const cachedValue = this.find(bytes, inputOffset, byteLength);\n if (cachedValue != null) {\n this.hit++;\n return cachedValue;\n }\n this.miss++;\n\n const str = utf8DecodeJs(bytes, inputOffset, byteLength);\n // Ensure to copy a slice of bytes because the bytes may be a NodeJS Buffer and Buffer#slice() returns a reference to its internal ArrayBuffer.\n const slicedCopyOfBytes = Uint8Array.prototype.slice.call(bytes, inputOffset, inputOffset + byteLength);\n this.store(slicedCopyOfBytes, str);\n return str;\n }\n}\n", "import { prettyByte } from \"./utils/prettyByte.ts\";\nimport { ExtensionCodec } from \"./ExtensionCodec.ts\";\nimport { getInt64, getUint64, UINT32_MAX } from \"./utils/int.ts\";\nimport { utf8Decode } from \"./utils/utf8.ts\";\nimport { ensureUint8Array } from \"./utils/typedArrays.ts\";\nimport { CachedKeyDecoder } from \"./CachedKeyDecoder.ts\";\nimport { DecodeError } from \"./DecodeError.ts\";\nimport type { ContextOf } from \"./context.ts\";\nimport type { ExtensionCodecType } from \"./ExtensionCodec.ts\";\nimport type { KeyDecoder } from \"./CachedKeyDecoder.ts\";\n\nexport type DecoderOptions<ContextType = undefined> = Readonly<\n Partial<{\n extensionCodec: ExtensionCodecType<ContextType>;\n\n /**\n * Decodes Int64 and Uint64 as bigint if it's set to true.\n * Depends on ES2020's {@link DataView#getBigInt64} and\n * {@link DataView#getBigUint64}.\n *\n * Defaults to false.\n */\n useBigInt64: boolean;\n\n /**\n * By default, string values will be decoded as UTF-8 strings. However, if this option is true,\n * string values will be returned as Uint8Arrays without additional decoding.\n *\n * This is useful if the strings may contain invalid UTF-8 sequences.\n *\n * Note that this option only applies to string values, not map keys. Additionally, when\n * enabled, raw string length is limited by the maxBinLength option.\n */\n rawStrings: boolean;\n\n /**\n * Maximum string length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxStrLength: number;\n /**\n * Maximum binary length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxBinLength: number;\n /**\n * Maximum array length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxArrayLength: number;\n /**\n * Maximum map length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxMapLength: number;\n /**\n * Maximum extension length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxExtLength: number;\n\n /**\n * An object key decoder. Defaults to the shared instance of {@link CachedKeyDecoder}.\n * `null` is a special value to disable the use of the key decoder at all.\n */\n keyDecoder: KeyDecoder | null;\n\n /**\n * A function to convert decoded map key to a valid JS key type.\n *\n * Defaults to a function that throws an error if the key is not a string or a number.\n */\n mapKeyConverter: (key: unknown) => MapKeyType;\n }>\n> &\n ContextOf<ContextType>;\n\nconst STATE_ARRAY = \"array\";\nconst STATE_MAP_KEY = \"map_key\";\nconst STATE_MAP_VALUE = \"map_value\";\n\ntype MapKeyType = string | number;\n\nconst mapKeyConverter = (key: unknown): MapKeyType => {\n if (typeof key === \"string\" || typeof key === \"number\") {\n return key;\n }\n throw new DecodeError(\"The type of key must be string or number but \" + typeof key);\n};\n\ntype StackMapState = {\n type: typeof STATE_MAP_KEY | typeof STATE_MAP_VALUE;\n size: number;\n key: MapKeyType | null;\n readCount: number;\n map: Record<string, unknown>;\n};\n\ntype StackArrayState = {\n type: typeof STATE_ARRAY;\n size: number;\n array: Array<unknown>;\n position: number;\n};\n\nclass StackPool {\n private readonly stack: Array<StackState> = [];\n private stackHeadPosition = -1;\n\n public get length(): number {\n return this.stackHeadPosition + 1;\n }\n\n public top(): StackState | undefined {\n return this.stack[this.stackHeadPosition];\n }\n\n public pushArrayState(size: number) {\n const state = this.getUninitializedStateFromPool() as StackArrayState;\n\n state.type = STATE_ARRAY;\n state.position = 0;\n state.size = size;\n state.array = new Array(size);\n }\n\n public pushMapState(size: number) {\n const state = this.getUninitializedStateFromPool() as StackMapState;\n\n state.type = STATE_MAP_KEY;\n state.readCount = 0;\n state.size = size;\n state.map = {};\n }\n\n private getUninitializedStateFromPool() {\n this.stackHeadPosition++;\n\n if (this.stackHeadPosition === this.stack.length) {\n const partialState: Partial<StackState> = {\n type: undefined,\n size: 0,\n array: undefined,\n position: 0,\n readCount: 0,\n map: undefined,\n key: null,\n };\n\n this.stack.push(partialState as StackState);\n }\n\n return this.stack[this.stackHeadPosition];\n }\n\n public release(state: StackState): void {\n const topStackState = this.stack[this.stackHeadPosition];\n\n if (topStackState !== state) {\n throw new Error(\"Invalid stack state. Released state is not on top of the stack.\");\n }\n\n if (state.type === STATE_ARRAY) {\n const partialState = state as Partial<StackArrayState>;\n partialState.size = 0;\n partialState.array = undefined;\n partialState.position = 0;\n partialState.type = undefined;\n }\n\n if (state.type === STATE_MAP_KEY || state.type === STATE_MAP_VALUE) {\n const partialState = state as Partial<StackMapState>;\n partialState.size = 0;\n partialState.map = undefined;\n partialState.readCount = 0;\n partialState.type = undefined;\n }\n\n this.stackHeadPosition--;\n }\n\n public reset(): void {\n this.stack.length = 0;\n this.stackHeadPosition = -1;\n }\n}\n\ntype StackState = StackArrayState | StackMapState;\n\nconst HEAD_BYTE_REQUIRED = -1;\n\nconst EMPTY_VIEW = new DataView<ArrayBufferLike>(new ArrayBuffer(0));\nconst EMPTY_BYTES = new Uint8Array<ArrayBufferLike>(EMPTY_VIEW.buffer);\n\ntry {\n // IE11: The spec says it should throw RangeError,\n // IE11: but in IE11 it throws TypeError.\n EMPTY_VIEW.getInt8(0);\n} catch (e) {\n if (!(e instanceof RangeError)) {\n throw new Error(\n \"This module is not supported in the current JavaScript engine because DataView does not throw RangeError on out-of-bounds access\",\n );\n }\n}\n\nconst MORE_DATA = new RangeError(\"Insufficient data\");\n\nconst sharedCachedKeyDecoder = new CachedKeyDecoder();\n\nexport class Decoder<ContextType = undefined> {\n private readonly extensionCodec: ExtensionCodecType<ContextType>;\n private readonly context: ContextType;\n private readonly useBigInt64: boolean;\n private readonly rawStrings: boolean;\n private readonly maxStrLength: number;\n private readonly maxBinLength: number;\n private readonly maxArrayLength: number;\n private readonly maxMapLength: number;\n private readonly maxExtLength: number;\n private readonly keyDecoder: KeyDecoder | null;\n private readonly mapKeyConverter: (key: unknown) => MapKeyType;\n\n private totalPos = 0;\n private pos = 0;\n\n private view = EMPTY_VIEW;\n private bytes = EMPTY_BYTES;\n private headByte = HEAD_BYTE_REQUIRED;\n private readonly stack = new StackPool();\n\n private entered = false;\n\n public constructor(options?: DecoderOptions<ContextType>) {\n this.extensionCodec = options?.extensionCodec ?? (ExtensionCodec.defaultCodec as ExtensionCodecType<ContextType>);\n this.context = (options as { context: ContextType } | undefined)?.context as ContextType; // needs a type assertion because EncoderOptions has no context property when ContextType is undefined\n\n this.useBigInt64 = options?.useBigInt64 ?? false;\n this.rawStrings = options?.rawStrings ?? false;\n this.maxStrLength = options?.maxStrLength ?? UINT32_MAX;\n this.maxBinLength = options?.maxBinLength ?? UINT32_MAX;\n this.maxArrayLength = options?.maxArrayLength ?? UINT32_MAX;\n this.maxMapLength = options?.maxMapLength ?? UINT32_MAX;\n this.maxExtLength = options?.maxExtLength ?? UINT32_MAX;\n this.keyDecoder = options?.keyDecoder !== undefined ? options.keyDecoder : sharedCachedKeyDecoder;\n this.mapKeyConverter = options?.mapKeyConverter ?? mapKeyConverter;\n }\n\n private clone(): Decoder<ContextType> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return new Decoder({\n extensionCodec: this.extensionCodec,\n context: this.context,\n useBigInt64: this.useBigInt64,\n rawStrings: this.rawStrings,\n maxStrLength: this.maxStrLength,\n maxBinLength: this.maxBinLength,\n maxArrayLength: this.maxArrayLength,\n maxMapLength: this.maxMapLength,\n maxExtLength: this.maxExtLength,\n keyDecoder: this.keyDecoder,\n } as any);\n }\n\n private reinitializeState() {\n this.totalPos = 0;\n this.headByte = HEAD_BYTE_REQUIRED;\n this.stack.reset();\n\n // view, bytes, and pos will be re-initialized in setBuffer()\n }\n\n private setBuffer(buffer: ArrayLike<number> | ArrayBufferView | ArrayBufferLike): void {\n const bytes = ensureUint8Array(buffer);\n this.bytes = bytes;\n this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n this.pos = 0;\n }\n\n private appendBuffer(buffer: ArrayLike<number> | ArrayBufferView | ArrayBufferLike): void {\n if (this.headByte === HEAD_BYTE_REQUIRED && !this.hasRemaining(1)) {\n this.setBuffer(buffer);\n } else {\n const remainingData = this.bytes.subarray(this.pos);\n const newData = ensureUint8Array(buffer);\n\n // concat remainingData + newData\n const newBuffer = new Uint8Array(remainingData.length + newData.length);\n newBuffer.set(remainingData);\n newBuffer.set(newData, remainingData.length);\n this.setBuffer(newBuffer);\n }\n }\n\n private hasRemaining(size: number) {\n return this.view.byteLength - this.pos >= size;\n }\n\n private createExtraByteError(posToShow: number): Error {\n const { view, pos } = this;\n return new RangeError(`Extra ${view.byteLength - pos} of ${view.byteLength} byte(s) found at buffer[${posToShow}]`);\n }\n\n /**\n * @throws {@link DecodeError}\n * @throws {@link RangeError}\n */\n public decode(buffer: ArrayLike<number> | ArrayBufferView | ArrayBufferLike): unknown {\n if (this.entered) {\n const instance = this.clone();\n return instance.decode(buffer);\n }\n\n try {\n this.entered = true;\n\n this.reinitializeState();\n this.setBuffer(buffer);\n\n const object = this.doDecodeSync();\n if (this.hasRemaining(1)) {\n throw this.createExtraByteError(this.pos);\n }\n return object;\n } finally {\n this.entered = false;\n }\n }\n\n public *decodeMulti(buffer: ArrayLike<number> | ArrayBufferView | ArrayBufferLike): Generator<unknown, void, unknown> {\n if (this.entered) {\n const instance = this.clone();\n yield* instance.decodeMulti(buffer);\n return;\n }\n\n try {\n this.entered = true;\n\n this.reinitializeState();\n this.setBuffer(buffer);\n\n while (this.hasRemaining(1)) {\n yield this.doDecodeSync();\n }\n } finally {\n this.entered = false;\n }\n }\n\n public async decodeAsync(stream: AsyncIterable<ArrayLike<number> | ArrayBufferView | ArrayBufferLike>): Promise<unknown> {\n if (this.entered) {\n const instance = this.clone();\n return instance.decodeAsync(stream);\n }\n\n try {\n this.entered = true;\n\n let decoded = false;\n let object: unknown;\n for await (const buffer of stream) {\n if (decoded) {\n this.entered = false;\n throw this.createExtraByteError(this.totalPos);\n }\n\n this.appendBuffer(buffer);\n\n try {\n object = this.doDecodeSync();\n decoded = true;\n } catch (e) {\n if (!(e instanceof RangeError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n }\n\n if (decoded) {\n if (this.hasRemaining(1)) {\n throw this.createExtraByteError(this.totalPos);\n }\n return object;\n }\n\n const { headByte, pos, totalPos } = this;\n throw new RangeError(\n `Insufficient data in parsing ${prettyByte(headByte)} at ${totalPos} (${pos} in the current buffer)`,\n );\n } finally {\n this.entered = false;\n }\n }\n\n public decodeArrayStream(\n stream: AsyncIterable<ArrayLike<number> | ArrayBufferView | ArrayBufferLike>,\n ): AsyncGenerator<unknown, void, unknown> {\n return this.decodeMultiAsync(stream, true);\n }\n\n public decodeStream(stream: AsyncIterable<ArrayLike<number> | ArrayBufferView | ArrayBufferLike>): AsyncGenerator<unknown, void, unknown> {\n return this.decodeMultiAsync(stream, false);\n }\n\n private async *decodeMultiAsync(stream: AsyncIterable<ArrayLike<number> | ArrayBufferView | ArrayBufferLike>, isArray: boolean): AsyncGenerator<unknown, void, unknown> {\n if (this.entered) {\n const instance = this.clone();\n yield* instance.decodeMultiAsync(stream, isArray);\n return;\n }\n\n try {\n this.entered = true;\n\n let isArrayHeaderRequired = isArray;\n let arrayItemsLeft = -1;\n\n for await (const buffer of stream) {\n if (isArray && arrayItemsLeft === 0) {\n throw this.createExtraByteError(this.totalPos);\n }\n\n this.appendBuffer(buffer);\n\n if (isArrayHeaderRequired) {\n arrayItemsLeft = this.readArraySize();\n isArrayHeaderRequired = false;\n this.complete();\n }\n\n try {\n while (true) {\n yield this.doDecodeSync();\n if (--arrayItemsLeft === 0) {\n break;\n }\n }\n } catch (e) {\n if (!(e instanceof RangeError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n }\n } finally {\n this.entered = false;\n }\n }\n\n private doDecodeSync(): unknown {\n DECODE: while (true) {\n const headByte = this.readHeadByte();\n let object: unknown;\n\n if (headByte >= 0xe0) {\n // negative fixint (111x xxxx) 0xe0 - 0xff\n object = headByte - 0x100;\n } else if (headByte < 0xc0) {\n if (headByte < 0x80) {\n // positive fixint (0xxx xxxx) 0x00 - 0x7f\n object = headByte;\n } else if (headByte < 0x90) {\n // fixmap (1000 xxxx) 0x80 - 0x8f\n const size = headByte - 0x80;\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte < 0xa0) {\n // fixarray (1001 xxxx) 0x90 - 0x9f\n const size = headByte - 0x90;\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else {\n // fixstr (101x xxxx) 0xa0 - 0xbf\n const byteLength = headByte - 0xa0;\n object = this.decodeString(byteLength, 0);\n }\n } else if (headByte === 0xc0) {\n // nil\n object = null;\n } else if (headByte === 0xc2) {\n // false\n object = false;\n } else if (headByte === 0xc3) {\n // true\n object = true;\n } else if (headByte === 0xca) {\n // float 32\n object = this.readF32();\n } else if (headByte === 0xcb) {\n // float 64\n object = this.readF64();\n } else if (headByte === 0xcc) {\n // uint 8\n object = this.readU8();\n } else if (headByte === 0xcd) {\n // uint 16\n object = this.readU16();\n } else if (headByte === 0xce) {\n // uint 32\n object = this.readU32();\n } else if (headByte === 0xcf) {\n // uint 64\n if (this.useBigInt64) {\n object = this.readU64AsBigInt();\n } else {\n object = this.readU64();\n }\n } else if (headByte === 0xd0) {\n // int 8\n object = this.readI8();\n } else if (headByte === 0xd1) {\n // int 16\n object = this.readI16();\n } else if (headByte === 0xd2) {\n // int 32\n object = this.readI32();\n } else if (headByte === 0xd3) {\n // int 64\n if (this.useBigInt64) {\n object = this.readI64AsBigInt();\n } else {\n object = this.readI64();\n }\n } else if (headByte === 0xd9) {\n // str 8\n const byteLength = this.lookU8();\n object = this.decodeString(byteLength, 1);\n } else if (headByte === 0xda) {\n // str 16\n const byteLength = this.lookU16();\n object = this.decodeString(byteLength, 2);\n } else if (headByte === 0xdb) {\n // str 32\n const byteLength = this.lookU32();\n object = this.decodeString(byteLength, 4);\n } else if (headByte === 0xdc) {\n // array 16\n const size = this.readU16();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else if (headByte === 0xdd) {\n // array 32\n const size = this.readU32();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else if (headByte === 0xde) {\n // map 16\n const size = this.readU16();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte === 0xdf) {\n // map 32\n const size = this.readU32();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte === 0xc4) {\n // bin 8\n const size = this.lookU8();\n object = this.decodeBinary(size, 1);\n } else if (headByte === 0xc5) {\n // bin 16\n const size = this.lookU16();\n object = this.decodeBinary(size, 2);\n } else if (headByte === 0xc6) {\n // bin 32\n const size = this.lookU32();\n object = this.decodeBinary(size, 4);\n } else if (headByte === 0xd4) {\n // fixext 1\n object = this.decodeExtension(1, 0);\n } else if (headByte === 0xd5) {\n // fixext 2\n object = this.decodeExtension(2, 0);\n } else if (headByte === 0xd6) {\n // fixext 4\n object = this.decodeExtension(4, 0);\n } else if (headByte === 0xd7) {\n // fixext 8\n object = this.decodeExtension(8, 0);\n } else if (headByte === 0xd8) {\n // fixext 16\n object = this.decodeExtension(16, 0);\n } else if (headByte === 0xc7) {\n // ext 8\n const size = this.lookU8();\n object = this.decodeExtension(size, 1);\n } else if (headByte === 0xc8) {\n // ext 16\n const size = this.lookU16();\n object = this.decodeExtension(size, 2);\n } else if (headByte === 0xc9) {\n // ext 32\n const size = this.lookU32();\n object = this.decodeExtension(size, 4);\n } else {\n throw new DecodeError(`Unrecognized type byte: ${prettyByte(headByte)}`);\n }\n\n this.complete();\n\n const stack = this.stack;\n while (stack.length > 0) {\n // arrays and maps\n const state = stack.top()!;\n if (state.type === STATE_ARRAY) {\n state.array[state.position] = object;\n state.position++;\n if (state.position === state.size) {\n object = state.array;\n stack.release(state);\n } else {\n continue DECODE;\n }\n } else if (state.type === STATE_MAP_KEY) {\n if (object === \"__proto__\") {\n throw new DecodeError(\"The key __proto__ is not allowed\");\n }\n\n state.key = this.mapKeyConverter(object);\n state.type = STATE_MAP_VALUE;\n continue DECODE;\n } else {\n // it must be `state.type === State.MAP_VALUE` here\n\n state.map[state.key!] = object;\n state.readCount++;\n\n if (state.readCount === state.size) {\n object = state.map;\n stack.release(state);\n } else {\n state.key = null;\n state.type = STATE_MAP_KEY;\n continue DECODE;\n }\n }\n }\n\n return object;\n }\n }\n\n private readHeadByte(): number {\n if (this.headByte === HEAD_BYTE_REQUIRED) {\n this.headByte = this.readU8();\n // console.log(\"headByte\", prettyByte(this.headByte));\n }\n\n return this.headByte;\n }\n\n private complete(): void {\n this.headByte = HEAD_BYTE_REQUIRED;\n }\n\n private readArraySize(): number {\n const headByte = this.readHeadByte();\n\n switch (headByte) {\n case 0xdc:\n return this.readU16();\n case 0xdd:\n return this.readU32();\n default: {\n if (headByte < 0xa0) {\n return headByte - 0x90;\n } else {\n throw new DecodeError(`Unrecognized array type byte: ${prettyByte(headByte)}`);\n }\n }\n }\n }\n\n private pushMapState(size: number) {\n if (size > this.maxMapLength) {\n throw new DecodeError(`Max length exceeded: map length (${size}) > maxMapLengthLength (${this.maxMapLength})`);\n }\n\n this.stack.pushMapState(size);\n }\n\n private pushArrayState(size: number) {\n if (size > this.maxArrayLength) {\n throw new DecodeError(`Max length exceeded: array length (${size}) > maxArrayLength (${this.maxArrayLength})`);\n }\n\n this.stack.pushArrayState(size);\n }\n\n private decodeString(byteLength: number, headerOffset: number): string | Uint8Array {\n if (!this.rawStrings || this.stateIsMapKey()) {\n return this.decodeUtf8String(byteLength, headerOffset);\n }\n return this.decodeBinary(byteLength, headerOffset);\n }\n\n /**\n * @throws {@link RangeError}\n */\n private decodeUtf8String(byteLength: number, headerOffset: number): string {\n if (byteLength > this.maxStrLength) {\n throw new DecodeError(\n `Max length exceeded: UTF-8 byte length (${byteLength}) > maxStrLength (${this.maxStrLength})`,\n );\n }\n\n if (this.bytes.byteLength < this.pos + headerOffset + byteLength) {\n throw MORE_DATA;\n }\n\n const offset = this.pos + headerOffset;\n let object: string;\n if (this.stateIsMapKey() && this.keyDecoder?.canBeCached(byteLength)) {\n object = this.keyDecoder.decode(this.bytes, offset, byteLength);\n } else {\n object = utf8Decode(this.bytes, offset, byteLength);\n }\n this.pos += headerOffset + byteLength;\n return object;\n }\n\n private stateIsMapKey(): boolean {\n if (this.stack.length > 0) {\n const state = this.stack.top()!;\n return state.type === STATE_MAP_KEY;\n }\n return false;\n }\n\n /**\n * @throws {@link RangeError}\n */\n private decodeBinary(byteLength: number, headOffset: number): Uint8Array {\n if (byteLength > this.maxBinLength) {\n throw new DecodeError(`Max length exceeded: bin length (${byteLength}) > maxBinLength (${this.maxBinLength})`);\n }\n\n if (!this.hasRemaining(byteLength + headOffset)) {\n throw MORE_DATA;\n }\n\n const offset = this.pos + headOffset;\n const object = this.bytes.subarray(offset, offset + byteLength);\n this.pos += headOffset + byteLength;\n return object;\n }\n\n private decodeExtension(size: number, headOffset: number): unknown {\n if (size > this.maxExtLength) {\n throw new DecodeError(`Max length exceeded: ext length (${size}) > maxExtLength (${this.maxExtLength})`);\n }\n\n const extType = this.view.getInt8(this.pos + headOffset);\n const data = this.decodeBinary(size, headOffset + 1 /* extType */);\n return this.extensionCodec.decode(data, extType, this.context);\n }\n\n private lookU8() {\n return this.view.getUint8(this.pos);\n }\n\n private lookU16() {\n return this.view.getUint16(this.pos);\n }\n\n private lookU32() {\n return this.view.getUint32(this.pos);\n }\n\n private readU8(): number {\n const value = this.view.getUint8(this.pos);\n this.pos++;\n return value;\n }\n\n private readI8(): number {\n const value = this.view.getInt8(this.pos);\n this.pos++;\n return value;\n }\n\n private readU16(): number {\n const value = this.view.getUint16(this.pos);\n this.pos += 2;\n return value;\n }\n\n private readI16(): number {\n const value = this.view.getInt16(this.pos);\n this.pos += 2;\n return value;\n }\n\n private readU32(): number {\n const value = this.view.getUint32(this.pos);\n this.pos += 4;\n return value;\n }\n\n private readI32(): number {\n const value = this.view.getInt32(this.pos);\n this.pos += 4;\n return value;\n }\n\n private readU64(): number {\n const value = getUint64(this.view, this.pos);\n this.pos += 8;\n return value;\n }\n\n private readI64(): number {\n const value = getInt64(this.view, this.pos);\n this.pos += 8;\n return value;\n }\n\n private readU64AsBigInt(): bigint {\n const value = this.view.getBigUint64(this.pos);\n this.pos += 8;\n return value;\n }\n\n private readI64AsBigInt(): bigint {\n const value = this.view.getBigInt64(this.pos);\n this.pos += 8;\n return value;\n }\n\n private readF32() {\n const value = this.view.getFloat32(this.pos);\n this.pos += 4;\n return value;\n }\n\n private readF64() {\n const value = this.view.getFloat64(this.pos);\n this.pos += 8;\n return value;\n }\n}\n", "import { Decoder } from \"./Decoder.ts\";\nimport type { DecoderOptions } from \"./Decoder.ts\";\nimport type { SplitUndefined } from \"./context.ts\";\n\n/**\n * It decodes a single MessagePack object in a buffer.\n *\n * This is a synchronous decoding function.\n * See other variants for asynchronous decoding: {@link decodeAsync}, {@link decodeMultiStream}, or {@link decodeArrayStream}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decode<ContextType = undefined>(\n buffer: ArrayLike<number> | ArrayBufferView | ArrayBufferLike,\n options?: DecoderOptions<SplitUndefined<ContextType>>,\n): unknown {\n const decoder = new Decoder(options);\n return decoder.decode(buffer);\n}\n\n/**\n * It decodes multiple MessagePack objects in a buffer.\n * This is corresponding to {@link decodeMultiStream}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decodeMulti<ContextType = undefined>(\n buffer: ArrayLike<number> | BufferSource,\n options?: DecoderOptions<SplitUndefined<ContextType>>,\n): Generator<unknown, void, unknown> {\n const decoder = new Decoder(options);\n return decoder.decodeMulti(buffer);\n}\n", "import { nanoid } from 'nanoid';\nimport { encode, decode } from '@msgpack/msgpack';\nimport { ErrorEvent, RateLimitError } from '../types.js';\nimport retry from 'async-retry';\nimport ReconnectingWebSocket from 'reconnecting-websocket';\nimport type { CloseEvent, ErrorEvent as WsErrorEvent } from 'ws';\nimport { EventDispatcher } from '../events/index.js';\nimport { timeout } from '../utils/promise.js';\nimport WebSocket from 'isomorphic-ws';\nimport { NamedDisposable } from '../utils/disposable.js';\nimport { PromiseTimeoutError, SendTimeoutError } from '../errors/index.js';\n\ninterface WsOptions {\n debug?: boolean;\n startClosed?: boolean;\n pingInterval?: number;\n connectionTimeout?: number;\n maxRetries?: number;\n}\n\nexport interface CallOption {\n responseEvent?: string;\n timeout?: number;\n retries?: number | false;\n buffer?: boolean;\n abortSignal?: AbortSignal;\n}\n\nexport type WebSocketStatus = 'OPEN' | 'CONNECTING' | 'CLOSED';\n\nexport enum SocketEvent {\n BootError = 'Events.BootError',\n Response = 'response',\n Error = 'error',\n ClientId = 'App.Actions.GetClientId',\n}\n\n// Add specific error types for better error handling\nexport class ConnectionTimeoutError extends Error {\n constructor(message: string = 'WebSocket connection timeout') {\n super(message);\n this.name = 'ConnectionTimeoutError';\n }\n}\n\nexport class ConnectionFailedError extends Error {\n constructor(\n message: string,\n public readonly originalError?: Event\n ) {\n super(message);\n this.name = 'ConnectionFailedError';\n }\n}\n\nexport class InvalidMessageError extends Error {\n constructor(\n message: string,\n public readonly data?: unknown\n ) {\n super(message);\n this.name = 'InvalidMessageError';\n }\n}\n\n// Add configuration validation\nexport class InvalidConfigurationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'InvalidConfigurationError';\n }\n}\n\n// Export types for better TypeScript integration\nexport interface ConnectionStats {\n connectTime: number;\n reconnectCount: number;\n lastPingTime: number;\n lastPongTime: number;\n avgResponseTime: number;\n totalMessages: number;\n totalErrors: number;\n connectionStartTime: number;\n connectionDuration: number;\n uptime: number;\n messagesPerSecond: string;\n errorRate: string;\n timeSinceLastPing: number;\n timeSinceLastPong: number;\n}\n\nexport interface MessageQueueInfo {\n length: number;\n maxSize: number;\n oldestMessageAge: number;\n}\n\nexport interface RateLimiterInfo {\n currentRequests: number;\n maxRequests: number;\n windowMs: number;\n isLimited: boolean;\n}\n\nexport interface TransportConfig {\n pingInterval: number;\n queueTimeout: number;\n url: string;\n}\n\nexport interface ConnectionMetrics {\n status: string | undefined;\n clientId: string;\n isConnected: boolean;\n isConnecting: boolean;\n connectionStats: ConnectionStats;\n messageQueue: MessageQueueInfo;\n rateLimiter: RateLimiterInfo;\n config: TransportConfig;\n}\n\nexport type HealthStatus = 'healthy' | 'degraded' | 'unhealthy';\n\n// Transport events that applications can listen to\nexport interface TransportEvents {\n 'transport.error': {\n type: string;\n error: any;\n rawMessage?: unknown;\n timestamp: number;\n };\n 'transport.closed': {\n code?: number;\n reason?: string;\n metrics: ConnectionMetrics;\n timestamp: number;\n };\n}\n\nexport class Transport {\n private readonly PING_INTERVAL: number;\n\n private clientId: string = '';\n\n private closed = false;\n\n // @ts-expect-error\n private readonly rws: ReconnectingWebSocket;\n\n private disposables: NamedDisposable = new NamedDisposable();\n\n private connectPromise: Promise<void> | null = null;\n\n private readonly url: URL;\n\n private pingIntervalStarted = false;\n\n // Connection health monitoring\n private connectionStats = {\n connectTime: 0,\n reconnectCount: 0,\n lastPingTime: 0,\n lastPongTime: 0,\n avgResponseTime: 0,\n totalMessages: 0,\n totalErrors: 0,\n connectionStartTime: 0,\n };\n\n // Message queue for disconnection handling\n private messageQueue: Array<{\n action: string;\n data: any;\n options: CallOption;\n resolve: (value: any) => void;\n reject: (reason: any) => void;\n timestamp: number;\n }> = [];\n\n private readonly MAX_QUEUE_SIZE = 100;\n private readonly QUEUE_TIMEOUT = 30000; // 30 seconds\n\n // Rate limiting\n private rateLimiter = {\n requests: [] as number[],\n maxRequests: 50,\n windowMs: 1000, // 1 second\n };\n\n public constructor(\n url: string,\n private readonly eventEmitter: EventDispatcher,\n private readonly options: WsOptions = {}\n ) {\n // Validate configuration\n this.validateConfiguration(options);\n\n this.url = new URL(url);\n\n // Use configurable ping interval\n this.PING_INTERVAL = options.pingInterval ?? 30000;\n\n // Initialize connection stats\n this.connectionStats.connectionStartTime = Date.now();\n\n // Always start closed by default (lazy initialization)\n const startClosed = options.startClosed !== false;\n\n // @ts-expect-error\n this.rws = new ReconnectingWebSocket(this.url.toString(), [], {\n WebSocket: globalThis.WebSocket ?? WebSocket,\n connectionTimeout: options.connectionTimeout ?? 1000,\n maxReconnectionDelay: 2000,\n minReconnectionDelay: 200,\n maxEnqueuedMessages: 0,\n maxRetries: options.maxRetries ?? 50,\n startClosed,\n });\n\n this.log('debug', 'Transport initialized', {\n url: this.url.toString(),\n options,\n });\n this.registerWatchers();\n this.setupConnectionHealthMonitoring();\n this.startPeriodicMaintenance();\n }\n\n /**\n * Validate configuration options\n */\n private validateConfiguration(options: WsOptions): void {\n if (options.pingInterval !== undefined && (options.pingInterval < 1000 || options.pingInterval > 300000)) {\n throw new InvalidConfigurationError('pingInterval must be between 1000ms and 300000ms');\n }\n\n if (options.connectionTimeout !== undefined && (options.connectionTimeout < 100 || options.connectionTimeout > 30000)) {\n throw new InvalidConfigurationError('connectionTimeout must be between 100ms and 30000ms');\n }\n\n if (options.maxRetries !== undefined && (options.maxRetries < 0 || options.maxRetries > 100)) {\n throw new InvalidConfigurationError('maxRetries must be between 0 and 100');\n }\n }\n\n /**\n * Internal logging utility for debugging\n */\n private log(level: 'debug' | 'info' | 'warn' | 'error', message: string, data?: any): void {\n if (this.options.debug) {\n const timestamp = new Date().toISOString();\n const logData = data ? JSON.stringify(data, null, 2) : '';\n console[level](`[Transport ${timestamp}] ${message}${logData ? '\\n' + logData : ''}`);\n }\n }\n\n /**\n * Explicitly connect to the websocket if not already connected\n * Used for lazy initialization\n *\n * This method ensures only one connection attempt happens at a time\n * by caching the connection promise.\n */\n #connect(): Promise<void> {\n if (this.isConnected) {\n return Promise.resolve();\n }\n\n // Return existing connection promise if one is already in progress\n if (this.connectPromise) {\n return this.connectPromise;\n }\n\n // Create and cache the connection promise\n this.connectPromise = new Promise((resolve, reject) => {\n // Check if connection is already open after potential reconnect\n if (this.isConnected) {\n resolve();\n this.#startPeriodicPing();\n return;\n }\n\n // Open the connection if it's closed\n if (this.rws.readyState === 3) {\n this.rws.reconnect();\n }\n\n let timeoutId: ReturnType<typeof setTimeout>;\n\n const openHandler = () => {\n this.rws.removeEventListener('open', openHandler);\n this.rws.removeEventListener('error', errorHandler);\n clearTimeout(timeoutId);\n\n // Clear the cached promise on success\n this.connectPromise = null;\n resolve();\n this.#startPeriodicPing();\n };\n\n const errorHandler = (error: Event) => {\n this.rws.removeEventListener('open', openHandler);\n this.rws.removeEventListener('error', errorHandler);\n clearTimeout(timeoutId);\n\n // Clear the cached promise on error so retry is possible\n this.connectPromise = null;\n reject(new Error(`WebSocket connection failed: ${error}`));\n };\n\n // Add timeout to prevent hanging forever\n timeoutId = setTimeout(() => {\n this.rws.removeEventListener('open', openHandler);\n this.rws.removeEventListener('error', errorHandler);\n\n // Clear the cached promise on timeout so retry is possible\n this.connectPromise = null;\n reject(new Error('WebSocket connection timeout'));\n }, 10000); // 10 second timeout\n\n this.rws.addEventListener('open', openHandler);\n this.rws.addEventListener('error', errorHandler);\n });\n\n return this.connectPromise;\n }\n\n /**\n * Ensure the websocket is open without requiring an application-level roundtrip.\n */\n public connect(): Promise<void> {\n return this.#connect();\n }\n\n #startPeriodicPing(): void {\n if (this.pingIntervalStarted || this.closed) {\n return;\n }\n\n this.pingIntervalStarted = true;\n this.disposables.add('pingInterval', () => {\n const interval = setInterval(async () => {\n try {\n this.connectionStats.lastPingTime = Date.now();\n this.log('debug', 'Sending periodic ping');\n\n const startTime = Date.now();\n await this.invoke('ping');\n\n this.connectionStats.lastPongTime = Date.now();\n const pingTime = this.connectionStats.lastPongTime - startTime;\n\n this.log('debug', `Ping successful`, { pingTime });\n } catch (error) {\n this.log('error', 'Ping failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n\n // If ping fails consistently, the connection might be dead\n if (Date.now() - this.connectionStats.lastPongTime > this.PING_INTERVAL * 3) {\n this.log('warn', 'Connection appears dead, forcing reconnection');\n this.rws.reconnect();\n }\n }\n }, this.PING_INTERVAL);\n\n return {\n dispose: () => {\n clearInterval(interval);\n this.pingIntervalStarted = false;\n },\n };\n });\n }\n\n public id(): string {\n return this.clientId;\n }\n\n private async registerWatchers(): Promise<void> {\n const onMessage = (ev: MessageEvent) => {\n if (!(ev.data instanceof Blob)) {\n throw new Error('Unexpected message type: ' + typeof ev.data);\n }\n\n ev.data.arrayBuffer().then((buffer: ArrayBuffer) => {\n if (buffer.byteLength === 0) {\n this.log('warn', 'Ignoring empty WebSocket frame');\n return;\n }\n\n try {\n this.handleRawMessage(decode(buffer));\n } catch (error) {\n this.connectionStats.totalErrors++;\n this.log('error', 'Failed to decode WebSocket frame', {\n error: error instanceof Error ? error.message : String(error),\n byteLength: buffer.byteLength,\n });\n\n this.eventEmitter.emit('transport.error', {\n type: 'message_decode_error',\n error,\n rawMessage: buffer,\n timestamp: Date.now(),\n });\n }\n });\n };\n this.rws.addEventListener('message', onMessage);\n\n this.disposables.add('message', {\n dispose: () => {\n this.rws.removeEventListener('message', onMessage);\n },\n });\n }\n\n private async handleRawMessage(ev: unknown): Promise<void> {\n if (typeof ev !== 'object' || ev === null) {\n this.log('debug', 'Received invalid message format', { ev });\n return;\n }\n\n try {\n const { data, event, as } = ev as {\n data: any;\n event: string;\n as: string;\n };\n\n // Validate message structure\n if (!event || typeof event !== 'string') {\n throw new InvalidMessageError('Message missing event field', ev);\n }\n\n this.log('debug', 'Processing message', { event, hasData: !!data });\n\n if (event === SocketEvent.ClientId) {\n this.clientId = data.id;\n this.log('info', 'Client ID received', { clientId: this.clientId });\n return;\n }\n\n if (event === SocketEvent.BootError) {\n this.log('error', 'Boot error received', { data });\n return;\n }\n\n if (event === SocketEvent.Response) {\n // {\"event\":\"response\",\"data\":{\"responseEvent\":\"ping\",\"data\":\"pong\"}}\n const { responseEvent, data: responseData } = data;\n\n if (!responseEvent) {\n throw new InvalidMessageError('Response message missing responseEvent', ev);\n }\n\n this.log('debug', 'Response message received', { responseEvent });\n await this.handleMessage(responseEvent, responseData);\n return;\n }\n\n if (event === SocketEvent.Error) {\n // {\"event\":\"error\",\"data\":{\"errorEvent\":\"pingo_error\",\"data\":{\"code\":404,\"message\":\"Action pingo not found\"}}}\n const { errorEvent, data: responseData } = data;\n\n if (!errorEvent) {\n throw new InvalidMessageError('Error message missing errorEvent', ev);\n }\n\n this.log('debug', 'Error message received', {\n errorEvent,\n errorData: responseData,\n });\n await this.handleMessage(errorEvent, responseData);\n return;\n }\n\n await this.handleMessage(event, data, as);\n } catch (e) {\n this.connectionStats.totalErrors++;\n\n if (e instanceof InvalidMessageError) {\n this.log('error', 'Invalid message format', {\n error: e.message,\n data: e.data,\n totalErrors: this.connectionStats.totalErrors,\n });\n } else {\n this.log('error', 'Failed to parse message', {\n ev,\n error: e instanceof Error ? e.message : String(e),\n totalErrors: this.connectionStats.totalErrors,\n });\n }\n\n // Don't throw - we want to continue processing other messages\n // But emit an error event for the application to handle\n this.eventEmitter.emit('transport.error', {\n type: 'message_parse_error',\n error: e,\n rawMessage: ev,\n timestamp: Date.now(),\n });\n }\n }\n\n private async handleMessage(event: string, data: any, as?: string): Promise<any> {\n if (event === SocketEvent.ClientId) {\n this.clientId = data.id;\n this.eventEmitter.emit(event, data.id);\n\n return;\n }\n\n event && this.eventEmitter.emit(as || event, data);\n }\n\n public listen(event: string, listener: (data: any) => void, _context?: any) {\n return this.eventEmitter.listen(event, listener);\n }\n\n public removeListener(event: string, listener?: (data: any) => void): void {\n this.eventEmitter.removeListener(event, listener);\n }\n\n public listenOnce(event: string, listener: (data: any) => void, context?: any): void {\n this.eventEmitter.once(event, listener, context);\n this.disposables.add(`once_${event}_${nanoid()}`, {\n dispose: () => {\n this.eventEmitter.removeListener(event, listener);\n },\n });\n }\n\n public emit(event: string, ...data: any): void {\n this.eventEmitter.emit(event, ...data);\n }\n\n public get isConnected(): boolean {\n return this.status === 'OPEN';\n }\n\n public get isConnecting(): boolean {\n return this.status === 'CONNECTING';\n }\n\n public get isDisconnected(): boolean {\n return this.status === 'CLOSED';\n }\n\n public get isClosed(): boolean {\n return this.closed;\n }\n\n public get status(): string | undefined {\n return {\n 0: 'CONNECTING',\n 1: 'OPEN',\n 2: 'CLOSING',\n 3: 'CLOSED',\n }[this.rws.readyState as unknown as number];\n }\n\n public async call(action: string, data: object | string = {}, options: CallOption = {}): Promise<any> {\n // Rate limiting check\n if (this.isRateLimited()) {\n throw new RateLimitError('Rate limit exceeded - too many requests');\n }\n\n // Clear old queued messages periodically\n this.clearOldQueuedMessages();\n\n const responseEvent = options.responseEvent || `${action}_${nanoid()}_response`;\n const errorEvent = `${responseEvent}_error`;\n\n let closeHandler: (ev: CloseEvent | WsErrorEvent) => void;\n const removeListeners = () => {\n if (closeHandler) {\n this.rws.removeEventListener('close', closeHandler);\n this.rws.removeEventListener('error', closeHandler);\n }\n\n this.eventEmitter.removeListener(responseEvent);\n this.eventEmitter.removeListener(errorEvent);\n };\n\n const handler = async (resolve: (value: any) => void, reject: (reason?: any) => void): Promise<void> => {\n const abortError = new DOMException('Request aborted', 'AbortError');\n if (options.abortSignal?.aborted) {\n reject(abortError);\n }\n\n if (options.abortSignal) {\n options.abortSignal.addEventListener('abort', () => {\n reject(abortError);\n });\n }\n\n // If not connected, queue the message\n if (!this.isConnected && !this.isClosed) {\n this.log('debug', 'Connection not available, queuing message', {\n action,\n });\n\n // Check queue size limit\n if (this.messageQueue.length >= this.MAX_QUEUE_SIZE) {\n const oldestMessage = this.messageQueue.shift();\n if (oldestMessage) {\n oldestMessage.reject(new Error('Message queue full, oldest message dropped'));\n }\n }\n\n this.messageQueue.push({\n action,\n data,\n options,\n resolve,\n reject,\n timestamp: Date.now(),\n });\n return;\n }\n\n const startTime = Date.now();\n\n this.listenOnce(responseEvent, (response) => {\n // Update response time stats\n const responseTime = Date.now() - startTime;\n this.connectionStats.avgResponseTime = (this.connectionStats.avgResponseTime + responseTime) / 2;\n this.connectionStats.totalMessages++;\n\n this.log('debug', 'Message response received', {\n action,\n responseTime,\n avgResponseTime: this.connectionStats.avgResponseTime,\n });\n\n resolve(response);\n });\n\n this.listenOnce(errorEvent, (e) => {\n this.connectionStats.totalErrors++;\n this.log('error', 'Message error received', { action, error: e });\n reject(new ErrorEvent(e.code, e.message, e));\n });\n\n closeHandler = (_ev: (CloseEvent | WsErrorEvent) & { reason?: string; code?: number }) => {\n if (_ev.code === 1008 && (_ev.reason || '').includes('rate limit')) {\n reject(new RateLimitError(_ev.reason || 'Rate limit exceeded', _ev));\n return;\n }\n reject(new Error(`Connection lost to the notebook during request: ${_ev.reason || 'Unknown reason'}`));\n };\n\n this.rws.addEventListener('close', closeHandler);\n this.rws.addEventListener('error', closeHandler);\n\n try {\n this.rws.send(this.pack({ action, data, errorEvent, responseEvent }));\n this.log('debug', 'Message sent', { action, data });\n } catch (error) {\n this.log('error', 'Failed to send message', { action, error });\n throw error;\n }\n };\n\n const send = async () => {\n // Ensure connection is established before making calls\n await this.#connect();\n\n const promise = new Promise(handler).finally(removeListeners);\n if (!options.timeout) {\n return promise;\n }\n\n return timeout(promise, options.timeout).catch((error: unknown) => {\n if (error instanceof PromiseTimeoutError) {\n throw SendTimeoutError.fromPromiseTimeoutError(error);\n }\n\n throw error;\n }).finally(removeListeners);\n };\n\n return this.sendWithRetry(async () => await send(), options.retries || 10);\n }\n\n private pack(data: string | ArrayBuffer | Blob | object): string | Blob | ArrayBuffer {\n return new Blob([encode(data) as BlobPart]);\n }\n\n private sendWithRetry(sender: () => Promise<any>, retries = 10): Promise<any> {\n /**\n * Enhanced retry with exponential backoff and intelligent error handling\n */\n return retry(\n async (bail: (error: Error) => void, attempt: number) => {\n try {\n return await sender();\n } catch (e) {\n // Don't retry these errors\n if (\n e instanceof ErrorEvent ||\n e instanceof RateLimitError ||\n e instanceof InvalidConfigurationError ||\n e instanceof InvalidMessageError ||\n e instanceof DOMException\n ) {\n this.log('debug', 'Non-retryable error, bailing', {\n error: e.message,\n attempt,\n });\n bail(e);\n return;\n }\n\n /**\n * If we can't send due to timeout, attempt to reconnect\n */\n if (e instanceof SendTimeoutError) {\n this.reconnect();\n this.log('warn', 'Send operation timed out, connection reset', {\n attempt,\n timeout: e.time,\n });\n }\n\n // Log retry attempt\n this.log('debug', 'Retrying send operation', {\n attempt,\n error: e instanceof Error ? e.message : String(e),\n nextDelay: this.getBackoffDelay(attempt - 1),\n });\n\n throw e;\n }\n },\n {\n retries,\n onRetry: (e: unknown, attempt: number) => {\n this.log('warn', 'Send operation retry', {\n attempt,\n maxRetries: retries,\n error: e instanceof Error ? e.message : String(e),\n });\n },\n // Use exponential backoff with jitter\n minTimeout: 1000,\n factor: 2,\n maxTimeout: 30000,\n randomize: true,\n }\n );\n }\n\n public invoke(action: string, data: object | string = {}, options: CallOption = {}): Promise<any> {\n if (!options.responseEvent) {\n options.responseEvent = `${action}_${nanoid()}`;\n }\n\n return this.call('invoke', { action, data }, options);\n }\n\n /**\n * Reconnect the websocket without disposing listeners.\n * Uses the underlying ReconnectingWebSocket's reconnect mechanism.\n * This preserves all event listeners and state.\n */\n public reconnect(): void {\n if (this.closed) {\n throw new Error('Cannot reconnect a closed transport. The transport has been permanently closed.');\n }\n\n this.log('info', 'Reconnecting transport');\n\n // Clear pending connection promise to allow fresh connection\n this.connectPromise = null;\n\n // Use ReconnectingWebSocket's built-in reconnect\n // This will close the current connection and open a new one\n // without disposing event listeners\n this.rws.reconnect();\n }\n\n public disconnect(): void {\n if (this.closed) {\n console.trace('Transport is already closed, cannot disconnect again');\n return;\n }\n\n this.close();\n }\n\n public close(code?: number, reason?: string): void {\n if (this.closed) {\n return;\n }\n\n this.log('info', 'Closing transport connection', { code, reason });\n\n // Clear any pending connection promise\n this.connectPromise = null;\n\n // Reject all queued messages\n const queuedCount = this.messageQueue.length;\n this.messageQueue.forEach((msg) => {\n console.log('Rejecting queued message due to connection close');\n msg.reject(new Error('Connection closed while message was queued'));\n });\n this.messageQueue = [];\n\n if (queuedCount > 0) {\n this.log('debug', `Rejected ${queuedCount} queued messages due to connection close`);\n }\n\n // Clear rate limiter\n this.rateLimiter.requests = [];\n\n // Dispose all event disposables\n this.disposables.dispose();\n\n // Close WebSocket connection\n try {\n this.rws.close(code, reason);\n } catch (error) {\n this.log('error', 'Error closing WebSocket', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n\n // Emit final close event\n this.eventEmitter.emit('transport.closed', {\n code,\n reason,\n metrics: this.getConnectionMetrics(),\n timestamp: Date.now(),\n });\n\n this.eventEmitter.removeListener('*'); // Remove all event listeners\n this.closed = true;\n this.log('info', 'Transport connection closed successfully');\n }\n\n public onDidConnect(listener: () => void): void {\n this.rws.addEventListener('open', listener);\n this.disposables.add('connect', {\n dispose: () => {\n this.rws.removeEventListener('open', listener);\n },\n });\n }\n\n public onDidClose(listener: (e: CloseEvent | WsErrorEvent) => void): void {\n this.rws.addEventListener('close', listener);\n this.disposables.add('close', {\n dispose: () => {\n this.rws.removeEventListener('close', listener);\n },\n });\n }\n\n /**\n * Setup connection health monitoring\n */\n private setupConnectionHealthMonitoring(): void {\n this.rws.addEventListener('open', () => {\n this.connectionStats.connectTime = Date.now();\n this.connectionStats.reconnectCount++;\n this.log('info', 'Connection established', {\n reconnectCount: this.connectionStats.reconnectCount,\n timeSinceStart: Date.now() - this.connectionStats.connectionStartTime,\n });\n this.processMessageQueue();\n });\n\n this.rws.addEventListener('close', (event: CloseEvent) => {\n this.log('warn', 'Connection closed', {\n code: event.code,\n reason: event.reason,\n wasClean: event.wasClean,\n });\n this.handleConnectionClose(event.code);\n });\n\n this.rws.addEventListener('error', (event: ErrorEvent) => {\n this.connectionStats.totalErrors++;\n this.log('error', 'Connection error', {\n error: event,\n totalErrors: this.connectionStats.totalErrors,\n });\n });\n }\n\n /**\n * Handle different WebSocket close codes appropriately\n */\n private handleConnectionClose(code: number): 'reconnect' | 'stop' | 'retry' {\n switch (code) {\n case 1000: // Normal closure\n this.log('info', 'Normal connection closure');\n return 'stop';\n case 1001: // Going away\n this.log('info', 'Connection going away, will reconnect');\n return 'reconnect';\n case 1006: // Abnormal closure\n this.log('warn', 'Abnormal connection closure, will retry');\n return 'retry';\n case 1008: // Policy violation (rate limit)\n this.log('error', 'Connection closed due to policy violation');\n this.clearOldQueuedMessages();\n return 'stop';\n default:\n this.log('warn', `Unknown close code: ${code}, will reconnect`);\n return 'reconnect';\n }\n }\n\n /**\n * Process queued messages when connection is restored\n */\n private processMessageQueue(): void {\n if (this.messageQueue.length === 0) {\n return;\n }\n\n this.log('debug', `Processing ${this.messageQueue.length} queued messages`);\n\n const queue = [...this.messageQueue];\n this.messageQueue = [];\n\n for (const queuedMessage of queue) {\n // Check if message hasn't timed out\n if (Date.now() - queuedMessage.timestamp > this.QUEUE_TIMEOUT) {\n queuedMessage.reject(new Error('Queued message timed out'));\n continue;\n }\n\n // Retry the message\n this.call(queuedMessage.action, queuedMessage.data, queuedMessage.options)\n .then(queuedMessage.resolve)\n .catch(queuedMessage.reject);\n }\n }\n\n /**\n * Clear old queued messages to prevent memory leaks\n */\n private clearOldQueuedMessages(): void {\n const now = Date.now();\n const originalLength = this.messageQueue.length;\n\n this.messageQueue = this.messageQueue.filter((msg) => {\n const isExpired = now - msg.timestamp > this.QUEUE_TIMEOUT;\n if (isExpired) {\n msg.reject(new Error('Queued message expired'));\n }\n return !isExpired;\n });\n\n if (originalLength !== this.messageQueue.length) {\n this.log('debug', `Cleared ${originalLength - this.messageQueue.length} expired messages`);\n }\n }\n\n /**\n * Rate limiting check\n */\n private isRateLimited(): boolean {\n const now = Date.now();\n\n // Remove old requests outside the window\n this.rateLimiter.requests = this.rateLimiter.requests.filter((timestamp) => now - timestamp < this.rateLimiter.windowMs);\n\n // Check if we've exceeded the limit\n if (this.rateLimiter.requests.length >= this.rateLimiter.maxRequests) {\n return true;\n }\n\n // Add current request\n this.rateLimiter.requests.push(now);\n return false;\n }\n\n /**\n * Calculate exponential backoff delay\n */\n private getBackoffDelay(retryCount: number): number {\n const baseDelay = 1000; // 1 second\n const maxDelay = 30000; // 30 seconds\n const delay = Math.min(baseDelay * Math.pow(2, retryCount), maxDelay);\n\n // Add jitter to prevent thundering herd\n return delay + Math.random() * 1000;\n }\n\n /**\n * Get comprehensive connection metrics\n */\n public getConnectionMetrics() {\n const now = Date.now();\n const connectionDuration = this.connectionStats.connectTime > 0 ? now - this.connectionStats.connectTime : 0;\n\n return {\n status: this.status,\n clientId: this.clientId,\n isConnected: this.isConnected,\n isConnecting: this.isConnecting,\n connectionStats: {\n ...this.connectionStats,\n connectionDuration,\n uptime: now - this.connectionStats.connectionStartTime,\n messagesPerSecond:\n connectionDuration > 0 ? (this.connectionStats.totalMessages / (connectionDuration / 1000)).toFixed(2) : '0',\n errorRate:\n this.connectionStats.totalMessages > 0\n ? ((this.connectionStats.totalErrors / this.connectionStats.totalMessages) * 100).toFixed(2) + '%'\n : '0%',\n timeSinceLastPing: this.connectionStats.lastPingTime > 0 ? now - this.connectionStats.lastPingTime : 0,\n timeSinceLastPong: this.connectionStats.lastPongTime > 0 ? now - this.connectionStats.lastPongTime : 0,\n },\n messageQueue: {\n length: this.messageQueue.length,\n maxSize: this.MAX_QUEUE_SIZE,\n oldestMessageAge: this.messageQueue.length > 0 ? now - Math.min(...this.messageQueue.map((m) => m.timestamp)) : 0,\n },\n rateLimiter: {\n currentRequests: this.rateLimiter.requests.length,\n maxRequests: this.rateLimiter.maxRequests,\n windowMs: this.rateLimiter.windowMs,\n isLimited: this.isRateLimited(),\n },\n config: {\n pingInterval: this.PING_INTERVAL,\n queueTimeout: this.QUEUE_TIMEOUT,\n url: this.url.toString(),\n },\n };\n }\n\n /**\n * Get connection health status\n */\n public getHealthStatus(): 'healthy' | 'degraded' | 'unhealthy' {\n const metrics = this.getConnectionMetrics();\n const stats = metrics.connectionStats;\n\n // Unhealthy conditions\n if (!this.isConnected || stats.timeSinceLastPong > this.PING_INTERVAL * 2 || Number.parseFloat(stats.errorRate) > 50) {\n return 'unhealthy';\n }\n\n // Degraded conditions\n if (\n stats.avgResponseTime > 5000 ||\n Number.parseFloat(stats.errorRate) > 10 ||\n stats.timeSinceLastPong > this.PING_INTERVAL * 1.5\n ) {\n return 'degraded';\n }\n\n return 'healthy';\n }\n\n /**\n * Reset connection statistics\n */\n public resetStats(): void {\n this.connectionStats = {\n connectTime: Date.now(),\n reconnectCount: 0,\n lastPingTime: 0,\n lastPongTime: 0,\n avgResponseTime: 0,\n totalMessages: 0,\n totalErrors: 0,\n connectionStartTime: Date.now(),\n };\n\n this.log('debug', 'Connection statistics reset');\n }\n\n /**\n * Run connection diagnostics\n */\n public async runDiagnostics(): Promise<{\n status: HealthStatus;\n metrics: ConnectionMetrics;\n issues: string[];\n recommendations: string[];\n }> {\n const metrics = this.getConnectionMetrics();\n const status = this.getHealthStatus();\n const issues: string[] = [];\n const recommendations: string[] = [];\n\n // Check for issues\n if (!this.isConnected) {\n issues.push('Connection is not established');\n recommendations.push('Check network connectivity and server availability');\n }\n\n if (metrics.connectionStats.timeSinceLastPong > this.PING_INTERVAL * 2) {\n issues.push('No pong received recently - connection may be stale');\n recommendations.push('Consider forcing a reconnection');\n }\n\n if (Number.parseFloat(metrics.connectionStats.errorRate) > 10) {\n issues.push(`High error rate: ${metrics.connectionStats.errorRate}`);\n recommendations.push('Check server logs and network stability');\n }\n\n if (metrics.messageQueue.length > this.MAX_QUEUE_SIZE * 0.8) {\n issues.push('Message queue is nearly full');\n recommendations.push('Check connection stability and consider reducing message frequency');\n }\n\n if (metrics.connectionStats.avgResponseTime > 5000) {\n issues.push('High average response time');\n recommendations.push('Check network latency and server performance');\n }\n\n if (metrics.rateLimiter.isLimited) {\n issues.push('Rate limiting is active');\n recommendations.push('Reduce request frequency or increase rate limit');\n }\n\n this.log('info', 'Connection diagnostics completed', {\n status,\n issueCount: issues.length,\n recommendationCount: recommendations.length,\n });\n\n return {\n status,\n metrics,\n issues,\n recommendations,\n };\n }\n\n /**\n * Periodic maintenance - clean up old data, run health checks\n */\n private startPeriodicMaintenance(): void {\n this.disposables.add('maintenance', () => {\n // Run maintenance every 5 minutes\n const maintenanceInterval = setInterval(\n () => {\n this.clearOldQueuedMessages();\n\n // Clean up old rate limiter entries (should already be done, but double-check)\n const now = Date.now();\n this.rateLimiter.requests = this.rateLimiter.requests.filter(\n (timestamp) => now - timestamp < this.rateLimiter.windowMs\n );\n\n // Log health status if debug is enabled\n if (this.options.debug) {\n const health = this.getHealthStatus();\n const metrics = this.getConnectionMetrics();\n this.log('debug', 'Periodic health check', {\n health,\n messageCount: metrics.connectionStats.totalMessages,\n errorCount: metrics.connectionStats.totalErrors,\n queueLength: metrics.messageQueue.length,\n });\n }\n },\n 5 * 60 * 1000\n ); // 5 minutes\n\n return {\n dispose: () => {\n clearInterval(maintenanceInterval);\n },\n };\n });\n }\n}\n", "/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nfunction __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nfunction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nfunction __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\n\nvar Event = /** @class */ (function () {\r\n function Event(type, target) {\r\n this.target = target;\r\n this.type = type;\r\n }\r\n return Event;\r\n}());\r\nvar ErrorEvent = /** @class */ (function (_super) {\r\n __extends(ErrorEvent, _super);\r\n function ErrorEvent(error, target) {\r\n var _this = _super.call(this, 'error', target) || this;\r\n _this.message = error.message;\r\n _this.error = error;\r\n return _this;\r\n }\r\n return ErrorEvent;\r\n}(Event));\r\nvar CloseEvent = /** @class */ (function (_super) {\r\n __extends(CloseEvent, _super);\r\n function CloseEvent(code, reason, target) {\r\n if (code === void 0) { code = 1000; }\r\n if (reason === void 0) { reason = ''; }\r\n var _this = _super.call(this, 'close', target) || this;\r\n _this.wasClean = true;\r\n _this.code = code;\r\n _this.reason = reason;\r\n return _this;\r\n }\r\n return CloseEvent;\r\n}(Event));\n\n/*!\r\n * Reconnecting WebSocket\r\n * by Pedro Ladaria <pedro.ladaria@gmail.com>\r\n * https://github.com/pladaria/reconnecting-websocket\r\n * License MIT\r\n */\r\nvar getGlobalWebSocket = function () {\r\n if (typeof WebSocket !== 'undefined') {\r\n // @ts-ignore\r\n return WebSocket;\r\n }\r\n};\r\n/**\r\n * Returns true if given argument looks like a WebSocket class\r\n */\r\nvar isWebSocket = function (w) { return typeof w !== 'undefined' && !!w && w.CLOSING === 2; };\r\nvar DEFAULT = {\r\n maxReconnectionDelay: 10000,\r\n minReconnectionDelay: 1000 + Math.random() * 4000,\r\n minUptime: 5000,\r\n reconnectionDelayGrowFactor: 1.3,\r\n connectionTimeout: 4000,\r\n maxRetries: Infinity,\r\n maxEnqueuedMessages: Infinity,\r\n startClosed: false,\r\n debug: false,\r\n};\r\nvar ReconnectingWebSocket = /** @class */ (function () {\r\n function ReconnectingWebSocket(url, protocols, options) {\r\n var _this = this;\r\n if (options === void 0) { options = {}; }\r\n this._listeners = {\r\n error: [],\r\n message: [],\r\n open: [],\r\n close: [],\r\n };\r\n this._retryCount = -1;\r\n this._shouldReconnect = true;\r\n this._connectLock = false;\r\n this._binaryType = 'blob';\r\n this._closeCalled = false;\r\n this._messageQueue = [];\r\n /**\r\n * An event listener to be called when the WebSocket connection's readyState changes to CLOSED\r\n */\r\n this.onclose = null;\r\n /**\r\n * An event listener to be called when an error occurs\r\n */\r\n this.onerror = null;\r\n /**\r\n * An event listener to be called when a message is received from the server\r\n */\r\n this.onmessage = null;\r\n /**\r\n * An event listener to be called when the WebSocket connection's readyState changes to OPEN;\r\n * this indicates that the connection is ready to send and receive data\r\n */\r\n this.onopen = null;\r\n this._handleOpen = function (event) {\r\n _this._debug('open event');\r\n var _a = _this._options.minUptime, minUptime = _a === void 0 ? DEFAULT.minUptime : _a;\r\n clearTimeout(_this._connectTimeout);\r\n _this._uptimeTimeout = setTimeout(function () { return _this._acceptOpen(); }, minUptime);\r\n _this._ws.binaryType = _this._binaryType;\r\n // send enqueued messages (messages sent before websocket open event)\r\n _this._messageQueue.forEach(function (message) { return _this._ws.send(message); });\r\n _this._messageQueue = [];\r\n if (_this.onopen) {\r\n _this.onopen(event);\r\n }\r\n _this._listeners.open.forEach(function (listener) { return _this._callEventListener(event, listener); });\r\n };\r\n this._handleMessage = function (event) {\r\n _this._debug('message event');\r\n if (_this.onmessage) {\r\n _this.onmessage(event);\r\n }\r\n _this._listeners.message.forEach(function (listener) { return _this._callEventListener(event, listener); });\r\n };\r\n this._handleError = function (event) {\r\n _this._debug('error event', event.message);\r\n _this._disconnect(undefined, event.message === 'TIMEOUT' ? 'timeout' : undefined);\r\n if (_this.onerror) {\r\n _this.onerror(event);\r\n }\r\n _this._debug('exec error listeners');\r\n _this._listeners.error.forEach(function (listener) { return _this._callEventListener(event, listener); });\r\n _this._connect();\r\n };\r\n this._handleClose = function (event) {\r\n _this._debug('close event');\r\n _this._clearTimeouts();\r\n if (_this._shouldReconnect) {\r\n _this._connect();\r\n }\r\n if (_this.onclose) {\r\n _this.onclose(event);\r\n }\r\n _this._listeners.close.forEach(function (listener) { return _this._callEventListener(event, listener); });\r\n };\r\n this._url = url;\r\n this._protocols = protocols;\r\n this._options = options;\r\n if (this._options.startClosed) {\r\n this._shouldReconnect = false;\r\n }\r\n this._connect();\r\n }\r\n Object.defineProperty(ReconnectingWebSocket, \"CONNECTING\", {\r\n get: function () {\r\n return 0;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket, \"OPEN\", {\r\n get: function () {\r\n return 1;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket, \"CLOSING\", {\r\n get: function () {\r\n return 2;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket, \"CLOSED\", {\r\n get: function () {\r\n return 3;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"CONNECTING\", {\r\n get: function () {\r\n return ReconnectingWebSocket.CONNECTING;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"OPEN\", {\r\n get: function () {\r\n return ReconnectingWebSocket.OPEN;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"CLOSING\", {\r\n get: function () {\r\n return ReconnectingWebSocket.CLOSING;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"CLOSED\", {\r\n get: function () {\r\n return ReconnectingWebSocket.CLOSED;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"binaryType\", {\r\n get: function () {\r\n return this._ws ? this._ws.binaryType : this._binaryType;\r\n },\r\n set: function (value) {\r\n this._binaryType = value;\r\n if (this._ws) {\r\n this._ws.binaryType = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"retryCount\", {\r\n /**\r\n * Returns the number or connection retries\r\n */\r\n get: function () {\r\n return Math.max(this._retryCount, 0);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"bufferedAmount\", {\r\n /**\r\n * The number of bytes of data that have been queued using calls to send() but not yet\r\n * transmitted to the network. This value resets to zero once all queued data has been sent.\r\n * This value does not reset to zero when the connection is closed; if you keep calling send(),\r\n * this will continue to climb. Read only\r\n */\r\n get: function () {\r\n var bytes = this._messageQueue.reduce(function (acc, message) {\r\n if (typeof message === 'string') {\r\n acc += message.length; // not byte size\r\n }\r\n else if (message instanceof Blob) {\r\n acc += message.size;\r\n }\r\n else {\r\n acc += message.byteLength;\r\n }\r\n return acc;\r\n }, 0);\r\n return bytes + (this._ws ? this._ws.bufferedAmount : 0);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"extensions\", {\r\n /**\r\n * The extensions selected by the server. This is currently only the empty string or a list of\r\n * extensions as negotiated by the connection\r\n */\r\n get: function () {\r\n return this._ws ? this._ws.extensions : '';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"protocol\", {\r\n /**\r\n * A string indicating the name of the sub-protocol the server selected;\r\n * this will be one of the strings specified in the protocols parameter when creating the\r\n * WebSocket object\r\n */\r\n get: function () {\r\n return this._ws ? this._ws.protocol : '';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"readyState\", {\r\n /**\r\n * The current state of the connection; this is one of the Ready state constants\r\n */\r\n get: function () {\r\n if (this._ws) {\r\n return this._ws.readyState;\r\n }\r\n return this._options.startClosed\r\n ? ReconnectingWebSocket.CLOSED\r\n : ReconnectingWebSocket.CONNECTING;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"url\", {\r\n /**\r\n * The URL as resolved by the constructor\r\n */\r\n get: function () {\r\n return this._ws ? this._ws.url : '';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Closes the WebSocket connection or connection attempt, if any. If the connection is already\r\n * CLOSED, this method does nothing\r\n */\r\n ReconnectingWebSocket.prototype.close = function (code, reason) {\r\n if (code === void 0) { code = 1000; }\r\n this._closeCalled = true;\r\n this._shouldReconnect = false;\r\n this._clearTimeouts();\r\n if (!this._ws) {\r\n this._debug('close enqueued: no ws instance');\r\n return;\r\n }\r\n if (this._ws.readyState === this.CLOSED) {\r\n this._debug('close: already closed');\r\n return;\r\n }\r\n this._ws.close(code, reason);\r\n };\r\n /**\r\n * Closes the WebSocket connection or connection attempt and connects again.\r\n * Resets retry counter;\r\n */\r\n ReconnectingWebSocket.prototype.reconnect = function (code, reason) {\r\n this._shouldReconnect = true;\r\n this._closeCalled = false;\r\n this._retryCount = -1;\r\n if (!this._ws || this._ws.readyState === this.CLOSED) {\r\n this._connect();\r\n }\r\n else {\r\n this._disconnect(code, reason);\r\n this._connect();\r\n }\r\n };\r\n /**\r\n * Enqueue specified data to be transmitted to the server over the WebSocket connection\r\n */\r\n ReconnectingWebSocket.prototype.send = function (data) {\r\n if (this._ws && this._ws.readyState === this.OPEN) {\r\n this._debug('send', data);\r\n this._ws.send(data);\r\n }\r\n else {\r\n var _a = this._options.maxEnqueuedMessages, maxEnqueuedMessages = _a === void 0 ? DEFAULT.maxEnqueuedMessages : _a;\r\n if (this._messageQueue.length < maxEnqueuedMessages) {\r\n this._debug('enqueue', data);\r\n this._messageQueue.push(data);\r\n }\r\n }\r\n };\r\n /**\r\n * Register an event handler of a specific event type\r\n */\r\n ReconnectingWebSocket.prototype.addEventListener = function (type, listener) {\r\n if (this._listeners[type]) {\r\n // @ts-ignore\r\n this._listeners[type].push(listener);\r\n }\r\n };\r\n ReconnectingWebSocket.prototype.dispatchEvent = function (event) {\r\n var e_1, _a;\r\n var listeners = this._listeners[event.type];\r\n if (listeners) {\r\n try {\r\n for (var listeners_1 = __values(listeners), listeners_1_1 = listeners_1.next(); !listeners_1_1.done; listeners_1_1 = listeners_1.next()) {\r\n var listener = listeners_1_1.value;\r\n this._callEventListener(event, listener);\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (listeners_1_1 && !listeners_1_1.done && (_a = listeners_1.return)) _a.call(listeners_1);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n }\r\n return true;\r\n };\r\n /**\r\n * Removes an event listener\r\n */\r\n ReconnectingWebSocket.prototype.removeEventListener = function (type, listener) {\r\n if (this._listeners[type]) {\r\n // @ts-ignore\r\n this._listeners[type] = this._listeners[type].filter(function (l) { return l !== listener; });\r\n }\r\n };\r\n ReconnectingWebSocket.prototype._debug = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n if (this._options.debug) {\r\n // not using spread because compiled version uses Symbols\r\n // tslint:disable-next-line\r\n console.log.apply(console, __spread(['RWS>'], args));\r\n }\r\n };\r\n ReconnectingWebSocket.prototype._getNextDelay = function () {\r\n var _a = this._options, _b = _a.reconnectionDelayGrowFactor, reconnectionDelayGrowFactor = _b === void 0 ? DEFAULT.reconnectionDelayGrowFactor : _b, _c = _a.minReconnectionDelay, minReconnectionDelay = _c === void 0 ? DEFAULT.minReconnectionDelay : _c, _d = _a.maxReconnectionDelay, maxReconnectionDelay = _d === void 0 ? DEFAULT.maxReconnectionDelay : _d;\r\n var delay = 0;\r\n if (this._retryCount > 0) {\r\n delay =\r\n minReconnectionDelay * Math.pow(reconnectionDelayGrowFactor, this._retryCount - 1);\r\n if (delay > maxReconnectionDelay) {\r\n delay = maxReconnectionDelay;\r\n }\r\n }\r\n this._debug('next delay', delay);\r\n return delay;\r\n };\r\n ReconnectingWebSocket.prototype._wait = function () {\r\n var _this = this;\r\n return new Promise(function (resolve) {\r\n setTimeout(resolve, _this._getNextDelay());\r\n });\r\n };\r\n ReconnectingWebSocket.prototype._getNextUrl = function (urlProvider) {\r\n if (typeof urlProvider === 'string') {\r\n return Promise.resolve(urlProvider);\r\n }\r\n if (typeof urlProvider === 'function') {\r\n var url = urlProvider();\r\n if (typeof url === 'string') {\r\n return Promise.resolve(url);\r\n }\r\n if (!!url.then) {\r\n return url;\r\n }\r\n }\r\n throw Error('Invalid URL');\r\n };\r\n ReconnectingWebSocket.prototype._connect = function () {\r\n var _this = this;\r\n if (this._connectLock || !this._shouldReconnect) {\r\n return;\r\n }\r\n this._connectLock = true;\r\n var _a = this._options, _b = _a.maxRetries, maxRetries = _b === void 0 ? DEFAULT.maxRetries : _b, _c = _a.connectionTimeout, connectionTimeout = _c === void 0 ? DEFAULT.connectionTimeout : _c, _d = _a.WebSocket, WebSocket = _d === void 0 ? getGlobalWebSocket() : _d;\r\n if (this._retryCount >= maxRetries) {\r\n this._debug('max retries reached', this._retryCount, '>=', maxRetries);\r\n return;\r\n }\r\n this._retryCount++;\r\n this._debug('connect', this._retryCount);\r\n this._removeListeners();\r\n if (!isWebSocket(WebSocket)) {\r\n throw Error('No valid WebSocket class provided');\r\n }\r\n this._wait()\r\n .then(function () { return _this._getNextUrl(_this._url); })\r\n .then(function (url) {\r\n // close could be called before creating the ws\r\n if (_this._closeCalled) {\r\n return;\r\n }\r\n _this._debug('connect', { url: url, protocols: _this._protocols });\r\n _this._ws = _this._protocols\r\n ? new WebSocket(url, _this._protocols)\r\n : new WebSocket(url);\r\n _this._ws.binaryType = _this._binaryType;\r\n _this._connectLock = false;\r\n _this._addListeners();\r\n _this._connectTimeout = setTimeout(function () { return _this._handleTimeout(); }, connectionTimeout);\r\n });\r\n };\r\n ReconnectingWebSocket.prototype._handleTimeout = function () {\r\n this._debug('timeout event');\r\n this._handleError(new ErrorEvent(Error('TIMEOUT'), this));\r\n };\r\n ReconnectingWebSocket.prototype._disconnect = function (code, reason) {\r\n if (code === void 0) { code = 1000; }\r\n this._clearTimeouts();\r\n if (!this._ws) {\r\n return;\r\n }\r\n this._removeListeners();\r\n try {\r\n this._ws.close(code, reason);\r\n this._handleClose(new CloseEvent(code, reason, this));\r\n }\r\n catch (error) {\r\n // ignore\r\n }\r\n };\r\n ReconnectingWebSocket.prototype._acceptOpen = function () {\r\n this._debug('accept open');\r\n this._retryCount = 0;\r\n };\r\n ReconnectingWebSocket.prototype._callEventListener = function (event, listener) {\r\n if ('handleEvent' in listener) {\r\n // @ts-ignore\r\n listener.handleEvent(event);\r\n }\r\n else {\r\n // @ts-ignore\r\n listener(event);\r\n }\r\n };\r\n ReconnectingWebSocket.prototype._removeListeners = function () {\r\n if (!this._ws) {\r\n return;\r\n }\r\n this._debug('removeListeners');\r\n this._ws.removeEventListener('open', this._handleOpen);\r\n this._ws.removeEventListener('close', this._handleClose);\r\n this._ws.removeEventListener('message', this._handleMessage);\r\n // @ts-ignore\r\n this._ws.removeEventListener('error', this._handleError);\r\n };\r\n ReconnectingWebSocket.prototype._addListeners = function () {\r\n if (!this._ws) {\r\n return;\r\n }\r\n this._debug('addListeners');\r\n this._ws.addEventListener('open', this._handleOpen);\r\n this._ws.addEventListener('close', this._handleClose);\r\n this._ws.addEventListener('message', this._handleMessage);\r\n // @ts-ignore\r\n this._ws.addEventListener('error', this._handleError);\r\n };\r\n ReconnectingWebSocket.prototype._clearTimeouts = function () {\r\n clearTimeout(this._connectTimeout);\r\n clearTimeout(this._uptimeTimeout);\r\n };\r\n return ReconnectingWebSocket;\r\n}());\n\nexport default ReconnectingWebSocket;\n", "// https://github.com/maxogden/websocket-stream/blob/48dc3ddf943e5ada668c31ccd94e9186f02fafbd/ws-fallback.js\n\nvar ws = null\n\nif (typeof WebSocket !== 'undefined') {\n ws = WebSocket\n} else if (typeof MozWebSocket !== 'undefined') {\n ws = MozWebSocket\n} else if (typeof global !== 'undefined') {\n ws = global.WebSocket || global.MozWebSocket\n} else if (typeof window !== 'undefined') {\n ws = window.WebSocket || window.MozWebSocket\n} else if (typeof self !== 'undefined') {\n ws = self.WebSocket || self.MozWebSocket\n}\n\nexport default ws\n", "import { Disposable } from '../types.js';\n\nexport class NamedDisposable implements Disposable {\n private disposables: Map<string, Disposable> = new Map();\n\n public add(key: string, disposable: Disposable | (() => Disposable)): void {\n if (this.disposables.has(key)) {\n console.warn(`Disposable with key \"${key}\" already exists. Disposing the old one.`);\n this.disposables.get(key)?.dispose();\n }\n\n if (typeof disposable === 'function') {\n disposable = disposable();\n }\n\n this.disposables.set(key, disposable);\n }\n\n public dispose(): void {\n this.disposables.forEach((disposable) => disposable.dispose());\n this.disposables.clear();\n }\n}\n", "export type EventType = string | symbol;\n\n// An event handler can take an optional event argument\n// and should not return a value\nexport type Handler<T = unknown> = (event: T) => void;\nexport type WildcardHandler<T = Record<string, unknown>> = (\n\ttype: keyof T,\n\tevent: T[keyof T]\n) => void;\n\n// An array of all currently registered event handlers for a type\nexport type EventHandlerList<T = unknown> = Array<Handler<T>>;\nexport type WildCardEventHandlerList<T = Record<string, unknown>> = Array<\n\tWildcardHandler<T>\n>;\n\n// A map of event types and their corresponding event handlers.\nexport type EventHandlerMap<Events extends Record<EventType, unknown>> = Map<\n\tkeyof Events | '*',\n\tEventHandlerList<Events[keyof Events]> | WildCardEventHandlerList<Events>\n>;\n\nexport interface Emitter<Events extends Record<EventType, unknown>> {\n\tall: EventHandlerMap<Events>;\n\n\ton<Key extends keyof Events>(type: Key, handler: Handler<Events[Key]>): void;\n\ton(type: '*', handler: WildcardHandler<Events>): void;\n\n\toff<Key extends keyof Events>(\n\t\ttype: Key,\n\t\thandler?: Handler<Events[Key]>\n\t): void;\n\toff(type: '*', handler: WildcardHandler<Events>): void;\n\n\temit<Key extends keyof Events>(type: Key, event: Events[Key]): void;\n\temit<Key extends keyof Events>(\n\t\ttype: undefined extends Events[Key] ? Key : never\n\t): void;\n}\n\n/**\n * Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name mitt\n * @returns {Mitt}\n */\nexport default function mitt<Events extends Record<EventType, unknown>>(\n\tall?: EventHandlerMap<Events>\n): Emitter<Events> {\n\ttype GenericEventHandler =\n\t\t| Handler<Events[keyof Events]>\n\t\t| WildcardHandler<Events>;\n\tall = all || new Map();\n\n\treturn {\n\t\t/**\n\t\t * A Map of event names to registered handler functions.\n\t\t */\n\t\tall,\n\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t * @param {string|symbol} type Type of event to listen for, or `'*'` for all events\n\t\t * @param {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton<Key extends keyof Events>(type: Key, handler: GenericEventHandler) {\n\t\t\tconst handlers: Array<GenericEventHandler> | undefined = all!.get(type);\n\t\t\tif (handlers) {\n\t\t\t\thandlers.push(handler);\n\t\t\t} else {\n\t\t\t\tall!.set(type, [handler] as EventHandlerList<Events[keyof Events]>);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t * If `handler` is omitted, all handlers of the given type are removed.\n\t\t * @param {string|symbol} type Type of event to unregister `handler` from (`'*'` to remove a wildcard handler)\n\t\t * @param {Function} [handler] Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff<Key extends keyof Events>(type: Key, handler?: GenericEventHandler) {\n\t\t\tconst handlers: Array<GenericEventHandler> | undefined = all!.get(type);\n\t\t\tif (handlers) {\n\t\t\t\tif (handler) {\n\t\t\t\t\thandlers.splice(handlers.indexOf(handler) >>> 0, 1);\n\t\t\t\t} else {\n\t\t\t\t\tall!.set(type, []);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `'*'` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * Note: Manually firing '*' handlers is not supported.\n\t\t *\n\t\t * @param {string|symbol} type The event type to invoke\n\t\t * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberOf mitt\n\t\t */\n\t\temit<Key extends keyof Events>(type: Key, evt?: Events[Key]) {\n\t\t\tlet handlers = all!.get(type);\n\t\t\tif (handlers) {\n\t\t\t\t(handlers as EventHandlerList<Events[keyof Events]>)\n\t\t\t\t\t.slice()\n\t\t\t\t\t.map((handler) => {\n\t\t\t\t\t\thandler(evt!);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\thandlers = all!.get('*');\n\t\t\tif (handlers) {\n\t\t\t\t(handlers as WildCardEventHandlerList<Events>)\n\t\t\t\t\t.slice()\n\t\t\t\t\t.map((handler) => {\n\t\t\t\t\t\thandler(type, evt!);\n\t\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n}\n", "export interface EventDispatcher {\n listen: (event: any, callback: (data: any) => void, context?: any) => Disposable;\n once: (event: any, callback: (data: any) => void, context?: any) => void;\n emit: (event: any, ...args: any) => void;\n removeListener: (event?: any, callbackSignature?: any) => void;\n}\n\nimport mitt, { Emitter, EventHandlerMap, EventType, Handler } from 'mitt';\nimport { Disposable } from '../types.js';\n\nexport function mittWithOnce<Events extends Record<EventType, unknown>>(all?: EventHandlerMap<Events>) {\n // @ts-expect-error\n const inst = mitt(all);\n inst.once = (type: keyof Events, fn: Handler<Events[keyof Events]>) => {\n inst.on(type, fn);\n inst.on(type, inst.off.bind(inst, type, fn));\n };\n return inst as unknown as {\n once<Key extends keyof Events>(type: Key, handler: Handler<Events[Key]>): void;\n } & Emitter<Events>;\n}\n\nexport default class EventManager implements EventDispatcher {\n private readonly emitter = mittWithOnce();\n\n public listen(event: any, callback: (data: any) => void): Disposable {\n const dispose = () => {\n this.removeListener(event, callback);\n };\n\n this.emitter.on(event, callback);\n\n return { dispose };\n }\n\n public emit(event: string, data: any): void {\n this.emitter.emit(event, data);\n }\n\n public once(event: any, callback: (data: any) => void): void {\n this.emitter.once(event, callback);\n }\n\n public static make(): EventDispatcher {\n return new EventManager();\n }\n\n public static refresh(): EventDispatcher {\n return new EventManager();\n }\n\n public removeListener(event?: any, callbackSignature?: any): void {\n this.emitter.off(event, callbackSignature);\n }\n\n public static createInstance(): EventDispatcher {\n return new EventManager();\n }\n\n public inspect(): any {\n return this.emitter.all;\n }\n}\n", "import { Action, NotebookInstance } from './index.js';\n\nexport interface GitLog {\n hash: string;\n message: string;\n author: string;\n date: string;\n}\n\nexport interface GitRef {\n ref: string;\n}\n\nexport interface GitStatus {\n initialized: boolean;\n clean: boolean;\n branch: string;\n ref: string;\n}\n\nexport interface GitCheckoutResult extends GitRef {\n branch: string;\n created: boolean;\n}\n\nexport interface GitEvents {}\n\nexport interface GitActions {\n 'git.checkpoint': Action<{ author: string; message: string; branch: string; allowEmpty?: boolean }, GitRef>;\n 'git.checkout': Action<{ branch: string; create?: boolean }, GitCheckoutResult>;\n 'git.log': Action<{ ref: string }, GitLog[]>;\n 'git.sync': Action<\n { url: string; author: string; ref: string; token?: string; direction?: 'pull' | 'push' | 'both'; force?: boolean },\n GitRef\n >;\n 'git.restore': Action<{ ref: string }, GitRef>;\n 'git.status': Action<object, GitStatus>;\n}\n\nexport default class Git {\n constructor(protected okra: NotebookInstance) {}\n\n public checkpoint(author: string, message: string, branch = 'main', allowEmpty = false) {\n return this.okra.invoke('git.checkpoint', { author, message, branch, allowEmpty });\n }\n\n public checkout(branch: string, create = true) {\n return this.okra.invoke('git.checkout', { branch, create });\n }\n\n public sync(\n url: string,\n author: string,\n ref = 'main',\n token?: string,\n direction: 'pull' | 'push' | 'both' = 'both',\n force = false\n ) {\n return this.okra.invoke('git.sync', { url, author, ref, token, direction, force });\n }\n\n public log(ref: string = 'main') {\n return this.okra.invoke('git.log', { ref });\n }\n\n public restore(ref: string) {\n return this.okra.invoke('git.restore', { ref });\n }\n\n public status() {\n return this.okra.invoke('git.status', {});\n }\n}\n", "import EventManager, { EventDispatcher } from '../events/index.js';\nimport { Disposable } from '../types.js';\nimport { timeout } from '../utils/promise.js';\nimport retry from 'async-retry';\nimport {\n BeaconMessage,\n BeaconActions,\n BeaconEvents,\n BeaconOptions,\n DebugInfo,\n ConsoleEvent,\n BeaconErrorEvent,\n DebugRequest,\n DebugResult,\n FetchRequest,\n FetchResult,\n} from './types.js';\nimport { Navigator } from './navigator.js';\n\nexport * from './types.js';\nexport { Navigator } from './navigator.js';\n\n/**\n * Browser environment check\n */\nfunction ensureBrowserEnvironment(): void {\n if (typeof window === 'undefined') {\n throw new Error('Beacon SDK can only be used in a browser environment');\n }\n}\n\n/**\n * BeaconError for beacon-specific errors\n */\nexport class BeaconError extends Error {\n constructor(\n message: string,\n public code?: string\n ) {\n super(message);\n this.name = 'BeaconError';\n }\n}\n\n/**\n * BeaconTimeoutError for timeout-specific errors\n */\nexport class BeaconTimeoutError extends BeaconError {\n constructor(operation: string, timeoutMs: number) {\n super(`Beacon operation '${operation}' timed out after ${timeoutMs}ms`);\n this.code = 'TIMEOUT';\n }\n}\n\n/**\n * BeaconConnectionError for connection-specific errors\n */\nexport class BeaconConnectionError extends BeaconError {\n constructor(message: string) {\n super(`Beacon connection error: ${message}`);\n this.code = 'CONNECTION_ERROR';\n }\n}\n\n/**\n * Beacon SDK for communicating with beacon instances in iframes\n */\nexport class Beacon implements BeaconActions {\n public readonly iframe: HTMLIFrameElement;\n private options: Required<BeaconOptions>;\n private messageHandlers: Map<string, ((payload: any) => void)[]> = new Map();\n private eventEmitter: EventDispatcher;\n private isBeaconReady = false;\n private readyPromise: Promise<void> | null = null;\n private isStarted = false;\n private disposables: Disposable[] = [];\n\n // MessagePort communication\n private messageChannel: MessageChannel | null = null;\n private port: MessagePort | null = null;\n private channelEstablished = false;\n\n public readonly navigator: Navigator;\n\n constructor(iframe: HTMLIFrameElement, options: BeaconOptions = {}) {\n ensureBrowserEnvironment();\n\n this.iframe = iframe;\n\n // Set up default retry options\n const defaultRetryOptions = {\n retries: 3,\n minTimeout: 1000,\n maxTimeout: 5000,\n factor: 2,\n randomize: true,\n };\n\n this.options = {\n timeout: 10000,\n targetOrigin: '*',\n debug: false,\n retry: {\n ...defaultRetryOptions,\n ...options.retry,\n },\n ...options,\n };\n\n this.eventEmitter = EventManager.make();\n this.setupMessageChannel();\n\n this.navigator = new Navigator(\n this.eventEmitter.listen.bind(this.eventEmitter),\n this.eventEmitter.once.bind(this.eventEmitter),\n this\n );\n }\n\n /**\n * Setup communication channel using MessagePort\n */\n private setupMessageChannel(): void {\n // Listen for beacon ready message via postMessage\n const readyHandler = (event: MessageEvent) => {\n try {\n // Verify message source\n if (event.source !== this.iframe.contentWindow) {\n return;\n }\n\n const message: BeaconMessage = event.data;\n if (!message || typeof message !== 'object' || !message.type) {\n return;\n }\n\n // Handle beacon ready - this means beacon is ready to receive channel establishment\n if (message.type === 'beacon:ready-for-channel') {\n this.establishChannel().catch((error) => {\n if (this.options.debug) {\n console.error('[Beacon SDK] Channel establishment failed:', error);\n }\n });\n }\n\n // Handle channel confirmation\n if (message.type === 'beacon:channel-established') {\n this.channelEstablished = true;\n this.isBeaconReady = true;\n this.emit('ready', message.payload);\n if (this.options.debug) {\n console.log('[Beacon SDK] Channel established and beacon ready');\n }\n }\n } catch (error) {\n if (this.options.debug) {\n console.error('[Beacon SDK] Message parsing error:', error);\n }\n }\n };\n\n window.addEventListener('message', readyHandler);\n\n // Add to disposables for cleanup\n this.disposables.push({\n dispose: () => window.removeEventListener('message', readyHandler),\n });\n }\n\n /**\n * Establish MessagePort communication channel\n */\n private async establishChannel(): Promise<void> {\n if (!this.iframe.contentWindow) {\n throw new BeaconConnectionError('Iframe contentWindow not available');\n }\n\n // Create the message channel\n this.messageChannel = new MessageChannel();\n this.port = this.messageChannel.port1;\n\n // Set up port message listener\n this.port.onmessage = (event) => {\n this.handleBeaconMessage(event.data);\n };\n\n // Handle port errors\n this.port.onmessageerror = (event) => {\n if (this.options.debug) {\n console.error('[Beacon SDK] Port message error:', event);\n }\n };\n\n // Start the port\n this.port.start();\n\n // Transfer port2 to the iframe\n const establishMessage = {\n type: 'beacon:establish-channel',\n timestamp: Date.now(),\n id: this.generateId(),\n };\n\n this.iframe.contentWindow.postMessage(\n establishMessage,\n '*', // Safe for channel establishment\n [this.messageChannel.port2] // Transfer the port\n );\n\n if (this.options.debug) {\n console.log('[Beacon SDK] Channel establishment message sent');\n }\n\n // Wait for channel to be established (beacon will send confirmation via postMessage)\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new BeaconConnectionError('Channel establishment timeout'));\n }, this.options.timeout);\n\n const checkReady = () => {\n if (this.channelEstablished && this.isBeaconReady) {\n clearTimeout(timeoutId);\n resolve();\n } else {\n setTimeout(checkReady, 100);\n }\n };\n\n checkReady();\n });\n }\n\n /**\n * Handle incoming beacon messages\n */\n private handleBeaconMessage(message: BeaconMessage): void {\n if (this.options.debug) {\n console.log('[Beacon SDK] Received message:', message.type, message.payload);\n }\n\n // Emit the event (remove 'beacon:' prefix for cleaner API)\n const eventType = message.type.replace('beacon:', '');\n this.emit(eventType, message.payload);\n\n // Call registered message handlers\n const handlers = this.messageHandlers.get(message.type);\n if (handlers) {\n handlers.forEach((handler) => {\n try {\n handler(message.payload);\n } catch (error) {\n if (this.options.debug) {\n console.error('[Beacon SDK] Message handler error:', error);\n }\n }\n });\n }\n }\n\n /**\n * Wait for beacon to be ready - simplified approach\n */\n private waitForBeaconReady(): Promise<void> {\n return retry(\n async () => {\n return new Promise<void>((resolve, reject) => {\n if (this.isBeaconReady && this.channelEstablished) {\n resolve();\n return;\n }\n\n const timeoutMs = this.options.timeout;\n const timeoutId = setTimeout(() => {\n reject(new BeaconTimeoutError('beacon ready', timeoutMs));\n }, timeoutMs);\n\n // Listen for beacon ready signal\n const unsubscribe = this.on('ready', () => {\n clearTimeout(timeoutId);\n unsubscribe.dispose();\n resolve();\n });\n });\n },\n {\n retries: this.options.retry?.retries || 3,\n minTimeout: this.options.retry?.minTimeout || 1000,\n maxTimeout: this.options.retry?.maxTimeout || 5000,\n factor: this.options.retry?.factor || 2,\n randomize: this.options.retry?.randomize || true,\n onRetry: (error, attempt) => {\n if (this.options.debug) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn(`[Beacon SDK] Beacon ready retry attempt ${attempt}:`, errorMessage);\n }\n // Reset ready state for retry\n this.isBeaconReady = false;\n this.channelEstablished = false;\n },\n }\n );\n }\n\n /**\n * Send a message to the beacon via MessagePort\n */\n private sendMessage<T = any>(type: string, payload: T = {} as T): void {\n if (!this.port) {\n throw new BeaconConnectionError('MessagePort not available - channel not established');\n }\n\n const message: BeaconMessage<T> = {\n type: `beacon:${type}`,\n payload,\n timestamp: Date.now(),\n source: 'parent',\n id: this.generateId(),\n };\n\n try {\n // Direct port communication - no need for origin or cloning\n this.port.postMessage(message);\n\n if (this.options.debug) {\n console.log('[Beacon SDK] Sent message via port:', message.type, message.payload);\n }\n } catch (error) {\n throw new BeaconConnectionError(\n `Failed to send message via port: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n /**\n * Send a message and wait for a specific response with retry logic\n */\n private async sendAndWaitFor<TPayload = any, TResponse = any>(\n sendType: string,\n responseType: string,\n payload: TPayload = {} as TPayload,\n timeoutMs?: number\n ): Promise<TResponse> {\n await this.ready();\n\n return retry(\n async (bail) => {\n return new Promise<TResponse>((resolve, reject) => {\n const actualTimeout = timeoutMs || this.options.timeout;\n const timeoutId = setTimeout(() => {\n unsubscribe.dispose();\n // Reject timeout to trigger retry (will only bail on final attempt)\n const error = new BeaconTimeoutError(sendType, actualTimeout);\n reject(error);\n }, actualTimeout);\n\n const unsubscribe = this.eventEmitter.listen(responseType, (data: any) => {\n clearTimeout(timeoutId);\n unsubscribe.dispose();\n resolve(data as TResponse);\n });\n\n try {\n this.sendMessage(sendType, payload);\n } catch (error) {\n clearTimeout(timeoutId);\n unsubscribe.dispose();\n // Retry on connection errors, bail on other types of errors\n if (error instanceof BeaconConnectionError) {\n reject(error); // Will trigger retry\n } else {\n bail(error); // Don't retry for other types of errors\n }\n }\n });\n },\n {\n retries: this.options.retry?.retries || 3,\n minTimeout: this.options.retry?.minTimeout || 1000,\n maxTimeout: this.options.retry?.maxTimeout || 5000,\n factor: this.options.retry?.factor || 2,\n randomize: this.options.retry?.randomize || true,\n onRetry: (error, attempt) => {\n if (this.options.debug) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn(`[Beacon SDK] Retry attempt ${attempt} for ${sendType}:`, errorMessage);\n }\n },\n }\n );\n }\n\n /**\n * Generate a unique ID for messages\n */\n private generateId(): string {\n return `sdk_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n }\n\n /**\n * Event emitter methods (both private and public for navigator access)\n */\n public emit(event: string, payload: any): void {\n this.eventEmitter.emit(event, payload);\n }\n\n /**\n * Start the beacon initialization process\n */\n public start(): Promise<void> {\n if (this.isStarted) {\n return this.readyPromise || Promise.resolve();\n }\n\n this.isStarted = true;\n this.readyPromise = this.waitForBeaconReady();\n return this.readyPromise;\n }\n\n /**\n * Wait for the beacon to be ready\n */\n public async ready(): Promise<void> {\n if (!this.isStarted) {\n throw new BeaconError('Beacon has not been started. Call start() first.');\n }\n\n if (!this.readyPromise) {\n throw new BeaconError('Beacon ready promise is not available');\n }\n\n return timeout(this.readyPromise, this.options.timeout);\n }\n\n /**\n * Check if beacon is ready\n */\n public get isReady(): boolean {\n return this.isBeaconReady;\n }\n\n /**\n * Listen for beacon events\n */\n public on<K extends keyof BeaconEvents>(event: K, handler: (payload: BeaconEvents[K]) => void): Disposable {\n return this.eventEmitter.listen(event as string, handler);\n }\n\n /**\n * Listen for beacon events (one-time)\n */\n public once<K extends keyof BeaconEvents>(event: K, handler: (payload: BeaconEvents[K]) => void): void {\n this.eventEmitter.once(event as string, handler);\n }\n\n /**\n * Ping the beacon to check if it's responsive\n */\n public async ping(): Promise<boolean> {\n try {\n await this.sendAndWaitFor('ping', 'pong', { timestamp: Date.now() });\n return true;\n } catch (error) {\n if (this.options.debug) {\n console.warn('[Beacon SDK] Ping failed:', error);\n }\n return false;\n }\n }\n\n /**\n * Get debug information from the beacon\n */\n public async getDebugInfo(): Promise<DebugInfo> {\n return this.sendAndWaitFor<{}, DebugInfo>('getDebugInfo', 'debugInfo');\n }\n\n /**\n * Get console events from the beacon\n */\n public async getConsoleEvents(): Promise<ConsoleEvent[]> {\n return this.sendAndWaitFor<{}, ConsoleEvent[]>('getConsoleEvents', 'consoleEvents');\n }\n\n /**\n * Get error events from the beacon\n */\n public async getErrorEvents(): Promise<BeaconErrorEvent[]> {\n return this.sendAndWaitFor<{}, BeaconErrorEvent[]>('getErrorEvents', 'errorEvents');\n }\n\n /**\n * Clear console events in the beacon\n */\n public async clearConsole(): Promise<void> {\n await this.ready();\n this.sendMessage('clearConsole');\n }\n\n /**\n * Clear error events in the beacon\n */\n public async clearErrors(): Promise<void> {\n await this.ready();\n this.sendMessage('clearErrors');\n }\n\n /**\n * Execute code in the beacon context\n */\n public async executeCode(code: string): Promise<{ success: boolean; result?: any; error?: string }> {\n return this.sendAndWaitFor('executeCode', 'codeExecutionResult', { code });\n }\n\n /**\n * Inspect an element in the beacon context\n */\n public async inspectElement(selector: string): Promise<{ success: boolean; element?: any; error?: string }> {\n return this.sendAndWaitFor('inspectElement', 'elementInspectionResult', { selector });\n }\n\n /**\n * Fetch a URL in the beacon context\n */\n public async fetch<T extends unknown>(request: FetchRequest): Promise<FetchResult<T>> {\n return this.sendAndWaitFor('fetch', 'fetchResult', request);\n }\n\n /**\n * Debug a page (navigate and capture debug information). It loads\n * the page fresh in the IFRAME so that we can capture the latest state.\n */\n public async debug(request: DebugRequest, waitSeconds?: number): Promise<DebugResult> {\n // First, navigate the iframe if the path is different from current URL\n const targetUrl = new URL(request.path, this.iframe.src || window.location.origin).href;\n\n if (this.iframe.src !== targetUrl) {\n // Navigate the iframe from parent side\n this.navigator.visit(targetUrl);\n\n // Wait for beacon to be ready after navigation\n await this.ready();\n }\n\n /**\n * Let's wait for 2 seconds for page to finish rendering.\n * Errors, that might occur during this time will be captured.\n */\n waitSeconds && (await this.wait(waitSeconds));\n\n // Now request debug capture from the beacon (without navigation)\n const timeoutMs = (request.options?.timeout || 30000) + 5000; // Add 5s buffer\n return this.sendAndWaitFor('debug', 'debugResult', request, timeoutMs);\n }\n\n private async wait(forSeconds: number) {\n return new Promise((resolve) => setTimeout(resolve, forSeconds * 1000));\n }\n\n /**\n * Navigate the iframe to a new URL\n */\n public navigate(url: string): void {\n if (!this.iframe) {\n throw new BeaconConnectionError('Iframe not available');\n }\n\n try {\n const targetUrl = new URL(url, this.iframe.src || window.location.origin);\n this.iframe.src = targetUrl.href;\n\n // Reset state since we're navigating\n this.isBeaconReady = false;\n this.channelEstablished = false;\n\n // Close existing port if any\n if (this.port) {\n this.port.close();\n this.port = null;\n }\n\n if (this.messageChannel) {\n this.messageChannel = null;\n }\n\n // Only create new ready promise if beacon was already started\n if (this.isStarted) {\n this.readyPromise = this.waitForBeaconReady();\n }\n } catch (error) {\n throw new BeaconConnectionError(`Invalid URL: ${url}`);\n }\n }\n\n /**\n * Get current iframe URL\n */\n public get url(): string {\n return this.iframe.src;\n }\n\n /**\n * Get the iframe element\n */\n public get element(): HTMLIFrameElement {\n return this.iframe;\n }\n\n /**\n * Dispose of all resources\n */\n public dispose(): void {\n // Clean up MessagePort\n if (this.port) {\n this.port.close();\n this.port = null;\n }\n\n if (this.messageChannel) {\n this.messageChannel = null;\n }\n\n this.disposables.forEach((disposable) => disposable.dispose());\n this.disposables = [];\n this.messageHandlers.clear();\n this.isBeaconReady = false;\n this.channelEstablished = false;\n this.isStarted = false;\n this.readyPromise = null;\n }\n}\n\n/**\n * Factory function to create a beacon instance for an iframe\n */\nexport function createBeacon(iframe: HTMLIFrameElement, options?: BeaconOptions): Beacon {\n return new Beacon(iframe, options);\n}\n\n/**\n * Check if the current environment supports the Beacon SDK\n */\nexport function isBeaconSupported(): boolean {\n try {\n ensureBrowserEnvironment();\n return true;\n } catch {\n return false;\n }\n}\n", "import type { Disposable } from '../types.js';\nimport { Beacon } from './index.js';\n\nexport interface NavigationResult {\n success: boolean;\n url?: string;\n error?: string;\n}\n\nexport interface NavigatorActions {\n visit(url: string): void;\n goBack(): Promise<NavigationResult>;\n goForward(): Promise<NavigationResult>;\n canGoBack: boolean;\n canGoForward: boolean;\n refresh(): Promise<void>;\n getCurrentUrl(): URL;\n on<K extends keyof NavigatorEvents>(event: K, handler: (payload: NavigatorEvents[K]) => void): Disposable;\n}\n\nexport interface NavigatorEvents {\n historyChange: {\n url: string;\n state: unknown;\n direction: 'back' | 'forward' | 'push' | 'replace' | 'reload';\n timestamp: number;\n };\n navigationStateChange: {\n canGoBack: boolean;\n canGoForward: boolean;\n currentIndex: number;\n historyLength: number;\n timestamp: number;\n };\n}\n\nexport interface HistoryNavigationRequest {\n action: 'back' | 'forward' | 'reload';\n}\n\nexport interface HistoryStateRequest {\n state: unknown;\n title: string;\n url: string;\n action: 'push' | 'replace';\n}\n\nexport interface HistoryInfoResponse {\n length: number;\n state: unknown;\n url: string;\n canGoBack: boolean;\n canGoForward: boolean;\n}\n\nexport interface Navigator extends NavigatorActions {\n on<K extends keyof NavigatorEvents>(event: K, handler: (payload: NavigatorEvents[K]) => void): Disposable;\n once<K extends keyof NavigatorEvents>(event: K, handler: (payload: NavigatorEvents[K]) => void): void;\n}\n\n/**\n * SDK Navigator implementation with internal history management\n */\nexport class Navigator implements NavigatorActions {\n private urlHistory: string[] = [];\n private currentIndex = 0;\n private _canGoBack = false;\n private _canGoForward = false;\n\n constructor(\n private onEvent: <K extends keyof NavigatorEvents>(event: K, handler: (payload: NavigatorEvents[K]) => void) => Disposable,\n private onceEvent: <K extends keyof NavigatorEvents>(event: K, handler: (payload: NavigatorEvents[K]) => void) => void,\n private readonly beacon: Beacon\n ) {\n this.beacon = beacon;\n this.setupUrlChangeListener();\n this.urlHistory.push(beacon.iframe.src);\n this.updateNavigationState();\n }\n\n /**\n * Navigate to a URL using internal history management\n */\n visit(url: string): void {\n if (!this.beacon) {\n throw new Error('Beacon reference not set');\n }\n\n // Navigate the iframe\n this.beacon.navigate(url);\n\n // Add to history (remove any forward history if we're not at the end)\n if (this.currentIndex < this.urlHistory.length - 1) {\n this.urlHistory = this.urlHistory.slice(0, this.currentIndex + 1);\n }\n\n this.urlHistory.push(url);\n this.currentIndex = this.urlHistory.length - 1;\n this.updateNavigationState();\n\n // Emit history change event\n this.emitHistoryChange(url, 'push');\n }\n\n /**\n * Set up listener for URL change events from the beacon\n */\n private setupUrlChangeListener(): void {\n this.beacon.on('urlChange', (payload) => {\n this.addToHistory(payload.newUrl);\n });\n }\n\n /**\n * Add URL to internal history\n */\n private addToHistory(url: string): void {\n // Remove any forward history if we're not at the end\n if (this.currentIndex < this.urlHistory.length - 1) {\n this.urlHistory = this.urlHistory.slice(0, this.currentIndex + 1);\n }\n\n // Add new URL\n this.urlHistory.push(url);\n this.currentIndex = this.urlHistory.length - 1;\n\n // Update navigation state\n this.updateNavigationState();\n }\n\n /**\n * Update internal navigation state and emit changes\n */\n private updateNavigationState(): void {\n const previousCanGoBack = this._canGoBack;\n const previousCanGoForward = this._canGoForward;\n\n this._canGoBack = this.currentIndex > 0;\n this._canGoForward = this.currentIndex < this.urlHistory.length - 1;\n\n // Emit navigation state change if it actually changed\n if (previousCanGoBack !== this._canGoBack || previousCanGoForward !== this._canGoForward) {\n this.emitNavigationStateChange();\n }\n }\n\n /**\n * Emit navigation state change event\n */\n private emitNavigationStateChange(): void {\n if (this.beacon && this.beacon.emit) {\n this.beacon.emit('navigationStateChange', {\n canGoBack: this._canGoBack,\n canGoForward: this._canGoForward,\n currentIndex: this.currentIndex,\n historyLength: this.urlHistory.length,\n timestamp: Date.now(),\n });\n }\n }\n\n get canGoBack(): boolean {\n return this._canGoBack;\n }\n\n get canGoForward(): boolean {\n return this._canGoForward;\n }\n\n async goBack(): Promise<NavigationResult> {\n if (!this.canGoBack) {\n return { success: false, error: 'Cannot go back - no previous history' };\n }\n\n this.currentIndex--;\n this.updateNavigationState();\n const url = this.urlHistory[this.currentIndex];\n\n if (!this.beacon) {\n return { success: false, error: 'Beacon reference not set' };\n }\n\n this.beacon.navigate(url);\n this.emitHistoryChange(url, 'back');\n return { success: true, url };\n }\n\n /**\n * Navigate forward in internal history\n */\n async goForward(): Promise<NavigationResult> {\n if (!this.canGoForward) {\n return { success: false, error: 'Cannot go forward - no forward history' };\n }\n\n this.currentIndex++;\n this.updateNavigationState();\n const url = this.urlHistory[this.currentIndex];\n\n if (!this.beacon) {\n return { success: false, error: 'Beacon reference not set' };\n }\n\n this.beacon.navigate(url);\n this.emitHistoryChange(url, 'forward');\n return { success: true, url };\n }\n\n /**\n * Reload the current page\n */\n async reload(): Promise<void> {\n if (this.currentIndex >= 0 && this.currentIndex < this.urlHistory.length) {\n const currentUrl = this.urlHistory[this.currentIndex];\n\n if (!this.beacon) {\n throw new Error('Beacon reference not set');\n }\n\n this.beacon.navigate(currentUrl);\n this.emitHistoryChange(currentUrl, 'reload');\n }\n }\n\n /**\n * Get current URL from internal history\n */\n getCurrentUrl(): URL {\n if (this.currentIndex >= 0 && this.currentIndex < this.urlHistory.length) {\n return new URL(this.urlHistory[this.currentIndex]);\n }\n\n return new URL('about:blank');\n }\n\n /**\n * Get the complete history array\n */\n getHistory(): readonly string[] {\n return [...this.urlHistory];\n }\n\n /**\n * Get current history index\n */\n getCurrentIndex(): number {\n return this.currentIndex;\n }\n\n /**\n * Check if can go back synchronously\n */\n public canGoBackSync(): boolean {\n return this.currentIndex > 0;\n }\n\n /**\n * Check if can go forward synchronously\n */\n public canGoForwardSync(): boolean {\n return this.currentIndex < this.urlHistory.length - 1;\n }\n\n /**\n * Emit history change event\n */\n private emitHistoryChange(url: string, direction: 'back' | 'forward' | 'push' | 'replace' | 'reload'): void {\n // Note: We'll need to emit this through the beacon's event system\n // This would require access to the beacon's emit method\n if (this.beacon && this.beacon.emit) {\n this.beacon.emit('historyChange', {\n url,\n state: null,\n direction,\n timestamp: Date.now(),\n });\n }\n }\n\n /**\n * Push a new state to internal history (legacy method for compatibility)\n */\n async pushState(url: string): Promise<void> {\n // For compatibility, treat this as a navigation\n this.visit(url);\n }\n\n /**\n * Replace current state in internal history (legacy method for compatibility)\n */\n async replaceState(url: string): Promise<void> {\n if (this.currentIndex >= 0 && this.currentIndex < this.urlHistory.length) {\n // Replace the current URL in history\n this.urlHistory[this.currentIndex] = url;\n\n if (!this.beacon) {\n throw new Error('Beacon reference not set');\n }\n\n this.beacon.navigate(url);\n this.emitHistoryChange(url, 'replace');\n } else {\n // If no current history, treat as push\n this.visit(url);\n }\n }\n\n /**\n * Get the current history length\n */\n async getHistoryLength(): Promise<number> {\n return this.urlHistory.length;\n }\n\n /**\n * Get the current history state (always null since we don't store state)\n */\n async getHistoryState(): Promise<any> {\n return null;\n }\n\n /**\n * Get comprehensive history information\n */\n async getHistoryInfo(): Promise<HistoryInfoResponse> {\n return {\n length: this.urlHistory.length,\n state: null,\n url: this.urlHistory[this.currentIndex] || '',\n canGoBack: this.canGoBack,\n canGoForward: this.canGoForward,\n };\n }\n\n /**\n * Listen for navigator events\n */\n on<K extends keyof NavigatorEvents>(event: K, handler: (payload: NavigatorEvents[K]) => void): Disposable {\n return this.onEvent(event, handler);\n }\n\n /**\n * Listen for navigator events (once)\n */\n once<K extends keyof NavigatorEvents>(event: K, handler: (payload: NavigatorEvents[K]) => void): void {\n this.onceEvent(event, handler);\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["function RetryOperation(timeouts, options) {\n // Compatibility for the old (timeouts, retryForever) signature\n if (typeof options === 'boolean') {\n options = { forever: options };\n }\n\n this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n this._timeouts = timeouts;\n this._options = options || {};\n this._maxRetryTime = options && options.maxRetryTime || Infinity;\n this._fn = null;\n this._errors = [];\n this._attempts = 1;\n this._operationTimeout = null;\n this._operationTimeoutCb = null;\n this._timeout = null;\n this._operationStart = null;\n this._timer = null;\n\n if (this._options.forever) {\n this._cachedTimeouts = this._timeouts.slice(0);\n }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n this._attempts = 1;\n this._timeouts = this._originalTimeouts.slice(0);\n}\n\nRetryOperation.prototype.stop = function() {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n if (this._timer) {\n clearTimeout(this._timer);\n }\n\n this._timeouts = [];\n this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n if (!err) {\n return false;\n }\n var currentTime = new Date().getTime();\n if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n this._errors.push(err);\n this._errors.unshift(new Error('RetryOperation timeout occurred'));\n return false;\n }\n\n this._errors.push(err);\n\n var timeout = this._timeouts.shift();\n if (timeout === undefined) {\n if (this._cachedTimeouts) {\n // retry forever, only keep last error\n this._errors.splice(0, this._errors.length - 1);\n timeout = this._cachedTimeouts.slice(-1);\n } else {\n return false;\n }\n }\n\n var self = this;\n this._timer = setTimeout(function() {\n self._attempts++;\n\n if (self._operationTimeoutCb) {\n self._timeout = setTimeout(function() {\n self._operationTimeoutCb(self._attempts);\n }, self._operationTimeout);\n\n if (self._options.unref) {\n self._timeout.unref();\n }\n }\n\n self._fn(self._attempts);\n }, timeout);\n\n if (this._options.unref) {\n this._timer.unref();\n }\n\n return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n this._fn = fn;\n\n if (timeoutOps) {\n if (timeoutOps.timeout) {\n this._operationTimeout = timeoutOps.timeout;\n }\n if (timeoutOps.cb) {\n this._operationTimeoutCb = timeoutOps.cb;\n }\n }\n\n var self = this;\n if (this._operationTimeoutCb) {\n this._timeout = setTimeout(function() {\n self._operationTimeoutCb();\n }, self._operationTimeout);\n }\n\n this._operationStart = new Date().getTime();\n\n this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n console.log('Using RetryOperation.try() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n console.log('Using RetryOperation.start() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n if (this._errors.length === 0) {\n return null;\n }\n\n var counts = {};\n var mainError = null;\n var mainErrorCount = 0;\n\n for (var i = 0; i < this._errors.length; i++) {\n var error = this._errors[i];\n var message = error.message;\n var count = (counts[message] || 0) + 1;\n\n counts[message] = count;\n\n if (count >= mainErrorCount) {\n mainError = error;\n mainErrorCount = count;\n }\n }\n\n return mainError;\n};\n", "var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n var timeouts = exports.timeouts(options);\n return new RetryOperation(timeouts, {\n forever: options && (options.forever || options.retries === Infinity),\n unref: options && options.unref,\n maxRetryTime: options && options.maxRetryTime\n });\n};\n\nexports.timeouts = function(options) {\n if (options instanceof Array) {\n return [].concat(options);\n }\n\n var opts = {\n retries: 10,\n factor: 2,\n minTimeout: 1 * 1000,\n maxTimeout: Infinity,\n randomize: false\n };\n for (var key in options) {\n opts[key] = options[key];\n }\n\n if (opts.minTimeout > opts.maxTimeout) {\n throw new Error('minTimeout is greater than maxTimeout');\n }\n\n var timeouts = [];\n for (var i = 0; i < opts.retries; i++) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n if (options && options.forever && !timeouts.length) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n // sort the array numerically ascending\n timeouts.sort(function(a,b) {\n return a - b;\n });\n\n return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n var random = (opts.randomize)\n ? (Math.random() + 1)\n : 1;\n\n var timeout = Math.round(random * Math.max(opts.minTimeout, 1) * Math.pow(opts.factor, attempt));\n timeout = Math.min(timeout, opts.maxTimeout);\n\n return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n if (options instanceof Array) {\n methods = options;\n options = null;\n }\n\n if (!methods) {\n methods = [];\n for (var key in obj) {\n if (typeof obj[key] === 'function') {\n methods.push(key);\n }\n }\n }\n\n for (var i = 0; i < methods.length; i++) {\n var method = methods[i];\n var original = obj[method];\n\n obj[method] = function retryWrapper(original) {\n var op = exports.operation(options);\n var args = Array.prototype.slice.call(arguments, 1);\n var callback = args.pop();\n\n args.push(function(err) {\n if (op.retry(err)) {\n return;\n }\n if (err) {\n arguments[0] = op.mainError();\n }\n callback.apply(this, arguments);\n });\n\n op.attempt(function() {\n original.apply(obj, args);\n });\n }.bind(obj, original);\n obj[method].options = options;\n }\n};\n", "module.exports = require('./lib/retry');", "// Packages\nvar retrier = require('retry');\n\nfunction retry(fn, opts) {\n function run(resolve, reject) {\n var options = opts || {};\n var op;\n\n // Default `randomize` to true\n if (!('randomize' in options)) {\n options.randomize = true;\n }\n\n op = retrier.operation(options);\n\n // We allow the user to abort retrying\n // this makes sense in the cases where\n // knowledge is obtained that retrying\n // would be futile (e.g.: auth errors)\n\n function bail(err) {\n reject(err || new Error('Aborted'));\n }\n\n function onError(err, num) {\n if (err.bail) {\n bail(err);\n return;\n }\n\n if (!op.retry(err)) {\n reject(op.mainError());\n } else if (options.onRetry) {\n options.onRetry(err, num);\n }\n }\n\n function runAttempt(num) {\n var val;\n\n try {\n val = fn(bail, num);\n } catch (err) {\n onError(err, num);\n return;\n }\n\n Promise.resolve(val)\n .then(resolve)\n .catch(function catchIt(err) {\n onError(err, num);\n });\n }\n\n op.attempt(runAttempt);\n }\n\n return new Promise(run);\n}\n\nmodule.exports = retry;\n", "import { Filesystem, FilesystemActions, FilesystemEvents } from './filesystem.js';\nimport Terminal, { TerminalEvents, TerminalActions } from './terminal.js';\nimport Container, { ContainerActions, ContainerEvents, PortInfo, TelemetryFeature } from './container.js';\nimport Auth, { AuthActions } from './auth.js';\nimport Lsp, { LspActions, LspEvents } from './lsp.js';\nimport Composer, { ComposerActions, ComposerEvents } from './composer.js';\nimport Log, { LogActions, LogEvents } from './log.js';\nimport Laravel, { LaravelActions, LaravelEvents } from './laravel.js';\nimport Repl, { ReplActions, ReplEvents } from './repl.js';\nimport Shell, { ShellEvents, ShellActions } from './shell.js';\nimport { Transport } from './socket/index.js';\nimport EventManager, { EventDispatcher } from './events/index.js';\nimport Git, { GitActions, GitEvents } from './git.js';\nimport { Disposable } from './types.js';\nimport { Beacon, BeaconOptions, createBeacon } from './beacon/index.js';\n\nexport * from './types.js';\nexport { Transport } from './socket/index.js';\nexport * from './lsp.js';\nexport * from './filesystem.js';\nexport * from './container.js';\nexport * from './shell.js';\nexport * from './terminal.js';\nexport * from './git.js';\nexport * from './utils/promise.js';\nexport * from './beacon/index.js';\nexport * from './errors/index.js';\n\ninterface Result<TType extends 'success' | 'error' | 'running', TData extends object> {\n type: TType;\n message: string;\n data: TData;\n}\n\nexport type NotebookInitResponse = { env: { name: string; value: string }[]; previewUrl: string; ports: PortInfo[] };\nexport type NotebookInitProgressKind = 'phase' | 'log' | 'heartbeat';\n\nexport interface NotebookInitProgress {\n message: string;\n details?: string;\n kind?: NotebookInitProgressKind;\n step?: string;\n line?: string;\n chunk?: string;\n command?: string;\n}\n\nexport type NotebookInitErrorCode = 'github_import_credential_missing';\n\nexport interface NotebookInitErrorData {\n errorCode?: NotebookInitErrorCode;\n details?: string;\n retryable?: boolean;\n suggestedAction?: string;\n provider?: string;\n repository?: string;\n branch?: string | null;\n}\n\nexport type NotebookInitSuccessResult = Result<'success', NotebookInitResponse>;\nexport type NotebookInitFailureResult = Result<'error', NotebookInitErrorData>;\nexport type NotebookInitResult = NotebookInitSuccessResult | NotebookInitFailureResult;\nexport interface NotebookActions {\n 'notebook.init': Action<{ force?: boolean; files: { [path: string]: string } }, NotebookInitResult>;\n 'notebook.update': Action<null>;\n}\n\nexport interface NotebookEvents {\n 'lsp.response': object;\n 'lsp.close': { code: number; reason: string };\n 'init.event': NotebookInitProgress;\n 'notebook.initialized': NotebookInitResult;\n}\n\nexport interface CallOption {\n responseEvent?: string;\n timeout?: number;\n abortSignal?: AbortSignal;\n}\n\nexport interface OkraError {\n code: number;\n message: string;\n}\n\nexport interface Action<Args = object, Response = void> {\n args: Args;\n response: Response;\n}\n\nexport type Events = TerminalEvents &\n ContainerEvents &\n LspEvents &\n ComposerEvents &\n LogEvents &\n LaravelEvents &\n NotebookEvents &\n ReplEvents &\n ShellEvents &\n FilesystemEvents &\n GitEvents;\n\ninterface SystemActions {\n ping: Action<object, 'pong'>;\n}\n\nexport type Invokable = SystemActions &\n TerminalActions &\n ContainerActions &\n FilesystemActions &\n AuthActions &\n LspActions &\n LaravelActions &\n ComposerActions &\n LogActions &\n NotebookActions &\n ReplActions &\n ShellActions &\n GitActions;\n\nexport interface CreateNotebookImportAuthInput {\n access_token: string;\n}\n\nexport interface CreateNotebookImportInput {\n provider: 'github';\n repo: string;\n branch?: string;\n auth: CreateNotebookImportAuthInput;\n}\n\nexport interface CreateNotebookInput {\n title: string;\n visibility: 'public' | 'private' | 'unlisted';\n import?: CreateNotebookImportInput;\n}\n\nexport interface NotebookSecretData {\n uuid: string;\n name: string;\n type: 'environment_variable';\n createdAt: string | null;\n updatedAt: string | null;\n}\n\nexport interface UpsertNotebookSecretInput {\n value: string;\n type?: 'environment_variable';\n}\n\nexport class NotebookInitError extends Error {\n constructor(\n public readonly message: string,\n public readonly data: NotebookInitErrorData = {}\n ) {\n super(message);\n this.name = 'NotebookInitError';\n }\n}\n\nexport class ApiError extends Error {\n public readonly status: number;\n\n constructor(\n public readonly response: Response,\n public readonly body: string\n ) {\n super(`PHPSandbox API Error: ${response.status} ${response.statusText} - ${body}`);\n this.status = response.status;\n }\n}\n\nexport class NotebookApi {\n public readonly secrets: NotebookSecretApi;\n\n public constructor(private readonly client: Client) {\n this.secrets = new NotebookSecretApi(client);\n }\n\n public async create(template: string, input: Partial<CreateNotebookInput> = {}, init = true): Promise<NotebookInstance> {\n const response = await this.client.post<NotebookData>('/notebook', { template, ...input });\n const instance = new NotebookInstance(response.data, this.client);\n\n if (!init) {\n return instance;\n }\n\n return this.init(instance);\n }\n\n public async get(id: string): Promise<NotebookInstance> {\n const response = await this.client.get<NotebookData>(`/notebook/${id}`);\n\n return new NotebookInstance(response.data, this.client);\n }\n\n public async update(id: string, input: Partial<CreateNotebookInput> = {}): Promise<NotebookInstance> {\n const response = await this.client.put<NotebookData>(`/notebook/${id}`, input);\n\n return new NotebookInstance(response.data, this.client);\n }\n\n public async delete(id: string): Promise<void> {\n await this.client.delete<void>(`/notebook/${id}`);\n }\n\n public async fork(id: string): Promise<NotebookInstance> {\n const response = await this.client.post<NotebookData>(`/notebook/${id}/fork`);\n\n return this.init(new NotebookInstance(response.data, this.client));\n }\n\n public async open(id: string): Promise<NotebookInstance> {\n const response = await this.client.get<NotebookData>(`/notebook/${id}`);\n\n return new NotebookInstance(response.data, this.client);\n }\n\n public openFromData(data: NotebookData): Promise<NotebookInstance> {\n return this.init(new NotebookInstance(data, this.client));\n }\n\n private async init(instance: NotebookInstance): Promise<NotebookInstance> {\n await instance.ready();\n\n return instance;\n }\n}\n\nexport interface PHPSandboxClientOptions {\n debug?: boolean;\n startClosed?: boolean;\n telemetry?: Set<TelemetryFeature>;\n fetch?: typeof globalThis.fetch;\n}\n\nexport class Client {\n public readonly notebook: NotebookApi;\n public readonly options: PHPSandboxClientOptions;\n\n private readonly fetch: typeof globalThis.fetch = globalThis.fetch;\n\n private readonly baseUrl: string;\n\n private readonly headers: Record<string, string>;\n\n public constructor(token: string, url: string = 'https://api.phpsandbox.io/v1', options: PHPSandboxClientOptions = {}) {\n this.notebook = new NotebookApi(this);\n this.options = Object.assign({ startClosed: true }, options);\n this.baseUrl = url;\n\n if (options.fetch) {\n this.fetch = options.fetch;\n }\n\n this.headers = {\n 'Accept': 'application/json',\n 'Authorization': `Bearer ${token}`,\n 'Content-Type': 'application/json',\n };\n }\n\n public get<T extends unknown>(path: string): Promise<{ data: T }> {\n return this.makeRequest('GET', path);\n }\n\n public post<T extends unknown>(path: string, body?: unknown): Promise<{ data: T }> {\n return this.makeRequest('POST', path, { body: body ? JSON.stringify(body) : undefined });\n }\n\n public delete<T extends unknown>(path: string): Promise<{ data: T }> {\n return this.makeRequest('DELETE', path);\n }\n\n public put<T extends unknown>(path: string, body?: unknown): Promise<{ data: T }> {\n return this.makeRequest('PUT', path, { body: body ? JSON.stringify(body) : undefined });\n }\n\n private async makeRequest(method: string, path: string, init?: RequestInit) {\n const response = await this.fetch(\n new Request(new URL(`v1/${path.replace(/^\\//, '')}`, this.baseUrl), {\n method,\n ...init,\n headers: this.headers,\n })\n );\n\n if (!response.ok) {\n throw new ApiError(response, await response.text());\n }\n\n if (response.status === 204) {\n return { data: undefined };\n }\n\n const body = await response.text();\n\n return { data: body === '' ? undefined : JSON.parse(body) };\n }\n}\n\nexport class PHPSandbox extends Client {}\n\nexport class NotebookSecretApi {\n public constructor(private readonly client: Client) {}\n\n public async list(id: string): Promise<NotebookSecretData[]> {\n const response = await this.client.get<NotebookSecretData[]>(`/notebook/${id}/secrets`);\n\n return response.data;\n }\n\n public async set(id: string, name: string, input: string | UpsertNotebookSecretInput): Promise<NotebookSecretData> {\n const payload = typeof input === 'string' ? { value: input } : input;\n const response = await this.client.put<NotebookSecretData>(`/notebook/${id}/secrets/${encodeURIComponent(name)}`, payload);\n\n return response.data;\n }\n\n public async delete(id: string, name: string): Promise<void> {\n await this.client.delete<void>(`/notebook/${id}/secrets/${encodeURIComponent(name)}`);\n }\n}\n\nexport interface NotebookData {\n id: string;\n okraUrl: string;\n type: string;\n}\n\nexport class NotebookInstance {\n public readonly file: Filesystem;\n public readonly terminal: Terminal;\n public readonly auth: Auth;\n public readonly lsp: Lsp;\n public readonly composer: Composer;\n public readonly log: Log;\n public readonly repl: Repl;\n public readonly container: Container;\n public readonly laravel: Laravel;\n public readonly shell: Shell;\n public readonly git: Git;\n public readonly secrets: NotebookSecrets;\n private readonly socket: Transport;\n public readonly emitter: EventDispatcher;\n\n public initialized: NotebookInitResult | false = false;\n\n #initPromise: Promise<NotebookInitSuccessResult>;\n\n private readonly disposables: Disposable[] = [];\n\n public constructor(\n public readonly data: NotebookData,\n protected client: Client\n ) {\n this.emitter = EventManager.createInstance();\n this.socket = new Transport(data.okraUrl, this.emitter, {\n debug: client.options.debug,\n startClosed: client.options.startClosed,\n });\n this.watchConnection();\n\n this.#initPromise = this.#init();\n\n this.file = new Filesystem(this);\n this.terminal = new Terminal(this);\n this.auth = new Auth(this);\n this.lsp = new Lsp(this);\n this.composer = new Composer(this);\n this.log = new Log(this);\n this.repl = new Repl(this);\n this.container = new Container(this);\n this.laravel = new Laravel(this);\n this.shell = new Shell(this);\n this.git = new Git(this);\n this.secrets = new NotebookSecrets(client, this.data.id);\n }\n\n public async ready(): Promise<NotebookInitSuccessResult> {\n const ready = async () => {\n /**\n * If ready is called, ensure the websocket is open so server-driven\n * initialization can begin, but do not block on an extra ping roundtrip.\n */\n if (this.client.options.startClosed && !this.socket.isConnected) {\n await this.socket.connect();\n }\n\n return this.#initPromise;\n };\n\n // Let the underlying ReconnectingWebSocket handle connection retries\n // Just apply a reasonable timeout for the entire initialization process\n return ready();\n }\n\n public fork(): Promise<NotebookInstance> {\n return this.client.notebook.fork(this.data.id);\n }\n\n public delete(): Promise<void> {\n return this.client.notebook.delete(this.data.id);\n }\n\n public stop(): Promise<void> {\n return this.container.stop();\n }\n\n public restart(): Promise<void> {\n return this.container.start();\n }\n\n public invoke<T extends keyof Invokable>(\n action: T,\n data: Invokable[T]['args'] = {},\n options: CallOption = {}\n ): Promise<Invokable[T]['response']> {\n return this.socket.invoke(action, data || {}, options);\n }\n\n public ping() {\n return this.invoke('ping');\n }\n\n public listen<T extends keyof Events>(event: T, handler: (data: Events[T]) => void) {\n const disposable = this.emitter.listen(event as string, handler);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n public dispose(): void {\n this.disposables.forEach((d) => d.dispose());\n !this.socket.isClosed && this.socket.disconnect();\n }\n\n public connected(): Promise<NotebookInstance> {\n if (this.socket.isConnected) {\n return Promise.resolve(this);\n }\n\n return new Promise((resolve, reject) => {\n try {\n this.socket.onDidConnect(() => resolve(this));\n this.socket.onDidClose(() => reject(new Error('Connection closed')));\n } catch (e) {\n reject(e);\n }\n });\n }\n\n public whenConnected(): Promise<NotebookInstance> {\n if (this.socket.isConnected) {\n return Promise.resolve(this);\n }\n\n return new Promise((resolve, reject) => {\n try {\n this.socket.onDidConnect(() => resolve(this));\n } catch (e) {\n reject(e);\n }\n });\n }\n\n private watchConnection(): void {\n this.socket.onDidConnect(() => {\n this.socket.emit('okra.connected');\n if (this.client.options.telemetry) {\n this.container.enableTelemetry(this.client.options.telemetry);\n }\n });\n\n this.socket.onDidClose(() => {\n this.socket.emit('okra.disconnected');\n this.initialized = false;\n });\n }\n\n public onDidConnect(handler: () => void): Disposable {\n this.socket.removeListener('okra.connected', handler);\n\n const disposable = this.socket.listen('okra.connected', handler);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n public onDidDisconnect(handler: () => void): Disposable {\n const disposable = this.socket.listen('okra.disconnected', handler);\n this.disposables.push(disposable);\n\n return disposable;\n }\n\n #init(): Promise<NotebookInitSuccessResult> {\n this.#initPromise = new Promise<NotebookInitSuccessResult>((resolve, reject) => {\n const initializationListener = this.onDidInitialize((result: NotebookInitResult) => {\n initializationListener.dispose();\n this.initialized = result;\n if (result.type === 'error') {\n reject(new NotebookInitError(result.message, result.data as NotebookInitErrorData));\n return;\n }\n\n resolve(result);\n });\n });\n\n return this.#initPromise;\n }\n\n public update() {\n return this.invoke('notebook.update');\n }\n\n public onDidInitialize(handler: (result: NotebookInitResult) => void) {\n return this.listen('notebook.initialized', handler);\n }\n\n public async reconnect(): Promise<NotebookInstance> {\n const whenConnected = this.whenConnected();\n // Use the socket's reconnect method which preserves listeners\n // and uses the underlying ReconnectingWebSocket mechanism\n this.socket.reconnect();\n\n // Reset initialization state\n this.initialized = false;\n\n // Wait for the socket to reconnect\n await whenConnected;\n\n // Re-initialize the notebook\n this.#init();\n \n // Wait for initialization to complete\n return this.ready().then(() => this);\n }\n\n public async beacon(iframe: HTMLIFrameElement, options?: BeaconOptions): Promise<Beacon> {\n const result = await this.ready();\n iframe.src = result.data.previewUrl;\n return createBeacon(iframe, options);\n }\n}\n\nexport class NotebookSecrets {\n public constructor(\n private readonly client: Client,\n private readonly notebookId: string\n ) {}\n\n public list(): Promise<NotebookSecretData[]> {\n return this.client.notebook.secrets.list(this.notebookId);\n }\n\n public set(name: string, input: string | UpsertNotebookSecretInput): Promise<NotebookSecretData> {\n return this.client.notebook.secrets.set(this.notebookId, name, input);\n }\n\n public delete(name: string): Promise<void> {\n return this.client.notebook.secrets.delete(this.notebookId, name);\n }\n}\n", "export type ErrorCode = 500 | 400 | 401 | 403 | 404 | 409 | 422 | 429 | 5000;\n\nexport class ErrorEvent extends Error {\n public constructor(\n public readonly code: ErrorCode,\n public readonly message: string,\n public readonly raw: object = {}\n ) {\n super(message);\n }\n}\n\nexport class RateLimitError extends ErrorEvent {\n public constructor(message: string, raw: object = {}) {\n super(429, message, raw);\n }\n}\n\nexport class PHPSandboxError extends ErrorEvent {}\n\nexport interface Disposable {\n dispose: () => void;\n}\n", "export const urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n", "/* @ts-self-types=\"./index.d.ts\" */\nimport { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nexport let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nexport let customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << Math.log2(alphabet.length - 1)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step | 0\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length >= size) return id\n }\n }\n }\n}\nexport let customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size | 0, random)\nexport let nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array((size |= 0)))\n while (size--) {\n id += scopedUrlAlphabet[bytes[size] & 63]\n }\n return id\n}\n", "import type { Action, Disposable, NotebookInstance } from './index.js';\nimport { ErrorEvent } from './types.js';\nimport { nanoid } from 'nanoid';\n\nexport interface FileInfo {\n binary: boolean;\n contents: string | null;\n language: string;\n}\n\nexport interface FileResult {\n name: string;\n directory: string;\n relativePath: string;\n /**\n * Same value as `relativePath`.\n */\n path: string;\n}\n\nexport enum FileType {\n /**\n * File is unknown (neither file, directory nor symbolic link).\n */\n Unknown = 0,\n /**\n * File is a normal file.\n */\n File = 1,\n /**\n * File is a directory.\n */\n Directory = 2,\n /**\n * File is a symbolic link.\n *\n * Note: even when the file is a symbolic link, you can test for\n * `FileType.File` and `FileType.Directory` to know the type of\n * the target the link points to.\n */\n SymbolicLink = 64,\n}\n\nexport interface Stats {\n mtime: number;\n size: number;\n ctime: number;\n type: FileType;\n permissions?: number;\n}\n\nexport interface FileOverwriteOptions {\n overwrite: boolean;\n}\n\nexport interface FileWriteOptions extends FileOverwriteOptions {\n create: boolean;\n unlock: boolean;\n atomic: false | { postfix: string };\n}\n\nexport interface FileDeleteOptions {\n recursive: boolean;\n useTrash: boolean;\n atomic: false | { postfix: string };\n}\n\nexport interface SearchOptions {\n /**\n * The maximum number of results to be returned.\n */\n maxResults?: number;\n\n /**\n * Files that match an `includes` glob pattern should be included in the search.\n */\n includes: string[];\n\n /**\n * Files that match an `excludes` glob pattern should be excluded from the search.\n */\n excludes: string[];\n\n /**\n * Whether external files that exclude files, like .gitignore, should be respected.\n * See the vscode setting `\"search.useIgnoreFiles\"`.\n */\n useIgnoreFiles: boolean;\n\n /**\n * Whether symlinks should be followed while searching.\n * See the vscode setting `\"search.followSymlinks\"`.\n */\n followSymlinks: boolean;\n\n /**\n * Whether global files that exclude files, like .gitignore, should be respected.\n * See the vscode setting `\"search.useGlobalIgnoreFiles\"`.\n */\n useGlobalIgnoreFiles: boolean;\n\n /**\n * Whether files in parent directories that exclude files, like .gitignore, should be respected.\n * See the vscode setting `\"search.useParentIgnoreFiles\"`.\n */\n useParentIgnoreFiles: boolean;\n}\n\nexport interface FileSearchOptions extends SearchOptions {\n /**\n * The maximum number of results to be returned.\n */\n maxResults?: number;\n}\n\nexport interface TextSearchPreviewOptions {\n /**\n * The maximum number of lines in the preview.\n * Only search providers that support multiline search will ever return more than one line in the match.\n */\n matchLines: number;\n\n /**\n * The maximum number of characters included per line.\n */\n charsPerLine: number;\n}\n\nexport interface TextSearchQuery {\n id?: string;\n /**\n * The text pattern to search for.\n */\n pattern: string;\n\n /**\n * Whether or not `pattern` should match multiple lines of text.\n */\n isMultiline?: boolean;\n\n /**\n * Whether or not `pattern` should be interpreted as a regular expression.\n */\n isRegExp?: boolean;\n\n /**\n * Whether or not the search should be case-sensitive.\n */\n isCaseSensitive?: boolean;\n\n /**\n * Whether or not to search for whole word matches only.\n */\n isWordMatch?: boolean;\n}\n\nexport interface TextSearchOptions extends SearchOptions {\n /**\n * The maximum number of results to be returned.\n */\n maxResults: number;\n\n /**\n * Options to specify the size of the result text preview.\n */\n previewOptions?: TextSearchPreviewOptions;\n\n /**\n * Exclude files larger than `maxFileSize` in bytes.\n */\n maxFileSize?: number;\n\n /**\n * Interpret files using this encoding.\n * See the vscode setting `\"files.encoding\"`\n */\n encoding?: string;\n\n /**\n * Number of lines of context to include before each match.\n */\n beforeContext?: number;\n\n /**\n * Number of lines of context to include after each match.\n */\n afterContext?: number;\n}\n\n/**\n * A line of context surrounding a TextSearchMatch.\n */\nexport interface TextSearchContext {\n /**\n * The uri for the matching document.\n */\n path: string;\n\n /**\n * One line of text.\n * previewOptions.charsPerLine applies to this\n */\n text: string;\n\n /**\n * The line number of this line of context.\n */\n lineNumber: number;\n}\n\n/**\n * A preview of the text result.\n */\nexport interface TextSearchMatchPreview {\n /**\n * The matching lines of text, or a portion of the matching line that contains the match.\n */\n text: string;\n\n /**\n * The Range within `text` corresponding to the text of the match.\n * The number of matches must match the TextSearchMatch's range property.\n */\n matches: SearchRange[];\n}\n\nexport interface SearchRange {\n startLine: number;\n startColumn: number;\n endLine: number;\n endColumn: number;\n}\n\n/**\n * A match from a text search\n */\nexport interface TextSearchMatch {\n lineNumber: number;\n\n /**\n * The uri for the matching document.\n */\n path: string;\n\n /**\n * The range of the match within the document, or multiple ranges for multiple matches.\n */\n ranges: SearchRange[];\n\n /**\n * A preview of the text match.\n */\n preview: TextSearchMatchPreview;\n}\n\n/**\n * A line of context surrounding a TextSearchMatch.\n */\nexport interface TextSearchContext {\n /**\n * The uri for the matching document.\n */\n path: string;\n\n /**\n * One line of text.\n * previewOptions.charsPerLine applies to this\n */\n text: string;\n\n /**\n * The line number of this line of context.\n */\n lineNumber: number;\n}\n\nexport type TextSearchResult = TextSearchMatch | TextSearchContext;\n\ninterface RelativePattern {\n /**\n * A base file path to which this pattern will be matched against relatively.\n */\n readonly base: string;\n /**\n * A file glob pattern like `*.{ts,js}` that will be matched on file paths\n * relative to the base path.\n *\n * Example: Given a base of `/home/work/folder` and a file path of `/home/work/folder/index.js`,\n * the file glob pattern will match on `index.js`.\n */\n readonly pattern: string;\n}\n\ninterface WatchOptionsWithoutCorrelation {\n /**\n * Set to `true` to watch for changes recursively in a folder\n * and all of its children.\n */\n recursive: boolean;\n /**\n * A set of glob patterns or paths to exclude from watching.\n * Paths can be relative or absolute and when relative are\n * resolved against the watched folder. Glob patterns are\n * always matched relative to the watched folder.\n */\n excludes: string[];\n /**\n * An optional set of glob patterns or paths to include for\n * watching. If not provided, all paths are considered for\n * events.\n * Paths can be relative or absolute and when relative are\n * resolved against the watched folder. Glob patterns are\n * always matched relative to the watched folder.\n */\n includes?: Array<string | RelativePattern>;\n /**\n * If provided, allows to filter the events that the watcher should consider\n * for emitting. If not provided, all events are emitted.\n *\n * For example, to emit added and updated events, set to:\n * `FileChangeFilter.ADDED | FileChangeFilter.UPDATED`.\n */\n filter?: FileChangeFilter;\n}\ninterface WatchOptions extends WatchOptionsWithoutCorrelation {\n /**\n * If provided, file change events from the watcher that\n * are a result of this watch request will carry the same\n * id.\n */\n readonly correlationId?: number;\n}\n\ndeclare const enum FileChangeFilter {\n UPDATED = 2,\n ADDED = 4,\n DELETED = 8,\n}\n\n/**\n * Possible changes that can occur to a file.\n */\nexport enum FileChangeType {\n UPDATED = 1,\n ADDED = 2,\n DELETED = 3,\n}\n\n/**\n * Identifies a single change in a file.\n */\nexport interface FileChange {\n /**\n * The type of change that occurred to the file.\n */\n type: FileChangeType;\n /**\n * Whether the change is a file or a directory.\n */\n isFile: boolean;\n\n /**\n * Whether the file exists.\n */\n exists: boolean;\n\n /**\n * The unified resource identifier of the file that changed.\n */\n readonly path: string;\n /**\n * If provided when starting the file watcher, the correlation\n * identifier will match the original file watching request as\n * a way to identify the original component that is interested\n * in the change.\n */\n readonly cId?: number;\n}\n\nexport interface ReadFileRangeResult {\n lineStart: number;\n lineEnd: number;\n content: string;\n error: string | null;\n}\n\nexport interface FilesystemActions {\n 'fs.info': Action<{ path: string }, FileInfo>;\n 'fs.write': Action<{ path: string; contents: string }, boolean>;\n 'fs.mkdir': Action<{ path: string }, boolean>;\n 'fs.remove': Action<{ path: string; type: 'file' | 'directory' }, boolean>;\n 'fs.move': Action<{ from: string; to: string }, boolean>;\n 'fs.find': Action<{ query: string; options: FileSearchOptions }, FileResult[]>;\n 'fs.textSearch': Action<{ query: TextSearchQuery; options: TextSearchOptions }, [boolean, TextSearchMatch[]]>;\n 'fs.readFile': Action<\n { path: string; lineRange?: { lineStart: number; lineEnd: number } },\n string | Uint8Array | ReadFileRangeResult\n >;\n 'fs.writeFile': Action<{ path: string; contents: Uint8Array; options: FileWriteOptions }, void>;\n 'fs.stat': Action<{ path: string }, Stats>;\n 'fs.rename': Action<{ from: string; to: string; options: FileOverwriteOptions }, void>;\n 'fs.delete': Action<{ path: string; options: FileDeleteOptions }, void>;\n 'fs.copy': Action<{ source: string; destination: string; options: FileOverwriteOptions }, void>;\n 'fs.readDirectory': Action<{ path: string; include: string[]; exclude: string[] }, [string, FileType, number | null][]>;\n 'fs.createDirectory': Action<{ path: string }, void>;\n 'fs.watch': Action<{ path: string; options: WatchOptions }, void>;\n 'fs.download': Action<{ id: string; exclude?: string[]; include?: string[] }, void>;\n 'fs.unwatch': Action<{ path: string }, void>;\n 'fs.tree': Action<{ path: string }, string>;\n 'fs.tail': Action<{ path: string; lines: number }, string>;\n}\n\ninterface FilesystemEventData {\n 'fs.watch': FileChange;\n 'fs.download': Uint8Array;\n 'fs.text.search': TextSearchResult | false;\n}\n\ntype PrefixKey<K extends keyof FilesystemEventData> = `${K}.${string}`;\n\nexport type FilesystemEvents = FilesystemEventData & {\n [K in keyof FilesystemEventData as PrefixKey<K>]: FilesystemEventData[K];\n};\n\nexport enum FilesystemErrorType {\n Unavailable = 'Unavailable',\n NoPermissions = 'NoPermissions',\n FileExists = 'FileExists',\n FileNotFound = 'FileNotFound',\n FileIsADirectory = 'FileIsADirectory',\n FileNotADirectory = 'FileNotADirectory',\n}\n\nexport class FilesystemError extends ErrorEvent {\n public constructor(\n inner: ErrorEvent,\n public readonly name: FilesystemErrorType\n ) {\n super(inner.code, inner.message);\n }\n}\n\nclass FilesystemSubscription {\n public constructor(\n private path: string,\n private okra: NotebookInstance,\n private disposable: Disposable\n ) {}\n\n public dispose(): void {\n this.okra.invoke('fs.unwatch', { path: this.path });\n this.disposable.dispose();\n }\n}\n\nexport class Filesystem {\n private watches: Map<string, { options: WatchOptions; path: string; onDidChange: (e: FileChange) => void }> = new Map();\n\n public constructor(protected okra: NotebookInstance) {\n this.watchOkraConnection();\n }\n\n private watchOkraConnection(): void {\n this.okra.onDidConnect(() => {\n for (const { path, options, onDidChange } of this.watches.values()) {\n this.watch(path, options, onDidChange);\n }\n });\n }\n\n public info(path: string): Promise<FileInfo> {\n return this.okra.invoke('fs.info', { path });\n }\n\n public write(path: string, contents: string): Promise<boolean> {\n return this.okra.invoke('fs.write', { path, contents: contents });\n }\n\n public find(\n query: string,\n options: Partial<FileSearchOptions> = {\n useIgnoreFiles: false,\n followSymlinks: false,\n useGlobalIgnoreFiles: false,\n useParentIgnoreFiles: false,\n }\n ): Promise<FileResult[]> {\n return this.okra.invoke('fs.find', {\n query,\n options: Object.assign(options, {\n includes: [],\n excludes: [\n '**/storage',\n '**/vendor',\n '**/node_modules',\n '**/.git',\n '**/.svn',\n '**/.hg',\n '**/CVS',\n '**/.DS_Store',\n '**/Thumbs.db',\n '**/*.crswap',\n ],\n useIgnoreFiles: false,\n followSymlinks: false,\n useGlobalIgnoreFiles: false,\n useParentIgnoreFiles: false,\n }),\n });\n }\n\n public search(\n query: TextSearchQuery,\n options?: Partial<TextSearchOptions>,\n onMatch?: (result: TextSearchResult | false) => boolean | Promise<boolean> | void | Promise<void>\n ): Promise<[boolean, TextSearchMatch[]]> {\n if (!query.id) {\n query.id = nanoid();\n }\n\n const defaultOptions: TextSearchOptions = {\n maxResults: 5,\n afterContext: 2,\n beforeContext: 2,\n includes: [],\n excludes: [\n '**/.git',\n '**/.svn',\n '**/.hg',\n '**/CVS',\n '**/.DS_Store',\n '**/Thumbs.db',\n '**/*.crswap',\n '**/node_modules',\n '**/vendor',\n '**/bower_components',\n '**/*.code-search',\n ],\n useIgnoreFiles: true,\n followSymlinks: true,\n useGlobalIgnoreFiles: true,\n useParentIgnoreFiles: true,\n encoding: 'utf-8',\n previewOptions: {\n matchLines: 5,\n charsPerLine: 1000,\n },\n };\n\n const sid = query.id;\n const localOnMatch = async (result: TextSearchResult | false) => {\n if (result === false) {\n disposable.dispose();\n }\n\n if (onMatch) {\n const ret = await Promise.resolve(onMatch(result));\n if (ret === false) {\n disposable.dispose();\n }\n }\n };\n\n const disposable = this.okra.listen(`fs.text.search.${sid}`, localOnMatch);\n\n return this.okra\n .invoke('fs.textSearch', { query, options: { ...defaultOptions, ...options } })\n .finally(() => disposable.dispose());\n }\n\n public mkdir(path: string): Promise<boolean> {\n return this.okra.invoke('fs.mkdir', { path });\n }\n\n public move(from: string, to: string): Promise<boolean> {\n return this.okra.invoke('fs.move', { from, to });\n }\n\n public remove(path: string, type: 'file' | 'directory'): Promise<boolean> {\n return this.okra.invoke('fs.remove', { path, type });\n }\n\n public readFile(path: string): Promise<Uint8Array>;\n public readFile(path: string, lineRange: { lineStart: number; lineEnd: number }): Promise<ReadFileRangeResult>;\n public async readFile(\n path: string,\n lineRange?: { lineStart: number; lineEnd: number }\n ): Promise<Uint8Array | ReadFileRangeResult> {\n try {\n const content = await this.okra.invoke('fs.readFile', { path, lineRange });\n if (content instanceof Uint8Array) {\n return content;\n }\n\n if (typeof content === 'string') {\n return new TextEncoder().encode(content);\n }\n\n return content;\n } catch (e) {\n this.handleError(e);\n }\n }\n\n public tail(path: string, lines: number = 10): Promise<string> {\n return this.okra.invoke('fs.tail', { path, lines }).catch((e) => this.handleError(e));\n }\n\n public writeFile(path: string, contents: Uint8Array, options: FileWriteOptions): Promise<void> {\n return this.okra\n .invoke('fs.writeFile', {\n path,\n contents,\n options,\n })\n .catch((e) => this.handleError(e));\n }\n\n public stat(path: string): Promise<Stats> {\n return this.okra.invoke('fs.stat', { path }).catch((e) => this.handleError(e));\n }\n\n public rename(from: string, to: string, options: FileOverwriteOptions): Promise<void> {\n return this.okra.invoke('fs.rename', { from, to, options }).catch((e) => this.handleError(e));\n }\n\n public delete(path: string, options: FileDeleteOptions): Promise<void> {\n return this.okra.invoke('fs.delete', { path, options }).catch((e) => this.handleError(e));\n }\n\n public copy(source: string, destination: string, options: FileOverwriteOptions): Promise<void> {\n return this.okra.invoke('fs.copy', { source, destination, options }).catch((e) => this.handleError(e));\n }\n\n public readDirectory(\n path: string,\n include: string[] = [],\n exclude: string[] = []\n ): Promise<[string, FileType, number | null][]> {\n return this.okra.invoke('fs.readDirectory', { path, include, exclude }).catch((e) => this.handleError(e));\n }\n\n public createDirectory(path: string): Promise<void> {\n return this.okra.invoke('fs.createDirectory', { path }).catch((e) => this.handleError(e));\n }\n\n public watch(path: string, options: WatchOptions, onDidChange: (e: FileChange) => void): FilesystemSubscription {\n const disposable = this.okra.listen(`fs.watch.${path}`, onDidChange);\n const wrappedDisposable = {\n dispose: () => {\n disposable.dispose();\n this.okra.invoke('fs.unwatch', { path });\n },\n };\n const subscription = new FilesystemSubscription(path, this.okra, wrappedDisposable);\n this.watches.set(path, { options, path, onDidChange });\n\n this.okra.invoke('fs.watch', { path, options });\n\n return subscription;\n }\n\n public exists(path: string): Promise<boolean> {\n return this.stat(path)\n .then(() => true)\n .catch(() => false);\n }\n\n public async download(chunk?: (data: Uint8Array) => void, exclude?: string[], include?: string[]): Promise<Blob> {\n const id = nanoid();\n const stream = !!chunk;\n const chunks: Uint8Array[] = [];\n this.okra.listen(\n `fs.download.${id}`,\n stream\n ? chunk\n : (data) => {\n chunks.push(data);\n }\n );\n\n return this.okra\n .invoke('fs.download', { id, exclude, include })\n .then(() => new Blob(chunks as BlobPart[], { type: 'application/octet-stream' }));\n }\n\n public tree(path: string = '/'): Promise<string> {\n return this.okra.invoke('fs.tree', { path });\n }\n\n protected handleError(e: unknown): never {\n if (e instanceof ErrorEvent && 'name' in e.raw) {\n throw new FilesystemError(e, e.raw.name as FilesystemErrorType);\n }\n\n throw e;\n }\n}\n", "export class PromiseTimeoutError extends Error {\n public constructor(\n message: string,\n public time: number\n ) {\n super(message);\n }\n}\n\nexport class SendTimeoutError extends PromiseTimeoutError {\n static fromPromiseTimeoutError(error: PromiseTimeoutError) {\n return new SendTimeoutError(error.message, error.time);\n }\n}\n", "/**\n * @see https://advancedweb.hu/how-to-add-timeout-to-a-promise-in-javascript\n *\n * @param prom\n * @param time\n * @param exception\n */\n\nimport { PromiseTimeoutError } from \"../errors/index.js\";\n\nexport const timeout = <T>(prom: Promise<T>, time: number): Promise<T> => {\n let timer: ReturnType<typeof setTimeout>;\n return Promise.race([\n prom,\n new Promise<never>(\n (_r, rej) => (timer = setTimeout(rej, time, new PromiseTimeoutError('Timeout before promise can resolve', time)))\n ),\n ]).finally(() => clearTimeout(timer));\n};\n\n/**\n * Wraps an async function to ensure it only executes once. \n * Subsequent calls return the memoized promise result.\n * \n * @param fn The async function to execute once\n * @returns A wrapped function that memoizes the first execution\n */\nexport const once = <T>(fn: () => Promise<T>): (() => Promise<T>) => {\n let result: Promise<T> | null = null;\n return () => result || (result = fn());\n};\n", "import { Action, Disposable, NotebookInstance } from './index.js';\nimport { nanoid } from 'nanoid';\nimport { once } from './utils/promise.js';\nexport interface Task {\n id: string;\n command: string | string[];\n kind: string;\n created: boolean;\n}\n\nexport interface TerminalCreateInput {\n id: string;\n kind: string;\n size: [number, number];\n command?: string | string[];\n env?: Record<string, string>;\n cwd?: string;\n}\n\nexport interface TerminalSpawnInput {\n command: string | string[];\n opts: { id: string } & SpawnOptions;\n}\n\nexport interface TerminalEventData {\n 'terminal.output': {\n output: string;\n id: string;\n };\n 'terminal.started': Task;\n 'terminal.stopped': Task & { exitCode: number };\n 'terminal.close': Task & { exitCode: number };\n}\n\ntype PrefixKey<K extends keyof TerminalEventData> = `${K}.${string}`;\ntype TerminalEventPattern = PrefixKey<keyof TerminalEventData>;\nexport type TerminalEvents = TerminalEventData & {\n [K in TerminalEventPattern]: K extends `terminal.output.${string}`\n ? TerminalEventData['terminal.output']\n : Task & { exitCode: number };\n};\n\nexport interface TerminalActions {\n 'terminal.input': Action<{ id: string; input: string }>;\n 'terminal.list': Action<{}, Task[]>;\n 'terminal.start': Action;\n 'terminal.create': Action<TerminalCreateInput, Task>;\n 'terminal.spawn': Action<TerminalSpawnInput, Task>;\n 'terminal.resize': Action<{ id: string; width: number; height: number }, boolean>;\n 'terminal.close': Action<{ id: string }, boolean>;\n}\n\nexport interface SandboxProcess {\n exit: Promise<number>;\n\n input: WritableStream<string>;\n\n output: ReadableStream<string>;\n\n kill(): Promise<boolean>;\n\n resize(dimensions: { cols: number; rows: number }): void;\n}\n\nexport interface SpawnOptions {\n cwd?: string;\n\n env?: Record<string, string | number | boolean>;\n\n output?: boolean;\n\n terminal?: {\n cols: number;\n rows: number;\n };\n\n id?: string;\n osc?: boolean;\n tty?: boolean;\n\n abortSignal?: AbortSignal;\n}\n\nexport default class Terminal {\n constructor(protected okra: NotebookInstance) {}\n\n public list() {\n return this.okra.invoke('terminal.list');\n }\n\n public start() {\n return this.okra.invoke('terminal.start');\n }\n\n public create(input: TerminalCreateInput) {\n return this.okra.invoke('terminal.create', input);\n }\n\n public onStarted(handler: (t: Task) => void): void {\n this.okra.listen('terminal.started', handler);\n }\n\n public resize(id: string, size: [number, number]) {\n return this.okra.invoke('terminal.resize', { id, width: size[0], height: size[1] });\n }\n\n public onOutput(id: string, handler: (data: TerminalEvents['terminal.output']) => void): void {\n this.okra.listen(`terminal.output.${id}`, handler);\n }\n\n public input(id: string, input: string) {\n return this.okra.invoke('terminal.input', { id, input });\n }\n\n public listen<T extends keyof TerminalEvents>(event: T, handler: (data: TerminalEvents[T]) => void): Disposable {\n return this.okra.listen(event, handler);\n }\n\n public async spawn(command: string, args: string[], opts?: SpawnOptions): Promise<SandboxProcess & Task> {\n const id = opts?.id || nanoid();\n const disposables = new Set<Disposable>();\n const dispose = () => {\n for (const disposable of disposables) {\n disposable.dispose();\n }\n disposables.clear();\n };\n\n const input = new WritableStream<string>({\n write: (chunk) => {\n this.input(id, chunk);\n },\n close: dispose,\n });\n\n const output = new ReadableStream<string>({\n start: (controller) => {\n disposables.add(\n this.listen(`terminal.output.${id}`, (data) => {\n controller.enqueue(data.output);\n })\n );\n },\n cancel: dispose,\n });\n\n const exit = new Promise<number>((resolve) => {\n disposables.add(\n this.listen(`terminal.close.${id}`, (data) => {\n dispose();\n resolve(data.exitCode);\n })\n );\n });\n\n const kill = once(() => {\n dispose();\n return this.okra.invoke('terminal.close', { id });\n });\n\n const resize = (dimensions: { cols: number; rows: number }) => {\n this.okra.invoke('terminal.resize', { id, width: dimensions.cols, height: dimensions.rows });\n };\n\n const { abortSignal, ...otherOpts } = opts ?? {};\n if (abortSignal) {\n abortSignal.addEventListener('abort', kill);\n }\n\n const result = await this.okra.invoke(\n 'terminal.spawn',\n {\n command: [command, ...args],\n opts: {\n id,\n ...otherOpts,\n },\n },\n { abortSignal }\n );\n\n return {\n exit,\n input,\n output,\n kill,\n resize,\n ...result,\n };\n }\n}\n", "import { Action, Disposable, NotebookInstance } from './index.js';\n\ninterface Stat {\n usage: number;\n limit: number;\n}\n\nexport interface ContainerStats {\n cpu: Stat;\n memory: Stat;\n disk: Stat;\n}\n\nexport enum NotebookState {\n RUNNING = 'running',\n STOPPED = 'stopped',\n STARTING = 'starting',\n STOPPING = 'stopping',\n KILLED = 'killed',\n ERROR = 'error',\n PROVISIONING = 'provisioning',\n}\n\nexport interface ContainerEvents {\n 'container.stats': ContainerStats;\n 'container.ports': PortInfo[];\n}\n\nexport interface PortInfo {\n subdomain: string;\n url: string;\n default: boolean;\n port: number;\n}\n\nexport type TelemetryFeature = 'stats' | 'logs' | 'ports';\n\nexport interface ContainerActions {\n 'container.start': Action<{}, void>;\n 'container.stop': Action<{}, void>;\n 'container.state': Action<{}, { state: NotebookState }>;\n 'container.opened-ports': Action<{}, PortInfo[]>;\n 'container.set-php': Action<{ version: string }, { version: string }>;\n 'container.stream-telemetry': Action<{ features: TelemetryFeature[] }, void>;\n 'container.stop-telemetry': Action<{}, void>;\n}\n\nexport default class Container {\n constructor(protected okra: NotebookInstance) {}\n\n public start() {\n return this.okra.invoke('container.start');\n }\n\n public stop() {\n return this.okra.invoke('container.stop');\n }\n\n public state() {\n return this.okra.invoke('container.state');\n }\n\n public openedPorts() {\n return this.okra.invoke('container.opened-ports');\n }\n\n public setPhp(version: string) {\n return this.okra.invoke('container.set-php', { version });\n }\n\n public enableTelemetry(features: Set<TelemetryFeature>) {\n return this.okra.invoke('container.stream-telemetry', { features: Array.from(features) });\n }\n\n public stopTelemetry() {\n return this.okra.invoke('container.stop-telemetry');\n }\n\n public listen<T extends keyof ContainerEvents>(event: T, handler: (data: ContainerEvents[T]) => void) {\n return this.okra.listen(event, handler);\n }\n\n public onPort(handler: (port: PortInfo, type: 'open' | 'close') => void): Disposable {\n let ports: PortInfo[] = [];\n return this.listen('container.ports', (newPorts) => {\n for (const port of newPorts) {\n if (!ports.some((p) => p.port === port.port)) {\n handler(port, 'open');\n }\n }\n\n for (const port of ports) {\n if (!newPorts.some((p) => p.port === port.port)) {\n handler(port, 'close');\n }\n }\n ports = newPorts;\n });\n }\n}\n", "import { Action, NotebookInstance } from './index.js';\n\nexport interface AuthActions {\n 'auth.login': Action<{ newConnectionData: string }, boolean>;\n 'auth.logout': Action<null>;\n}\n\nexport default class Auth {\n constructor(protected okra: NotebookInstance) {}\n\n public logout() {\n return this.okra.invoke('auth.logout');\n }\n\n public login(newConnectionData: string) {\n return this.okra.invoke('auth.login', { newConnectionData });\n }\n}\n", "import { Action, NotebookInstance } from './index.js';\n\nexport interface LspActions {\n 'lsp.message': Action<{ message: string; id: string }>;\n 'lsp.close': Action<{ id: string }>;\n 'lsp.start': Action<{ id: string }>;\n}\n\ninterface LspEventData {\n 'lsp.response': object;\n 'lsp.closed': { code: number; reason: string };\n 'lsp.error': { message: string };\n}\n\ntype PrefixKey<K extends keyof LspEventData> = `${K}.${string}`;\nexport type LspEvents = LspEventData & {\n [K in keyof LspEventData as PrefixKey<K>]: LspEventData[K];\n};\n\nexport default class Lsp {\n constructor(protected okra: NotebookInstance) {}\n\n public message(id: string, message: string) {\n return this.okra.invoke('lsp.message', { id, message });\n }\n\n public listen<T extends keyof LspEventData>(id: string, event: T, cb: (data: LspEventData[T]) => void) {\n this.okra.listen(`${event}.${id}`, (e) => cb(e as LspEventData[T]));\n }\n\n public onClose(id: string, cb: (code: number, reason: string) => void): void {\n this.listen(id, 'lsp.closed', (e) => cb(e.code, e.reason));\n }\n\n public onError(id: string, cb: (message: string) => void): void {\n this.listen(id, 'lsp.error', (e) => cb(e.message));\n }\n\n public onClientDisconnect(cb: (code: number, message: string) => void): void {\n this.okra.onDidDisconnect(() => cb(1000, 'OKRA DISCONNECTED'));\n }\n\n public onResponse(id: string, cb: (data: string) => void): void {\n this.listen(id, 'lsp.response', (e) => cb(JSON.stringify(e)));\n }\n\n public close(id: string) {\n return this.okra.invoke('lsp.close', { id });\n }\n\n public start(id: string) {\n return this.okra.invoke('lsp.start', { id });\n }\n\n public connection(id: string) {\n return LspConnection.create(id, this);\n }\n\n public whenSocketConnected() {\n return this.okra.whenConnected();\n }\n}\n\nexport class LspConnection {\n public constructor(\n public readonly id: string,\n private readonly lsp: Lsp\n ) {}\n\n public send(content: string) {\n return this.lsp.message(this.id, content);\n }\n\n public onMessage(cb: (data: string) => void) {\n this.lsp.onResponse(this.id, cb);\n }\n\n public onError(cb: (message: string) => void) {\n this.lsp.onError(this.id, cb);\n }\n\n public onClose(cb: (code: number, reason: string) => void) {\n this.lsp.onClose(this.id, cb);\n }\n\n public dispose() {\n this.lsp.close(this.id);\n }\n\n public start() {\n this.lsp.start(this.id);\n }\n\n public onClientDisconnect(cb: (code: number, message: string) => void) {\n this.lsp.onClientDisconnect(cb);\n }\n\n public whenSocketConnected() {\n return this.lsp.whenSocketConnected();\n }\n\n public static create(id: string, lsp: Lsp): LspConnection {\n return new LspConnection(id, lsp);\n }\n}\n", "import { Action, NotebookInstance } from './index.js';\n\nexport interface ComposerEvents {\n 'composer.log': string;\n}\n\nexport interface Result {\n exitCode: number;\n output: string;\n}\n\nexport interface ComposerPackage {\n name: string;\n _installedVersion: string;\n installationMode: 'require' | 'require-dev';\n _installed: boolean;\n}\n\nexport interface ComposerActions {\n 'composer.invoke': Action<{ command: ComposerCommand; args: Argument; options: Options }, Result>;\n 'composer.dump-autoload': Action<undefined, { message: string; success: boolean }>;\n 'composer.packages': Action<undefined, ComposerPackage[]>;\n}\n\nexport type ComposerCommand = 'install' | 'update' | 'require' | 'remove' | 'search' | 'show';\n\nexport type Argument<Name extends string = string, Type extends string | string[] = string | string[]> = Record<Name, Type>;\n\nexport type Options<\n Name extends string = string,\n Type extends string | string[] | boolean = string | string[] | boolean,\n> = Record<Name, Type>;\n\nexport default class Composer {\n constructor(protected okra: NotebookInstance) {}\n\n public invoke(command: ComposerCommand, args: Argument = {}, options: Options = {}) {\n return this.okra.invoke('composer.invoke', { command, args, options });\n }\n\n public dumpAutoload() {\n return this.okra.invoke('composer.dump-autoload');\n }\n\n public install(options: Options = {}): Promise<Result> {\n return this.invoke('install', {}, options);\n }\n\n public update(args: Argument<'packages'>, options: Options = {}): Promise<Result> {\n return this.invoke('update', args, options);\n }\n\n public require(packages: Argument<'packages'>, options: Options = {}): Promise<Result> {\n return this.invoke('require', packages, options);\n }\n\n public remove(args: Argument<'packages'>, options: Options = {}): Promise<Result> {\n return this.invoke('remove', args, options);\n }\n\n public stream(fn: (data: string) => void) {\n return this.okra.listen('composer.log', fn);\n }\n\n public packages() {\n return this.okra.invoke('composer.packages');\n }\n}\n", "import { NotebookInstance } from './index.js';\n\nexport interface LogEvents {\n 'notebook.log': string;\n}\n\nexport interface LogActions {}\n\nexport default class Log {\n constructor(protected okra: NotebookInstance) {}\n\n public stream(fn: (data: string) => void) {\n return this.okra.listen('notebook.log', fn);\n }\n public listen<T extends keyof LogEvents>(event: T, handler: (data: LogEvents[T]) => void): void {\n this.okra.listen(event, handler);\n }\n}\n", "import { Action, NotebookInstance } from './index.js';\n\nexport interface Down {\n except: string[];\n redirect: string | null;\n retry: string | null;\n refresh: string | null;\n secret: string | null;\n status: number;\n template: string | null;\n}\n\nexport interface LaravelEvents {}\nexport interface LaravelActions {\n 'laravel.maintenance.info': Action<{}, Down>;\n 'laravel.maintenance.toggle': Action<Down | {}, Down>;\n}\n\nexport default class Lravel {\n constructor(protected okra: NotebookInstance) {}\n\n public maintenanceInfo() {\n return this.okra.invoke('laravel.maintenance.info', {});\n }\n\n public toggleMaintenance(down: Down | {}) {\n return this.okra.invoke('laravel.maintenance.toggle', down);\n }\n}\n", "import { Action, NotebookInstance } from './index.js';\n\ninterface ReplOption {\n prependWith?: string;\n appendWith?: string;\n}\n\nexport interface EvalResult {\n exitCode: number;\n args: string;\n}\n\nexport interface ReplActions {\n 'repl.eval': Action<{ code: string; args: string; repl: ReplOption }, EvalResult>;\n 'repl.write': Action<{ input: string }>;\n 'repl.stop': Action<{}, void>;\n 'repl.start': Action<{}>;\n 'repl.resize': Action<{ cols: number; rows: number }>;\n}\n\nexport interface ReplEvents {\n 'repl.output': string;\n}\n\nexport default class Repl {\n constructor(protected okra: NotebookInstance) {}\n\n public eval(code: string, args: string = '', repl: ReplOption = { prependWith: '', appendWith: '' }) {\n return this.okra.invoke('repl.eval', { code, args, repl });\n }\n\n public write(input: string) {\n return this.okra.invoke('repl.write', { input });\n }\n\n public stop() {\n return this.okra.invoke('repl.stop');\n }\n\n public start() {\n return this.okra.invoke('repl.start');\n }\n\n public resize(cols: number, rows: number) {\n return this.okra.invoke('repl.resize', { cols, rows });\n }\n\n public listen<T extends keyof ReplEvents>(event: T, handler: (data: ReplEvents[T]) => void): void {\n this.okra.listen(event, handler);\n }\n\n public onOutput(handler: (data: ReplEvents['repl.output']) => void): void {\n this.okra.listen('repl.output', handler);\n }\n}\n", "import { Action, NotebookInstance } from './index.js';\n\nexport interface ShellEvents {}\n\nexport interface ShellActions {\n 'shell.exec': Action<{ command: string|string }, { output: string; exitCode: number }>;\n}\n\nexport class CommandError extends Error {\n constructor(\n public output: string,\n public exitCode: number\n ) {\n super(output);\n }\n}\n\nclass Result {\n constructor(\n public output: string,\n public exitCode: number\n ) {}\n\n public throw() {\n if (this.exitCode !== 0) {\n throw new CommandError(this.output, this.exitCode);\n }\n\n return this;\n }\n}\n\nexport default class Shell {\n constructor(protected okra: NotebookInstance) {}\n\n public async exec(command: string|string): Promise<Result> {\n const result = await this.okra.invoke('shell.exec', { command });\n\n return new Result(result.output, result.exitCode);\n }\n}\n", "export function utf8Count(str: string): number {\n const strLength = str.length;\n\n let byteLength = 0;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n byteLength++;\n continue;\n } else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n byteLength += 2;\n } else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n byteLength += 3;\n } else {\n // 4-byte\n byteLength += 4;\n }\n }\n }\n return byteLength;\n}\n\nexport function utf8EncodeJs(str: string, output: Uint8Array, outputOffset: number): void {\n const strLength = str.length;\n let offset = outputOffset;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n output[offset++] = value;\n continue;\n } else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n output[offset++] = ((value >> 6) & 0x1f) | 0xc0;\n } else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n output[offset++] = ((value >> 12) & 0x0f) | 0xe0;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n } else {\n // 4-byte\n output[offset++] = ((value >> 18) & 0x07) | 0xf0;\n output[offset++] = ((value >> 12) & 0x3f) | 0x80;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n }\n\n output[offset++] = (value & 0x3f) | 0x80;\n }\n}\n\n// TextEncoder and TextDecoder are standardized in whatwg encoding:\n// https://encoding.spec.whatwg.org/\n// and available in all the modern browsers:\n// https://caniuse.com/textencoder\n// They are available in Node.js since v12 LTS as well:\n// https://nodejs.org/api/globals.html#textencoder\n\nconst sharedTextEncoder = new TextEncoder();\n\n// This threshold should be determined by benchmarking, which might vary in engines and input data.\n// Run `npx ts-node benchmark/encode-string.ts` for details.\nconst TEXT_ENCODER_THRESHOLD = 50;\n\nexport function utf8EncodeTE(str: string, output: Uint8Array, outputOffset: number): void {\n sharedTextEncoder.encodeInto(str, output.subarray(outputOffset));\n}\n\nexport function utf8Encode(str: string, output: Uint8Array, outputOffset: number): void {\n if (str.length > TEXT_ENCODER_THRESHOLD) {\n utf8EncodeTE(str, output, outputOffset);\n } else {\n utf8EncodeJs(str, output, outputOffset);\n }\n}\n\nconst CHUNK_SIZE = 0x1_000;\n\nexport function utf8DecodeJs(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n let offset = inputOffset;\n const end = offset + byteLength;\n\n const units: Array<number> = [];\n let result = \"\";\n while (offset < end) {\n const byte1 = bytes[offset++]!;\n if ((byte1 & 0x80) === 0) {\n // 1 byte\n units.push(byte1);\n } else if ((byte1 & 0xe0) === 0xc0) {\n // 2 bytes\n const byte2 = bytes[offset++]! & 0x3f;\n units.push(((byte1 & 0x1f) << 6) | byte2);\n } else if ((byte1 & 0xf0) === 0xe0) {\n // 3 bytes\n const byte2 = bytes[offset++]! & 0x3f;\n const byte3 = bytes[offset++]! & 0x3f;\n units.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);\n } else if ((byte1 & 0xf8) === 0xf0) {\n // 4 bytes\n const byte2 = bytes[offset++]! & 0x3f;\n const byte3 = bytes[offset++]! & 0x3f;\n const byte4 = bytes[offset++]! & 0x3f;\n let unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;\n if (unit > 0xffff) {\n unit -= 0x10000;\n units.push(((unit >>> 10) & 0x3ff) | 0xd800);\n unit = 0xdc00 | (unit & 0x3ff);\n }\n units.push(unit);\n } else {\n units.push(byte1);\n }\n\n if (units.length >= CHUNK_SIZE) {\n result += String.fromCharCode(...units);\n units.length = 0;\n }\n }\n\n if (units.length > 0) {\n result += String.fromCharCode(...units);\n }\n\n return result;\n}\n\nconst sharedTextDecoder = new TextDecoder();\n\n// This threshold should be determined by benchmarking, which might vary in engines and input data.\n// Run `npx ts-node benchmark/decode-string.ts` for details.\nconst TEXT_DECODER_THRESHOLD = 200;\n\nexport function utf8DecodeTD(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n const stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength);\n return sharedTextDecoder.decode(stringBytes);\n}\n\nexport function utf8Decode(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n if (byteLength > TEXT_DECODER_THRESHOLD) {\n return utf8DecodeTD(bytes, inputOffset, byteLength);\n } else {\n return utf8DecodeJs(bytes, inputOffset, byteLength);\n }\n}\n", "/**\n * ExtData is used to handle Extension Types that are not registered to ExtensionCodec.\n */\nexport class ExtData {\n readonly type: number;\n readonly data: Uint8Array | ((pos: number) => Uint8Array);\n\n constructor(type: number, data: Uint8Array | ((pos: number) => Uint8Array)) {\n this.type = type;\n this.data = data;\n }\n}\n", "export class DecodeError extends Error {\n constructor(message: string) {\n super(message);\n\n // fix the prototype chain in a cross-platform way\n const proto: typeof DecodeError.prototype = Object.create(DecodeError.prototype);\n Object.setPrototypeOf(this, proto);\n\n Object.defineProperty(this, \"name\", {\n configurable: true,\n enumerable: false,\n value: DecodeError.name,\n });\n }\n}\n", "// Integer Utility\n\nexport const UINT32_MAX = 0xffff_ffff;\n\n// DataView extension to handle int64 / uint64,\n// where the actual range is 53-bits integer (a.k.a. safe integer)\n\nexport function setUint64(view: DataView, offset: number, value: number): void {\n const high = value / 0x1_0000_0000;\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\n\nexport function setInt64(view: DataView, offset: number, value: number): void {\n const high = Math.floor(value / 0x1_0000_0000);\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\n\nexport function getInt64(view: DataView, offset: number): number {\n const high = view.getInt32(offset);\n const low = view.getUint32(offset + 4);\n return high * 0x1_0000_0000 + low;\n}\n\nexport function getUint64(view: DataView, offset: number): number {\n const high = view.getUint32(offset);\n const low = view.getUint32(offset + 4);\n return high * 0x1_0000_0000 + low;\n}\n", "// https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type\nimport { DecodeError } from \"./DecodeError.ts\";\nimport { getInt64, setInt64 } from \"./utils/int.ts\";\n\nexport const EXT_TIMESTAMP = -1;\n\nexport type TimeSpec = {\n sec: number;\n nsec: number;\n};\n\nconst TIMESTAMP32_MAX_SEC = 0x100000000 - 1; // 32-bit unsigned int\nconst TIMESTAMP64_MAX_SEC = 0x400000000 - 1; // 34-bit unsigned int\n\nexport function encodeTimeSpecToTimestamp({ sec, nsec }: TimeSpec): Uint8Array {\n if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) {\n // Here sec >= 0 && nsec >= 0\n if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) {\n // timestamp 32 = { sec32 (unsigned) }\n const rv = new Uint8Array(4);\n const view = new DataView(rv.buffer);\n view.setUint32(0, sec);\n return rv;\n } else {\n // timestamp 64 = { nsec30 (unsigned), sec34 (unsigned) }\n const secHigh = sec / 0x100000000;\n const secLow = sec & 0xffffffff;\n const rv = new Uint8Array(8);\n const view = new DataView(rv.buffer);\n // nsec30 | secHigh2\n view.setUint32(0, (nsec << 2) | (secHigh & 0x3));\n // secLow32\n view.setUint32(4, secLow);\n return rv;\n }\n } else {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n const rv = new Uint8Array(12);\n const view = new DataView(rv.buffer);\n view.setUint32(0, nsec);\n setInt64(view, 4, sec);\n return rv;\n }\n}\n\nexport function encodeDateToTimeSpec(date: Date): TimeSpec {\n const msec = date.getTime();\n const sec = Math.floor(msec / 1e3);\n const nsec = (msec - sec * 1e3) * 1e6;\n\n // Normalizes { sec, nsec } to ensure nsec is unsigned.\n const nsecInSec = Math.floor(nsec / 1e9);\n return {\n sec: sec + nsecInSec,\n nsec: nsec - nsecInSec * 1e9,\n };\n}\n\nexport function encodeTimestampExtension(object: unknown): Uint8Array | null {\n if (object instanceof Date) {\n const timeSpec = encodeDateToTimeSpec(object);\n return encodeTimeSpecToTimestamp(timeSpec);\n } else {\n return null;\n }\n}\n\nexport function decodeTimestampToTimeSpec(data: Uint8Array): TimeSpec {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n // data may be 32, 64, or 96 bits\n switch (data.byteLength) {\n case 4: {\n // timestamp 32 = { sec32 }\n const sec = view.getUint32(0);\n const nsec = 0;\n return { sec, nsec };\n }\n case 8: {\n // timestamp 64 = { nsec30, sec34 }\n const nsec30AndSecHigh2 = view.getUint32(0);\n const secLow32 = view.getUint32(4);\n const sec = (nsec30AndSecHigh2 & 0x3) * 0x100000000 + secLow32;\n const nsec = nsec30AndSecHigh2 >>> 2;\n return { sec, nsec };\n }\n case 12: {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n\n const sec = getInt64(view, 4);\n const nsec = view.getUint32(0);\n return { sec, nsec };\n }\n default:\n throw new DecodeError(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${data.length}`);\n }\n}\n\nexport function decodeTimestampExtension(data: Uint8Array): Date {\n const timeSpec = decodeTimestampToTimeSpec(data);\n return new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6);\n}\n\nexport const timestampExtension = {\n type: EXT_TIMESTAMP,\n encode: encodeTimestampExtension,\n decode: decodeTimestampExtension,\n};\n", "// ExtensionCodec to handle MessagePack extensions\n\nimport { ExtData } from \"./ExtData.ts\";\nimport { timestampExtension } from \"./timestamp.ts\";\n\nexport type ExtensionDecoderType<ContextType> = (\n data: Uint8Array,\n extensionType: number,\n context: ContextType,\n) => unknown;\n\nexport type ExtensionEncoderType<ContextType> = (\n input: unknown,\n context: ContextType,\n) => Uint8Array | ((dataPos: number) => Uint8Array) | null;\n\n// immutable interface to ExtensionCodec\nexport type ExtensionCodecType<ContextType> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __brand?: ContextType;\n tryToEncode(object: unknown, context: ContextType): ExtData | null;\n decode(data: Uint8Array, extType: number, context: ContextType): unknown;\n};\n\nexport class ExtensionCodec<ContextType = undefined> implements ExtensionCodecType<ContextType> {\n public static readonly defaultCodec: ExtensionCodecType<undefined> = new ExtensionCodec();\n\n // ensures ExtensionCodecType<X> matches ExtensionCodec<X>\n // this will make type errors a lot more clear\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __brand?: ContextType;\n\n // built-in extensions\n private readonly builtInEncoders: Array<ExtensionEncoderType<ContextType> | undefined | null> = [];\n private readonly builtInDecoders: Array<ExtensionDecoderType<ContextType> | undefined | null> = [];\n\n // custom extensions\n private readonly encoders: Array<ExtensionEncoderType<ContextType> | undefined | null> = [];\n private readonly decoders: Array<ExtensionDecoderType<ContextType> | undefined | null> = [];\n\n public constructor() {\n this.register(timestampExtension);\n }\n\n public register({\n type,\n encode,\n decode,\n }: {\n type: number;\n encode: ExtensionEncoderType<ContextType>;\n decode: ExtensionDecoderType<ContextType>;\n }): void {\n if (type >= 0) {\n // custom extensions\n this.encoders[type] = encode;\n this.decoders[type] = decode;\n } else {\n // built-in extensions\n const index = -1 - type;\n this.builtInEncoders[index] = encode;\n this.builtInDecoders[index] = decode;\n }\n }\n\n public tryToEncode(object: unknown, context: ContextType): ExtData | null {\n // built-in extensions\n for (let i = 0; i < this.builtInEncoders.length; i++) {\n const encodeExt = this.builtInEncoders[i];\n if (encodeExt != null) {\n const data = encodeExt(object, context);\n if (data != null) {\n const type = -1 - i;\n return new ExtData(type, data);\n }\n }\n }\n\n // custom extensions\n for (let i = 0; i < this.encoders.length; i++) {\n const encodeExt = this.encoders[i];\n if (encodeExt != null) {\n const data = encodeExt(object, context);\n if (data != null) {\n const type = i;\n return new ExtData(type, data);\n }\n }\n }\n\n if (object instanceof ExtData) {\n // to keep ExtData as is\n return object;\n }\n return null;\n }\n\n public decode(data: Uint8Array, type: number, context: ContextType): unknown {\n const decodeExt = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type];\n if (decodeExt) {\n return decodeExt(data, type, context);\n } else {\n // decode() does not fail, returns ExtData instead.\n return new ExtData(type, data);\n }\n }\n}\n", "function isArrayBufferLike(buffer: unknown): buffer is ArrayBufferLike {\n return (\n buffer instanceof ArrayBuffer || (typeof SharedArrayBuffer !== \"undefined\" && buffer instanceof SharedArrayBuffer)\n );\n}\n\nexport function ensureUint8Array(\n buffer: ArrayLike<number> | Uint8Array<ArrayBufferLike> | ArrayBufferView | ArrayBufferLike,\n): Uint8Array<ArrayBufferLike> {\n if (buffer instanceof Uint8Array) {\n return buffer;\n } else if (ArrayBuffer.isView(buffer)) {\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n } else if (isArrayBufferLike(buffer)) {\n return new Uint8Array(buffer);\n } else {\n // ArrayLike<number>\n return Uint8Array.from(buffer);\n }\n}\n", "import { utf8Count, utf8Encode } from \"./utils/utf8.ts\";\nimport { ExtensionCodec } from \"./ExtensionCodec.ts\";\nimport { setInt64, setUint64 } from \"./utils/int.ts\";\nimport { ensureUint8Array } from \"./utils/typedArrays.ts\";\nimport type { ExtData } from \"./ExtData.ts\";\nimport type { ContextOf } from \"./context.ts\";\nimport type { ExtensionCodecType } from \"./ExtensionCodec.ts\";\n\nexport const DEFAULT_MAX_DEPTH = 100;\nexport const DEFAULT_INITIAL_BUFFER_SIZE = 2048;\n\nexport type EncoderOptions<ContextType = undefined> = Partial<\n Readonly<{\n extensionCodec: ExtensionCodecType<ContextType>;\n\n /**\n * Encodes bigint as Int64 or Uint64 if it's set to true.\n * {@link forceIntegerToFloat} does not affect bigint.\n * Depends on ES2020's {@link DataView#setBigInt64} and\n * {@link DataView#setBigUint64}.\n *\n * Defaults to false.\n */\n useBigInt64: boolean;\n\n /**\n * The maximum depth in nested objects and arrays.\n *\n * Defaults to 100.\n */\n maxDepth: number;\n\n /**\n * The initial size of the internal buffer.\n *\n * Defaults to 2048.\n */\n initialBufferSize: number;\n\n /**\n * If `true`, the keys of an object is sorted. In other words, the encoded\n * binary is canonical and thus comparable to another encoded binary.\n *\n * Defaults to `false`. If enabled, it spends more time in encoding objects.\n */\n sortKeys: boolean;\n /**\n * If `true`, non-integer numbers are encoded in float32, not in float64 (the default).\n *\n * Only use it if precisions don't matter.\n *\n * Defaults to `false`.\n */\n forceFloat32: boolean;\n\n /**\n * If `true`, an object property with `undefined` value are ignored.\n * e.g. `{ foo: undefined }` will be encoded as `{}`, as `JSON.stringify()` does.\n *\n * Defaults to `false`. If enabled, it spends more time in encoding objects.\n */\n ignoreUndefined: boolean;\n\n /**\n * If `true`, integer numbers are encoded as floating point numbers,\n * with the `forceFloat32` option taken into account.\n *\n * Defaults to `false`.\n */\n forceIntegerToFloat: boolean;\n }>\n> &\n ContextOf<ContextType>;\n\nexport class Encoder<ContextType = undefined> {\n private readonly extensionCodec: ExtensionCodecType<ContextType>;\n private readonly context: ContextType;\n private readonly useBigInt64: boolean;\n private readonly maxDepth: number;\n private readonly initialBufferSize: number;\n private readonly sortKeys: boolean;\n private readonly forceFloat32: boolean;\n private readonly ignoreUndefined: boolean;\n private readonly forceIntegerToFloat: boolean;\n\n private pos: number;\n private view: DataView;\n private bytes: Uint8Array;\n\n private entered = false;\n\n public constructor(options?: EncoderOptions<ContextType>) {\n this.extensionCodec = options?.extensionCodec ?? (ExtensionCodec.defaultCodec as ExtensionCodecType<ContextType>);\n this.context = (options as { context: ContextType } | undefined)?.context as ContextType; // needs a type assertion because EncoderOptions has no context property when ContextType is undefined\n\n this.useBigInt64 = options?.useBigInt64 ?? false;\n this.maxDepth = options?.maxDepth ?? DEFAULT_MAX_DEPTH;\n this.initialBufferSize = options?.initialBufferSize ?? DEFAULT_INITIAL_BUFFER_SIZE;\n this.sortKeys = options?.sortKeys ?? false;\n this.forceFloat32 = options?.forceFloat32 ?? false;\n this.ignoreUndefined = options?.ignoreUndefined ?? false;\n this.forceIntegerToFloat = options?.forceIntegerToFloat ?? false;\n\n this.pos = 0;\n this.view = new DataView(new ArrayBuffer(this.initialBufferSize));\n this.bytes = new Uint8Array(this.view.buffer);\n }\n\n private clone() {\n // Because of slightly special argument `context`,\n // type assertion is needed.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return new Encoder<ContextType>({\n extensionCodec: this.extensionCodec,\n context: this.context,\n useBigInt64: this.useBigInt64,\n maxDepth: this.maxDepth,\n initialBufferSize: this.initialBufferSize,\n sortKeys: this.sortKeys,\n forceFloat32: this.forceFloat32,\n ignoreUndefined: this.ignoreUndefined,\n forceIntegerToFloat: this.forceIntegerToFloat,\n } as any);\n }\n\n private reinitializeState() {\n this.pos = 0;\n }\n\n /**\n * This is almost equivalent to {@link Encoder#encode}, but it returns an reference of the encoder's internal buffer and thus much faster than {@link Encoder#encode}.\n *\n * @returns Encodes the object and returns a shared reference the encoder's internal buffer.\n */\n public encodeSharedRef(object: unknown): Uint8Array {\n if (this.entered) {\n const instance = this.clone();\n return instance.encodeSharedRef(object);\n }\n\n try {\n this.entered = true;\n\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.subarray(0, this.pos);\n } finally {\n this.entered = false;\n }\n }\n\n /**\n * @returns Encodes the object and returns a copy of the encoder's internal buffer.\n */\n public encode(object: unknown): Uint8Array {\n if (this.entered) {\n const instance = this.clone();\n return instance.encode(object);\n }\n\n try {\n this.entered = true;\n\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.slice(0, this.pos);\n } finally {\n this.entered = false;\n }\n }\n\n private doEncode(object: unknown, depth: number): void {\n if (depth > this.maxDepth) {\n throw new Error(`Too deep objects in depth ${depth}`);\n }\n\n if (object == null) {\n this.encodeNil();\n } else if (typeof object === \"boolean\") {\n this.encodeBoolean(object);\n } else if (typeof object === \"number\") {\n if (!this.forceIntegerToFloat) {\n this.encodeNumber(object);\n } else {\n this.encodeNumberAsFloat(object);\n }\n } else if (typeof object === \"string\") {\n this.encodeString(object);\n } else if (this.useBigInt64 && typeof object === \"bigint\") {\n this.encodeBigInt64(object);\n } else {\n this.encodeObject(object, depth);\n }\n }\n\n private ensureBufferSizeToWrite(sizeToWrite: number) {\n const requiredSize = this.pos + sizeToWrite;\n\n if (this.view.byteLength < requiredSize) {\n this.resizeBuffer(requiredSize * 2);\n }\n }\n\n private resizeBuffer(newSize: number) {\n const newBuffer = new ArrayBuffer(newSize);\n const newBytes = new Uint8Array(newBuffer);\n const newView = new DataView(newBuffer);\n\n newBytes.set(this.bytes);\n\n this.view = newView;\n this.bytes = newBytes;\n }\n\n private encodeNil() {\n this.writeU8(0xc0);\n }\n\n private encodeBoolean(object: boolean) {\n if (object === false) {\n this.writeU8(0xc2);\n } else {\n this.writeU8(0xc3);\n }\n }\n\n private encodeNumber(object: number): void {\n if (!this.forceIntegerToFloat && Number.isSafeInteger(object)) {\n if (object >= 0) {\n if (object < 0x80) {\n // positive fixint\n this.writeU8(object);\n } else if (object < 0x100) {\n // uint 8\n this.writeU8(0xcc);\n this.writeU8(object);\n } else if (object < 0x10000) {\n // uint 16\n this.writeU8(0xcd);\n this.writeU16(object);\n } else if (object < 0x100000000) {\n // uint 32\n this.writeU8(0xce);\n this.writeU32(object);\n } else if (!this.useBigInt64) {\n // uint 64\n this.writeU8(0xcf);\n this.writeU64(object);\n } else {\n this.encodeNumberAsFloat(object);\n }\n } else {\n if (object >= -0x20) {\n // negative fixint\n this.writeU8(0xe0 | (object + 0x20));\n } else if (object >= -0x80) {\n // int 8\n this.writeU8(0xd0);\n this.writeI8(object);\n } else if (object >= -0x8000) {\n // int 16\n this.writeU8(0xd1);\n this.writeI16(object);\n } else if (object >= -0x80000000) {\n // int 32\n this.writeU8(0xd2);\n this.writeI32(object);\n } else if (!this.useBigInt64) {\n // int 64\n this.writeU8(0xd3);\n this.writeI64(object);\n } else {\n this.encodeNumberAsFloat(object);\n }\n }\n } else {\n this.encodeNumberAsFloat(object);\n }\n }\n\n private encodeNumberAsFloat(object: number): void {\n if (this.forceFloat32) {\n // float 32\n this.writeU8(0xca);\n this.writeF32(object);\n } else {\n // float 64\n this.writeU8(0xcb);\n this.writeF64(object);\n }\n }\n\n private encodeBigInt64(object: bigint): void {\n if (object >= BigInt(0)) {\n // uint 64\n this.writeU8(0xcf);\n this.writeBigUint64(object);\n } else {\n // int 64\n this.writeU8(0xd3);\n this.writeBigInt64(object);\n }\n }\n\n private writeStringHeader(byteLength: number) {\n if (byteLength < 32) {\n // fixstr\n this.writeU8(0xa0 + byteLength);\n } else if (byteLength < 0x100) {\n // str 8\n this.writeU8(0xd9);\n this.writeU8(byteLength);\n } else if (byteLength < 0x10000) {\n // str 16\n this.writeU8(0xda);\n this.writeU16(byteLength);\n } else if (byteLength < 0x100000000) {\n // str 32\n this.writeU8(0xdb);\n this.writeU32(byteLength);\n } else {\n throw new Error(`Too long string: ${byteLength} bytes in UTF-8`);\n }\n }\n\n private encodeString(object: string) {\n const maxHeaderSize = 1 + 4;\n\n const byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8Encode(object, this.bytes, this.pos);\n this.pos += byteLength;\n }\n\n private encodeObject(object: unknown, depth: number) {\n // try to encode objects with custom codec first of non-primitives\n const ext = this.extensionCodec.tryToEncode(object, this.context);\n if (ext != null) {\n this.encodeExtension(ext);\n } else if (Array.isArray(object)) {\n this.encodeArray(object, depth);\n } else if (ArrayBuffer.isView(object)) {\n this.encodeBinary(object);\n } else if (typeof object === \"object\") {\n this.encodeMap(object as Record<string, unknown>, depth);\n } else {\n // symbol, function and other special object come here unless extensionCodec handles them.\n throw new Error(`Unrecognized object: ${Object.prototype.toString.apply(object)}`);\n }\n }\n\n private encodeBinary(object: ArrayBufferView) {\n const size = object.byteLength;\n if (size < 0x100) {\n // bin 8\n this.writeU8(0xc4);\n this.writeU8(size);\n } else if (size < 0x10000) {\n // bin 16\n this.writeU8(0xc5);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // bin 32\n this.writeU8(0xc6);\n this.writeU32(size);\n } else {\n throw new Error(`Too large binary: ${size}`);\n }\n const bytes = ensureUint8Array(object);\n this.writeU8a(bytes);\n }\n\n private encodeArray(object: Array<unknown>, depth: number) {\n const size = object.length;\n if (size < 16) {\n // fixarray\n this.writeU8(0x90 + size);\n } else if (size < 0x10000) {\n // array 16\n this.writeU8(0xdc);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // array 32\n this.writeU8(0xdd);\n this.writeU32(size);\n } else {\n throw new Error(`Too large array: ${size}`);\n }\n for (const item of object) {\n this.doEncode(item, depth + 1);\n }\n }\n\n private countWithoutUndefined(object: Record<string, unknown>, keys: ReadonlyArray<string>): number {\n let count = 0;\n\n for (const key of keys) {\n if (object[key] !== undefined) {\n count++;\n }\n }\n\n return count;\n }\n\n private encodeMap(object: Record<string, unknown>, depth: number) {\n const keys = Object.keys(object);\n if (this.sortKeys) {\n keys.sort();\n }\n\n const size = this.ignoreUndefined ? this.countWithoutUndefined(object, keys) : keys.length;\n\n if (size < 16) {\n // fixmap\n this.writeU8(0x80 + size);\n } else if (size < 0x10000) {\n // map 16\n this.writeU8(0xde);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // map 32\n this.writeU8(0xdf);\n this.writeU32(size);\n } else {\n throw new Error(`Too large map object: ${size}`);\n }\n\n for (const key of keys) {\n const value = object[key];\n\n if (!(this.ignoreUndefined && value === undefined)) {\n this.encodeString(key);\n this.doEncode(value, depth + 1);\n }\n }\n }\n\n private encodeExtension(ext: ExtData) {\n if (typeof ext.data === \"function\") {\n const data = ext.data(this.pos + 6);\n const size = data.length;\n\n if (size >= 0x100000000) {\n throw new Error(`Too large extension object: ${size}`);\n }\n\n this.writeU8(0xc9);\n this.writeU32(size);\n this.writeI8(ext.type);\n this.writeU8a(data);\n return;\n }\n\n const size = ext.data.length;\n if (size === 1) {\n // fixext 1\n this.writeU8(0xd4);\n } else if (size === 2) {\n // fixext 2\n this.writeU8(0xd5);\n } else if (size === 4) {\n // fixext 4\n this.writeU8(0xd6);\n } else if (size === 8) {\n // fixext 8\n this.writeU8(0xd7);\n } else if (size === 16) {\n // fixext 16\n this.writeU8(0xd8);\n } else if (size < 0x100) {\n // ext 8\n this.writeU8(0xc7);\n this.writeU8(size);\n } else if (size < 0x10000) {\n // ext 16\n this.writeU8(0xc8);\n this.writeU16(size);\n } else if (size < 0x100000000) {\n // ext 32\n this.writeU8(0xc9);\n this.writeU32(size);\n } else {\n throw new Error(`Too large extension object: ${size}`);\n }\n this.writeI8(ext.type);\n this.writeU8a(ext.data);\n }\n\n private writeU8(value: number) {\n this.ensureBufferSizeToWrite(1);\n\n this.view.setUint8(this.pos, value);\n this.pos++;\n }\n\n private writeU8a(values: ArrayLike<number>) {\n const size = values.length;\n this.ensureBufferSizeToWrite(size);\n\n this.bytes.set(values, this.pos);\n this.pos += size;\n }\n\n private writeI8(value: number) {\n this.ensureBufferSizeToWrite(1);\n\n this.view.setInt8(this.pos, value);\n this.pos++;\n }\n\n private writeU16(value: number) {\n this.ensureBufferSizeToWrite(2);\n\n this.view.setUint16(this.pos, value);\n this.pos += 2;\n }\n\n private writeI16(value: number) {\n this.ensureBufferSizeToWrite(2);\n\n this.view.setInt16(this.pos, value);\n this.pos += 2;\n }\n\n private writeU32(value: number) {\n this.ensureBufferSizeToWrite(4);\n\n this.view.setUint32(this.pos, value);\n this.pos += 4;\n }\n\n private writeI32(value: number) {\n this.ensureBufferSizeToWrite(4);\n\n this.view.setInt32(this.pos, value);\n this.pos += 4;\n }\n\n private writeF32(value: number) {\n this.ensureBufferSizeToWrite(4);\n\n this.view.setFloat32(this.pos, value);\n this.pos += 4;\n }\n\n private writeF64(value: number) {\n this.ensureBufferSizeToWrite(8);\n\n this.view.setFloat64(this.pos, value);\n this.pos += 8;\n }\n\n private writeU64(value: number) {\n this.ensureBufferSizeToWrite(8);\n\n setUint64(this.view, this.pos, value);\n this.pos += 8;\n }\n\n private writeI64(value: number) {\n this.ensureBufferSizeToWrite(8);\n\n setInt64(this.view, this.pos, value);\n this.pos += 8;\n }\n\n private writeBigUint64(value: bigint) {\n this.ensureBufferSizeToWrite(8);\n\n this.view.setBigUint64(this.pos, value);\n this.pos += 8;\n }\n\n private writeBigInt64(value: bigint) {\n this.ensureBufferSizeToWrite(8);\n\n this.view.setBigInt64(this.pos, value);\n this.pos += 8;\n }\n}\n", "import { Encoder } from \"./Encoder.ts\";\nimport type { EncoderOptions } from \"./Encoder.ts\";\nimport type { SplitUndefined } from \"./context.ts\";\n\n/**\n * It encodes `value` in the MessagePack format and\n * returns a byte buffer.\n *\n * The returned buffer is a slice of a larger `ArrayBuffer`, so you have to use its `#byteOffset` and `#byteLength` in order to convert it to another typed arrays including NodeJS `Buffer`.\n */\nexport function encode<ContextType = undefined>(\n value: unknown,\n options?: EncoderOptions<SplitUndefined<ContextType>>,\n): Uint8Array {\n const encoder = new Encoder(options);\n return encoder.encodeSharedRef(value);\n}\n", "export function prettyByte(byte: number): string {\n return `${byte < 0 ? \"-\" : \"\"}0x${Math.abs(byte).toString(16).padStart(2, \"0\")}`;\n}\n", "import { utf8DecodeJs } from \"./utils/utf8.ts\";\n\nconst DEFAULT_MAX_KEY_LENGTH = 16;\nconst DEFAULT_MAX_LENGTH_PER_KEY = 16;\n\nexport interface KeyDecoder {\n canBeCached(byteLength: number): boolean;\n decode(bytes: Uint8Array, inputOffset: number, byteLength: number): string;\n}\ninterface KeyCacheRecord {\n readonly bytes: Uint8Array;\n readonly str: string;\n}\n\nexport class CachedKeyDecoder implements KeyDecoder {\n hit = 0;\n miss = 0;\n private readonly caches: Array<Array<KeyCacheRecord>>;\n readonly maxKeyLength: number;\n readonly maxLengthPerKey: number;\n\n constructor(maxKeyLength = DEFAULT_MAX_KEY_LENGTH, maxLengthPerKey = DEFAULT_MAX_LENGTH_PER_KEY) {\n this.maxKeyLength = maxKeyLength;\n this.maxLengthPerKey = maxLengthPerKey;\n\n // avoid `new Array(N)`, which makes a sparse array,\n // because a sparse array is typically slower than a non-sparse array.\n this.caches = [];\n for (let i = 0; i < this.maxKeyLength; i++) {\n this.caches.push([]);\n }\n }\n\n public canBeCached(byteLength: number): boolean {\n return byteLength > 0 && byteLength <= this.maxKeyLength;\n }\n\n private find(bytes: Uint8Array, inputOffset: number, byteLength: number): string | null {\n const records = this.caches[byteLength - 1]!;\n\n FIND_CHUNK: for (const record of records) {\n const recordBytes = record.bytes;\n\n for (let j = 0; j < byteLength; j++) {\n if (recordBytes[j] !== bytes[inputOffset + j]) {\n continue FIND_CHUNK;\n }\n }\n return record.str;\n }\n return null;\n }\n\n private store(bytes: Uint8Array, value: string) {\n const records = this.caches[bytes.length - 1]!;\n const record: KeyCacheRecord = { bytes, str: value };\n\n if (records.length >= this.maxLengthPerKey) {\n // `records` are full!\n // Set `record` to an arbitrary position.\n records[(Math.random() * records.length) | 0] = record;\n } else {\n records.push(record);\n }\n }\n\n public decode(bytes: Uint8Array, inputOffset: number, byteLength: number): string {\n const cachedValue = this.find(bytes, inputOffset, byteLength);\n if (cachedValue != null) {\n this.hit++;\n return cachedValue;\n }\n this.miss++;\n\n const str = utf8DecodeJs(bytes, inputOffset, byteLength);\n // Ensure to copy a slice of bytes because the bytes may be a NodeJS Buffer and Buffer#slice() returns a reference to its internal ArrayBuffer.\n const slicedCopyOfBytes = Uint8Array.prototype.slice.call(bytes, inputOffset, inputOffset + byteLength);\n this.store(slicedCopyOfBytes, str);\n return str;\n }\n}\n", "import { prettyByte } from \"./utils/prettyByte.ts\";\nimport { ExtensionCodec } from \"./ExtensionCodec.ts\";\nimport { getInt64, getUint64, UINT32_MAX } from \"./utils/int.ts\";\nimport { utf8Decode } from \"./utils/utf8.ts\";\nimport { ensureUint8Array } from \"./utils/typedArrays.ts\";\nimport { CachedKeyDecoder } from \"./CachedKeyDecoder.ts\";\nimport { DecodeError } from \"./DecodeError.ts\";\nimport type { ContextOf } from \"./context.ts\";\nimport type { ExtensionCodecType } from \"./ExtensionCodec.ts\";\nimport type { KeyDecoder } from \"./CachedKeyDecoder.ts\";\n\nexport type DecoderOptions<ContextType = undefined> = Readonly<\n Partial<{\n extensionCodec: ExtensionCodecType<ContextType>;\n\n /**\n * Decodes Int64 and Uint64 as bigint if it's set to true.\n * Depends on ES2020's {@link DataView#getBigInt64} and\n * {@link DataView#getBigUint64}.\n *\n * Defaults to false.\n */\n useBigInt64: boolean;\n\n /**\n * By default, string values will be decoded as UTF-8 strings. However, if this option is true,\n * string values will be returned as Uint8Arrays without additional decoding.\n *\n * This is useful if the strings may contain invalid UTF-8 sequences.\n *\n * Note that this option only applies to string values, not map keys. Additionally, when\n * enabled, raw string length is limited by the maxBinLength option.\n */\n rawStrings: boolean;\n\n /**\n * Maximum string length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxStrLength: number;\n /**\n * Maximum binary length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxBinLength: number;\n /**\n * Maximum array length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxArrayLength: number;\n /**\n * Maximum map length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxMapLength: number;\n /**\n * Maximum extension length.\n *\n * Defaults to 4_294_967_295 (UINT32_MAX).\n */\n maxExtLength: number;\n\n /**\n * An object key decoder. Defaults to the shared instance of {@link CachedKeyDecoder}.\n * `null` is a special value to disable the use of the key decoder at all.\n */\n keyDecoder: KeyDecoder | null;\n\n /**\n * A function to convert decoded map key to a valid JS key type.\n *\n * Defaults to a function that throws an error if the key is not a string or a number.\n */\n mapKeyConverter: (key: unknown) => MapKeyType;\n }>\n> &\n ContextOf<ContextType>;\n\nconst STATE_ARRAY = \"array\";\nconst STATE_MAP_KEY = \"map_key\";\nconst STATE_MAP_VALUE = \"map_value\";\n\ntype MapKeyType = string | number;\n\nconst mapKeyConverter = (key: unknown): MapKeyType => {\n if (typeof key === \"string\" || typeof key === \"number\") {\n return key;\n }\n throw new DecodeError(\"The type of key must be string or number but \" + typeof key);\n};\n\ntype StackMapState = {\n type: typeof STATE_MAP_KEY | typeof STATE_MAP_VALUE;\n size: number;\n key: MapKeyType | null;\n readCount: number;\n map: Record<string, unknown>;\n};\n\ntype StackArrayState = {\n type: typeof STATE_ARRAY;\n size: number;\n array: Array<unknown>;\n position: number;\n};\n\nclass StackPool {\n private readonly stack: Array<StackState> = [];\n private stackHeadPosition = -1;\n\n public get length(): number {\n return this.stackHeadPosition + 1;\n }\n\n public top(): StackState | undefined {\n return this.stack[this.stackHeadPosition];\n }\n\n public pushArrayState(size: number) {\n const state = this.getUninitializedStateFromPool() as StackArrayState;\n\n state.type = STATE_ARRAY;\n state.position = 0;\n state.size = size;\n state.array = new Array(size);\n }\n\n public pushMapState(size: number) {\n const state = this.getUninitializedStateFromPool() as StackMapState;\n\n state.type = STATE_MAP_KEY;\n state.readCount = 0;\n state.size = size;\n state.map = {};\n }\n\n private getUninitializedStateFromPool() {\n this.stackHeadPosition++;\n\n if (this.stackHeadPosition === this.stack.length) {\n const partialState: Partial<StackState> = {\n type: undefined,\n size: 0,\n array: undefined,\n position: 0,\n readCount: 0,\n map: undefined,\n key: null,\n };\n\n this.stack.push(partialState as StackState);\n }\n\n return this.stack[this.stackHeadPosition];\n }\n\n public release(state: StackState): void {\n const topStackState = this.stack[this.stackHeadPosition];\n\n if (topStackState !== state) {\n throw new Error(\"Invalid stack state. Released state is not on top of the stack.\");\n }\n\n if (state.type === STATE_ARRAY) {\n const partialState = state as Partial<StackArrayState>;\n partialState.size = 0;\n partialState.array = undefined;\n partialState.position = 0;\n partialState.type = undefined;\n }\n\n if (state.type === STATE_MAP_KEY || state.type === STATE_MAP_VALUE) {\n const partialState = state as Partial<StackMapState>;\n partialState.size = 0;\n partialState.map = undefined;\n partialState.readCount = 0;\n partialState.type = undefined;\n }\n\n this.stackHeadPosition--;\n }\n\n public reset(): void {\n this.stack.length = 0;\n this.stackHeadPosition = -1;\n }\n}\n\ntype StackState = StackArrayState | StackMapState;\n\nconst HEAD_BYTE_REQUIRED = -1;\n\nconst EMPTY_VIEW = new DataView<ArrayBufferLike>(new ArrayBuffer(0));\nconst EMPTY_BYTES = new Uint8Array<ArrayBufferLike>(EMPTY_VIEW.buffer);\n\ntry {\n // IE11: The spec says it should throw RangeError,\n // IE11: but in IE11 it throws TypeError.\n EMPTY_VIEW.getInt8(0);\n} catch (e) {\n if (!(e instanceof RangeError)) {\n throw new Error(\n \"This module is not supported in the current JavaScript engine because DataView does not throw RangeError on out-of-bounds access\",\n );\n }\n}\n\nconst MORE_DATA = new RangeError(\"Insufficient data\");\n\nconst sharedCachedKeyDecoder = new CachedKeyDecoder();\n\nexport class Decoder<ContextType = undefined> {\n private readonly extensionCodec: ExtensionCodecType<ContextType>;\n private readonly context: ContextType;\n private readonly useBigInt64: boolean;\n private readonly rawStrings: boolean;\n private readonly maxStrLength: number;\n private readonly maxBinLength: number;\n private readonly maxArrayLength: number;\n private readonly maxMapLength: number;\n private readonly maxExtLength: number;\n private readonly keyDecoder: KeyDecoder | null;\n private readonly mapKeyConverter: (key: unknown) => MapKeyType;\n\n private totalPos = 0;\n private pos = 0;\n\n private view = EMPTY_VIEW;\n private bytes = EMPTY_BYTES;\n private headByte = HEAD_BYTE_REQUIRED;\n private readonly stack = new StackPool();\n\n private entered = false;\n\n public constructor(options?: DecoderOptions<ContextType>) {\n this.extensionCodec = options?.extensionCodec ?? (ExtensionCodec.defaultCodec as ExtensionCodecType<ContextType>);\n this.context = (options as { context: ContextType } | undefined)?.context as ContextType; // needs a type assertion because EncoderOptions has no context property when ContextType is undefined\n\n this.useBigInt64 = options?.useBigInt64 ?? false;\n this.rawStrings = options?.rawStrings ?? false;\n this.maxStrLength = options?.maxStrLength ?? UINT32_MAX;\n this.maxBinLength = options?.maxBinLength ?? UINT32_MAX;\n this.maxArrayLength = options?.maxArrayLength ?? UINT32_MAX;\n this.maxMapLength = options?.maxMapLength ?? UINT32_MAX;\n this.maxExtLength = options?.maxExtLength ?? UINT32_MAX;\n this.keyDecoder = options?.keyDecoder !== undefined ? options.keyDecoder : sharedCachedKeyDecoder;\n this.mapKeyConverter = options?.mapKeyConverter ?? mapKeyConverter;\n }\n\n private clone(): Decoder<ContextType> {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return new Decoder({\n extensionCodec: this.extensionCodec,\n context: this.context,\n useBigInt64: this.useBigInt64,\n rawStrings: this.rawStrings,\n maxStrLength: this.maxStrLength,\n maxBinLength: this.maxBinLength,\n maxArrayLength: this.maxArrayLength,\n maxMapLength: this.maxMapLength,\n maxExtLength: this.maxExtLength,\n keyDecoder: this.keyDecoder,\n } as any);\n }\n\n private reinitializeState() {\n this.totalPos = 0;\n this.headByte = HEAD_BYTE_REQUIRED;\n this.stack.reset();\n\n // view, bytes, and pos will be re-initialized in setBuffer()\n }\n\n private setBuffer(buffer: ArrayLike<number> | ArrayBufferView | ArrayBufferLike): void {\n const bytes = ensureUint8Array(buffer);\n this.bytes = bytes;\n this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n this.pos = 0;\n }\n\n private appendBuffer(buffer: ArrayLike<number> | ArrayBufferView | ArrayBufferLike): void {\n if (this.headByte === HEAD_BYTE_REQUIRED && !this.hasRemaining(1)) {\n this.setBuffer(buffer);\n } else {\n const remainingData = this.bytes.subarray(this.pos);\n const newData = ensureUint8Array(buffer);\n\n // concat remainingData + newData\n const newBuffer = new Uint8Array(remainingData.length + newData.length);\n newBuffer.set(remainingData);\n newBuffer.set(newData, remainingData.length);\n this.setBuffer(newBuffer);\n }\n }\n\n private hasRemaining(size: number) {\n return this.view.byteLength - this.pos >= size;\n }\n\n private createExtraByteError(posToShow: number): Error {\n const { view, pos } = this;\n return new RangeError(`Extra ${view.byteLength - pos} of ${view.byteLength} byte(s) found at buffer[${posToShow}]`);\n }\n\n /**\n * @throws {@link DecodeError}\n * @throws {@link RangeError}\n */\n public decode(buffer: ArrayLike<number> | ArrayBufferView | ArrayBufferLike): unknown {\n if (this.entered) {\n const instance = this.clone();\n return instance.decode(buffer);\n }\n\n try {\n this.entered = true;\n\n this.reinitializeState();\n this.setBuffer(buffer);\n\n const object = this.doDecodeSync();\n if (this.hasRemaining(1)) {\n throw this.createExtraByteError(this.pos);\n }\n return object;\n } finally {\n this.entered = false;\n }\n }\n\n public *decodeMulti(buffer: ArrayLike<number> | ArrayBufferView | ArrayBufferLike): Generator<unknown, void, unknown> {\n if (this.entered) {\n const instance = this.clone();\n yield* instance.decodeMulti(buffer);\n return;\n }\n\n try {\n this.entered = true;\n\n this.reinitializeState();\n this.setBuffer(buffer);\n\n while (this.hasRemaining(1)) {\n yield this.doDecodeSync();\n }\n } finally {\n this.entered = false;\n }\n }\n\n public async decodeAsync(stream: AsyncIterable<ArrayLike<number> | ArrayBufferView | ArrayBufferLike>): Promise<unknown> {\n if (this.entered) {\n const instance = this.clone();\n return instance.decodeAsync(stream);\n }\n\n try {\n this.entered = true;\n\n let decoded = false;\n let object: unknown;\n for await (const buffer of stream) {\n if (decoded) {\n this.entered = false;\n throw this.createExtraByteError(this.totalPos);\n }\n\n this.appendBuffer(buffer);\n\n try {\n object = this.doDecodeSync();\n decoded = true;\n } catch (e) {\n if (!(e instanceof RangeError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n }\n\n if (decoded) {\n if (this.hasRemaining(1)) {\n throw this.createExtraByteError(this.totalPos);\n }\n return object;\n }\n\n const { headByte, pos, totalPos } = this;\n throw new RangeError(\n `Insufficient data in parsing ${prettyByte(headByte)} at ${totalPos} (${pos} in the current buffer)`,\n );\n } finally {\n this.entered = false;\n }\n }\n\n public decodeArrayStream(\n stream: AsyncIterable<ArrayLike<number> | ArrayBufferView | ArrayBufferLike>,\n ): AsyncGenerator<unknown, void, unknown> {\n return this.decodeMultiAsync(stream, true);\n }\n\n public decodeStream(stream: AsyncIterable<ArrayLike<number> | ArrayBufferView | ArrayBufferLike>): AsyncGenerator<unknown, void, unknown> {\n return this.decodeMultiAsync(stream, false);\n }\n\n private async *decodeMultiAsync(stream: AsyncIterable<ArrayLike<number> | ArrayBufferView | ArrayBufferLike>, isArray: boolean): AsyncGenerator<unknown, void, unknown> {\n if (this.entered) {\n const instance = this.clone();\n yield* instance.decodeMultiAsync(stream, isArray);\n return;\n }\n\n try {\n this.entered = true;\n\n let isArrayHeaderRequired = isArray;\n let arrayItemsLeft = -1;\n\n for await (const buffer of stream) {\n if (isArray && arrayItemsLeft === 0) {\n throw this.createExtraByteError(this.totalPos);\n }\n\n this.appendBuffer(buffer);\n\n if (isArrayHeaderRequired) {\n arrayItemsLeft = this.readArraySize();\n isArrayHeaderRequired = false;\n this.complete();\n }\n\n try {\n while (true) {\n yield this.doDecodeSync();\n if (--arrayItemsLeft === 0) {\n break;\n }\n }\n } catch (e) {\n if (!(e instanceof RangeError)) {\n throw e; // rethrow\n }\n // fallthrough\n }\n this.totalPos += this.pos;\n }\n } finally {\n this.entered = false;\n }\n }\n\n private doDecodeSync(): unknown {\n DECODE: while (true) {\n const headByte = this.readHeadByte();\n let object: unknown;\n\n if (headByte >= 0xe0) {\n // negative fixint (111x xxxx) 0xe0 - 0xff\n object = headByte - 0x100;\n } else if (headByte < 0xc0) {\n if (headByte < 0x80) {\n // positive fixint (0xxx xxxx) 0x00 - 0x7f\n object = headByte;\n } else if (headByte < 0x90) {\n // fixmap (1000 xxxx) 0x80 - 0x8f\n const size = headByte - 0x80;\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte < 0xa0) {\n // fixarray (1001 xxxx) 0x90 - 0x9f\n const size = headByte - 0x90;\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else {\n // fixstr (101x xxxx) 0xa0 - 0xbf\n const byteLength = headByte - 0xa0;\n object = this.decodeString(byteLength, 0);\n }\n } else if (headByte === 0xc0) {\n // nil\n object = null;\n } else if (headByte === 0xc2) {\n // false\n object = false;\n } else if (headByte === 0xc3) {\n // true\n object = true;\n } else if (headByte === 0xca) {\n // float 32\n object = this.readF32();\n } else if (headByte === 0xcb) {\n // float 64\n object = this.readF64();\n } else if (headByte === 0xcc) {\n // uint 8\n object = this.readU8();\n } else if (headByte === 0xcd) {\n // uint 16\n object = this.readU16();\n } else if (headByte === 0xce) {\n // uint 32\n object = this.readU32();\n } else if (headByte === 0xcf) {\n // uint 64\n if (this.useBigInt64) {\n object = this.readU64AsBigInt();\n } else {\n object = this.readU64();\n }\n } else if (headByte === 0xd0) {\n // int 8\n object = this.readI8();\n } else if (headByte === 0xd1) {\n // int 16\n object = this.readI16();\n } else if (headByte === 0xd2) {\n // int 32\n object = this.readI32();\n } else if (headByte === 0xd3) {\n // int 64\n if (this.useBigInt64) {\n object = this.readI64AsBigInt();\n } else {\n object = this.readI64();\n }\n } else if (headByte === 0xd9) {\n // str 8\n const byteLength = this.lookU8();\n object = this.decodeString(byteLength, 1);\n } else if (headByte === 0xda) {\n // str 16\n const byteLength = this.lookU16();\n object = this.decodeString(byteLength, 2);\n } else if (headByte === 0xdb) {\n // str 32\n const byteLength = this.lookU32();\n object = this.decodeString(byteLength, 4);\n } else if (headByte === 0xdc) {\n // array 16\n const size = this.readU16();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else if (headByte === 0xdd) {\n // array 32\n const size = this.readU32();\n if (size !== 0) {\n this.pushArrayState(size);\n this.complete();\n continue DECODE;\n } else {\n object = [];\n }\n } else if (headByte === 0xde) {\n // map 16\n const size = this.readU16();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte === 0xdf) {\n // map 32\n const size = this.readU32();\n if (size !== 0) {\n this.pushMapState(size);\n this.complete();\n continue DECODE;\n } else {\n object = {};\n }\n } else if (headByte === 0xc4) {\n // bin 8\n const size = this.lookU8();\n object = this.decodeBinary(size, 1);\n } else if (headByte === 0xc5) {\n // bin 16\n const size = this.lookU16();\n object = this.decodeBinary(size, 2);\n } else if (headByte === 0xc6) {\n // bin 32\n const size = this.lookU32();\n object = this.decodeBinary(size, 4);\n } else if (headByte === 0xd4) {\n // fixext 1\n object = this.decodeExtension(1, 0);\n } else if (headByte === 0xd5) {\n // fixext 2\n object = this.decodeExtension(2, 0);\n } else if (headByte === 0xd6) {\n // fixext 4\n object = this.decodeExtension(4, 0);\n } else if (headByte === 0xd7) {\n // fixext 8\n object = this.decodeExtension(8, 0);\n } else if (headByte === 0xd8) {\n // fixext 16\n object = this.decodeExtension(16, 0);\n } else if (headByte === 0xc7) {\n // ext 8\n const size = this.lookU8();\n object = this.decodeExtension(size, 1);\n } else if (headByte === 0xc8) {\n // ext 16\n const size = this.lookU16();\n object = this.decodeExtension(size, 2);\n } else if (headByte === 0xc9) {\n // ext 32\n const size = this.lookU32();\n object = this.decodeExtension(size, 4);\n } else {\n throw new DecodeError(`Unrecognized type byte: ${prettyByte(headByte)}`);\n }\n\n this.complete();\n\n const stack = this.stack;\n while (stack.length > 0) {\n // arrays and maps\n const state = stack.top()!;\n if (state.type === STATE_ARRAY) {\n state.array[state.position] = object;\n state.position++;\n if (state.position === state.size) {\n object = state.array;\n stack.release(state);\n } else {\n continue DECODE;\n }\n } else if (state.type === STATE_MAP_KEY) {\n if (object === \"__proto__\") {\n throw new DecodeError(\"The key __proto__ is not allowed\");\n }\n\n state.key = this.mapKeyConverter(object);\n state.type = STATE_MAP_VALUE;\n continue DECODE;\n } else {\n // it must be `state.type === State.MAP_VALUE` here\n\n state.map[state.key!] = object;\n state.readCount++;\n\n if (state.readCount === state.size) {\n object = state.map;\n stack.release(state);\n } else {\n state.key = null;\n state.type = STATE_MAP_KEY;\n continue DECODE;\n }\n }\n }\n\n return object;\n }\n }\n\n private readHeadByte(): number {\n if (this.headByte === HEAD_BYTE_REQUIRED) {\n this.headByte = this.readU8();\n // console.log(\"headByte\", prettyByte(this.headByte));\n }\n\n return this.headByte;\n }\n\n private complete(): void {\n this.headByte = HEAD_BYTE_REQUIRED;\n }\n\n private readArraySize(): number {\n const headByte = this.readHeadByte();\n\n switch (headByte) {\n case 0xdc:\n return this.readU16();\n case 0xdd:\n return this.readU32();\n default: {\n if (headByte < 0xa0) {\n return headByte - 0x90;\n } else {\n throw new DecodeError(`Unrecognized array type byte: ${prettyByte(headByte)}`);\n }\n }\n }\n }\n\n private pushMapState(size: number) {\n if (size > this.maxMapLength) {\n throw new DecodeError(`Max length exceeded: map length (${size}) > maxMapLengthLength (${this.maxMapLength})`);\n }\n\n this.stack.pushMapState(size);\n }\n\n private pushArrayState(size: number) {\n if (size > this.maxArrayLength) {\n throw new DecodeError(`Max length exceeded: array length (${size}) > maxArrayLength (${this.maxArrayLength})`);\n }\n\n this.stack.pushArrayState(size);\n }\n\n private decodeString(byteLength: number, headerOffset: number): string | Uint8Array {\n if (!this.rawStrings || this.stateIsMapKey()) {\n return this.decodeUtf8String(byteLength, headerOffset);\n }\n return this.decodeBinary(byteLength, headerOffset);\n }\n\n /**\n * @throws {@link RangeError}\n */\n private decodeUtf8String(byteLength: number, headerOffset: number): string {\n if (byteLength > this.maxStrLength) {\n throw new DecodeError(\n `Max length exceeded: UTF-8 byte length (${byteLength}) > maxStrLength (${this.maxStrLength})`,\n );\n }\n\n if (this.bytes.byteLength < this.pos + headerOffset + byteLength) {\n throw MORE_DATA;\n }\n\n const offset = this.pos + headerOffset;\n let object: string;\n if (this.stateIsMapKey() && this.keyDecoder?.canBeCached(byteLength)) {\n object = this.keyDecoder.decode(this.bytes, offset, byteLength);\n } else {\n object = utf8Decode(this.bytes, offset, byteLength);\n }\n this.pos += headerOffset + byteLength;\n return object;\n }\n\n private stateIsMapKey(): boolean {\n if (this.stack.length > 0) {\n const state = this.stack.top()!;\n return state.type === STATE_MAP_KEY;\n }\n return false;\n }\n\n /**\n * @throws {@link RangeError}\n */\n private decodeBinary(byteLength: number, headOffset: number): Uint8Array {\n if (byteLength > this.maxBinLength) {\n throw new DecodeError(`Max length exceeded: bin length (${byteLength}) > maxBinLength (${this.maxBinLength})`);\n }\n\n if (!this.hasRemaining(byteLength + headOffset)) {\n throw MORE_DATA;\n }\n\n const offset = this.pos + headOffset;\n const object = this.bytes.subarray(offset, offset + byteLength);\n this.pos += headOffset + byteLength;\n return object;\n }\n\n private decodeExtension(size: number, headOffset: number): unknown {\n if (size > this.maxExtLength) {\n throw new DecodeError(`Max length exceeded: ext length (${size}) > maxExtLength (${this.maxExtLength})`);\n }\n\n const extType = this.view.getInt8(this.pos + headOffset);\n const data = this.decodeBinary(size, headOffset + 1 /* extType */);\n return this.extensionCodec.decode(data, extType, this.context);\n }\n\n private lookU8() {\n return this.view.getUint8(this.pos);\n }\n\n private lookU16() {\n return this.view.getUint16(this.pos);\n }\n\n private lookU32() {\n return this.view.getUint32(this.pos);\n }\n\n private readU8(): number {\n const value = this.view.getUint8(this.pos);\n this.pos++;\n return value;\n }\n\n private readI8(): number {\n const value = this.view.getInt8(this.pos);\n this.pos++;\n return value;\n }\n\n private readU16(): number {\n const value = this.view.getUint16(this.pos);\n this.pos += 2;\n return value;\n }\n\n private readI16(): number {\n const value = this.view.getInt16(this.pos);\n this.pos += 2;\n return value;\n }\n\n private readU32(): number {\n const value = this.view.getUint32(this.pos);\n this.pos += 4;\n return value;\n }\n\n private readI32(): number {\n const value = this.view.getInt32(this.pos);\n this.pos += 4;\n return value;\n }\n\n private readU64(): number {\n const value = getUint64(this.view, this.pos);\n this.pos += 8;\n return value;\n }\n\n private readI64(): number {\n const value = getInt64(this.view, this.pos);\n this.pos += 8;\n return value;\n }\n\n private readU64AsBigInt(): bigint {\n const value = this.view.getBigUint64(this.pos);\n this.pos += 8;\n return value;\n }\n\n private readI64AsBigInt(): bigint {\n const value = this.view.getBigInt64(this.pos);\n this.pos += 8;\n return value;\n }\n\n private readF32() {\n const value = this.view.getFloat32(this.pos);\n this.pos += 4;\n return value;\n }\n\n private readF64() {\n const value = this.view.getFloat64(this.pos);\n this.pos += 8;\n return value;\n }\n}\n", "import { Decoder } from \"./Decoder.ts\";\nimport type { DecoderOptions } from \"./Decoder.ts\";\nimport type { SplitUndefined } from \"./context.ts\";\n\n/**\n * It decodes a single MessagePack object in a buffer.\n *\n * This is a synchronous decoding function.\n * See other variants for asynchronous decoding: {@link decodeAsync}, {@link decodeMultiStream}, or {@link decodeArrayStream}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decode<ContextType = undefined>(\n buffer: ArrayLike<number> | ArrayBufferView | ArrayBufferLike,\n options?: DecoderOptions<SplitUndefined<ContextType>>,\n): unknown {\n const decoder = new Decoder(options);\n return decoder.decode(buffer);\n}\n\n/**\n * It decodes multiple MessagePack objects in a buffer.\n * This is corresponding to {@link decodeMultiStream}.\n *\n * @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.\n * @throws {@link DecodeError} if the buffer contains invalid data.\n */\nexport function decodeMulti<ContextType = undefined>(\n buffer: ArrayLike<number> | BufferSource,\n options?: DecoderOptions<SplitUndefined<ContextType>>,\n): Generator<unknown, void, unknown> {\n const decoder = new Decoder(options);\n return decoder.decodeMulti(buffer);\n}\n", "import { nanoid } from 'nanoid';\nimport { encode, decode } from '@msgpack/msgpack';\nimport { ErrorEvent, RateLimitError } from '../types.js';\nimport retry from 'async-retry';\nimport ReconnectingWebSocket from 'reconnecting-websocket';\nimport type { CloseEvent, ErrorEvent as WsErrorEvent } from 'ws';\nimport { EventDispatcher } from '../events/index.js';\nimport { timeout } from '../utils/promise.js';\nimport WebSocket from 'isomorphic-ws';\nimport { NamedDisposable } from '../utils/disposable.js';\nimport { PromiseTimeoutError, SendTimeoutError } from '../errors/index.js';\n\ninterface WsOptions {\n debug?: boolean;\n startClosed?: boolean;\n pingInterval?: number;\n connectionTimeout?: number;\n maxRetries?: number;\n}\n\nexport interface CallOption {\n responseEvent?: string;\n timeout?: number;\n retries?: number | false;\n buffer?: boolean;\n abortSignal?: AbortSignal;\n}\n\nexport type WebSocketStatus = 'OPEN' | 'CONNECTING' | 'CLOSED';\n\nexport enum SocketEvent {\n BootError = 'Events.BootError',\n Response = 'response',\n Error = 'error',\n ClientId = 'App.Actions.GetClientId',\n}\n\n// Add specific error types for better error handling\nexport class ConnectionTimeoutError extends Error {\n constructor(message: string = 'WebSocket connection timeout') {\n super(message);\n this.name = 'ConnectionTimeoutError';\n }\n}\n\nexport class ConnectionFailedError extends Error {\n constructor(\n message: string,\n public readonly originalError?: Event\n ) {\n super(message);\n this.name = 'ConnectionFailedError';\n }\n}\n\nexport class InvalidMessageError extends Error {\n constructor(\n message: string,\n public readonly data?: unknown\n ) {\n super(message);\n this.name = 'InvalidMessageError';\n }\n}\n\n// Add configuration validation\nexport class InvalidConfigurationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'InvalidConfigurationError';\n }\n}\n\n// Export types for better TypeScript integration\nexport interface ConnectionStats {\n connectTime: number;\n reconnectCount: number;\n lastPingTime: number;\n lastPongTime: number;\n avgResponseTime: number;\n totalMessages: number;\n totalErrors: number;\n connectionStartTime: number;\n connectionDuration: number;\n uptime: number;\n messagesPerSecond: string;\n errorRate: string;\n timeSinceLastPing: number;\n timeSinceLastPong: number;\n}\n\nexport interface MessageQueueInfo {\n length: number;\n maxSize: number;\n oldestMessageAge: number;\n}\n\nexport interface RateLimiterInfo {\n currentRequests: number;\n maxRequests: number;\n windowMs: number;\n isLimited: boolean;\n}\n\nexport interface TransportConfig {\n pingInterval: number;\n queueTimeout: number;\n url: string;\n}\n\nexport interface ConnectionMetrics {\n status: string | undefined;\n clientId: string;\n isConnected: boolean;\n isConnecting: boolean;\n connectionStats: ConnectionStats;\n messageQueue: MessageQueueInfo;\n rateLimiter: RateLimiterInfo;\n config: TransportConfig;\n}\n\nexport type HealthStatus = 'healthy' | 'degraded' | 'unhealthy';\n\n// Transport events that applications can listen to\nexport interface TransportEvents {\n 'transport.error': {\n type: string;\n error: any;\n rawMessage?: unknown;\n timestamp: number;\n };\n 'transport.closed': {\n code?: number;\n reason?: string;\n metrics: ConnectionMetrics;\n timestamp: number;\n };\n}\n\nexport class Transport {\n private readonly PING_INTERVAL: number;\n\n private clientId: string = '';\n\n private closed = false;\n\n // @ts-expect-error\n private readonly rws: ReconnectingWebSocket;\n\n private disposables: NamedDisposable = new NamedDisposable();\n\n private connectPromise: Promise<void> | null = null;\n\n private readonly url: URL;\n\n private pingIntervalStarted = false;\n\n // Connection health monitoring\n private connectionStats = {\n connectTime: 0,\n reconnectCount: 0,\n lastPingTime: 0,\n lastPongTime: 0,\n avgResponseTime: 0,\n totalMessages: 0,\n totalErrors: 0,\n connectionStartTime: 0,\n };\n\n // Message queue for disconnection handling\n private messageQueue: Array<{\n action: string;\n data: any;\n options: CallOption;\n resolve: (value: any) => void;\n reject: (reason: any) => void;\n timestamp: number;\n }> = [];\n\n private readonly MAX_QUEUE_SIZE = 100;\n private readonly QUEUE_TIMEOUT = 30000; // 30 seconds\n\n // Rate limiting\n private rateLimiter = {\n requests: [] as number[],\n maxRequests: 50,\n windowMs: 1000, // 1 second\n };\n\n public constructor(\n url: string,\n private readonly eventEmitter: EventDispatcher,\n private readonly options: WsOptions = {}\n ) {\n // Validate configuration\n this.validateConfiguration(options);\n\n this.url = new URL(url);\n\n // Use configurable ping interval\n this.PING_INTERVAL = options.pingInterval ?? 30000;\n\n // Initialize connection stats\n this.connectionStats.connectionStartTime = Date.now();\n\n // Always start closed by default (lazy initialization)\n const startClosed = options.startClosed !== false;\n\n // @ts-expect-error\n this.rws = new ReconnectingWebSocket(this.url.toString(), [], {\n WebSocket: globalThis.WebSocket ?? WebSocket,\n connectionTimeout: options.connectionTimeout ?? 1000,\n maxReconnectionDelay: 2000,\n minReconnectionDelay: 200,\n maxEnqueuedMessages: 0,\n maxRetries: options.maxRetries ?? 50,\n startClosed,\n });\n\n this.log('debug', 'Transport initialized', {\n url: this.url.toString(),\n options,\n });\n this.registerWatchers();\n this.setupConnectionHealthMonitoring();\n this.startPeriodicMaintenance();\n }\n\n /**\n * Validate configuration options\n */\n private validateConfiguration(options: WsOptions): void {\n if (options.pingInterval !== undefined && (options.pingInterval < 1000 || options.pingInterval > 300000)) {\n throw new InvalidConfigurationError('pingInterval must be between 1000ms and 300000ms');\n }\n\n if (options.connectionTimeout !== undefined && (options.connectionTimeout < 100 || options.connectionTimeout > 30000)) {\n throw new InvalidConfigurationError('connectionTimeout must be between 100ms and 30000ms');\n }\n\n if (options.maxRetries !== undefined && (options.maxRetries < 0 || options.maxRetries > 100)) {\n throw new InvalidConfigurationError('maxRetries must be between 0 and 100');\n }\n }\n\n /**\n * Internal logging utility for debugging\n */\n private log(level: 'debug' | 'info' | 'warn' | 'error', message: string, data?: any): void {\n if (this.options.debug) {\n const timestamp = new Date().toISOString();\n const logData = data ? JSON.stringify(data, null, 2) : '';\n console[level](`[Transport ${timestamp}] ${message}${logData ? '\\n' + logData : ''}`);\n }\n }\n\n /**\n * Explicitly connect to the websocket if not already connected\n * Used for lazy initialization\n *\n * This method ensures only one connection attempt happens at a time\n * by caching the connection promise.\n */\n #connect(): Promise<void> {\n if (this.isConnected) {\n return Promise.resolve();\n }\n\n // Return existing connection promise if one is already in progress\n if (this.connectPromise) {\n return this.connectPromise;\n }\n\n // Create and cache the connection promise\n this.connectPromise = new Promise((resolve, reject) => {\n // Check if connection is already open after potential reconnect\n if (this.isConnected) {\n resolve();\n this.#startPeriodicPing();\n return;\n }\n\n // Open the connection if it's closed\n if (this.rws.readyState === 3) {\n this.rws.reconnect();\n }\n\n let timeoutId: ReturnType<typeof setTimeout>;\n\n const openHandler = () => {\n this.rws.removeEventListener('open', openHandler);\n this.rws.removeEventListener('error', errorHandler);\n clearTimeout(timeoutId);\n\n // Clear the cached promise on success\n this.connectPromise = null;\n resolve();\n this.#startPeriodicPing();\n };\n\n const errorHandler = (error: Event) => {\n this.rws.removeEventListener('open', openHandler);\n this.rws.removeEventListener('error', errorHandler);\n clearTimeout(timeoutId);\n\n // Clear the cached promise on error so retry is possible\n this.connectPromise = null;\n reject(new Error(`WebSocket connection failed: ${error}`));\n };\n\n // Add timeout to prevent hanging forever\n timeoutId = setTimeout(() => {\n this.rws.removeEventListener('open', openHandler);\n this.rws.removeEventListener('error', errorHandler);\n\n // Clear the cached promise on timeout so retry is possible\n this.connectPromise = null;\n reject(new Error('WebSocket connection timeout'));\n }, 10000); // 10 second timeout\n\n this.rws.addEventListener('open', openHandler);\n this.rws.addEventListener('error', errorHandler);\n });\n\n return this.connectPromise;\n }\n\n /**\n * Ensure the websocket is open without requiring an application-level roundtrip.\n */\n public connect(): Promise<void> {\n return this.#connect();\n }\n\n #startPeriodicPing(): void {\n if (this.pingIntervalStarted || this.closed) {\n return;\n }\n\n this.pingIntervalStarted = true;\n this.disposables.add('pingInterval', () => {\n const interval = setInterval(async () => {\n try {\n this.connectionStats.lastPingTime = Date.now();\n this.log('debug', 'Sending periodic ping');\n\n const startTime = Date.now();\n await this.invoke('ping');\n\n this.connectionStats.lastPongTime = Date.now();\n const pingTime = this.connectionStats.lastPongTime - startTime;\n\n this.log('debug', `Ping successful`, { pingTime });\n } catch (error) {\n this.log('error', 'Ping failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n\n // If ping fails consistently, the connection might be dead\n if (Date.now() - this.connectionStats.lastPongTime > this.PING_INTERVAL * 3) {\n this.log('warn', 'Connection appears dead, forcing reconnection');\n this.rws.reconnect();\n }\n }\n }, this.PING_INTERVAL);\n\n return {\n dispose: () => {\n clearInterval(interval);\n this.pingIntervalStarted = false;\n },\n };\n });\n }\n\n public id(): string {\n return this.clientId;\n }\n\n private async registerWatchers(): Promise<void> {\n const onMessage = (ev: MessageEvent) => {\n if (!(ev.data instanceof Blob)) {\n throw new Error('Unexpected message type: ' + typeof ev.data);\n }\n\n ev.data.arrayBuffer().then((buffer: ArrayBuffer) => {\n if (buffer.byteLength === 0) {\n this.log('warn', 'Ignoring empty WebSocket frame');\n return;\n }\n\n try {\n this.handleRawMessage(decode(buffer));\n } catch (error) {\n this.connectionStats.totalErrors++;\n this.log('error', 'Failed to decode WebSocket frame', {\n error: error instanceof Error ? error.message : String(error),\n byteLength: buffer.byteLength,\n });\n\n this.eventEmitter.emit('transport.error', {\n type: 'message_decode_error',\n error,\n rawMessage: buffer,\n timestamp: Date.now(),\n });\n }\n });\n };\n this.rws.addEventListener('message', onMessage);\n\n this.disposables.add('message', {\n dispose: () => {\n this.rws.removeEventListener('message', onMessage);\n },\n });\n }\n\n private async handleRawMessage(ev: unknown): Promise<void> {\n if (typeof ev !== 'object' || ev === null) {\n this.log('debug', 'Received invalid message format', { ev });\n return;\n }\n\n try {\n const { data, event, as } = ev as {\n data: any;\n event: string;\n as: string;\n };\n\n // Validate message structure\n if (!event || typeof event !== 'string') {\n throw new InvalidMessageError('Message missing event field', ev);\n }\n\n this.log('debug', 'Processing message', { event, hasData: !!data });\n\n if (event === SocketEvent.ClientId) {\n this.clientId = data.id;\n this.log('info', 'Client ID received', { clientId: this.clientId });\n return;\n }\n\n if (event === SocketEvent.BootError) {\n this.log('error', 'Boot error received', { data });\n return;\n }\n\n if (event === SocketEvent.Response) {\n // {\"event\":\"response\",\"data\":{\"responseEvent\":\"ping\",\"data\":\"pong\"}}\n const { responseEvent, data: responseData } = data;\n\n if (!responseEvent) {\n throw new InvalidMessageError('Response message missing responseEvent', ev);\n }\n\n this.log('debug', 'Response message received', { responseEvent });\n await this.handleMessage(responseEvent, responseData);\n return;\n }\n\n if (event === SocketEvent.Error) {\n // {\"event\":\"error\",\"data\":{\"errorEvent\":\"pingo_error\",\"data\":{\"code\":404,\"message\":\"Action pingo not found\"}}}\n const { errorEvent, data: responseData } = data;\n\n if (!errorEvent) {\n throw new InvalidMessageError('Error message missing errorEvent', ev);\n }\n\n this.log('debug', 'Error message received', {\n errorEvent,\n errorData: responseData,\n });\n await this.handleMessage(errorEvent, responseData);\n return;\n }\n\n await this.handleMessage(event, data, as);\n } catch (e) {\n this.connectionStats.totalErrors++;\n\n if (e instanceof InvalidMessageError) {\n this.log('error', 'Invalid message format', {\n error: e.message,\n data: e.data,\n totalErrors: this.connectionStats.totalErrors,\n });\n } else {\n this.log('error', 'Failed to parse message', {\n ev,\n error: e instanceof Error ? e.message : String(e),\n totalErrors: this.connectionStats.totalErrors,\n });\n }\n\n // Don't throw - we want to continue processing other messages\n // But emit an error event for the application to handle\n this.eventEmitter.emit('transport.error', {\n type: 'message_parse_error',\n error: e,\n rawMessage: ev,\n timestamp: Date.now(),\n });\n }\n }\n\n private async handleMessage(event: string, data: any, as?: string): Promise<any> {\n if (event === SocketEvent.ClientId) {\n this.clientId = data.id;\n this.eventEmitter.emit(event, data.id);\n\n return;\n }\n\n event && this.eventEmitter.emit(as || event, data);\n }\n\n public listen(event: string, listener: (data: any) => void, _context?: any) {\n return this.eventEmitter.listen(event, listener);\n }\n\n public removeListener(event: string, listener?: (data: any) => void): void {\n this.eventEmitter.removeListener(event, listener);\n }\n\n public listenOnce(event: string, listener: (data: any) => void, context?: any): void {\n this.eventEmitter.once(event, listener, context);\n this.disposables.add(`once_${event}_${nanoid()}`, {\n dispose: () => {\n this.eventEmitter.removeListener(event, listener);\n },\n });\n }\n\n public emit(event: string, ...data: any): void {\n this.eventEmitter.emit(event, ...data);\n }\n\n public get isConnected(): boolean {\n return this.status === 'OPEN';\n }\n\n public get isConnecting(): boolean {\n return this.status === 'CONNECTING';\n }\n\n public get isDisconnected(): boolean {\n return this.status === 'CLOSED';\n }\n\n public get isClosed(): boolean {\n return this.closed;\n }\n\n public get status(): string | undefined {\n return {\n 0: 'CONNECTING',\n 1: 'OPEN',\n 2: 'CLOSING',\n 3: 'CLOSED',\n }[this.rws.readyState as unknown as number];\n }\n\n public async call(action: string, data: object | string = {}, options: CallOption = {}): Promise<any> {\n // Rate limiting check\n if (this.isRateLimited()) {\n throw new RateLimitError('Rate limit exceeded - too many requests');\n }\n\n // Clear old queued messages periodically\n this.clearOldQueuedMessages();\n\n const responseEvent = options.responseEvent || `${action}_${nanoid()}_response`;\n const errorEvent = `${responseEvent}_error`;\n\n let closeHandler: (ev: CloseEvent | WsErrorEvent) => void;\n const removeListeners = () => {\n if (closeHandler) {\n this.rws.removeEventListener('close', closeHandler);\n this.rws.removeEventListener('error', closeHandler);\n }\n\n this.eventEmitter.removeListener(responseEvent);\n this.eventEmitter.removeListener(errorEvent);\n };\n\n const handler = async (resolve: (value: any) => void, reject: (reason?: any) => void): Promise<void> => {\n const abortError = new DOMException('Request aborted', 'AbortError');\n if (options.abortSignal?.aborted) {\n reject(abortError);\n }\n\n if (options.abortSignal) {\n options.abortSignal.addEventListener('abort', () => {\n reject(abortError);\n });\n }\n\n // If not connected, queue the message\n if (!this.isConnected && !this.isClosed) {\n this.log('debug', 'Connection not available, queuing message', {\n action,\n });\n\n // Check queue size limit\n if (this.messageQueue.length >= this.MAX_QUEUE_SIZE) {\n const oldestMessage = this.messageQueue.shift();\n if (oldestMessage) {\n oldestMessage.reject(new Error('Message queue full, oldest message dropped'));\n }\n }\n\n this.messageQueue.push({\n action,\n data,\n options,\n resolve,\n reject,\n timestamp: Date.now(),\n });\n return;\n }\n\n const startTime = Date.now();\n\n this.listenOnce(responseEvent, (response) => {\n // Update response time stats\n const responseTime = Date.now() - startTime;\n this.connectionStats.avgResponseTime = (this.connectionStats.avgResponseTime + responseTime) / 2;\n this.connectionStats.totalMessages++;\n\n this.log('debug', 'Message response received', {\n action,\n responseTime,\n avgResponseTime: this.connectionStats.avgResponseTime,\n });\n\n resolve(response);\n });\n\n this.listenOnce(errorEvent, (e) => {\n this.connectionStats.totalErrors++;\n this.log('error', 'Message error received', { action, error: e });\n reject(new ErrorEvent(e.code, e.message, e));\n });\n\n closeHandler = (_ev: (CloseEvent | WsErrorEvent) & { reason?: string; code?: number }) => {\n if (_ev.code === 1008 && (_ev.reason || '').includes('rate limit')) {\n reject(new RateLimitError(_ev.reason || 'Rate limit exceeded', _ev));\n return;\n }\n reject(new Error(`Connection lost to the notebook during request: ${_ev.reason || 'Unknown reason'}`));\n };\n\n this.rws.addEventListener('close', closeHandler);\n this.rws.addEventListener('error', closeHandler);\n\n try {\n this.rws.send(this.pack({ action, data, errorEvent, responseEvent }));\n this.log('debug', 'Message sent', { action, data });\n } catch (error) {\n this.log('error', 'Failed to send message', { action, error });\n throw error;\n }\n };\n\n const send = async () => {\n // Ensure connection is established before making calls\n await this.#connect();\n\n const promise = new Promise(handler).finally(removeListeners);\n if (!options.timeout) {\n return promise;\n }\n\n return timeout(promise, options.timeout).catch((error: unknown) => {\n if (error instanceof PromiseTimeoutError) {\n throw SendTimeoutError.fromPromiseTimeoutError(error);\n }\n\n throw error;\n }).finally(removeListeners);\n };\n\n return this.sendWithRetry(async () => await send(), options.retries || 10);\n }\n\n private pack(data: string | ArrayBuffer | Blob | object): string | Blob | ArrayBuffer {\n return new Blob([encode(data) as BlobPart]);\n }\n\n private sendWithRetry(sender: () => Promise<any>, retries = 10): Promise<any> {\n /**\n * Enhanced retry with exponential backoff and intelligent error handling\n */\n return retry(\n async (bail: (error: Error) => void, attempt: number) => {\n try {\n return await sender();\n } catch (e) {\n // Don't retry these errors\n if (\n e instanceof ErrorEvent ||\n e instanceof RateLimitError ||\n e instanceof InvalidConfigurationError ||\n e instanceof InvalidMessageError ||\n e instanceof DOMException\n ) {\n this.log('debug', 'Non-retryable error, bailing', {\n error: e.message,\n attempt,\n });\n bail(e);\n return;\n }\n\n /**\n * If we can't send due to timeout, attempt to reconnect\n */\n if (e instanceof SendTimeoutError) {\n this.reconnect();\n this.log('warn', 'Send operation timed out, connection reset', {\n attempt,\n timeout: e.time,\n });\n }\n\n // Log retry attempt\n this.log('debug', 'Retrying send operation', {\n attempt,\n error: e instanceof Error ? e.message : String(e),\n nextDelay: this.getBackoffDelay(attempt - 1),\n });\n\n throw e;\n }\n },\n {\n retries,\n onRetry: (e: unknown, attempt: number) => {\n this.log('warn', 'Send operation retry', {\n attempt,\n maxRetries: retries,\n error: e instanceof Error ? e.message : String(e),\n });\n },\n // Use exponential backoff with jitter\n minTimeout: 1000,\n factor: 2,\n maxTimeout: 30000,\n randomize: true,\n }\n );\n }\n\n public invoke(action: string, data: object | string = {}, options: CallOption = {}): Promise<any> {\n if (!options.responseEvent) {\n options.responseEvent = `${action}_${nanoid()}`;\n }\n\n return this.call('invoke', { action, data }, options);\n }\n\n /**\n * Reconnect the websocket without disposing listeners.\n * Uses the underlying ReconnectingWebSocket's reconnect mechanism.\n * This preserves all event listeners and state.\n */\n public reconnect(): void {\n if (this.closed) {\n throw new Error('Cannot reconnect a closed transport. The transport has been permanently closed.');\n }\n\n this.log('info', 'Reconnecting transport');\n\n // Clear pending connection promise to allow fresh connection\n this.connectPromise = null;\n\n // Use ReconnectingWebSocket's built-in reconnect\n // This will close the current connection and open a new one\n // without disposing event listeners\n this.rws.reconnect();\n }\n\n public disconnect(): void {\n if (this.closed) {\n console.trace('Transport is already closed, cannot disconnect again');\n return;\n }\n\n this.close();\n }\n\n public close(code?: number, reason?: string): void {\n if (this.closed) {\n return;\n }\n\n this.log('info', 'Closing transport connection', { code, reason });\n\n // Clear any pending connection promise\n this.connectPromise = null;\n\n // Reject all queued messages\n const queuedCount = this.messageQueue.length;\n this.messageQueue.forEach((msg) => {\n console.log('Rejecting queued message due to connection close');\n msg.reject(new Error('Connection closed while message was queued'));\n });\n this.messageQueue = [];\n\n if (queuedCount > 0) {\n this.log('debug', `Rejected ${queuedCount} queued messages due to connection close`);\n }\n\n // Clear rate limiter\n this.rateLimiter.requests = [];\n\n // Dispose all event disposables\n this.disposables.dispose();\n\n // Close WebSocket connection\n try {\n this.rws.close(code, reason);\n } catch (error) {\n this.log('error', 'Error closing WebSocket', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n\n // Emit final close event\n this.eventEmitter.emit('transport.closed', {\n code,\n reason,\n metrics: this.getConnectionMetrics(),\n timestamp: Date.now(),\n });\n\n this.eventEmitter.removeListener('*'); // Remove all event listeners\n this.closed = true;\n this.log('info', 'Transport connection closed successfully');\n }\n\n public onDidConnect(listener: () => void): void {\n this.rws.addEventListener('open', listener);\n this.disposables.add('connect', {\n dispose: () => {\n this.rws.removeEventListener('open', listener);\n },\n });\n }\n\n public onDidClose(listener: (e: CloseEvent | WsErrorEvent) => void): void {\n this.rws.addEventListener('close', listener);\n this.disposables.add('close', {\n dispose: () => {\n this.rws.removeEventListener('close', listener);\n },\n });\n }\n\n /**\n * Setup connection health monitoring\n */\n private setupConnectionHealthMonitoring(): void {\n this.rws.addEventListener('open', () => {\n this.connectionStats.connectTime = Date.now();\n this.connectionStats.reconnectCount++;\n this.log('info', 'Connection established', {\n reconnectCount: this.connectionStats.reconnectCount,\n timeSinceStart: Date.now() - this.connectionStats.connectionStartTime,\n });\n this.processMessageQueue();\n });\n\n this.rws.addEventListener('close', (event: CloseEvent) => {\n this.log('warn', 'Connection closed', {\n code: event.code,\n reason: event.reason,\n wasClean: event.wasClean,\n });\n this.handleConnectionClose(event.code);\n });\n\n this.rws.addEventListener('error', (event: ErrorEvent) => {\n this.connectionStats.totalErrors++;\n this.log('error', 'Connection error', {\n error: event,\n totalErrors: this.connectionStats.totalErrors,\n });\n });\n }\n\n /**\n * Handle different WebSocket close codes appropriately\n */\n private handleConnectionClose(code: number): 'reconnect' | 'stop' | 'retry' {\n switch (code) {\n case 1000: // Normal closure\n this.log('info', 'Normal connection closure');\n return 'stop';\n case 1001: // Going away\n this.log('info', 'Connection going away, will reconnect');\n return 'reconnect';\n case 1006: // Abnormal closure\n this.log('warn', 'Abnormal connection closure, will retry');\n return 'retry';\n case 1008: // Policy violation (rate limit)\n this.log('error', 'Connection closed due to policy violation');\n this.clearOldQueuedMessages();\n return 'stop';\n default:\n this.log('warn', `Unknown close code: ${code}, will reconnect`);\n return 'reconnect';\n }\n }\n\n /**\n * Process queued messages when connection is restored\n */\n private processMessageQueue(): void {\n if (this.messageQueue.length === 0) {\n return;\n }\n\n this.log('debug', `Processing ${this.messageQueue.length} queued messages`);\n\n const queue = [...this.messageQueue];\n this.messageQueue = [];\n\n for (const queuedMessage of queue) {\n // Check if message hasn't timed out\n if (Date.now() - queuedMessage.timestamp > this.QUEUE_TIMEOUT) {\n queuedMessage.reject(new Error('Queued message timed out'));\n continue;\n }\n\n // Retry the message\n this.call(queuedMessage.action, queuedMessage.data, queuedMessage.options)\n .then(queuedMessage.resolve)\n .catch(queuedMessage.reject);\n }\n }\n\n /**\n * Clear old queued messages to prevent memory leaks\n */\n private clearOldQueuedMessages(): void {\n const now = Date.now();\n const originalLength = this.messageQueue.length;\n\n this.messageQueue = this.messageQueue.filter((msg) => {\n const isExpired = now - msg.timestamp > this.QUEUE_TIMEOUT;\n if (isExpired) {\n msg.reject(new Error('Queued message expired'));\n }\n return !isExpired;\n });\n\n if (originalLength !== this.messageQueue.length) {\n this.log('debug', `Cleared ${originalLength - this.messageQueue.length} expired messages`);\n }\n }\n\n /**\n * Rate limiting check\n */\n private isRateLimited(): boolean {\n const now = Date.now();\n\n // Remove old requests outside the window\n this.rateLimiter.requests = this.rateLimiter.requests.filter((timestamp) => now - timestamp < this.rateLimiter.windowMs);\n\n // Check if we've exceeded the limit\n if (this.rateLimiter.requests.length >= this.rateLimiter.maxRequests) {\n return true;\n }\n\n // Add current request\n this.rateLimiter.requests.push(now);\n return false;\n }\n\n /**\n * Calculate exponential backoff delay\n */\n private getBackoffDelay(retryCount: number): number {\n const baseDelay = 1000; // 1 second\n const maxDelay = 30000; // 30 seconds\n const delay = Math.min(baseDelay * Math.pow(2, retryCount), maxDelay);\n\n // Add jitter to prevent thundering herd\n return delay + Math.random() * 1000;\n }\n\n /**\n * Get comprehensive connection metrics\n */\n public getConnectionMetrics() {\n const now = Date.now();\n const connectionDuration = this.connectionStats.connectTime > 0 ? now - this.connectionStats.connectTime : 0;\n\n return {\n status: this.status,\n clientId: this.clientId,\n isConnected: this.isConnected,\n isConnecting: this.isConnecting,\n connectionStats: {\n ...this.connectionStats,\n connectionDuration,\n uptime: now - this.connectionStats.connectionStartTime,\n messagesPerSecond:\n connectionDuration > 0 ? (this.connectionStats.totalMessages / (connectionDuration / 1000)).toFixed(2) : '0',\n errorRate:\n this.connectionStats.totalMessages > 0\n ? ((this.connectionStats.totalErrors / this.connectionStats.totalMessages) * 100).toFixed(2) + '%'\n : '0%',\n timeSinceLastPing: this.connectionStats.lastPingTime > 0 ? now - this.connectionStats.lastPingTime : 0,\n timeSinceLastPong: this.connectionStats.lastPongTime > 0 ? now - this.connectionStats.lastPongTime : 0,\n },\n messageQueue: {\n length: this.messageQueue.length,\n maxSize: this.MAX_QUEUE_SIZE,\n oldestMessageAge: this.messageQueue.length > 0 ? now - Math.min(...this.messageQueue.map((m) => m.timestamp)) : 0,\n },\n rateLimiter: {\n currentRequests: this.rateLimiter.requests.length,\n maxRequests: this.rateLimiter.maxRequests,\n windowMs: this.rateLimiter.windowMs,\n isLimited: this.isRateLimited(),\n },\n config: {\n pingInterval: this.PING_INTERVAL,\n queueTimeout: this.QUEUE_TIMEOUT,\n url: this.url.toString(),\n },\n };\n }\n\n /**\n * Get connection health status\n */\n public getHealthStatus(): 'healthy' | 'degraded' | 'unhealthy' {\n const metrics = this.getConnectionMetrics();\n const stats = metrics.connectionStats;\n\n // Unhealthy conditions\n if (!this.isConnected || stats.timeSinceLastPong > this.PING_INTERVAL * 2 || Number.parseFloat(stats.errorRate) > 50) {\n return 'unhealthy';\n }\n\n // Degraded conditions\n if (\n stats.avgResponseTime > 5000 ||\n Number.parseFloat(stats.errorRate) > 10 ||\n stats.timeSinceLastPong > this.PING_INTERVAL * 1.5\n ) {\n return 'degraded';\n }\n\n return 'healthy';\n }\n\n /**\n * Reset connection statistics\n */\n public resetStats(): void {\n this.connectionStats = {\n connectTime: Date.now(),\n reconnectCount: 0,\n lastPingTime: 0,\n lastPongTime: 0,\n avgResponseTime: 0,\n totalMessages: 0,\n totalErrors: 0,\n connectionStartTime: Date.now(),\n };\n\n this.log('debug', 'Connection statistics reset');\n }\n\n /**\n * Run connection diagnostics\n */\n public async runDiagnostics(): Promise<{\n status: HealthStatus;\n metrics: ConnectionMetrics;\n issues: string[];\n recommendations: string[];\n }> {\n const metrics = this.getConnectionMetrics();\n const status = this.getHealthStatus();\n const issues: string[] = [];\n const recommendations: string[] = [];\n\n // Check for issues\n if (!this.isConnected) {\n issues.push('Connection is not established');\n recommendations.push('Check network connectivity and server availability');\n }\n\n if (metrics.connectionStats.timeSinceLastPong > this.PING_INTERVAL * 2) {\n issues.push('No pong received recently - connection may be stale');\n recommendations.push('Consider forcing a reconnection');\n }\n\n if (Number.parseFloat(metrics.connectionStats.errorRate) > 10) {\n issues.push(`High error rate: ${metrics.connectionStats.errorRate}`);\n recommendations.push('Check server logs and network stability');\n }\n\n if (metrics.messageQueue.length > this.MAX_QUEUE_SIZE * 0.8) {\n issues.push('Message queue is nearly full');\n recommendations.push('Check connection stability and consider reducing message frequency');\n }\n\n if (metrics.connectionStats.avgResponseTime > 5000) {\n issues.push('High average response time');\n recommendations.push('Check network latency and server performance');\n }\n\n if (metrics.rateLimiter.isLimited) {\n issues.push('Rate limiting is active');\n recommendations.push('Reduce request frequency or increase rate limit');\n }\n\n this.log('info', 'Connection diagnostics completed', {\n status,\n issueCount: issues.length,\n recommendationCount: recommendations.length,\n });\n\n return {\n status,\n metrics,\n issues,\n recommendations,\n };\n }\n\n /**\n * Periodic maintenance - clean up old data, run health checks\n */\n private startPeriodicMaintenance(): void {\n this.disposables.add('maintenance', () => {\n // Run maintenance every 5 minutes\n const maintenanceInterval = setInterval(\n () => {\n this.clearOldQueuedMessages();\n\n // Clean up old rate limiter entries (should already be done, but double-check)\n const now = Date.now();\n this.rateLimiter.requests = this.rateLimiter.requests.filter(\n (timestamp) => now - timestamp < this.rateLimiter.windowMs\n );\n\n // Log health status if debug is enabled\n if (this.options.debug) {\n const health = this.getHealthStatus();\n const metrics = this.getConnectionMetrics();\n this.log('debug', 'Periodic health check', {\n health,\n messageCount: metrics.connectionStats.totalMessages,\n errorCount: metrics.connectionStats.totalErrors,\n queueLength: metrics.messageQueue.length,\n });\n }\n },\n 5 * 60 * 1000\n ); // 5 minutes\n\n return {\n dispose: () => {\n clearInterval(maintenanceInterval);\n },\n };\n });\n }\n}\n", "/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nfunction __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nfunction __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nfunction __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\n\nvar Event = /** @class */ (function () {\r\n function Event(type, target) {\r\n this.target = target;\r\n this.type = type;\r\n }\r\n return Event;\r\n}());\r\nvar ErrorEvent = /** @class */ (function (_super) {\r\n __extends(ErrorEvent, _super);\r\n function ErrorEvent(error, target) {\r\n var _this = _super.call(this, 'error', target) || this;\r\n _this.message = error.message;\r\n _this.error = error;\r\n return _this;\r\n }\r\n return ErrorEvent;\r\n}(Event));\r\nvar CloseEvent = /** @class */ (function (_super) {\r\n __extends(CloseEvent, _super);\r\n function CloseEvent(code, reason, target) {\r\n if (code === void 0) { code = 1000; }\r\n if (reason === void 0) { reason = ''; }\r\n var _this = _super.call(this, 'close', target) || this;\r\n _this.wasClean = true;\r\n _this.code = code;\r\n _this.reason = reason;\r\n return _this;\r\n }\r\n return CloseEvent;\r\n}(Event));\n\n/*!\r\n * Reconnecting WebSocket\r\n * by Pedro Ladaria <pedro.ladaria@gmail.com>\r\n * https://github.com/pladaria/reconnecting-websocket\r\n * License MIT\r\n */\r\nvar getGlobalWebSocket = function () {\r\n if (typeof WebSocket !== 'undefined') {\r\n // @ts-ignore\r\n return WebSocket;\r\n }\r\n};\r\n/**\r\n * Returns true if given argument looks like a WebSocket class\r\n */\r\nvar isWebSocket = function (w) { return typeof w !== 'undefined' && !!w && w.CLOSING === 2; };\r\nvar DEFAULT = {\r\n maxReconnectionDelay: 10000,\r\n minReconnectionDelay: 1000 + Math.random() * 4000,\r\n minUptime: 5000,\r\n reconnectionDelayGrowFactor: 1.3,\r\n connectionTimeout: 4000,\r\n maxRetries: Infinity,\r\n maxEnqueuedMessages: Infinity,\r\n startClosed: false,\r\n debug: false,\r\n};\r\nvar ReconnectingWebSocket = /** @class */ (function () {\r\n function ReconnectingWebSocket(url, protocols, options) {\r\n var _this = this;\r\n if (options === void 0) { options = {}; }\r\n this._listeners = {\r\n error: [],\r\n message: [],\r\n open: [],\r\n close: [],\r\n };\r\n this._retryCount = -1;\r\n this._shouldReconnect = true;\r\n this._connectLock = false;\r\n this._binaryType = 'blob';\r\n this._closeCalled = false;\r\n this._messageQueue = [];\r\n /**\r\n * An event listener to be called when the WebSocket connection's readyState changes to CLOSED\r\n */\r\n this.onclose = null;\r\n /**\r\n * An event listener to be called when an error occurs\r\n */\r\n this.onerror = null;\r\n /**\r\n * An event listener to be called when a message is received from the server\r\n */\r\n this.onmessage = null;\r\n /**\r\n * An event listener to be called when the WebSocket connection's readyState changes to OPEN;\r\n * this indicates that the connection is ready to send and receive data\r\n */\r\n this.onopen = null;\r\n this._handleOpen = function (event) {\r\n _this._debug('open event');\r\n var _a = _this._options.minUptime, minUptime = _a === void 0 ? DEFAULT.minUptime : _a;\r\n clearTimeout(_this._connectTimeout);\r\n _this._uptimeTimeout = setTimeout(function () { return _this._acceptOpen(); }, minUptime);\r\n _this._ws.binaryType = _this._binaryType;\r\n // send enqueued messages (messages sent before websocket open event)\r\n _this._messageQueue.forEach(function (message) { return _this._ws.send(message); });\r\n _this._messageQueue = [];\r\n if (_this.onopen) {\r\n _this.onopen(event);\r\n }\r\n _this._listeners.open.forEach(function (listener) { return _this._callEventListener(event, listener); });\r\n };\r\n this._handleMessage = function (event) {\r\n _this._debug('message event');\r\n if (_this.onmessage) {\r\n _this.onmessage(event);\r\n }\r\n _this._listeners.message.forEach(function (listener) { return _this._callEventListener(event, listener); });\r\n };\r\n this._handleError = function (event) {\r\n _this._debug('error event', event.message);\r\n _this._disconnect(undefined, event.message === 'TIMEOUT' ? 'timeout' : undefined);\r\n if (_this.onerror) {\r\n _this.onerror(event);\r\n }\r\n _this._debug('exec error listeners');\r\n _this._listeners.error.forEach(function (listener) { return _this._callEventListener(event, listener); });\r\n _this._connect();\r\n };\r\n this._handleClose = function (event) {\r\n _this._debug('close event');\r\n _this._clearTimeouts();\r\n if (_this._shouldReconnect) {\r\n _this._connect();\r\n }\r\n if (_this.onclose) {\r\n _this.onclose(event);\r\n }\r\n _this._listeners.close.forEach(function (listener) { return _this._callEventListener(event, listener); });\r\n };\r\n this._url = url;\r\n this._protocols = protocols;\r\n this._options = options;\r\n if (this._options.startClosed) {\r\n this._shouldReconnect = false;\r\n }\r\n this._connect();\r\n }\r\n Object.defineProperty(ReconnectingWebSocket, \"CONNECTING\", {\r\n get: function () {\r\n return 0;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket, \"OPEN\", {\r\n get: function () {\r\n return 1;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket, \"CLOSING\", {\r\n get: function () {\r\n return 2;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket, \"CLOSED\", {\r\n get: function () {\r\n return 3;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"CONNECTING\", {\r\n get: function () {\r\n return ReconnectingWebSocket.CONNECTING;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"OPEN\", {\r\n get: function () {\r\n return ReconnectingWebSocket.OPEN;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"CLOSING\", {\r\n get: function () {\r\n return ReconnectingWebSocket.CLOSING;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"CLOSED\", {\r\n get: function () {\r\n return ReconnectingWebSocket.CLOSED;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"binaryType\", {\r\n get: function () {\r\n return this._ws ? this._ws.binaryType : this._binaryType;\r\n },\r\n set: function (value) {\r\n this._binaryType = value;\r\n if (this._ws) {\r\n this._ws.binaryType = value;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"retryCount\", {\r\n /**\r\n * Returns the number or connection retries\r\n */\r\n get: function () {\r\n return Math.max(this._retryCount, 0);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"bufferedAmount\", {\r\n /**\r\n * The number of bytes of data that have been queued using calls to send() but not yet\r\n * transmitted to the network. This value resets to zero once all queued data has been sent.\r\n * This value does not reset to zero when the connection is closed; if you keep calling send(),\r\n * this will continue to climb. Read only\r\n */\r\n get: function () {\r\n var bytes = this._messageQueue.reduce(function (acc, message) {\r\n if (typeof message === 'string') {\r\n acc += message.length; // not byte size\r\n }\r\n else if (message instanceof Blob) {\r\n acc += message.size;\r\n }\r\n else {\r\n acc += message.byteLength;\r\n }\r\n return acc;\r\n }, 0);\r\n return bytes + (this._ws ? this._ws.bufferedAmount : 0);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"extensions\", {\r\n /**\r\n * The extensions selected by the server. This is currently only the empty string or a list of\r\n * extensions as negotiated by the connection\r\n */\r\n get: function () {\r\n return this._ws ? this._ws.extensions : '';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"protocol\", {\r\n /**\r\n * A string indicating the name of the sub-protocol the server selected;\r\n * this will be one of the strings specified in the protocols parameter when creating the\r\n * WebSocket object\r\n */\r\n get: function () {\r\n return this._ws ? this._ws.protocol : '';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"readyState\", {\r\n /**\r\n * The current state of the connection; this is one of the Ready state constants\r\n */\r\n get: function () {\r\n if (this._ws) {\r\n return this._ws.readyState;\r\n }\r\n return this._options.startClosed\r\n ? ReconnectingWebSocket.CLOSED\r\n : ReconnectingWebSocket.CONNECTING;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReconnectingWebSocket.prototype, \"url\", {\r\n /**\r\n * The URL as resolved by the constructor\r\n */\r\n get: function () {\r\n return this._ws ? this._ws.url : '';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Closes the WebSocket connection or connection attempt, if any. If the connection is already\r\n * CLOSED, this method does nothing\r\n */\r\n ReconnectingWebSocket.prototype.close = function (code, reason) {\r\n if (code === void 0) { code = 1000; }\r\n this._closeCalled = true;\r\n this._shouldReconnect = false;\r\n this._clearTimeouts();\r\n if (!this._ws) {\r\n this._debug('close enqueued: no ws instance');\r\n return;\r\n }\r\n if (this._ws.readyState === this.CLOSED) {\r\n this._debug('close: already closed');\r\n return;\r\n }\r\n this._ws.close(code, reason);\r\n };\r\n /**\r\n * Closes the WebSocket connection or connection attempt and connects again.\r\n * Resets retry counter;\r\n */\r\n ReconnectingWebSocket.prototype.reconnect = function (code, reason) {\r\n this._shouldReconnect = true;\r\n this._closeCalled = false;\r\n this._retryCount = -1;\r\n if (!this._ws || this._ws.readyState === this.CLOSED) {\r\n this._connect();\r\n }\r\n else {\r\n this._disconnect(code, reason);\r\n this._connect();\r\n }\r\n };\r\n /**\r\n * Enqueue specified data to be transmitted to the server over the WebSocket connection\r\n */\r\n ReconnectingWebSocket.prototype.send = function (data) {\r\n if (this._ws && this._ws.readyState === this.OPEN) {\r\n this._debug('send', data);\r\n this._ws.send(data);\r\n }\r\n else {\r\n var _a = this._options.maxEnqueuedMessages, maxEnqueuedMessages = _a === void 0 ? DEFAULT.maxEnqueuedMessages : _a;\r\n if (this._messageQueue.length < maxEnqueuedMessages) {\r\n this._debug('enqueue', data);\r\n this._messageQueue.push(data);\r\n }\r\n }\r\n };\r\n /**\r\n * Register an event handler of a specific event type\r\n */\r\n ReconnectingWebSocket.prototype.addEventListener = function (type, listener) {\r\n if (this._listeners[type]) {\r\n // @ts-ignore\r\n this._listeners[type].push(listener);\r\n }\r\n };\r\n ReconnectingWebSocket.prototype.dispatchEvent = function (event) {\r\n var e_1, _a;\r\n var listeners = this._listeners[event.type];\r\n if (listeners) {\r\n try {\r\n for (var listeners_1 = __values(listeners), listeners_1_1 = listeners_1.next(); !listeners_1_1.done; listeners_1_1 = listeners_1.next()) {\r\n var listener = listeners_1_1.value;\r\n this._callEventListener(event, listener);\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (listeners_1_1 && !listeners_1_1.done && (_a = listeners_1.return)) _a.call(listeners_1);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n }\r\n return true;\r\n };\r\n /**\r\n * Removes an event listener\r\n */\r\n ReconnectingWebSocket.prototype.removeEventListener = function (type, listener) {\r\n if (this._listeners[type]) {\r\n // @ts-ignore\r\n this._listeners[type] = this._listeners[type].filter(function (l) { return l !== listener; });\r\n }\r\n };\r\n ReconnectingWebSocket.prototype._debug = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n if (this._options.debug) {\r\n // not using spread because compiled version uses Symbols\r\n // tslint:disable-next-line\r\n console.log.apply(console, __spread(['RWS>'], args));\r\n }\r\n };\r\n ReconnectingWebSocket.prototype._getNextDelay = function () {\r\n var _a = this._options, _b = _a.reconnectionDelayGrowFactor, reconnectionDelayGrowFactor = _b === void 0 ? DEFAULT.reconnectionDelayGrowFactor : _b, _c = _a.minReconnectionDelay, minReconnectionDelay = _c === void 0 ? DEFAULT.minReconnectionDelay : _c, _d = _a.maxReconnectionDelay, maxReconnectionDelay = _d === void 0 ? DEFAULT.maxReconnectionDelay : _d;\r\n var delay = 0;\r\n if (this._retryCount > 0) {\r\n delay =\r\n minReconnectionDelay * Math.pow(reconnectionDelayGrowFactor, this._retryCount - 1);\r\n if (delay > maxReconnectionDelay) {\r\n delay = maxReconnectionDelay;\r\n }\r\n }\r\n this._debug('next delay', delay);\r\n return delay;\r\n };\r\n ReconnectingWebSocket.prototype._wait = function () {\r\n var _this = this;\r\n return new Promise(function (resolve) {\r\n setTimeout(resolve, _this._getNextDelay());\r\n });\r\n };\r\n ReconnectingWebSocket.prototype._getNextUrl = function (urlProvider) {\r\n if (typeof urlProvider === 'string') {\r\n return Promise.resolve(urlProvider);\r\n }\r\n if (typeof urlProvider === 'function') {\r\n var url = urlProvider();\r\n if (typeof url === 'string') {\r\n return Promise.resolve(url);\r\n }\r\n if (!!url.then) {\r\n return url;\r\n }\r\n }\r\n throw Error('Invalid URL');\r\n };\r\n ReconnectingWebSocket.prototype._connect = function () {\r\n var _this = this;\r\n if (this._connectLock || !this._shouldReconnect) {\r\n return;\r\n }\r\n this._connectLock = true;\r\n var _a = this._options, _b = _a.maxRetries, maxRetries = _b === void 0 ? DEFAULT.maxRetries : _b, _c = _a.connectionTimeout, connectionTimeout = _c === void 0 ? DEFAULT.connectionTimeout : _c, _d = _a.WebSocket, WebSocket = _d === void 0 ? getGlobalWebSocket() : _d;\r\n if (this._retryCount >= maxRetries) {\r\n this._debug('max retries reached', this._retryCount, '>=', maxRetries);\r\n return;\r\n }\r\n this._retryCount++;\r\n this._debug('connect', this._retryCount);\r\n this._removeListeners();\r\n if (!isWebSocket(WebSocket)) {\r\n throw Error('No valid WebSocket class provided');\r\n }\r\n this._wait()\r\n .then(function () { return _this._getNextUrl(_this._url); })\r\n .then(function (url) {\r\n // close could be called before creating the ws\r\n if (_this._closeCalled) {\r\n return;\r\n }\r\n _this._debug('connect', { url: url, protocols: _this._protocols });\r\n _this._ws = _this._protocols\r\n ? new WebSocket(url, _this._protocols)\r\n : new WebSocket(url);\r\n _this._ws.binaryType = _this._binaryType;\r\n _this._connectLock = false;\r\n _this._addListeners();\r\n _this._connectTimeout = setTimeout(function () { return _this._handleTimeout(); }, connectionTimeout);\r\n });\r\n };\r\n ReconnectingWebSocket.prototype._handleTimeout = function () {\r\n this._debug('timeout event');\r\n this._handleError(new ErrorEvent(Error('TIMEOUT'), this));\r\n };\r\n ReconnectingWebSocket.prototype._disconnect = function (code, reason) {\r\n if (code === void 0) { code = 1000; }\r\n this._clearTimeouts();\r\n if (!this._ws) {\r\n return;\r\n }\r\n this._removeListeners();\r\n try {\r\n this._ws.close(code, reason);\r\n this._handleClose(new CloseEvent(code, reason, this));\r\n }\r\n catch (error) {\r\n // ignore\r\n }\r\n };\r\n ReconnectingWebSocket.prototype._acceptOpen = function () {\r\n this._debug('accept open');\r\n this._retryCount = 0;\r\n };\r\n ReconnectingWebSocket.prototype._callEventListener = function (event, listener) {\r\n if ('handleEvent' in listener) {\r\n // @ts-ignore\r\n listener.handleEvent(event);\r\n }\r\n else {\r\n // @ts-ignore\r\n listener(event);\r\n }\r\n };\r\n ReconnectingWebSocket.prototype._removeListeners = function () {\r\n if (!this._ws) {\r\n return;\r\n }\r\n this._debug('removeListeners');\r\n this._ws.removeEventListener('open', this._handleOpen);\r\n this._ws.removeEventListener('close', this._handleClose);\r\n this._ws.removeEventListener('message', this._handleMessage);\r\n // @ts-ignore\r\n this._ws.removeEventListener('error', this._handleError);\r\n };\r\n ReconnectingWebSocket.prototype._addListeners = function () {\r\n if (!this._ws) {\r\n return;\r\n }\r\n this._debug('addListeners');\r\n this._ws.addEventListener('open', this._handleOpen);\r\n this._ws.addEventListener('close', this._handleClose);\r\n this._ws.addEventListener('message', this._handleMessage);\r\n // @ts-ignore\r\n this._ws.addEventListener('error', this._handleError);\r\n };\r\n ReconnectingWebSocket.prototype._clearTimeouts = function () {\r\n clearTimeout(this._connectTimeout);\r\n clearTimeout(this._uptimeTimeout);\r\n };\r\n return ReconnectingWebSocket;\r\n}());\n\nexport default ReconnectingWebSocket;\n", "// https://github.com/maxogden/websocket-stream/blob/48dc3ddf943e5ada668c31ccd94e9186f02fafbd/ws-fallback.js\n\nvar ws = null\n\nif (typeof WebSocket !== 'undefined') {\n ws = WebSocket\n} else if (typeof MozWebSocket !== 'undefined') {\n ws = MozWebSocket\n} else if (typeof global !== 'undefined') {\n ws = global.WebSocket || global.MozWebSocket\n} else if (typeof window !== 'undefined') {\n ws = window.WebSocket || window.MozWebSocket\n} else if (typeof self !== 'undefined') {\n ws = self.WebSocket || self.MozWebSocket\n}\n\nexport default ws\n", "import { Disposable } from '../types.js';\n\nexport class NamedDisposable implements Disposable {\n private disposables: Map<string, Disposable> = new Map();\n\n public add(key: string, disposable: Disposable | (() => Disposable)): void {\n if (this.disposables.has(key)) {\n console.warn(`Disposable with key \"${key}\" already exists. Disposing the old one.`);\n this.disposables.get(key)?.dispose();\n }\n\n if (typeof disposable === 'function') {\n disposable = disposable();\n }\n\n this.disposables.set(key, disposable);\n }\n\n public dispose(): void {\n this.disposables.forEach((disposable) => disposable.dispose());\n this.disposables.clear();\n }\n}\n", "export type EventType = string | symbol;\n\n// An event handler can take an optional event argument\n// and should not return a value\nexport type Handler<T = unknown> = (event: T) => void;\nexport type WildcardHandler<T = Record<string, unknown>> = (\n\ttype: keyof T,\n\tevent: T[keyof T]\n) => void;\n\n// An array of all currently registered event handlers for a type\nexport type EventHandlerList<T = unknown> = Array<Handler<T>>;\nexport type WildCardEventHandlerList<T = Record<string, unknown>> = Array<\n\tWildcardHandler<T>\n>;\n\n// A map of event types and their corresponding event handlers.\nexport type EventHandlerMap<Events extends Record<EventType, unknown>> = Map<\n\tkeyof Events | '*',\n\tEventHandlerList<Events[keyof Events]> | WildCardEventHandlerList<Events>\n>;\n\nexport interface Emitter<Events extends Record<EventType, unknown>> {\n\tall: EventHandlerMap<Events>;\n\n\ton<Key extends keyof Events>(type: Key, handler: Handler<Events[Key]>): void;\n\ton(type: '*', handler: WildcardHandler<Events>): void;\n\n\toff<Key extends keyof Events>(\n\t\ttype: Key,\n\t\thandler?: Handler<Events[Key]>\n\t): void;\n\toff(type: '*', handler: WildcardHandler<Events>): void;\n\n\temit<Key extends keyof Events>(type: Key, event: Events[Key]): void;\n\temit<Key extends keyof Events>(\n\t\ttype: undefined extends Events[Key] ? Key : never\n\t): void;\n}\n\n/**\n * Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name mitt\n * @returns {Mitt}\n */\nexport default function mitt<Events extends Record<EventType, unknown>>(\n\tall?: EventHandlerMap<Events>\n): Emitter<Events> {\n\ttype GenericEventHandler =\n\t\t| Handler<Events[keyof Events]>\n\t\t| WildcardHandler<Events>;\n\tall = all || new Map();\n\n\treturn {\n\t\t/**\n\t\t * A Map of event names to registered handler functions.\n\t\t */\n\t\tall,\n\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t * @param {string|symbol} type Type of event to listen for, or `'*'` for all events\n\t\t * @param {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton<Key extends keyof Events>(type: Key, handler: GenericEventHandler) {\n\t\t\tconst handlers: Array<GenericEventHandler> | undefined = all!.get(type);\n\t\t\tif (handlers) {\n\t\t\t\thandlers.push(handler);\n\t\t\t} else {\n\t\t\t\tall!.set(type, [handler] as EventHandlerList<Events[keyof Events]>);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t * If `handler` is omitted, all handlers of the given type are removed.\n\t\t * @param {string|symbol} type Type of event to unregister `handler` from (`'*'` to remove a wildcard handler)\n\t\t * @param {Function} [handler] Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff<Key extends keyof Events>(type: Key, handler?: GenericEventHandler) {\n\t\t\tconst handlers: Array<GenericEventHandler> | undefined = all!.get(type);\n\t\t\tif (handlers) {\n\t\t\t\tif (handler) {\n\t\t\t\t\thandlers.splice(handlers.indexOf(handler) >>> 0, 1);\n\t\t\t\t} else {\n\t\t\t\t\tall!.set(type, []);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `'*'` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * Note: Manually firing '*' handlers is not supported.\n\t\t *\n\t\t * @param {string|symbol} type The event type to invoke\n\t\t * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberOf mitt\n\t\t */\n\t\temit<Key extends keyof Events>(type: Key, evt?: Events[Key]) {\n\t\t\tlet handlers = all!.get(type);\n\t\t\tif (handlers) {\n\t\t\t\t(handlers as EventHandlerList<Events[keyof Events]>)\n\t\t\t\t\t.slice()\n\t\t\t\t\t.map((handler) => {\n\t\t\t\t\t\thandler(evt!);\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\thandlers = all!.get('*');\n\t\t\tif (handlers) {\n\t\t\t\t(handlers as WildCardEventHandlerList<Events>)\n\t\t\t\t\t.slice()\n\t\t\t\t\t.map((handler) => {\n\t\t\t\t\t\thandler(type, evt!);\n\t\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n}\n", "export interface EventDispatcher {\n listen: (event: any, callback: (data: any) => void, context?: any) => Disposable;\n once: (event: any, callback: (data: any) => void, context?: any) => void;\n emit: (event: any, ...args: any) => void;\n removeListener: (event?: any, callbackSignature?: any) => void;\n}\n\nimport mitt, { Emitter, EventHandlerMap, EventType, Handler } from 'mitt';\nimport { Disposable } from '../types.js';\n\nexport function mittWithOnce<Events extends Record<EventType, unknown>>(all?: EventHandlerMap<Events>) {\n // @ts-expect-error\n const inst = mitt(all);\n inst.once = (type: keyof Events, fn: Handler<Events[keyof Events]>) => {\n inst.on(type, fn);\n inst.on(type, inst.off.bind(inst, type, fn));\n };\n return inst as unknown as {\n once<Key extends keyof Events>(type: Key, handler: Handler<Events[Key]>): void;\n } & Emitter<Events>;\n}\n\nexport default class EventManager implements EventDispatcher {\n private readonly emitter = mittWithOnce();\n\n public listen(event: any, callback: (data: any) => void): Disposable {\n const dispose = () => {\n this.removeListener(event, callback);\n };\n\n this.emitter.on(event, callback);\n\n return { dispose };\n }\n\n public emit(event: string, data: any): void {\n this.emitter.emit(event, data);\n }\n\n public once(event: any, callback: (data: any) => void): void {\n this.emitter.once(event, callback);\n }\n\n public static make(): EventDispatcher {\n return new EventManager();\n }\n\n public static refresh(): EventDispatcher {\n return new EventManager();\n }\n\n public removeListener(event?: any, callbackSignature?: any): void {\n this.emitter.off(event, callbackSignature);\n }\n\n public static createInstance(): EventDispatcher {\n return new EventManager();\n }\n\n public inspect(): any {\n return this.emitter.all;\n }\n}\n", "import { Action, NotebookInstance } from './index.js';\n\nexport interface GitLog {\n hash: string;\n message: string;\n author: string;\n date: string;\n}\n\nexport interface GitRef {\n ref: string;\n}\n\nexport interface GitStatus {\n initialized: boolean;\n clean: boolean;\n branch: string;\n ref: string;\n}\n\nexport interface GitCheckoutResult extends GitRef {\n branch: string;\n created: boolean;\n}\n\nexport interface GitEvents {}\n\nexport interface GitActions {\n 'git.checkpoint': Action<{ author: string; message: string; branch: string; allowEmpty?: boolean }, GitRef>;\n 'git.checkout': Action<{ branch: string; create?: boolean }, GitCheckoutResult>;\n 'git.log': Action<{ ref: string }, GitLog[]>;\n 'git.sync': Action<\n { url: string; author: string; ref: string; token?: string; direction?: 'pull' | 'push' | 'both'; force?: boolean },\n GitRef\n >;\n 'git.restore': Action<{ ref: string }, GitRef>;\n 'git.status': Action<object, GitStatus>;\n}\n\nexport default class Git {\n constructor(protected okra: NotebookInstance) {}\n\n public checkpoint(author: string, message: string, branch = 'main', allowEmpty = false) {\n return this.okra.invoke('git.checkpoint', { author, message, branch, allowEmpty });\n }\n\n public checkout(branch: string, create = true) {\n return this.okra.invoke('git.checkout', { branch, create });\n }\n\n public sync(\n url: string,\n author: string,\n ref = 'main',\n token?: string,\n direction: 'pull' | 'push' | 'both' = 'both',\n force = false\n ) {\n return this.okra.invoke('git.sync', { url, author, ref, token, direction, force });\n }\n\n public log(ref: string = 'main') {\n return this.okra.invoke('git.log', { ref });\n }\n\n public restore(ref: string) {\n return this.okra.invoke('git.restore', { ref });\n }\n\n public status() {\n return this.okra.invoke('git.status', {});\n }\n}\n", "import EventManager, { EventDispatcher } from '../events/index.js';\nimport { Disposable } from '../types.js';\nimport { timeout } from '../utils/promise.js';\nimport retry from 'async-retry';\nimport {\n BeaconMessage,\n BeaconActions,\n BeaconEvents,\n BeaconOptions,\n DebugInfo,\n ConsoleEvent,\n BeaconErrorEvent,\n DebugRequest,\n DebugResult,\n FetchRequest,\n FetchResult,\n} from './types.js';\nimport { Navigator } from './navigator.js';\n\nexport * from './types.js';\nexport { Navigator } from './navigator.js';\n\n/**\n * Browser environment check\n */\nfunction ensureBrowserEnvironment(): void {\n if (typeof window === 'undefined') {\n throw new Error('Beacon SDK can only be used in a browser environment');\n }\n}\n\n/**\n * BeaconError for beacon-specific errors\n */\nexport class BeaconError extends Error {\n constructor(\n message: string,\n public code?: string\n ) {\n super(message);\n this.name = 'BeaconError';\n }\n}\n\n/**\n * BeaconTimeoutError for timeout-specific errors\n */\nexport class BeaconTimeoutError extends BeaconError {\n constructor(operation: string, timeoutMs: number) {\n super(`Beacon operation '${operation}' timed out after ${timeoutMs}ms`);\n this.code = 'TIMEOUT';\n }\n}\n\n/**\n * BeaconConnectionError for connection-specific errors\n */\nexport class BeaconConnectionError extends BeaconError {\n constructor(message: string) {\n super(`Beacon connection error: ${message}`);\n this.code = 'CONNECTION_ERROR';\n }\n}\n\n/**\n * Beacon SDK for communicating with beacon instances in iframes\n */\nexport class Beacon implements BeaconActions {\n public readonly iframe: HTMLIFrameElement;\n private options: Required<BeaconOptions>;\n private messageHandlers: Map<string, ((payload: any) => void)[]> = new Map();\n private eventEmitter: EventDispatcher;\n private isBeaconReady = false;\n private readyPromise: Promise<void> | null = null;\n private isStarted = false;\n private disposables: Disposable[] = [];\n\n // MessagePort communication\n private messageChannel: MessageChannel | null = null;\n private port: MessagePort | null = null;\n private channelEstablished = false;\n\n public readonly navigator: Navigator;\n\n constructor(iframe: HTMLIFrameElement, options: BeaconOptions = {}) {\n ensureBrowserEnvironment();\n\n this.iframe = iframe;\n\n // Set up default retry options\n const defaultRetryOptions = {\n retries: 3,\n minTimeout: 1000,\n maxTimeout: 5000,\n factor: 2,\n randomize: true,\n };\n\n this.options = {\n timeout: 10000,\n targetOrigin: '*',\n debug: false,\n retry: {\n ...defaultRetryOptions,\n ...options.retry,\n },\n ...options,\n };\n\n this.eventEmitter = EventManager.make();\n this.setupMessageChannel();\n\n this.navigator = new Navigator(\n this.eventEmitter.listen.bind(this.eventEmitter),\n this.eventEmitter.once.bind(this.eventEmitter),\n this\n );\n }\n\n /**\n * Setup communication channel using MessagePort\n */\n private setupMessageChannel(): void {\n // Listen for beacon ready message via postMessage\n const readyHandler = (event: MessageEvent) => {\n try {\n // Verify message source\n if (event.source !== this.iframe.contentWindow) {\n return;\n }\n\n const message: BeaconMessage = event.data;\n if (!message || typeof message !== 'object' || !message.type) {\n return;\n }\n\n // Handle beacon ready - this means beacon is ready to receive channel establishment\n if (message.type === 'beacon:ready-for-channel') {\n this.establishChannel().catch((error) => {\n if (this.options.debug) {\n console.error('[Beacon SDK] Channel establishment failed:', error);\n }\n });\n }\n\n // Handle channel confirmation\n if (message.type === 'beacon:channel-established') {\n this.channelEstablished = true;\n this.isBeaconReady = true;\n this.emit('ready', message.payload);\n if (this.options.debug) {\n console.log('[Beacon SDK] Channel established and beacon ready');\n }\n }\n } catch (error) {\n if (this.options.debug) {\n console.error('[Beacon SDK] Message parsing error:', error);\n }\n }\n };\n\n window.addEventListener('message', readyHandler);\n\n // Add to disposables for cleanup\n this.disposables.push({\n dispose: () => window.removeEventListener('message', readyHandler),\n });\n }\n\n /**\n * Establish MessagePort communication channel\n */\n private async establishChannel(): Promise<void> {\n if (!this.iframe.contentWindow) {\n throw new BeaconConnectionError('Iframe contentWindow not available');\n }\n\n // Create the message channel\n this.messageChannel = new MessageChannel();\n this.port = this.messageChannel.port1;\n\n // Set up port message listener\n this.port.onmessage = (event) => {\n this.handleBeaconMessage(event.data);\n };\n\n // Handle port errors\n this.port.onmessageerror = (event) => {\n if (this.options.debug) {\n console.error('[Beacon SDK] Port message error:', event);\n }\n };\n\n // Start the port\n this.port.start();\n\n // Transfer port2 to the iframe\n const establishMessage = {\n type: 'beacon:establish-channel',\n timestamp: Date.now(),\n id: this.generateId(),\n };\n\n this.iframe.contentWindow.postMessage(\n establishMessage,\n '*', // Safe for channel establishment\n [this.messageChannel.port2] // Transfer the port\n );\n\n if (this.options.debug) {\n console.log('[Beacon SDK] Channel establishment message sent');\n }\n\n // Wait for channel to be established (beacon will send confirmation via postMessage)\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new BeaconConnectionError('Channel establishment timeout'));\n }, this.options.timeout);\n\n const checkReady = () => {\n if (this.channelEstablished && this.isBeaconReady) {\n clearTimeout(timeoutId);\n resolve();\n } else {\n setTimeout(checkReady, 100);\n }\n };\n\n checkReady();\n });\n }\n\n /**\n * Handle incoming beacon messages\n */\n private handleBeaconMessage(message: BeaconMessage): void {\n if (this.options.debug) {\n console.log('[Beacon SDK] Received message:', message.type, message.payload);\n }\n\n // Emit the event (remove 'beacon:' prefix for cleaner API)\n const eventType = message.type.replace('beacon:', '');\n this.emit(eventType, message.payload);\n\n // Call registered message handlers\n const handlers = this.messageHandlers.get(message.type);\n if (handlers) {\n handlers.forEach((handler) => {\n try {\n handler(message.payload);\n } catch (error) {\n if (this.options.debug) {\n console.error('[Beacon SDK] Message handler error:', error);\n }\n }\n });\n }\n }\n\n /**\n * Wait for beacon to be ready - simplified approach\n */\n private waitForBeaconReady(): Promise<void> {\n return retry(\n async () => {\n return new Promise<void>((resolve, reject) => {\n if (this.isBeaconReady && this.channelEstablished) {\n resolve();\n return;\n }\n\n const timeoutMs = this.options.timeout;\n const timeoutId = setTimeout(() => {\n reject(new BeaconTimeoutError('beacon ready', timeoutMs));\n }, timeoutMs);\n\n // Listen for beacon ready signal\n const unsubscribe = this.on('ready', () => {\n clearTimeout(timeoutId);\n unsubscribe.dispose();\n resolve();\n });\n });\n },\n {\n retries: this.options.retry?.retries || 3,\n minTimeout: this.options.retry?.minTimeout || 1000,\n maxTimeout: this.options.retry?.maxTimeout || 5000,\n factor: this.options.retry?.factor || 2,\n randomize: this.options.retry?.randomize || true,\n onRetry: (error, attempt) => {\n if (this.options.debug) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn(`[Beacon SDK] Beacon ready retry attempt ${attempt}:`, errorMessage);\n }\n // Reset ready state for retry\n this.isBeaconReady = false;\n this.channelEstablished = false;\n },\n }\n );\n }\n\n /**\n * Send a message to the beacon via MessagePort\n */\n private sendMessage<T = any>(type: string, payload: T = {} as T): void {\n if (!this.port) {\n throw new BeaconConnectionError('MessagePort not available - channel not established');\n }\n\n const message: BeaconMessage<T> = {\n type: `beacon:${type}`,\n payload,\n timestamp: Date.now(),\n source: 'parent',\n id: this.generateId(),\n };\n\n try {\n // Direct port communication - no need for origin or cloning\n this.port.postMessage(message);\n\n if (this.options.debug) {\n console.log('[Beacon SDK] Sent message via port:', message.type, message.payload);\n }\n } catch (error) {\n throw new BeaconConnectionError(\n `Failed to send message via port: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n /**\n * Send a message and wait for a specific response with retry logic\n */\n private async sendAndWaitFor<TPayload = any, TResponse = any>(\n sendType: string,\n responseType: string,\n payload: TPayload = {} as TPayload,\n timeoutMs?: number\n ): Promise<TResponse> {\n await this.ready();\n\n return retry(\n async (bail) => {\n return new Promise<TResponse>((resolve, reject) => {\n const actualTimeout = timeoutMs || this.options.timeout;\n const timeoutId = setTimeout(() => {\n unsubscribe.dispose();\n // Reject timeout to trigger retry (will only bail on final attempt)\n const error = new BeaconTimeoutError(sendType, actualTimeout);\n reject(error);\n }, actualTimeout);\n\n const unsubscribe = this.eventEmitter.listen(responseType, (data: any) => {\n clearTimeout(timeoutId);\n unsubscribe.dispose();\n resolve(data as TResponse);\n });\n\n try {\n this.sendMessage(sendType, payload);\n } catch (error) {\n clearTimeout(timeoutId);\n unsubscribe.dispose();\n // Retry on connection errors, bail on other types of errors\n if (error instanceof BeaconConnectionError) {\n reject(error); // Will trigger retry\n } else {\n bail(error); // Don't retry for other types of errors\n }\n }\n });\n },\n {\n retries: this.options.retry?.retries || 3,\n minTimeout: this.options.retry?.minTimeout || 1000,\n maxTimeout: this.options.retry?.maxTimeout || 5000,\n factor: this.options.retry?.factor || 2,\n randomize: this.options.retry?.randomize || true,\n onRetry: (error, attempt) => {\n if (this.options.debug) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.warn(`[Beacon SDK] Retry attempt ${attempt} for ${sendType}:`, errorMessage);\n }\n },\n }\n );\n }\n\n /**\n * Generate a unique ID for messages\n */\n private generateId(): string {\n return `sdk_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n }\n\n /**\n * Event emitter methods (both private and public for navigator access)\n */\n public emit(event: string, payload: any): void {\n this.eventEmitter.emit(event, payload);\n }\n\n /**\n * Start the beacon initialization process\n */\n public start(): Promise<void> {\n if (this.isStarted) {\n return this.readyPromise || Promise.resolve();\n }\n\n this.isStarted = true;\n this.readyPromise = this.waitForBeaconReady();\n return this.readyPromise;\n }\n\n /**\n * Wait for the beacon to be ready\n */\n public async ready(): Promise<void> {\n if (!this.isStarted) {\n throw new BeaconError('Beacon has not been started. Call start() first.');\n }\n\n if (!this.readyPromise) {\n throw new BeaconError('Beacon ready promise is not available');\n }\n\n return timeout(this.readyPromise, this.options.timeout);\n }\n\n /**\n * Check if beacon is ready\n */\n public get isReady(): boolean {\n return this.isBeaconReady;\n }\n\n /**\n * Listen for beacon events\n */\n public on<K extends keyof BeaconEvents>(event: K, handler: (payload: BeaconEvents[K]) => void): Disposable {\n return this.eventEmitter.listen(event as string, handler);\n }\n\n /**\n * Listen for beacon events (one-time)\n */\n public once<K extends keyof BeaconEvents>(event: K, handler: (payload: BeaconEvents[K]) => void): void {\n this.eventEmitter.once(event as string, handler);\n }\n\n /**\n * Ping the beacon to check if it's responsive\n */\n public async ping(): Promise<boolean> {\n try {\n await this.sendAndWaitFor('ping', 'pong', { timestamp: Date.now() });\n return true;\n } catch (error) {\n if (this.options.debug) {\n console.warn('[Beacon SDK] Ping failed:', error);\n }\n return false;\n }\n }\n\n /**\n * Get debug information from the beacon\n */\n public async getDebugInfo(): Promise<DebugInfo> {\n return this.sendAndWaitFor<{}, DebugInfo>('getDebugInfo', 'debugInfo');\n }\n\n /**\n * Get console events from the beacon\n */\n public async getConsoleEvents(): Promise<ConsoleEvent[]> {\n return this.sendAndWaitFor<{}, ConsoleEvent[]>('getConsoleEvents', 'consoleEvents');\n }\n\n /**\n * Get error events from the beacon\n */\n public async getErrorEvents(): Promise<BeaconErrorEvent[]> {\n return this.sendAndWaitFor<{}, BeaconErrorEvent[]>('getErrorEvents', 'errorEvents');\n }\n\n /**\n * Clear console events in the beacon\n */\n public async clearConsole(): Promise<void> {\n await this.ready();\n this.sendMessage('clearConsole');\n }\n\n /**\n * Clear error events in the beacon\n */\n public async clearErrors(): Promise<void> {\n await this.ready();\n this.sendMessage('clearErrors');\n }\n\n /**\n * Execute code in the beacon context\n */\n public async executeCode(code: string): Promise<{ success: boolean; result?: any; error?: string }> {\n return this.sendAndWaitFor('executeCode', 'codeExecutionResult', { code });\n }\n\n /**\n * Inspect an element in the beacon context\n */\n public async inspectElement(selector: string): Promise<{ success: boolean; element?: any; error?: string }> {\n return this.sendAndWaitFor('inspectElement', 'elementInspectionResult', { selector });\n }\n\n /**\n * Fetch a URL in the beacon context\n */\n public async fetch<T extends unknown>(request: FetchRequest): Promise<FetchResult<T>> {\n return this.sendAndWaitFor('fetch', 'fetchResult', request);\n }\n\n /**\n * Debug a page (navigate and capture debug information). It loads\n * the page fresh in the IFRAME so that we can capture the latest state.\n */\n public async debug(request: DebugRequest, waitSeconds?: number): Promise<DebugResult> {\n // First, navigate the iframe if the path is different from current URL\n const targetUrl = new URL(request.path, this.iframe.src || window.location.origin).href;\n\n if (this.iframe.src !== targetUrl) {\n // Navigate the iframe from parent side\n this.navigator.visit(targetUrl);\n\n // Wait for beacon to be ready after navigation\n await this.ready();\n }\n\n /**\n * Let's wait for 2 seconds for page to finish rendering.\n * Errors, that might occur during this time will be captured.\n */\n waitSeconds && (await this.wait(waitSeconds));\n\n // Now request debug capture from the beacon (without navigation)\n const timeoutMs = (request.options?.timeout || 30000) + 5000; // Add 5s buffer\n return this.sendAndWaitFor('debug', 'debugResult', request, timeoutMs);\n }\n\n private async wait(forSeconds: number) {\n return new Promise((resolve) => setTimeout(resolve, forSeconds * 1000));\n }\n\n /**\n * Navigate the iframe to a new URL\n */\n public navigate(url: string): void {\n if (!this.iframe) {\n throw new BeaconConnectionError('Iframe not available');\n }\n\n try {\n const targetUrl = new URL(url, this.iframe.src || window.location.origin);\n this.iframe.src = targetUrl.href;\n\n // Reset state since we're navigating\n this.isBeaconReady = false;\n this.channelEstablished = false;\n\n // Close existing port if any\n if (this.port) {\n this.port.close();\n this.port = null;\n }\n\n if (this.messageChannel) {\n this.messageChannel = null;\n }\n\n // Only create new ready promise if beacon was already started\n if (this.isStarted) {\n this.readyPromise = this.waitForBeaconReady();\n }\n } catch (error) {\n throw new BeaconConnectionError(`Invalid URL: ${url}`);\n }\n }\n\n /**\n * Get current iframe URL\n */\n public get url(): string {\n return this.iframe.src;\n }\n\n /**\n * Get the iframe element\n */\n public get element(): HTMLIFrameElement {\n return this.iframe;\n }\n\n /**\n * Dispose of all resources\n */\n public dispose(): void {\n // Clean up MessagePort\n if (this.port) {\n this.port.close();\n this.port = null;\n }\n\n if (this.messageChannel) {\n this.messageChannel = null;\n }\n\n this.disposables.forEach((disposable) => disposable.dispose());\n this.disposables = [];\n this.messageHandlers.clear();\n this.isBeaconReady = false;\n this.channelEstablished = false;\n this.isStarted = false;\n this.readyPromise = null;\n }\n}\n\n/**\n * Factory function to create a beacon instance for an iframe\n */\nexport function createBeacon(iframe: HTMLIFrameElement, options?: BeaconOptions): Beacon {\n return new Beacon(iframe, options);\n}\n\n/**\n * Check if the current environment supports the Beacon SDK\n */\nexport function isBeaconSupported(): boolean {\n try {\n ensureBrowserEnvironment();\n return true;\n } catch {\n return false;\n }\n}\n", "import type { Disposable } from '../types.js';\nimport { Beacon } from './index.js';\n\nexport interface NavigationResult {\n success: boolean;\n url?: string;\n error?: string;\n}\n\nexport interface NavigatorActions {\n visit(url: string): void;\n goBack(): Promise<NavigationResult>;\n goForward(): Promise<NavigationResult>;\n canGoBack: boolean;\n canGoForward: boolean;\n refresh(): Promise<void>;\n getCurrentUrl(): URL;\n on<K extends keyof NavigatorEvents>(event: K, handler: (payload: NavigatorEvents[K]) => void): Disposable;\n}\n\nexport interface NavigatorEvents {\n historyChange: {\n url: string;\n state: unknown;\n direction: 'back' | 'forward' | 'push' | 'replace' | 'reload';\n timestamp: number;\n };\n navigationStateChange: {\n canGoBack: boolean;\n canGoForward: boolean;\n currentIndex: number;\n historyLength: number;\n timestamp: number;\n };\n}\n\nexport interface HistoryNavigationRequest {\n action: 'back' | 'forward' | 'reload';\n}\n\nexport interface HistoryStateRequest {\n state: unknown;\n title: string;\n url: string;\n action: 'push' | 'replace';\n}\n\nexport interface HistoryInfoResponse {\n length: number;\n state: unknown;\n url: string;\n canGoBack: boolean;\n canGoForward: boolean;\n}\n\nexport interface Navigator extends NavigatorActions {\n on<K extends keyof NavigatorEvents>(event: K, handler: (payload: NavigatorEvents[K]) => void): Disposable;\n once<K extends keyof NavigatorEvents>(event: K, handler: (payload: NavigatorEvents[K]) => void): void;\n}\n\n/**\n * SDK Navigator implementation with internal history management\n */\nexport class Navigator implements NavigatorActions {\n private urlHistory: string[] = [];\n private currentIndex = 0;\n private _canGoBack = false;\n private _canGoForward = false;\n\n constructor(\n private onEvent: <K extends keyof NavigatorEvents>(event: K, handler: (payload: NavigatorEvents[K]) => void) => Disposable,\n private onceEvent: <K extends keyof NavigatorEvents>(event: K, handler: (payload: NavigatorEvents[K]) => void) => void,\n private readonly beacon: Beacon\n ) {\n this.beacon = beacon;\n this.setupUrlChangeListener();\n this.urlHistory.push(beacon.iframe.src);\n this.updateNavigationState();\n }\n\n /**\n * Navigate to a URL using internal history management\n */\n visit(url: string): void {\n if (!this.beacon) {\n throw new Error('Beacon reference not set');\n }\n\n // Navigate the iframe\n this.beacon.navigate(url);\n\n // Add to history (remove any forward history if we're not at the end)\n if (this.currentIndex < this.urlHistory.length - 1) {\n this.urlHistory = this.urlHistory.slice(0, this.currentIndex + 1);\n }\n\n this.urlHistory.push(url);\n this.currentIndex = this.urlHistory.length - 1;\n this.updateNavigationState();\n\n // Emit history change event\n this.emitHistoryChange(url, 'push');\n }\n\n /**\n * Set up listener for URL change events from the beacon\n */\n private setupUrlChangeListener(): void {\n this.beacon.on('urlChange', (payload) => {\n this.addToHistory(payload.newUrl);\n });\n }\n\n /**\n * Add URL to internal history\n */\n private addToHistory(url: string): void {\n // Remove any forward history if we're not at the end\n if (this.currentIndex < this.urlHistory.length - 1) {\n this.urlHistory = this.urlHistory.slice(0, this.currentIndex + 1);\n }\n\n // Add new URL\n this.urlHistory.push(url);\n this.currentIndex = this.urlHistory.length - 1;\n\n // Update navigation state\n this.updateNavigationState();\n }\n\n /**\n * Update internal navigation state and emit changes\n */\n private updateNavigationState(): void {\n const previousCanGoBack = this._canGoBack;\n const previousCanGoForward = this._canGoForward;\n\n this._canGoBack = this.currentIndex > 0;\n this._canGoForward = this.currentIndex < this.urlHistory.length - 1;\n\n // Emit navigation state change if it actually changed\n if (previousCanGoBack !== this._canGoBack || previousCanGoForward !== this._canGoForward) {\n this.emitNavigationStateChange();\n }\n }\n\n /**\n * Emit navigation state change event\n */\n private emitNavigationStateChange(): void {\n if (this.beacon && this.beacon.emit) {\n this.beacon.emit('navigationStateChange', {\n canGoBack: this._canGoBack,\n canGoForward: this._canGoForward,\n currentIndex: this.currentIndex,\n historyLength: this.urlHistory.length,\n timestamp: Date.now(),\n });\n }\n }\n\n get canGoBack(): boolean {\n return this._canGoBack;\n }\n\n get canGoForward(): boolean {\n return this._canGoForward;\n }\n\n async goBack(): Promise<NavigationResult> {\n if (!this.canGoBack) {\n return { success: false, error: 'Cannot go back - no previous history' };\n }\n\n this.currentIndex--;\n this.updateNavigationState();\n const url = this.urlHistory[this.currentIndex];\n\n if (!this.beacon) {\n return { success: false, error: 'Beacon reference not set' };\n }\n\n this.beacon.navigate(url);\n this.emitHistoryChange(url, 'back');\n return { success: true, url };\n }\n\n /**\n * Navigate forward in internal history\n */\n async goForward(): Promise<NavigationResult> {\n if (!this.canGoForward) {\n return { success: false, error: 'Cannot go forward - no forward history' };\n }\n\n this.currentIndex++;\n this.updateNavigationState();\n const url = this.urlHistory[this.currentIndex];\n\n if (!this.beacon) {\n return { success: false, error: 'Beacon reference not set' };\n }\n\n this.beacon.navigate(url);\n this.emitHistoryChange(url, 'forward');\n return { success: true, url };\n }\n\n /**\n * Reload the current page\n */\n async reload(): Promise<void> {\n if (this.currentIndex >= 0 && this.currentIndex < this.urlHistory.length) {\n const currentUrl = this.urlHistory[this.currentIndex];\n\n if (!this.beacon) {\n throw new Error('Beacon reference not set');\n }\n\n this.beacon.navigate(currentUrl);\n this.emitHistoryChange(currentUrl, 'reload');\n }\n }\n\n /**\n * Get current URL from internal history\n */\n getCurrentUrl(): URL {\n if (this.currentIndex >= 0 && this.currentIndex < this.urlHistory.length) {\n return new URL(this.urlHistory[this.currentIndex]);\n }\n\n return new URL('about:blank');\n }\n\n /**\n * Get the complete history array\n */\n getHistory(): readonly string[] {\n return [...this.urlHistory];\n }\n\n /**\n * Get current history index\n */\n getCurrentIndex(): number {\n return this.currentIndex;\n }\n\n /**\n * Check if can go back synchronously\n */\n public canGoBackSync(): boolean {\n return this.currentIndex > 0;\n }\n\n /**\n * Check if can go forward synchronously\n */\n public canGoForwardSync(): boolean {\n return this.currentIndex < this.urlHistory.length - 1;\n }\n\n /**\n * Emit history change event\n */\n private emitHistoryChange(url: string, direction: 'back' | 'forward' | 'push' | 'replace' | 'reload'): void {\n // Note: We'll need to emit this through the beacon's event system\n // This would require access to the beacon's emit method\n if (this.beacon && this.beacon.emit) {\n this.beacon.emit('historyChange', {\n url,\n state: null,\n direction,\n timestamp: Date.now(),\n });\n }\n }\n\n /**\n * Push a new state to internal history (legacy method for compatibility)\n */\n async pushState(url: string): Promise<void> {\n // For compatibility, treat this as a navigation\n this.visit(url);\n }\n\n /**\n * Replace current state in internal history (legacy method for compatibility)\n */\n async replaceState(url: string): Promise<void> {\n if (this.currentIndex >= 0 && this.currentIndex < this.urlHistory.length) {\n // Replace the current URL in history\n this.urlHistory[this.currentIndex] = url;\n\n if (!this.beacon) {\n throw new Error('Beacon reference not set');\n }\n\n this.beacon.navigate(url);\n this.emitHistoryChange(url, 'replace');\n } else {\n // If no current history, treat as push\n this.visit(url);\n }\n }\n\n /**\n * Get the current history length\n */\n async getHistoryLength(): Promise<number> {\n return this.urlHistory.length;\n }\n\n /**\n * Get the current history state (always null since we don't store state)\n */\n async getHistoryState(): Promise<any> {\n return null;\n }\n\n /**\n * Get comprehensive history information\n */\n async getHistoryInfo(): Promise<HistoryInfoResponse> {\n return {\n length: this.urlHistory.length,\n state: null,\n url: this.urlHistory[this.currentIndex] || '',\n canGoBack: this.canGoBack,\n canGoForward: this.canGoForward,\n };\n }\n\n /**\n * Listen for navigator events\n */\n on<K extends keyof NavigatorEvents>(event: K, handler: (payload: NavigatorEvents[K]) => void): Disposable {\n return this.onEvent(event, handler);\n }\n\n /**\n * Listen for navigator events (once)\n */\n once<K extends keyof NavigatorEvents>(event: K, handler: (payload: NavigatorEvents[K]) => void): void {\n this.onceEvent(event, handler);\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["timeout", "self", "timeout", "original", "require_retry", "retry", "FileType", "FileChangeType", "FilesystemErrorType", "NotebookState", "encode", "decode", "size", "d", "b", "Event", "ErrorEvent", "CloseEvent", "ReconnectingWebSocket", "WebSocket", "retry", "all", "Map", "on", "type", "handler", "handlers", "get", "push", "set", "off", "splice", "indexOf", "emit", "evt", "slice", "map", "import_async_retry", "retry"]
7
7
  }