{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;AA6BO,IAAe,mBAAf,MAEkB;AAAA,EAGrB,WAAA,GAAc;AAFd,IAAA,aAAA,CAAA,IAAA,EAAA,WAAA,CAAA;AAGI,IAAA,IAAA,CAAK,YAAY,EAAC;AAAA,EACtB;AAAA;AAAA,EAOO,EAAA,CAAM,OAAe,QAAA,EAAyC;AACjE,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,EAAG;AACxB,MAAA,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,GAAI,EAAC;AAAA,IAC7B;AACA,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AACtC,IAAA,SAAA,CAAU,KAAK,QAAQ,CAAA;AAEvB,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEO,IAAA,CAAQ,UAAkB,IAAA,EAAoB;AACjD,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,EAAG;AACvB,MAAA,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,CAAE,OAAA,CAAQ,CAAC,QAAA,KAAa,QAAA,CAAS,GAAG,IAAI,CAAC,CAAA;AAC7D,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEO,cAAA,CACH,OACA,gBAAA,EACW;AACX,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,CAAU,KAAK,GAAG,OAAO,IAAA;AAEnC,IAAA,IAAA,CAAK,UAAU,KAAK,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,CAAE,MAAA;AAAA,MAC1C,CAAC,aAAa,QAAA,KAAa;AAAA,KAC/B;AAEA,IAAA,OAAO,IAAA;AAAA,EACX;AACJ","file":"index.cjs","sourcesContent":["// Copyright (c) 2025-2026 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RequestArgs, UnknownRpcTypes } from '@canton-network/core-types'\n\nexport type EventListener<T> = (...args: T[]) => void\n\n/**\n * The Provider interface is generic over a type `T` that defines a mapping between supported methods\n * and their corresponding request and response types. The request method takes an argument of type RequestArgs<T, M>,\n * where `M` is a key of `T` representing the method being called.\n *\n * The type of the params body for a method `M` is derived from T[M]['params']\n * The type of the result of calling a method `M` is derived from T[M]['result']\n */\nexport interface Provider<T extends UnknownRpcTypes> {\n    request<M extends keyof T>(args: RequestArgs<T, M>): Promise<T[M]['result']>\n\n    on<E>(event: string, listener: EventListener<E>): Provider<T>\n    emit<E>(event: string, ...args: E[]): boolean\n    removeListener<E>(\n        event: string,\n        listenerToRemove: EventListener<E>\n    ): Provider<T>\n}\n\n/**\n * An abstract base class for Providers that implements the event handling logic. It maintains a mapping of event names to arrays of listeners and provides methods to register, emit, and remove listeners. The request method is left abstract for subclasses to implement according to their specific RPC transport mechanism.\n */\nexport abstract class AbstractProvider<\n    T extends UnknownRpcTypes,\n> implements Provider<T> {\n    listeners: { [event: string]: EventListener<unknown>[] }\n\n    constructor() {\n        this.listeners = {} // Event listeners\n    }\n\n    abstract request<M extends keyof T>(\n        args: RequestArgs<T, M>\n    ): Promise<T[M]['result']>\n\n    // Event handling\n    public on<E>(event: string, listener: EventListener<E>): Provider<T> {\n        if (!this.listeners[event]) {\n            this.listeners[event] = []\n        }\n        const listeners = this.listeners[event] as EventListener<E>[]\n        listeners.push(listener)\n\n        return this\n    }\n\n    public emit<E>(event: string, ...args: E[]): boolean {\n        if (this.listeners[event]) {\n            this.listeners[event].forEach((listener) => listener(...args))\n            return true\n        }\n        return false\n    }\n\n    public removeListener<E>(\n        event: string,\n        listenerToRemove: EventListener<E>\n    ): Provider<T> {\n        if (!this.listeners[event]) return this\n\n        this.listeners[event] = this.listeners[event].filter(\n            (listener) => listener !== listenerToRemove\n        )\n\n        return this\n    }\n}\n"]}