{"version":3,"file":"exports-nodejs.cjs","sources":["nodejs/src/Cache.js","nodejs/src/pTransaction.js","nodejs/src/asAbortable.js","nodejs/src/abortableTimers.js","nodejs/src/Defer.js","nodejs/src/ENSName.js","nodejs/src/EthereumAddress.js","nodejs/src/isENSName.js","nodejs/src/nodejs/crypto.js","nodejs/src/keyToArrayIndex.js","nodejs/src/nodejs/env.js","nodejs/src/Logger.js","nodejs/src/scheduleAtFixedRate.js","nodejs/src/Metric.js","nodejs/src/Multimap.js","nodejs/src/randomString.js","nodejs/src/scheduleAtInterval.js","nodejs/src/wait.js","nodejs/src/scheduleAtApproximateInterval.js","nodejs/src/toEthereumAddressOrENSName.js","nodejs/src/withTimeout.js","nodejs/src/waitForEvent.js","nodejs/src/raceForEvent.js","nodejs/src/composeAbortSignals.js","nodejs/src/until.js","nodejs/src/withRateLimit.js","nodejs/src/ObservableEventEmitter.js","nodejs/src/initEventGateway.js","nodejs/src/addManagedEventListener.js","nodejs/src/merge.js","nodejs/src/collect.js","nodejs/src/Gate.js","nodejs/src/TheGraphClient.js","nodejs/src/Heap.js","nodejs/src/executeSafePromise.js","nodejs/src/binaryUtils.js","nodejs/src/filePathToNodeFormat.js","nodejs/src/retry.js","nodejs/src/lengthPrefixedFrameUtils.js","nodejs/src/ipv4ToNumber.js","nodejs/src/MapWithTtl.js","nodejs/src/StreamID.js","nodejs/src/partition.js","nodejs/src/StreamPartID.js","nodejs/src/UserID.js","nodejs/src/WeiAmount.js","nodejs/src/SigningUtil.js"],"sourcesContent":["export class Cache {\n    value;\n    valueTimestamp;\n    valueFactory;\n    maxAgeInMilliseconds;\n    constructor(valueFactory, maxAgeInMilliseconds) {\n        this.valueFactory = valueFactory;\n        this.maxAgeInMilliseconds = maxAgeInMilliseconds;\n    }\n    async get() {\n        const now = Date.now();\n        if ((this.valueTimestamp === undefined) || (now > (this.valueTimestamp + this.maxAgeInMilliseconds))) {\n            this.value = await this.valueFactory();\n            this.valueTimestamp = now;\n        }\n        return this.value;\n    }\n    invalidate() {\n        this.value = undefined;\n        this.valueTimestamp = undefined;\n    }\n}\n//# sourceMappingURL=Cache.js.map","/**\n * Given an iterable of promises, settles them one at a time.\n * If all of them resolve, returns the list of values.\n * If one of them rejects, provides a callback for reverting the\n * preceding (already resolved) values.\n */\nexport async function pTransaction(promises, rollback) {\n    const results = [];\n    for (const promise of promises) {\n        try {\n            results.push(await promise);\n        }\n        catch (err) {\n            // eslint-disable-next-line @typescript-eslint/await-thenable\n            await Promise.allSettled(results.map((r) => rollback(r)));\n            throw err;\n        }\n    }\n    return results;\n}\n//# sourceMappingURL=pTransaction.js.map","export class AbortError extends Error {\n    code = 'AbortError';\n    constructor(customErrorContext) {\n        super(customErrorContext === undefined\n            ? `aborted`\n            : `${customErrorContext} aborted`);\n    }\n}\n/**\n * Wraps a Promise into one that can be aborted with `AbortSignal`.\n * Aborting causes the returned Promise to reject with `AbortError` unless\n * the underlying promise itself has already resolved or rejected.\n *\n * Notice that it is the user's responsibility to implement any custom cleanup\n * logic in a `finally` or `catch` block in case of resources that need to be\n * freed up.\n */\nexport function asAbortable(promise, abortSignal, customErrorContext) {\n    if (abortSignal === undefined) {\n        return promise;\n    }\n    if (abortSignal.aborted) {\n        return Promise.reject(new AbortError(customErrorContext));\n    }\n    let abortListener;\n    return new Promise((resolve, reject) => {\n        abortListener = () => {\n            reject(new AbortError(customErrorContext));\n        };\n        abortSignal.addEventListener('abort', abortListener);\n        promise.then(resolve, reject);\n    }).finally(() => {\n        abortSignal.removeEventListener('abort', abortListener);\n    });\n}\n//# sourceMappingURL=asAbortable.js.map","/**\n * setTimeout with AbortSignal support. Aborting will simply clear\n * the timeout silently.\n */\nexport const setAbortableTimeout = (cb, ms, abortSignal) => {\n    if (abortSignal.aborted) {\n        return;\n    }\n    const abortListener = () => {\n        clearTimeout(timeoutRef);\n    };\n    abortSignal.addEventListener('abort', abortListener, { once: true });\n    const timeoutRef = setTimeout(() => {\n        abortSignal.removeEventListener('abort', abortListener);\n        cb();\n    }, ms);\n};\n/**\n * setInterval with AbortSignal support. Aborting will simply clear\n * the interval silently.\n */\nexport const setAbortableInterval = (cb, ms, abortSignal) => {\n    if (abortSignal.aborted) {\n        return;\n    }\n    const abortListener = () => {\n        clearInterval(timeoutRef);\n    };\n    abortSignal.addEventListener('abort', abortListener, { once: true });\n    const timeoutRef = setInterval(() => {\n        cb();\n    }, ms);\n};\n//# sourceMappingURL=abortableTimers.js.map","import once from 'lodash/once';\nconst noopExecutor = () => { };\n/**\n * Deferred promise allowing external control of resolve / reject.\n */\nexport class Defer extends Promise {\n    resolveFn;\n    rejectFn;\n    ensureNoopCatchAttached;\n    settled = false;\n    constructor(executor = noopExecutor) {\n        let localResolve;\n        let localReject;\n        super((resolve, reject) => {\n            localResolve = resolve;\n            localReject = reject;\n            executor(resolve, reject);\n        });\n        if (localResolve === undefined) {\n            throw new Error('invariant violation: resolveFn was undefined');\n        }\n        if (localReject === undefined) {\n            throw new Error('invariant violation: rejectFn was undefined');\n        }\n        this.resolveFn = localResolve;\n        this.rejectFn = localReject;\n        this.ensureNoopCatchAttached = once(() => {\n            super.catch(() => { });\n        });\n    }\n    resolve(value) {\n        this.ensureNoopCatchAttached();\n        if (!this.settled) {\n            this.settled = true;\n            this.resolveFn(value);\n        }\n    }\n    reject(error) {\n        this.ensureNoopCatchAttached();\n        if (!this.settled) {\n            this.settled = true;\n            this.rejectFn(error);\n        }\n    }\n    wrap(fn) {\n        this.ensureNoopCatchAttached();\n        return async (...args) => {\n            try {\n                const value = await fn(...args);\n                this.resolve(value);\n                return value;\n            }\n            catch (err) {\n                // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n                this.reject(err);\n                throw err;\n            }\n        };\n    }\n}\n//# sourceMappingURL=Defer.js.map","export function isENSNameFormatIgnoreCase(str) {\n    return str.indexOf('.') > 0;\n}\nexport function toENSName(str) {\n    if (isENSNameFormatIgnoreCase(str)) {\n        return str.toLowerCase();\n    }\n    throw new Error(`not a valid ENS name: \"${str}\"`);\n}\n//# sourceMappingURL=ENSName.js.map","const REGEX = /^0x[a-fA-F0-9]{40}$/;\nexport const PREFIXED_STRING_LENGTH = 42;\nexport function toEthereumAddress(str) {\n    if (REGEX.test(str)) {\n        return str.toLowerCase();\n    }\n    throw new Error(`not a valid Ethereum address: \"${str}\"`);\n}\n//# sourceMappingURL=EthereumAddress.js.map","import { isENSNameFormatIgnoreCase } from './ENSName';\nexport function isENSName(domain) {\n    return isENSNameFormatIgnoreCase(domain);\n}\n//# sourceMappingURL=isENSName.js.map","import crypto from 'crypto';\nexport function getSubtle() {\n    const subtle = crypto.webcrypto.subtle;\n    if (!subtle) {\n        const url = 'https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto';\n        throw new Error(`SubtleCrypto not supported. This feature is available only in Node 16+. ${url}`);\n    }\n    return subtle;\n}\nexport function computeMd5(input) {\n    return crypto.createHash('md5').update(input).digest();\n}\nexport function computeSha1(input) {\n    return crypto.createHash('sha1').update(input).digest();\n}\nexport function createCipheriv(algorithm, key, iv) {\n    return crypto.createCipheriv(algorithm, key, iv);\n}\nexport function createDecipheriv(algorithm, key, iv) {\n    return crypto.createDecipheriv(algorithm, key, iv);\n}\nexport function publicEncrypt(publicKey, buffer) {\n    return crypto.publicEncrypt(publicKey, buffer);\n}\nexport function privateDecrypt(privateKey, buffer) {\n    return crypto.privateDecrypt(privateKey, buffer);\n}\n//# sourceMappingURL=crypto.js.map","import { computeMd5 } from '@/crypto';\n/**\n * Computes a deterministic index for a given string or number key.\n * Used for deterministically selecting an entry from an ordered list\n * for various load balancing and partitioning purposes.\n *\n * @param lengthOfArray Number of items to select from\n * @param key Input string or number\n * @returns Array index between [0..lengthOfArray-1]\n */\nexport function keyToArrayIndex(lengthOfArray, key) {\n    if (!(Number.isSafeInteger(lengthOfArray) && lengthOfArray > 0)) {\n        throw new Error(`lengthOfArray is not a safe positive integer! ${lengthOfArray}`);\n    }\n    if (lengthOfArray === 1) {\n        // Fast common case\n        return 0;\n    }\n    // Number key handling\n    if (typeof key === 'number') {\n        return Math.abs(key) % lengthOfArray;\n    }\n    // String key handling\n    const intHash = computeMd5(key).readInt32LE(0);\n    return Math.abs(intHash) % lengthOfArray;\n}\n//# sourceMappingURL=keyToArrayIndex.js.map","/**\n * Node.js environment object.\n *\n * Directly exposes `process.env`.\n */\nexport const env = process.env;\n//# sourceMappingURL=env.js.map","import pino from 'pino';\nimport path from 'path';\nimport without from 'lodash/without';\nimport padEnd from 'lodash/padEnd';\nimport { env } from '@/env';\nconst parseBoolean = (value) => {\n    switch (value) {\n        case 'true':\n            return true;\n        case 'false':\n            return false;\n        case undefined:\n            return undefined;\n        default:\n            throw new Error('Invalid boolean value: ${value}');\n    }\n};\n/**\n * Disabled when environment variable DISABLE_PRETTY_LOG is set to true.\n */\nfunction isPrettyPrintDisabled() {\n    return parseBoolean(env.DISABLE_PRETTY_LOG) ?? false;\n}\nfunction isJestRunning() {\n    return env.JEST_WORKER_ID !== undefined;\n}\n/**\n * This whole monstrosity exists only because pino in browser environment will not print a log message\n * when invoking `logger.info(undefined, 'msg') instead you need to call `logger.info(msg)`.\n */\nfunction wrappedMethodCall(wrappedPinoMethod) {\n    return (msg, metadata) => {\n        if (metadata !== undefined) {\n            wrappedPinoMethod(metadata, msg);\n        }\n        else {\n            wrappedPinoMethod(msg);\n        }\n    };\n}\nexport class Logger {\n    static NAME_LENGTH = 25;\n    static rootLogger;\n    static getRootLogger() {\n        Logger.rootLogger ??= pino({\n            name: 'rootLogger',\n            enabled: !env.NOLOG,\n            level: env.LOG_LEVEL ?? 'info',\n            formatters: {\n                level: (label) => {\n                    return { level: label }; // log level as string instead of number\n                },\n            },\n            transport: isPrettyPrintDisabled()\n                ? undefined\n                : {\n                    target: 'pino-pretty',\n                    options: {\n                        colorize: parseBoolean(env.LOG_COLORS) ?? true,\n                        singleLine: true,\n                        translateTime: 'yyyy-mm-dd\"T\"HH:MM:ss.l',\n                        ignore: 'pid,hostname',\n                        levelFirst: true,\n                        sync: isJestRunning(),\n                    },\n                },\n            browser: {\n                asObject: true,\n            },\n        });\n        return Logger.rootLogger;\n    }\n    logger;\n    fatal;\n    error;\n    warn;\n    info;\n    debug;\n    trace;\n    constructor(loggerModule, contextBindings, defaultLogLevel = 'info', parentLogger = Logger.getRootLogger()) {\n        this.logger = parentLogger.child({\n            name: Logger.createName(loggerModule),\n            ...contextBindings\n        }, {\n            level: env.LOG_LEVEL ?? defaultLogLevel\n        });\n        this.fatal = wrappedMethodCall(this.logger.fatal.bind(this.logger));\n        this.error = wrappedMethodCall(this.logger.error.bind(this.logger));\n        this.warn = wrappedMethodCall(this.logger.warn.bind(this.logger));\n        this.info = wrappedMethodCall(this.logger.info.bind(this.logger));\n        this.debug = wrappedMethodCall(this.logger.debug.bind(this.logger));\n        this.trace = wrappedMethodCall(this.logger.trace.bind(this.logger));\n    }\n    static createName(loggerModule) {\n        const loggerModuleId = typeof loggerModule === 'string' ? loggerModule : String(loggerModule.id);\n        const parsedPath = path.parse(loggerModuleId);\n        let fileId = parsedPath.name;\n        if (fileId === 'index') {\n            // file with name \"foobar/index.ts\" -> \"foobar\"\n            const parts = parsedPath.dir.split(path.sep);\n            fileId = parts[parts.length - 1];\n        }\n        const longName = without([env.STREAMR_APPLICATION_ID, fileId], undefined).join(':');\n        return isPrettyPrintDisabled() ?\n            longName : padEnd(longName.substring(0, this.NAME_LENGTH), this.NAME_LENGTH, ' ');\n    }\n}\n//# sourceMappingURL=Logger.js.map","import { setAbortableTimeout } from './abortableTimers';\n/*\n * @param {number} interval - execute task when UTC timestamp is divisible by the given interval\n *                            e.g. scheduleAtFixedRate(() => {},  24 * 60 * 60 * 1000) triggers the\n *                            task once a day at 00:00 UTC\n *                            (but no tasks will be executed concurrently: if a previous task is\n *                            still ongoing when the next task should, the new task is silently skipped)\n */\nexport const scheduleAtFixedRate = (task, interval, abortSignal) => {\n    const initTime = Date.now();\n    let invocationTime = initTime - (initTime % interval);\n    repeatScheduleTask((doneCb) => {\n        const now = Date.now();\n        invocationTime += interval;\n        if (now < invocationTime) {\n            setAbortableTimeout(async () => {\n                await task(invocationTime);\n                doneCb();\n            }, (invocationTime - now), abortSignal);\n        }\n        else {\n            doneCb();\n        }\n    }, abortSignal);\n};\n/** @internal */\nexport const repeatScheduleTask = (scheduleNextTask, abortSignal) => {\n    const scheduleNext = () => {\n        if (!abortSignal?.aborted) {\n            scheduleNextTask(scheduleNext);\n        }\n    };\n    scheduleNext();\n};\n//# sourceMappingURL=scheduleAtFixedRate.js.map","import { EventEmitter } from 'eventemitter3';\nimport set from 'lodash/set';\nimport { scheduleAtFixedRate } from './scheduleAtFixedRate';\nclass Sampler {\n    metric;\n    listener;\n    constructor(metric) {\n        this.metric = metric;\n        this.listener = (value) => this.onRecord(value);\n    }\n    start(_now) {\n        this.metric.on('record', this.listener);\n    }\n    stop(_now) {\n        this.metric.off('record', this.listener);\n    }\n}\nexport class Metric {\n    latestValue;\n    eventEmitter = new EventEmitter();\n    samplerFactory;\n    /** @internal */\n    constructor(samplerFactory, initialValue) {\n        this.samplerFactory = samplerFactory;\n        this.latestValue = initialValue;\n    }\n    record(value) {\n        this.latestValue = value;\n        this.eventEmitter.emit('record', value);\n    }\n    getLatestValue() {\n        return this.latestValue;\n    }\n    /** @internal */\n    on(eventName, listener) {\n        this.eventEmitter.on(eventName, listener);\n    }\n    /** @internal */\n    off(eventName, listener) {\n        this.eventEmitter.off(eventName, listener);\n    }\n    /** @internal */\n    createSampler() {\n        return this.samplerFactory(this);\n    }\n}\n/*\n * Sum of all records within a sampling period.\n *\n * E.g. count of failed connections\n */\nclass CountSampler extends Sampler {\n    sum = 0;\n    onRecord(value) {\n        this.sum += value;\n    }\n    getAggregatedValue() {\n        return this.sum;\n    }\n}\nexport class CountMetric extends Metric {\n    constructor() {\n        super((m) => new CountSampler(m));\n    }\n}\n/*\n * Average of all records within a sampling period. If the sampling data is\n * continuous, you may want to use LevelSampler instead.\n *\n * E.g. average latency\n */\nclass AverageSampler extends Sampler {\n    sum = 0;\n    count = 0;\n    onRecord(value) {\n        this.sum += value;\n        this.count++;\n    }\n    getAggregatedValue() {\n        if (this.count > 0) {\n            return this.sum / this.count;\n        }\n        else {\n            return undefined;\n        }\n    }\n}\nexport class AverageMetric extends Metric {\n    constructor() {\n        super((m) => new AverageSampler(m));\n    }\n}\n/*\n * Average level of the records during a sampling period. Takes the average of the\n * recorded values, but also includes the current level as a first sample when\n * the sampling starts.\n *\n * E.g. average count of currently active connections\n */\nclass LevelSampler extends AverageSampler {\n    start(now) {\n        super.start(now);\n        const latest = this.metric.getLatestValue();\n        if (latest !== undefined) {\n            this.onRecord(latest);\n        }\n    }\n}\nexport class LevelMetric extends Metric {\n    constructor(initialValue) {\n        super((m) => new LevelSampler(m), initialValue);\n    }\n}\n/*\n * Sum of records divided by seconds.\n *\n * E.g. download speed (bytes per second)\n */\nclass RateSampler extends Sampler {\n    sum = 0;\n    startTimestamp = undefined;\n    stopTimestamp = undefined;\n    start(now) {\n        super.start(now);\n        this.startTimestamp = now;\n    }\n    stop(now) {\n        super.stop(now);\n        this.stopTimestamp = now;\n    }\n    onRecord(value) {\n        this.sum += value;\n    }\n    getAggregatedValue() {\n        if ((this.startTimestamp !== undefined) && (this.stopTimestamp !== undefined) && (this.startTimestamp !== this.stopTimestamp)) {\n            const elapsedSeconds = (this.stopTimestamp - this.startTimestamp) / 1000;\n            return this.sum / elapsedSeconds;\n        }\n        else {\n            return undefined;\n        }\n    }\n}\nexport class RateMetric extends Metric {\n    constructor() {\n        super((m) => new RateSampler(m));\n    }\n}\nexport class MetricsContext {\n    metrics = new Map();\n    addMetrics(namespace, definitions) {\n        Object.keys(definitions).forEach((key) => {\n            const id = `${namespace}.${key}`;\n            if (this.metrics.has(id)) {\n                throw new Error(`Metrics \"${id}\" already created`);\n            }\n            this.metrics.set(id, definitions[key]);\n        });\n    }\n    createReportProducer(onReport, interval, abortSignal, formatNumber) {\n        const ongoingSamples = new Map();\n        scheduleAtFixedRate(async (now) => {\n            if (ongoingSamples.size > 0) {\n                const report = {\n                    period: {\n                        start: now - interval,\n                        end: now\n                    }\n                };\n                ongoingSamples.forEach((sample, metricId) => {\n                    sample.stop(now);\n                    const value = sample.getAggregatedValue();\n                    if (value !== undefined) {\n                        set(report, metricId, (formatNumber !== undefined) ? formatNumber(value) : value);\n                    }\n                });\n                onReport(report);\n                ongoingSamples.clear();\n            }\n            this.metrics.forEach((metric, id) => {\n                const sample = metric.createSampler();\n                sample.start(now);\n                ongoingSamples.set(id, sample);\n            });\n        }, interval, abortSignal);\n    }\n    getMetric(id) {\n        return this.metrics.get(id);\n    }\n}\n//# sourceMappingURL=Metric.js.map","/**\n * Generic multimap: a key which maps to multiple valuess.\n * The values is an array\n * -> when we query the data, we get it back in the same order\n * -> an array may contain duplicates, if same value is added multiple times\n *    (we could implement a Multiset class if we need a different kind of duplication handling)\n **/\nexport class Multimap {\n    delegatee = new Map();\n    get(key) {\n        return this.delegatee.get(key) ?? [];\n    }\n    has(key, value) {\n        const items = this.delegatee.get(key);\n        if (items !== undefined) {\n            return items.includes(value);\n        }\n        else {\n            return false;\n        }\n    }\n    add(key, value) {\n        this.delegatee.set(key, this.get(key).concat(value));\n    }\n    addAll(key, values) {\n        this.delegatee.set(key, this.get(key).concat(values));\n    }\n    remove(key, value) {\n        const items = this.delegatee.get(key);\n        if (items !== undefined) {\n            const newItems = items.filter((i) => i !== value);\n            if (newItems.length > 0) {\n                this.delegatee.set(key, newItems);\n            }\n            else {\n                this.delegatee.delete(key);\n            }\n        }\n    }\n    removeAll(key, values) {\n        values.forEach((value) => this.remove(key, value));\n    }\n    *keys() {\n        yield* this.delegatee.keys();\n    }\n    *values() {\n        for (const k of this.keys()) {\n            yield* this.get(k);\n        }\n    }\n    getKeyCount() {\n        return this.delegatee.size;\n    }\n    isEmpty() {\n        return this.getKeyCount() === 0;\n    }\n}\n//# sourceMappingURL=Multimap.js.map","export const DEFAULT_CHARSET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n// From: https://stackoverflow.com/questions/10726909/random-alpha-numeric-string-in-javascript\nexport function randomString(length, charset = DEFAULT_CHARSET) {\n    let result = '';\n    for (let i = 0; i < length; ++i) {\n        result += charset[Math.floor(Math.random() * charset.length)];\n    }\n    return result;\n}\n//# sourceMappingURL=randomString.js.map","/*\n * @param {number} interval - number of milliseconds to wait after a task is completed\n */\nimport { repeatScheduleTask } from './scheduleAtFixedRate';\nimport { setAbortableTimeout } from './abortableTimers';\nexport const scheduleAtInterval = async (task, interval, executeAtStart, abortSignal) => {\n    if (abortSignal.aborted) {\n        return;\n    }\n    if (executeAtStart) {\n        await task();\n    }\n    repeatScheduleTask((doneCb) => {\n        setAbortableTimeout(async () => {\n            await task();\n            doneCb();\n        }, interval, abortSignal);\n    }, abortSignal);\n};\n//# sourceMappingURL=scheduleAtInterval.js.map","import { asAbortable } from './asAbortable';\n/**\n * Wait for a specific time\n * @param ms time to wait for in milliseconds\n * @param abortSignal to control abortion of any wait\n * @returns {Promise<void>} resolves when time has passed\n */\nexport function wait(ms, abortSignal) {\n    let timeoutRef;\n    return asAbortable(new Promise((resolve) => {\n        timeoutRef = setTimeout(resolve, ms);\n    }), abortSignal).finally(() => {\n        clearTimeout(timeoutRef);\n    });\n}\n//# sourceMappingURL=wait.js.map","import { scheduleAtInterval } from './scheduleAtInterval';\nimport { wait } from './wait';\n/**\n * @param {number} approximateIntervalInMs - approximate time (in milliseconds) to wait after a task is completed\n * @param {number} driftMultiplier how much the wait time can vary: e.g. if the interval is 60 minutes and the drift is 0.1,\n * the delay between invocations will range from 54 to 66 minutes\n */\nexport const scheduleAtApproximateInterval = async (task, approximateIntervalInMs, driftMultiplier, executeAtStart, abortSignal) => {\n    if (abortSignal.aborted) {\n        return;\n    }\n    if (executeAtStart) {\n        await task();\n    }\n    return scheduleAtInterval(async () => {\n        try {\n            await wait(Math.round(Math.random() * approximateIntervalInMs * 2 * driftMultiplier), abortSignal);\n        }\n        catch {\n            // the abort signal timeouted, ignore\n        }\n        if (!abortSignal.aborted) {\n            await task();\n        }\n    }, approximateIntervalInMs * (1 - driftMultiplier), false, abortSignal);\n};\n//# sourceMappingURL=scheduleAtApproximateInterval.js.map","import { toEthereumAddress } from './EthereumAddress';\nimport { isENSNameFormatIgnoreCase, toENSName } from './ENSName';\nexport function toEthereumAddressOrENSName(str) {\n    return isENSNameFormatIgnoreCase(str) ? toENSName(str) : toEthereumAddress(str);\n}\n//# sourceMappingURL=toEthereumAddressOrENSName.js.map","import { asAbortable } from './asAbortable';\nexport class TimeoutError extends Error {\n    code = 'TimeoutError';\n    constructor(timeoutInMs, customErrorContext) {\n        super(customErrorContext === undefined\n            ? `timed out after ${timeoutInMs} ms`\n            : `${customErrorContext} (timed out after ${timeoutInMs} ms)`);\n    }\n}\nexport const withTimeout = (task, timeoutInMs, customErrorContext, abortSignal) => {\n    let timeoutRef;\n    return asAbortable(Promise.race([\n        task,\n        new Promise((_resolve, reject) => {\n            timeoutRef = setTimeout(() => {\n                reject(new TimeoutError(timeoutInMs, customErrorContext));\n            }, timeoutInMs);\n        })\n    ]), abortSignal, customErrorContext).finally(() => {\n        clearTimeout(timeoutRef);\n    });\n};\n//# sourceMappingURL=withTimeout.js.map","import { withTimeout } from './withTimeout';\n/**\n * Wait for an event to be emitted on emitter within timeout.\n *\n * @param emitter emitter of event\n * @param eventName event to wait for\n * @param timeout amount of time in milliseconds to wait for\n * @param predicate function that gets passed the event arguments, should return true if event accepted\n * @param abortSignal\n * @returns {Promise<Parameters<TEvents[TEventName]>>} resolves with event arguments if event occurred within timeout else rejects\n */\nexport async function waitForEvent(emitter, eventName, timeout = 5000, predicate = () => true, abortSignal) {\n    let listener;\n    const task = new Promise((resolve) => {\n        listener = ((...eventArgs) => {\n            if (predicate(...eventArgs)) {\n                resolve(eventArgs);\n            }\n        });\n        emitter.on(eventName, listener);\n    });\n    return withTimeout(task, timeout, 'waitForEvent', abortSignal).finally(() => {\n        emitter.off(eventName, listener);\n    });\n}\n//# sourceMappingURL=waitForEvent.js.map","import { waitForEvent } from './waitForEvent';\nexport async function raceForEvent(emitter, eventNames, timeout = 5000) {\n    const raceAbortController = new AbortController();\n    const promises = eventNames.map(async (eventName) => {\n        const eventArgs = await waitForEvent(emitter, eventName, timeout, () => true, raceAbortController.signal);\n        return {\n            winnerName: eventName,\n            winnerArgs: eventArgs\n        };\n    });\n    let result;\n    try {\n        result = await Promise.race(promises);\n    }\n    finally {\n        // Call raceAbortController.abort() to remove the event listeners. Note that this not strictly needed when Promise.race(promises) rejects.\n        // The race can reject only if withTimeout() timeouts, and as all timeouts happen at the same time, the event listeners are cleaned\n        // up immediately. In that sense this could be moved out from the finally block. But it makes sense to keep it here so that the function\n        // can be seen as an atomic operation: all cleanup happens _before_ the function returns, not immediately _after_ it returns.\n        // The Promise.allSettled() call implements that atomicity by waiting the cleanups initiated by raceAbortController.abort() to complete.\n        raceAbortController.abort();\n        await Promise.allSettled(promises);\n    }\n    return result;\n}\n//# sourceMappingURL=raceForEvent.js.map","/**\n * Compose a single AbortSignal from multiple AbortSignals with \"OR\" logic.\n *\n * WARNING: be aware of a potential memory leak that can occur if the composed\n * AbortSignal is never destroyed. This can happen if an instance of AbortSignal\n * is composed over and over with this utility but the composed AbortSignal (or\n * the other passed AbortSignal(s)) never abort. In this situation the\n * aforementioned instance of AbortSignal will have more and more listeners added\n * but never cleaned.\n */\nexport function composeAbortSignals(...signals) {\n    const abortController = new AbortController();\n    for (const signal of signals) {\n        if (signal?.aborted) {\n            abortController.abort();\n            return Object.assign(abortController.signal, { destroy: () => { } });\n        }\n    }\n    function destroy() {\n        for (const signal of signals) {\n            signal?.removeEventListener('abort', onAbort);\n        }\n    }\n    let aborted = false;\n    function onAbort() {\n        if (aborted) {\n            return;\n        }\n        aborted = true;\n        abortController.abort();\n        destroy();\n    }\n    for (const signal of signals) {\n        signal?.addEventListener('abort', onAbort, { once: true });\n    }\n    return Object.assign(abortController.signal, { destroy });\n}\n//# sourceMappingURL=composeAbortSignals.js.map","import { AbortError, asAbortable } from './asAbortable';\nimport { wait } from './wait';\nimport { composeAbortSignals } from './composeAbortSignals';\nfunction throwError(userAborted, conditionFn, onTimeoutContext) {\n    const action = userAborted ? 'aborted' : 'timed out';\n    let msg = `until: ${action} before \"${conditionFn.toString()}\" became true`;\n    if (onTimeoutContext) {\n        msg += `\\n${onTimeoutContext()}`;\n    }\n    throw new Error(msg);\n}\n/**\n * Wait for a condition to become true by re-evaluating `conditionFn` every `retryInterval` milliseconds.\n *\n * @param conditionFn condition to be evaluated; should return boolean or Promise<boolean> and have\n * no side effects.\n * @param timeout amount of time in milliseconds to wait for\n * @param retryInterval how often, in milliseconds, to re-evaluate condition\n * @param abortSignal pass an abort signal to cancel prematurely\n * @param onTimeoutContext evaluated only on timeout. Used to associate human-friendly textual context to error.\n * @returns {Promise<void>} resolves immediately if\n * conditionFn evaluates to true on a retry attempt within timeout. If timeout\n * is reached with conditionFn never evaluating to true, rejects.\n */\nexport const until = async (conditionFn, timeout = 5000, retryInterval = 100, abortSignal, onTimeoutContext) => {\n    let userAborted = abortSignal?.aborted ?? false;\n    if (userAborted) {\n        throwError(userAborted, conditionFn, onTimeoutContext);\n    }\n    abortSignal?.addEventListener('abort', () => { userAborted = true; }, { once: true });\n    const timeoutAbortSignal = AbortSignal.timeout(timeout);\n    const composedSignal = composeAbortSignals(timeoutAbortSignal, abortSignal);\n    try {\n        while (true) {\n            const result = await asAbortable(Promise.resolve(conditionFn()), composedSignal);\n            if (result) {\n                return;\n            }\n            await wait(retryInterval, composedSignal);\n        }\n    }\n    catch (e) {\n        if (e instanceof AbortError) {\n            throwError(userAborted, conditionFn, onTimeoutContext);\n        }\n        throw e;\n    }\n    finally {\n        composedSignal.destroy();\n    }\n};\n//# sourceMappingURL=until.js.map","/**\n * Wraps a rate limiter around a function that ensures the function is invoked max once per `intervalInMs`.\n */\nexport function withRateLimit(fn, intervalInMs) {\n    let lastInvocationTimestamp = 0;\n    return async () => {\n        const now = Date.now();\n        if (now - lastInvocationTimestamp >= intervalInMs) {\n            lastInvocationTimestamp = now;\n            await fn();\n        }\n    };\n}\n//# sourceMappingURL=withRateLimit.js.map","import { EventEmitter } from 'eventemitter3';\n/*\n * Emits an addEventListener/removeEventListener event to a separate EventEmitter\n * whenever a listener is added or removed\n */\nexport class ObservableEventEmitter {\n    delegate = new EventEmitter();\n    observer = new EventEmitter();\n    on(eventName, listener) {\n        this.delegate.on(eventName, listener);\n        this.observer.emit('addEventListener', eventName);\n    }\n    once(eventName, listener) {\n        const wrappedFn = (payload) => {\n            listener(payload);\n            this.observer.emit('removeEventListener', eventName);\n        };\n        this.delegate.once(eventName, wrappedFn);\n        this.observer.emit('addEventListener', eventName);\n    }\n    off(eventName, listener) {\n        this.delegate.off(eventName, listener);\n        this.observer.emit('removeEventListener', eventName);\n    }\n    removeAllListeners() {\n        const eventNames = this.delegate.eventNames();\n        this.delegate.removeAllListeners();\n        for (const eventName of eventNames) {\n            this.observer.emit('removeEventListener', eventName);\n        }\n    }\n    emit(eventName, payload) {\n        this.delegate.emit(eventName, payload);\n    }\n    getListenerCount(eventName) {\n        return this.delegate.listenerCount(eventName);\n    }\n    getObserver() {\n        return this.observer;\n    }\n}\n//# sourceMappingURL=ObservableEventEmitter.js.map","/*\n * Initializes a gateway which can produce events to the given emitter. The gateway is running\n * when there are any listeners for the given eventName: the start() callback is called\n * when a first event listener for the event name is added, and the stop() callback is called\n * when the last event listener is removed.\n */\nexport const initEventGateway = (eventName, start, stop, emitter) => {\n    const observer = emitter.getObserver();\n    const emit = (payload) => emitter.emit(eventName, payload);\n    let producer;\n    observer.on('addEventListener', (sourceEvent) => {\n        if ((sourceEvent === eventName) && (producer === undefined)) {\n            producer = start(emit);\n        }\n    });\n    observer.on('removeEventListener', (sourceEvent) => {\n        if ((sourceEvent === eventName) && (producer !== undefined) && (emitter.getListenerCount(eventName) === 0)) {\n            stop(producer);\n            producer = undefined;\n        }\n    });\n    if (emitter.getListenerCount(eventName) > 0) {\n        producer = start(emit);\n    }\n};\n//# sourceMappingURL=initEventGateway.js.map","export const addManagedEventListener = (emitter, eventName, listener, abortSignal) => {\n    if (!abortSignal.aborted) {\n        emitter.on(eventName, listener);\n        abortSignal.addEventListener('abort', () => {\n            emitter.off(eventName, listener);\n        }, {\n            once: true\n        });\n    }\n};\n//# sourceMappingURL=addManagedEventListener.js.map","import isArray from 'lodash/isArray';\nimport mergeWith from 'lodash/mergeWith';\n/*\n * Does deep merge. This is similar to `lodash` merge, but handles arrays differently:\n * `lodash` merges elements of arrays by their indices, this overwrites the existing\n * value with the array\n */\nexport const merge = (...sources) => {\n    const result = {};\n    mergeWith(result, ...sources, (_, srcValue) => {\n        if (isArray(srcValue)) {\n            return [...srcValue];\n        }\n        else {\n            return undefined; // no customization: does the default merging for this field\n        }\n    });\n    return result;\n};\n//# sourceMappingURL=merge.js.map","export const collect = async (source, maxCount) => {\n    if ((maxCount !== undefined) && (maxCount <= 0)) {\n        return [];\n    }\n    const items = [];\n    for await (const item of source) {\n        items.push(item);\n        if ((maxCount !== undefined) && (items.length >= maxCount)) {\n            break;\n        }\n    }\n    return items;\n};\n//# sourceMappingURL=collect.js.map","import { Defer } from './Defer';\n/*\n * Gate to lock access to some resource.\n */\nexport class Gate {\n    pending;\n    constructor(isOpen) {\n        if (!isOpen) {\n            this.close();\n        }\n    }\n    open() {\n        this.clearPending();\n    }\n    close() {\n        this.pending ??= new Defer();\n    }\n    isOpen() {\n        return !this.pending;\n    }\n    clearPending() {\n        const { pending } = this;\n        if (pending === undefined) {\n            return;\n        }\n        this.pending = undefined;\n        pending.resolve(undefined);\n    }\n    async waitUntilOpen() {\n        if (this.pending) {\n            await this.pending;\n        }\n    }\n}\n//# sourceMappingURL=Gate.js.map","import { Gate } from './Gate';\nimport { Logger } from './Logger';\nimport { wait } from './wait';\nimport { TimeoutError, withTimeout } from './withTimeout';\n/**\n * Query one entity with queryEntity method, and a list of entitities with queryEntities method.\n * The queryEntities method does pagination automatically.\n *\n * If we want to ensure that The Graph index is up-to-date, we can call the updateRequiredBlockNumber()\n * method. In that case a queryEntity()/queryEntities() waits until The Graph has been indexed at least\n * to that block number. If the indexing takes longer than opts.indexTimeout, the query call rejects\n * with a TimeoutError.\n */\nexport class TheGraphClient {\n    requiredBlockNumber = 0;\n    indexingState;\n    serverUrl;\n    fetch;\n    logger;\n    constructor(opts) {\n        this.serverUrl = opts.serverUrl;\n        this.fetch = opts.fetch;\n        this.logger = opts.logger ?? new Logger('TheGraphClient');\n        this.indexingState = new IndexingState(() => this.getIndexBlockNumber(), opts.indexTimeout ?? 60000, opts.indexPollInterval ?? 1000, this.logger);\n    }\n    async queryEntity(query) {\n        await this.indexingState.waitUntilIndexed(this.requiredBlockNumber);\n        return this.sendQuery(query);\n    }\n    async *queryEntities(createQuery, \n    /*\n     * For simple queries there is one root level property, e.g. \"streams\" or \"permissions\"\n     * which contain array of items. If the query contains more than one root level property\n     * or we want to return non-root elements as items, the caller must pass a custom\n     * function to parse the items.\n     */\n    parseItems = (response) => {\n        const rootKey = Object.keys(response)[0];\n        return response[rootKey];\n    }, pageSize = 1000) {\n        await this.indexingState.waitUntilIndexed(this.requiredBlockNumber);\n        let lastResultSet;\n        do {\n            const lastId = (lastResultSet !== undefined) ? lastResultSet[lastResultSet.length - 1].id : '';\n            const query = createQuery(lastId, pageSize, this.requiredBlockNumber);\n            const response = await this.sendQuery(query);\n            const items = parseItems(response);\n            yield* items;\n            lastResultSet = items;\n        } while (lastResultSet.length === pageSize);\n    }\n    updateRequiredBlockNumber(blockNumber) {\n        this.requiredBlockNumber = Math.max(blockNumber, this.requiredBlockNumber);\n    }\n    async sendQuery(query) {\n        this.logger.trace('Send GraphQL query', { query });\n        const res = await this.fetch(this.serverUrl, {\n            method: 'POST',\n            headers: {\n                'Content-Type': 'application/json',\n                accept: '*/*',\n            },\n            body: JSON.stringify(query)\n        });\n        const resText = await res.text();\n        let resJson;\n        try {\n            resJson = JSON.parse(resText);\n        }\n        catch {\n            throw new Error(`GraphQL query failed with \"${resText}\"`);\n        }\n        this.logger.trace('Received GraphQL response', { resJson });\n        if (!resJson.data) {\n            if (resJson.errors && resJson.errors.length > 0) {\n                throw new Error('GraphQL query failed: ' + JSON.stringify(resJson.errors.map((e) => e.message)));\n            }\n            else {\n                throw new Error('GraphQL query failed');\n            }\n        }\n        return resJson.data;\n    }\n    async getIndexBlockNumber() {\n        const response = await this.sendQuery({ query: '{ _meta { block { number } } }' });\n        // eslint-disable-next-line no-underscore-dangle\n        return response._meta.block.number;\n    }\n}\nclass BlockNumberGate extends Gate {\n    blockNumber;\n    constructor(blockNumber) {\n        super(true);\n        this.blockNumber = blockNumber;\n    }\n}\nclass IndexingState {\n    blockNumber = 0;\n    gates = new Set();\n    getCurrentBlockNumber;\n    timeout;\n    pollInterval;\n    logger;\n    constructor(getCurrentBlockNumber, timeout, pollInterval, logger) {\n        this.getCurrentBlockNumber = async () => {\n            try {\n                return await getCurrentBlockNumber();\n            }\n            catch (err) {\n                logger.warn('Failed to get current block number', { reason: err instanceof Error ? err.message : String(err) });\n                return undefined;\n            }\n        };\n        this.timeout = timeout;\n        this.pollInterval = pollInterval;\n        this.logger = logger;\n    }\n    async waitUntilIndexed(blockNumber) {\n        if (blockNumber <= this.blockNumber) {\n            return;\n        }\n        this.logger.debug('Wait until The Graph is synchronized', { blockNumber: this.blockNumber, blockTarget: blockNumber });\n        const gate = this.getOrCreateGate(blockNumber);\n        try {\n            await withTimeout(gate.waitUntilOpen(), this.timeout, `The Graph did not synchronize to block ${blockNumber}`);\n        }\n        catch (e) {\n            if (e instanceof TimeoutError) {\n                this.gates.delete(gate);\n            }\n            throw e;\n        }\n    }\n    getOrCreateGate(blockNumber) {\n        const gate = new BlockNumberGate(blockNumber);\n        if (blockNumber > this.blockNumber) {\n            const isPolling = this.gates.size > 0;\n            gate.close();\n            this.gates.add(gate);\n            if (!isPolling) {\n                this.startPolling();\n            }\n        }\n        return gate;\n    }\n    async startPolling() {\n        this.logger.trace('Start polling');\n        while (this.gates.size > 0) {\n            const newBlockNumber = await this.getCurrentBlockNumber();\n            if (newBlockNumber !== undefined && newBlockNumber !== this.blockNumber) {\n                this.blockNumber = newBlockNumber;\n                this.logger.trace('Polled', { blockNumber: this.blockNumber });\n                this.gates.forEach((gate) => {\n                    if (gate.blockNumber <= this.blockNumber) {\n                        gate.open();\n                        this.gates.delete(gate);\n                    }\n                });\n            }\n            if (this.gates.size > 0) {\n                await wait(this.pollInterval);\n            }\n        }\n        this.logger.trace('Stop polling');\n    }\n}\n//# sourceMappingURL=TheGraphClient.js.map","export class Heap {\n    items;\n    compare;\n    constructor(compare) {\n        this.items = [];\n        this.compare = compare;\n    }\n    push(item) {\n        const index = this.getItemIndex(item);\n        this.items.splice(index, 0, item);\n    }\n    pop() {\n        return this.items.shift();\n    }\n    peek() {\n        if (!this.isEmpty()) {\n            return this.items[0];\n        }\n        else {\n            return undefined;\n        }\n    }\n    contains(item) {\n        if (!this.isEmpty()) {\n            const index = this.getItemIndex(item);\n            if (index !== this.items.length) {\n                return this.compare(this.items[index], item) === 0;\n            }\n        }\n        return false;\n    }\n    isEmpty() {\n        return this.items.length === 0;\n    }\n    values() {\n        return this.items;\n    }\n    /*\n     * Return the index at which the item can be inserted in order to maintain\n     * the sort order of the array. If the item is in the array, it can be found\n     * at the returned index.\n     */\n    getItemIndex(item) {\n        if (!this.isEmpty()) {\n            let first = 0;\n            let last = this.items.length;\n            while (first < last) {\n                const middle = Math.floor((first + last) / 2);\n                const comparison = this.compare(this.items[middle], item);\n                if (comparison < 0) {\n                    first = middle + 1;\n                }\n                else {\n                    last = middle;\n                }\n            }\n            return last;\n        }\n        else {\n            return 0;\n        }\n    }\n}\n//# sourceMappingURL=Heap.js.map","import { Logger } from './Logger';\n/**\n * Execute a promise that should never reject. If it does, log the error and exit the process\n * (in Node/Electron) or throw an unhandled error (in browsers).\n * To be used in places where we want to \"annotate\" that the intention of a promise is never\n * to reject (unless something is really wrong).\n */\nexport const executeSafePromise = async (createPromise) => {\n    try {\n        return await createPromise();\n    }\n    catch (err) {\n        const logger = new Logger('executeSafePromise');\n        logger.fatal('Assertion failure!', { message: err?.message, err });\n        // Check if we're in a Node/Electron environment\n        if (typeof process !== 'undefined' && process.exit !== undefined) {\n            process.exit(1);\n        }\n        else {\n            // Browser environment - throw with proper error chaining\n            throw new Error('executeSafePromise: Assertion failure!', { cause: err });\n        }\n    }\n};\n//# sourceMappingURL=executeSafePromise.js.map","export const binaryToUtf8 = (bytes) => {\n    return new TextDecoder().decode(bytes);\n};\nexport const utf8ToBinary = (utf8) => {\n    return new TextEncoder().encode(utf8);\n};\nexport const binaryToHex = (bytes, addPrefix = false) => {\n    if (addPrefix) {\n        return `0x${Buffer.from(bytes).toString('hex')}`;\n    }\n    return Buffer.from(bytes).toString('hex');\n};\nexport const hexToBinary = (hex) => {\n    if (hex.startsWith('0x')) {\n        hex = hex.slice(2);\n    }\n    if (hex.length % 2 !== 0) {\n        throw new Error(`Hex string length must be even, received: 0x${hex}`);\n    }\n    const result = Buffer.from(hex, 'hex');\n    if (hex.length !== result.length * 2) {\n        throw new Error(`Hex string input is likely malformed, received: 0x${hex}`);\n    }\n    return result;\n};\nexport const areEqualBinaries = (arr1, arr2) => {\n    return Buffer.compare(arr1, arr2) === 0;\n};\n//# sourceMappingURL=binaryUtils.js.map","import os from 'os';\n// TODO: use untildify instead?\nexport function filePathToNodeFormat(filePath) {\n    if (filePath.startsWith('~/')) {\n        return filePath.replace('~', os.homedir());\n    }\n    else {\n        return filePath;\n    }\n}\n//# sourceMappingURL=filePathToNodeFormat.js.map","import { wait } from './wait';\nexport const retry = async (task, onRetryableFailure, description, maxCount, delay) => {\n    for (let i = 0; i < maxCount; i++) {\n        try {\n            const result = await task();\n            return result;\n        }\n        catch (err) {\n            if (i < (maxCount - 1)) {\n                const message = `${description} failed, retrying in ${delay} ms`;\n                onRetryableFailure(message, err);\n                await wait(delay);\n            }\n        }\n    }\n    throw new Error(`${description} failed after ${maxCount} attempts`);\n};\n//# sourceMappingURL=retry.js.map","import { Transform } from 'stream';\n// If you change this you also need to change `writeUint32BE` and `readUInt32BE` in the code below\nconst HEADER_LENGTH = 4;\n/**\n * Utilities to deal with length-prefixed frames, i.e. | length [4 bytes] | payload [variable bytes] |\n */\nexport const toLengthPrefixedFrame = (payload) => {\n    const length = Buffer.alloc(HEADER_LENGTH);\n    length.writeUint32BE(payload.length);\n    return Buffer.concat([length, payload]);\n};\nexport class LengthPrefixedFrameDecoder extends Transform {\n    buffer = Buffer.alloc(0);\n    constructor() {\n        super({ objectMode: true });\n    }\n    _transform(chunk, _encoding, callback) {\n        this.buffer = Buffer.concat([this.buffer, chunk]);\n        this.processStreamData(callback);\n    }\n    _flush(callback) {\n        // Handle any remaining data when the stream ends\n        this.processStreamData(callback);\n    }\n    processStreamData(callback) {\n        while (this.buffer.length >= HEADER_LENGTH) {\n            const payloadSize = this.buffer.readUInt32BE(0);\n            if (this.buffer.length >= payloadSize + HEADER_LENGTH) {\n                const payload = this.buffer.subarray(HEADER_LENGTH, payloadSize + HEADER_LENGTH);\n                this.push(payload);\n                this.buffer = this.buffer.subarray(payloadSize + HEADER_LENGTH);\n            }\n            else {\n                break;\n            }\n        }\n        callback();\n    }\n}\n//# sourceMappingURL=lengthPrefixedFrameUtils.js.map","export const ipv4ToNumber = (ip) => {\n    const octets = ip.split('.').map(Number);\n    return ((octets[0] << 24) | (octets[1] << 16) | (octets[2] << 8) | octets[3]) >>> 0;\n};\nexport const numberToIpv4 = (value) => {\n    const octets = [24, 16, 8, 0].map((shift) => (value >> shift) & 255);\n    return octets.join('.');\n};\n//# sourceMappingURL=ipv4ToNumber.js.map","export class MapWithTtl {\n    delegate = new Map();\n    getTtl;\n    constructor(getTtl) {\n        this.getTtl = getTtl;\n    }\n    set(key, value) {\n        const existing = this.delegate.get(key);\n        if (existing !== undefined) {\n            clearTimeout(existing.timeout);\n        }\n        this.delegate.set(key, {\n            value,\n            timeout: this.createTimeout(key, value)\n        });\n    }\n    get(key) {\n        const wrapper = this.delegate.get(key);\n        return wrapper?.value;\n    }\n    has(key) {\n        return this.delegate.has(key);\n    }\n    delete(key) {\n        const existing = this.delegate.get(key);\n        if (existing !== undefined) {\n            clearTimeout(existing.timeout);\n            this.delegate.delete(key);\n        }\n    }\n    clear() {\n        this.delegate.forEach((value) => {\n            clearTimeout(value.timeout);\n        });\n        this.delegate.clear();\n    }\n    size() {\n        return this.delegate.size;\n    }\n    *values() {\n        for (const v of this.delegate.values()) {\n            yield v.value;\n        }\n    }\n    forEach(cb) {\n        this.delegate.forEach((valueWrapper, key) => {\n            cb(valueWrapper.value, key);\n        });\n    }\n    createTimeout(key, value) {\n        return setTimeout(() => {\n            this.delete(key);\n        }, this.getTtl(value));\n    }\n}\n//# sourceMappingURL=MapWithTtl.js.map","import { toEthereumAddressOrENSName } from './toEthereumAddressOrENSName';\n/**\n * Create an instance of `StreamID` from a given string stream id or path.\n *\n * Supported formats:\n *  - full stream id format, e.g., '0x0000000000000000000000000000000000000000/foo/bar' or 'name.eth/foo/bar'\n *  - path-only format, e.g. , '/foo/bar'\n *  - legacy format, e.g., '7wa7APtlTq6EC5iTCBy6dw'\n *\n *  If `streamIdOrPath` is not in path-only format, `domain` can be left undefined.\n */\nexport function toStreamID(streamIdOrPath, domain) {\n    if (streamIdOrPath.length === 0) {\n        throw new Error('stream id may not be empty');\n    }\n    const firstSlashIdx = streamIdOrPath.indexOf('/');\n    if (firstSlashIdx === -1) { // legacy format\n        return streamIdOrPath;\n    }\n    else if (firstSlashIdx === 0) { // path-only format\n        if (domain === undefined) {\n            throw new Error(`path-only format \"${streamIdOrPath}\" provided without domain`);\n        }\n        return (domain + streamIdOrPath);\n    }\n    else {\n        const domain = toEthereumAddressOrENSName(streamIdOrPath.substring(0, firstSlashIdx));\n        const path = streamIdOrPath.substring(firstSlashIdx);\n        return (domain + path);\n    }\n}\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class StreamIDUtils {\n    static isPathOnlyFormat(streamIdOrPath) {\n        return streamIdOrPath.startsWith('/');\n    }\n    static getDomain(streamId) {\n        const domainAndPath = StreamIDUtils.getDomainAndPath(streamId);\n        return domainAndPath?.[0];\n    }\n    static getPath(streamId) {\n        const domainAndPath = StreamIDUtils.getDomainAndPath(streamId);\n        return domainAndPath?.[1];\n    }\n    static getDomainAndPath(streamId) {\n        const firstSlashIdx = streamId.indexOf('/');\n        if (firstSlashIdx !== -1) {\n            const domain = streamId.substring(0, firstSlashIdx);\n            return [domain, streamId.substring(firstSlashIdx)];\n        }\n        else {\n            return undefined;\n        }\n    }\n}\n//# sourceMappingURL=StreamID.js.map","export const DEFAULT_PARTITION_COUNT = 1;\nexport const MAX_PARTITION_COUNT = 100;\nexport function ensureValidStreamPartitionIndex(streamPartition) {\n    if (!Number.isSafeInteger(streamPartition) || streamPartition < 0 || streamPartition >= MAX_PARTITION_COUNT) {\n        throw new Error(`invalid streamPartition value: ${streamPartition}`);\n    }\n}\nexport function ensureValidStreamPartitionCount(streamPartition) {\n    if (!Number.isSafeInteger(streamPartition) || streamPartition < 0 || streamPartition > MAX_PARTITION_COUNT) {\n        throw new Error(`invalid streamPartition value: ${streamPartition}`);\n    }\n}\n//# sourceMappingURL=partition.js.map","import { toStreamID } from './StreamID';\nimport { ensureValidStreamPartitionIndex } from './partition';\nconst DELIMITER = '#';\nexport function toStreamPartID(streamId, streamPartition) {\n    ensureValidStreamPartitionIndex(streamPartition);\n    return `${streamId}${DELIMITER}${streamPartition}`;\n}\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class StreamPartIDUtils {\n    static parse(streamPartIdAsStr) {\n        const [streamId, streamPartition] = StreamPartIDUtils.parseRawElements(streamPartIdAsStr);\n        if (streamPartition === undefined) {\n            throw new Error(`invalid streamPartId string: ${streamPartIdAsStr}`);\n        }\n        toStreamID(streamId); // throws if not valid\n        ensureValidStreamPartitionIndex(streamPartition);\n        return streamPartIdAsStr;\n    }\n    static getStreamID(streamPartId) {\n        return this.getStreamIDAndPartition(streamPartId)[0];\n    }\n    static getStreamPartition(streamPartId) {\n        return this.getStreamIDAndPartition(streamPartId)[1];\n    }\n    static getStreamIDAndPartition(streamPartId) {\n        return StreamPartIDUtils.parseRawElements(streamPartId);\n    }\n    static parseRawElements(str) {\n        const lastIdx = str.lastIndexOf(DELIMITER);\n        if (lastIdx === -1 || lastIdx === str.length - 1) {\n            return [str, undefined];\n        }\n        return [str.substring(0, lastIdx), Number(str.substring(lastIdx + 1))];\n    }\n}\n//# sourceMappingURL=StreamPartID.js.map","import { binaryToHex, hexToBinary } from './binaryUtils';\nimport { PREFIXED_STRING_LENGTH } from './EthereumAddress';\nconst REGEX = /^0x[a-fA-F0-9]+$/;\nexport const toUserId = (input) => {\n    if (input instanceof Uint8Array) {\n        return binaryToHex(input, true);\n    }\n    else {\n        if (isValidUserId(input)) {\n            return input.toLowerCase();\n        }\n        throw new Error(`not a valid UserID: \"${input}\"`);\n    }\n};\nexport const toUserIdRaw = (userId) => {\n    return hexToBinary(userId);\n};\nexport const isValidUserId = (input) => {\n    return REGEX.test(input);\n};\nexport const isEthereumAddressUserId = (userId) => {\n    return userId.length === PREFIXED_STRING_LENGTH;\n};\n//# sourceMappingURL=UserID.js.map","const PRECISION = 1e18;\nexport const multiplyWeiAmount = (val1, val2) => {\n    return val1 * BigInt(PRECISION * val2) / BigInt(PRECISION);\n};\n//# sourceMappingURL=WeiAmount.js.map","/* eslint-disable class-methods-use-this */\nimport secp256k1 from 'secp256k1';\nimport { Keccak } from 'sha3';\nimport { ml_dsa87 } from '@noble/post-quantum/ml-dsa';\nimport { randomBytes } from '@noble/post-quantum/utils';\nimport { p256 } from '@noble/curves/p256';\nimport { areEqualBinaries, binaryToHex } from './binaryUtils';\nimport { getSubtle } from '@/crypto';\nexport const KEY_TYPES = [\n    'ECDSA_SECP256K1_EVM',\n    'ECDSA_SECP256R1',\n    'ML_DSA_87'\n];\nconst ECDSA_SECP256K1_EVM_SIGN_MAGIC = '\\u0019Ethereum Signed Message:\\n';\nexport class SigningUtil {\n    static getInstance(type) {\n        switch (type) {\n            case 'ECDSA_SECP256K1_EVM':\n                return new EcdsaSecp256k1Evm();\n            case 'ECDSA_SECP256R1':\n                return new EcdsaSecp256r1();\n            case 'ML_DSA_87':\n                return new MlDsa87();\n            default:\n                throw new Error(`Unknown key pair type: ${type}`);\n        }\n    }\n}\n/**\n * EVM compatible ECDSA signing scheme using keccak hash, magic bytes, and secp256k1 curve.\n */\nexport class EcdsaSecp256k1Evm extends SigningUtil {\n    generateKeyPair() {\n        const privateKey = randomBytes(32);\n        const publicKey = secp256k1.publicKeyCreate(privateKey, false);\n        return {\n            // Return address as 'publicKey'\n            publicKey: this.publicKeyToAddress(publicKey),\n            privateKey,\n        };\n    }\n    keccakHash(message, useEthereumMagic = true) {\n        const keccak = new Keccak(256);\n        keccak.update(useEthereumMagic ? Buffer.concat([\n            Buffer.from(ECDSA_SECP256K1_EVM_SIGN_MAGIC + message.length),\n            message\n        ]) : Buffer.from(message));\n        return keccak.digest('binary');\n    }\n    recoverPublicKey(signature, payload) {\n        const signatureBuffer = Buffer.from(signature);\n        const recoveryId = signatureBuffer.readUInt8(signatureBuffer.length - 1) - 27;\n        return secp256k1.ecdsaRecover(signatureBuffer.subarray(0, signatureBuffer.length - 1), recoveryId, this.keccakHash(payload), false, Buffer.alloc);\n    }\n    async createSignature(payload, privateKey) {\n        const msgHash = this.keccakHash(payload);\n        const sigObj = secp256k1.ecdsaSign(msgHash, privateKey);\n        const result = Buffer.alloc(sigObj.signature.length + 1, Buffer.from(sigObj.signature));\n        result.writeInt8(27 + sigObj.recid, result.length - 1);\n        return result;\n    }\n    publicKeyToAddress(publicKey) {\n        if (publicKey.length !== 65) {\n            throw new Error(`Expected 65 bytes (an ECDSA uncompressed public key with header byte). Got length: ${publicKey.length}`);\n        }\n        const pubKeyWithoutFirstByte = publicKey.subarray(1, publicKey.length);\n        const keccak = new Keccak(256);\n        keccak.update(Buffer.from(pubKeyWithoutFirstByte));\n        const hashOfPubKey = keccak.digest('binary');\n        return hashOfPubKey.subarray(12, hashOfPubKey.length);\n    }\n    recoverSignerUserId(signature, payload) {\n        const publicKey = this.recoverPublicKey(signature, payload);\n        return this.publicKeyToAddress(publicKey);\n    }\n    async verifySignature(expectedUserId, payload, signature) {\n        try {\n            const recoveredAddress = this.recoverSignerUserId(signature, payload);\n            return areEqualBinaries(recoveredAddress, expectedUserId);\n        }\n        catch {\n            return false;\n        }\n    }\n    assertValidKeyPair(address, privateKey) {\n        const computedPublicKey = secp256k1.publicKeyCreate(privateKey, false);\n        const computedAddress = this.publicKeyToAddress(computedPublicKey);\n        if (!areEqualBinaries(address, computedAddress)) {\n            throw new Error(`Given private key is for a different address! Given: ${binaryToHex(address)}, Computed: ${binaryToHex(computedAddress)}`);\n        }\n    }\n}\n/**\n * Signing scheme using ECDSA with secp256r1 curve and SHA-256, natively supported by browsers\n */\nexport class EcdsaSecp256r1 extends SigningUtil {\n    generateKeyPair(compressPublicKey = true) {\n        const privateKey = randomBytes(32);\n        const publicKey = this.getPublicKeyFromPrivateKey(privateKey, compressPublicKey);\n        return {\n            publicKey,\n            privateKey,\n        };\n    }\n    isCompressedPublicKey(publicKey) {\n        return publicKey.length === 33;\n    }\n    isUncompressedPublicKey(publicKey) {\n        return publicKey.length === 65;\n    }\n    toBase64Url(base64) {\n        return base64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n    }\n    getPublicKeyFromPrivateKey(privateKey, compressed = true) {\n        return p256.getPublicKey(privateKey, compressed);\n    }\n    getUncompressedPublicKey(publicKey) {\n        if (this.isCompressedPublicKey(publicKey)) {\n            // Decode compressed public key to an elliptic curve point\n            const point = p256.ProjectivePoint.fromHex(publicKey);\n            // Convert the point to an uncompressed public key\n            return point.toRawBytes(false);\n        }\n        // No-op if called with already uncompressed key\n        if (this.isUncompressedPublicKey(publicKey)) {\n            return publicKey;\n        }\n        throw new Error(`Unexpected public key length: ${publicKey.length}`);\n    }\n    privateKeyToJWK(privateKey) {\n        const publicKey = this.getPublicKeyFromPrivateKey(privateKey, false);\n        // uncompressed publicKey = [header (1 byte), x (32 bytes), y (32 bytes)\n        const x = publicKey.subarray(1, 33);\n        const y = publicKey.subarray(33);\n        /**\n         * Warning, there are some platform-specific differences. Logging observations here:\n         * - buffer.toString('base64url') works on Mac but NOT in Linux/CI\n         * - importKey accepts base64 encoded variables on Mac but NOT in Linux/CI\n         * For this reason, they must be base64url encoded AND we need to use our own\n         * toBase64Url converter.\n         */\n        const xBase64 = Buffer.from(x).toString('base64');\n        const yBase64 = Buffer.from(y).toString('base64');\n        const privateKeyBase64 = Buffer.from(privateKey).toString('base64');\n        return {\n            key_ops: ['sign'],\n            ext: true,\n            kty: 'EC',\n            x: this.toBase64Url(xBase64),\n            y: this.toBase64Url(yBase64),\n            crv: 'P-256',\n            d: this.toBase64Url(privateKeyBase64)\n        };\n    }\n    /**\n     * Pass the privateKey in JsonWebKey format for a slight performance gain.\n     * You can convert raw keys to JWK using the privateKeyToJWK function.\n     */\n    async createSignature(payload, privateKey) {\n        const subtleCrypto = getSubtle();\n        const jwk = privateKey instanceof Uint8Array ? this.privateKeyToJWK(privateKey) : privateKey;\n        /**\n         * Stupidly, importKey does not support the 'raw' format. This means we need to\n         * first compute the JWK from the raw key, and only then we can import and use it.\n         */\n        const key = await subtleCrypto.importKey('jwk', jwk, {\n            name: 'ECDSA',\n            namedCurve: 'P-256'\n        }, false, ['sign']);\n        const signature = await subtleCrypto.sign({\n            name: 'ECDSA',\n            hash: { name: 'SHA-256' }\n        }, key, payload);\n        return new Uint8Array(signature);\n    }\n    async publicKeyToCryptoKey(publicKey) {\n        return getSubtle().importKey('raw', publicKey, {\n            name: 'ECDSA',\n            namedCurve: 'P-256'\n        }, false, ['verify']);\n    }\n    async verifySignature(publicKey, payload, signature) {\n        let key;\n        try {\n            key = await this.publicKeyToCryptoKey(publicKey);\n        }\n        catch (err) {\n            // On some browsers (Safari), compressed keys are not supported for some reason!\n            // If that might be the case, retry with an uncompressed key\n            if (this.isCompressedPublicKey(publicKey)) {\n                key = await this.publicKeyToCryptoKey(this.getUncompressedPublicKey(publicKey));\n            }\n            else {\n                throw err;\n            }\n        }\n        const isValid = await getSubtle().verify({\n            name: 'ECDSA',\n            hash: { name: 'SHA-256' }\n        }, key, signature, payload);\n        return isValid;\n    }\n    assertValidKeyPair(publicKey, privateKey) {\n        if (privateKey.length !== 32) {\n            throw new Error(`Expected a raw private key of 32 bytes. Maybe your key is in some encapsulating format?`);\n        }\n        if (!this.isCompressedPublicKey(publicKey) && !this.isUncompressedPublicKey(publicKey)) {\n            throw new Error(`Expected a public key of either 33 bytes (compressed) or 65 bytes (uncompressed)!`);\n        }\n        const computedPublicKey = this.getPublicKeyFromPrivateKey(privateKey, publicKey.length === 33);\n        if (!areEqualBinaries(computedPublicKey, publicKey)) {\n            throw new Error(`Given private key is for a different public key! Given: ${binaryToHex(publicKey)}, Computed: ${binaryToHex(computedPublicKey)}`);\n        }\n    }\n}\n/**\n * Signing scheme using ML-DSA-87\n */\nexport class MlDsa87 extends SigningUtil {\n    generateKeyPair() {\n        const seed = randomBytes(32);\n        const keys = ml_dsa87.keygen(seed);\n        return {\n            privateKey: keys.secretKey,\n            publicKey: keys.publicKey,\n        };\n    }\n    async createSignature(payload, privateKey, seed) {\n        return ml_dsa87.sign(privateKey, payload, seed);\n    }\n    async verifySignature(publicKey, payload, signature) {\n        return ml_dsa87.verify(publicKey, payload, signature);\n    }\n    assertValidKeyPair(publicKey, privateKey) {\n        // Validity of key pair is tested by signing and validating something\n        const payload = Buffer.from('data-to-sign');\n        const signature = ml_dsa87.sign(privateKey, payload);\n        if (!ml_dsa87.verify(publicKey, payload, signature)) {\n            throw new Error(`The given ML-DSA public key and private key don't match!`);\n        }\n    }\n}\n//# sourceMappingURL=SigningUtil.js.map"],"names":["REGEX","EventEmitter","Transform","randomBytes","Keccak","p256","ml_dsa87"],"mappings":"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"}