NodeOPCUA API Documentation
    Preparing search index...

    Class OPCUACertificateManager

    Hierarchy (View Summary)

    Implements

    Index

    Constructors

    Properties

    automaticallyAcceptUnknownCertificate: boolean
    folderPoolingInterval: number

    Use folderPollingInterval instead (typo fix).

    keySize: KeySize

    RSA key size used when generating the private key.

    referenceCounter: number

    Shared ownership counter.

    Multiple clients/servers may share the same store. dispose() only releases resources when the counter reaches zero — preventing premature cleanup.

    state: CertificateManagerState

    Current lifecycle state of this instance.

    untrustUnknownCertificate: boolean

    When true (the default), any certificate that is not already in the trusted or rejected store is automatically written to the rejected folder the first time it is seen.

    captureRejections: boolean

    Value: boolean

    Change the default captureRejections option on all new EventEmitter objects.

    v13.4.0, v12.16.0

    captureRejectionSymbol: typeof captureRejectionSymbol

    Value: Symbol.for('nodejs.rejection')

    See how to write a custom rejection handler.

    v13.4.0, v12.16.0

    ChainCompletionStatus: typeof ChainCompletionStatus
    defaultCertificateSubject: string
    defaultMaxListeners: number

    By default, a maximum of 10 listeners can be registered for any single event. This limit can be changed for individual EventEmitter instances using the emitter.setMaxListeners(n) method. To change the default for allEventEmitter instances, the events.defaultMaxListeners property can be used. If this value is not a positive number, a RangeError is thrown.

    Take caution when setting the events.defaultMaxListeners because the change affects all EventEmitter instances, including those created before the change is made. However, calling emitter.setMaxListeners(n) still has precedence over events.defaultMaxListeners.

    This is not a hard limit. The EventEmitter instance will allow more listeners to be added but will output a trace warning to stderr indicating that a "possible EventEmitter memory leak" has been detected. For any single EventEmitter, the emitter.getMaxListeners() and emitter.setMaxListeners() methods can be used to temporarily avoid this warning:

    import { EventEmitter } from 'node:events';
    const emitter = new EventEmitter();
    emitter.setMaxListeners(emitter.getMaxListeners() + 1);
    emitter.once('event', () => {
    // do stuff
    emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
    });

    The --trace-warnings command-line flag can be used to display the stack trace for such warnings.

    The emitted warning can be inspected with process.on('warning') and will have the additional emitter, type, and count properties, referring to the event emitter instance, the event's name and the number of attached listeners, respectively. Its name property is set to 'MaxListenersExceededWarning'.

    v0.11.2

    errorMonitor: typeof errorMonitor

    This symbol shall be used to install a listener for only monitoring 'error' events. Listeners installed using this symbol are called before the regular 'error' listeners are called.

    Installing a listener using this symbol does not change the behavior once an 'error' event is emitted. Therefore, the process will still crash if no regular 'error' listener is installed.

    v13.6.0, v12.17.0

    registry: ObjectRegistry

    Accessors

    • get configFile(): string

      Path to the OpenSSL configuration file.

      Returns string

    • get crlFolder(): string

      Path to the trusted CRL folder.

      Returns string

    • get folderPollingInterval(): number

      Interval in milliseconds for file-system polling (when enabled).

      Returns number

    • set folderPollingInterval(value: number): void

      Parameters

      • value: number

      Returns void

    • get issuersCertFolder(): string

      Path to the issuer (CA) certificates folder.

      Returns string

    • get issuersCrlFolder(): string

      Path to the issuer CRL folder.

      Returns string

    • get ownCertFolder(): string

      Path to the own certificate folder.

      Returns string

    • get ownPrivateFolder(): string

      Returns string

    • get privateKey(): string

      Path to the private key file (own/private/private_key.pem).

      Returns string

    • get randomFile(): string

      Path to the OpenSSL random seed file.

      Returns string

    • get rejectedFolder(): string

      Path to the rejected certificates folder.

      Returns string

    • get rootDir(): string

      Root directory of the PKI store.

      Returns string

    • get trustedFolder(): string

      Path to the trusted certificates folder.

      Returns string

    Methods

    • Type Parameters

      • K

      Parameters

      • error: Error
      • event: string | symbol
      • ...args: AnyRest

      Returns void

    • Add a CA (issuer) certificate to the issuers store. If the certificate is already present, this is a no-op.

      Parameters

      • certificate: DER

        the DER-encoded CA certificate

      • Optionalvalidate: boolean

        if true, verify the certificate before adding

      • OptionaladdInTrustList: boolean

        if true, also add to the trusted store

      Returns Promise<VerificationStatus>

      VerificationStatus.Good on success

    • Add multiple CA (issuer) certificates to the issuers store.

      Parameters

      • certificates: DER[]

        the DER-encoded CA certificates

      • Optionalvalidate: boolean

        if true, verify each certificate before adding

      • OptionaladdInTrustList: boolean

        if true, also add each certificate to the trusted store

      Returns Promise<VerificationStatus>

      VerificationStatus.Good on success

    • Alias for emitter.on(eventName, listener).

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • listener: (...args: any[]) => void

      Returns this

      v0.1.26

    • Add a CRL to the certificate manager.

      Parameters

      • crl: CertificateRevocationList

        the CRL to add

      • Optionaltarget: "issuers" | "trusted"

        "issuers" (default) writes to issuers/crl, "trusted" writes to trusted/crl

      Returns Promise<VerificationStatus>

    • Validate a certificate (optionally with its chain) and add the leaf certificate to the trusted store.

      Performs OPC UA Part 4, Table 100 validation:

      1. Certificate Structure — parse the DER encoding.
      2. Build Certificate Chain — walk from the leaf to a self-signed root CA, using the provided chain and the issuers store.
      3. Signature — verify each certificate's signature against its issuer.
      4. Issuer Presence — every issuer in the chain must already be registered in the issuers store (per GDS 7.8.2.6).
      5. Validity Period — each certificate must be within its validity window (overridable via AddCertificateValidationOptions.acceptExpiredCertificate).
      6. Revocation Check — each certificate is checked against its issuer's CRL (overridable via AddCertificateValidationOptions.acceptRevokedCertificate and AddCertificateValidationOptions.ignoreMissingRevocationList).

      Only the leaf certificate is added to the trusted store.

      Parameters

      • certificateChain: DER | DER[]

        DER-encoded certificate or chain

      Returns Promise<VerificationStatus>

      VerificationStatus.Good on success, or an error status indicating why the certificate was rejected.

    • Check a peer certificate against the trust store.

      Returns StatusCodes.Good if trusted, StatusCodes.BadCertificateUntrusted if unknown/rejected, or another StatusCode for validation failures.

      Parameters

      • certificateChain: DER | DER[]

      Returns Promise<StatusCode>

    • Parameters

      Returns void

    • Remove all CRL files from the specified folder(s) and clear the corresponding in-memory index.

      Parameters

      • target: "all" | "issuers" | "trusted"

        "issuers" clears issuers/crl, "trusted" clears trusted/crl, "all" clears both.

      Returns Promise<void>

    • Complete a certificate chain by walking the issuer store.

      Starting from the last certificate in the provided chain, this method repeatedly calls findIssuerCertificate to locate the parent certificate until it reaches a self-signed root or can no longer find an issuer.

      Parameters

      • chain: DER[]

        the (potentially partial) certificate chain, leaf first

      • OptionalmaxDepth: number

        maximum number of issuers to append (default: 10)

      Returns Promise<ChainCompletionResult>

      a ChainCompletionResult containing the (possibly completed) chain, a status code, and an optional diagnostic message.

    • Create a Certificate Signing Request (CSR) using this PKI's private key and configuration.

      The CSR file is written to own/certs/ with a timestamped filename.

      Parameters

      • params: CreateSelfSignCertificateParam

        CSR parameters (subject, SANs)

      Returns Promise<string>

      the filesystem path to the generated CSR file

    • Create a self-signed certificate for this PKI's private key.

      The certificate is written to params.outputFile or own/certs/self_signed_certificate.pem by default.

      Parameters

      • params: CreateSelfSignCertificateParam1

        certificate parameters (subject, SANs, validity, etc.)

      Returns Promise<void>

    • Dispose of the CertificateManager, releasing file watchers and other resources. The instance should not be used after calling this method.

      Returns Promise<void>

    • Synchronously calls each of the listeners registered for the event named eventName, in the order they were registered, passing the supplied arguments to each.

      Returns true if the event had listeners, false otherwise.

      import { EventEmitter } from 'node:events';
      const myEmitter = new EventEmitter();

      // First listener
      myEmitter.on('event', function firstListener() {
      console.log('Helloooo! first listener');
      });
      // Second listener
      myEmitter.on('event', function secondListener(arg1, arg2) {
      console.log(`event with parameters ${arg1}, ${arg2} in second listener`);
      });
      // Third listener
      myEmitter.on('event', function thirdListener(...args) {
      const parameters = args.join(', ');
      console.log(`event with parameters ${parameters} in third listener`);
      });

      console.log(myEmitter.listeners('event'));

      myEmitter.emit('event', 1, 2, 3, 4, 5);

      // Prints:
      // [
      // [Function: firstListener],
      // [Function: secondListener],
      // [Function: thirdListener]
      // ]
      // Helloooo! first listener
      // event with parameters 1, 2 in second listener
      // event with parameters 1, 2, 3, 4, 5 in third listener

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • ...args: AnyRest

      Returns boolean

      v0.1.26

    • Returns an array listing the events for which the emitter has registered listeners. The values in the array are strings or Symbols.

      import { EventEmitter } from 'node:events';

      const myEE = new EventEmitter();
      myEE.on('foo', () => {});
      myEE.on('bar', () => {});

      const sym = Symbol('symbol');
      myEE.on(sym, () => {});

      console.log(myEE.eventNames());
      // Prints: [ 'foo', 'bar', Symbol(symbol) ]

      Returns (string | symbol)[]

      v6.0.0

    • find the issuer certificate among the trusted issuer certificates.

      The findIssuerCertificate method is an asynchronous method that attempts to find the issuer certificate for a given certificate from the list of issuer certificate declared in the PKI

      • If the certificate is self-signed, it returns the certificate itself.

      • If the certificate has no extension 3, it is assumed to be generated by an old system, and a null value is returned.

      • the method checks both issuer and trusted certificates and returns the appropriate issuercertificate, if found. If multiple matching certificates are found, a warning is logged to the console.

      Parameters

      • certificate: DER | DER[]

      Returns Promise<DER | null>

    • Returns the current max listener value for the EventEmitter which is either set by emitter.setMaxListeners(n) or defaults to EventEmitter.defaultMaxListeners.

      Returns number

      v1.0.0

    • Return the number of certificates currently in the trusted store.

      Returns number

    • Check whether an issuer certificate with the given thumbprint is already registered.

      Parameters

      • thumbprint: string

        hex-encoded SHA-1 thumbprint (lowercase)

      Returns Promise<boolean>

    • Initialize the PKI directory structure, generate the private key (if missing), and start file-system watchers.

      This method is idempotent — subsequent calls are no-ops. It must be called before any certificate operations.

      Returns Promise<void>

    • Parameters

      • callback: (err?: Error) => void

      Returns void

    • Check whether a certificate has been revoked by its issuer's CRL.

      • Self-signed certificates are never considered revoked.
      • If no issuerCertificate is provided, the method attempts to find it via findIssuerCertificate.

      Parameters

      • certificate: DER | DER[]

        the DER-encoded certificate to check

      • OptionalissuerCertificate: DER | null

        optional issuer certificate; looked up automatically when omitted

      Returns Promise<VerificationStatus>

      Good if not revoked, BadCertificateRevoked if the serial number appears in a CRL, BadCertificateRevocationUnknown if no CRL is available, or BadCertificateChainIncomplete if the issuer cannot be found.

    • Check if a certificate is in the trusted store. If the certificate is unknown and untrustUnknownCertificate is set, it will be written to the rejected folder.

      Parameters

      • certificateOrCertificateChain: DER | DER[]

      Returns Promise<"BadCertificateInvalid" | "Good" | "BadCertificateUntrusted">

      "Good" if trusted, "BadCertificateUntrusted" if rejected/unknown, or "BadCertificateInvalid" if the certificate cannot be parsed.

    • Check whether an issuer certificate is still needed by any certificate in the trusted store.

      This is used before removing an issuer to ensure that doing so would not break the chain of any trusted certificate.

      Parameters

      • issuerCertificate: DER

        the CA certificate to check

      Returns Promise<boolean>

      true if at least one trusted certificate was signed by this issuer.

    • Check whether the trusted certificate store is empty.

      This inspects the in-memory index, which is kept in sync with the trusted/certs/ folder by file-system watchers after initialize has been called.

      Returns boolean

    • Returns the number of listeners listening for the event named eventName. If listener is provided, it will return how many times the listener is found in the list of the listeners of the event.

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event being listened for

      • Optionallistener: Function

        The event handler function

      Returns number

      v3.2.0

    • Returns a copy of the array of listeners for the event named eventName.

      server.on('connection', (stream) => {
      console.log('someone connected!');
      });
      console.log(util.inspect(server.listeners('connection')));
      // Prints: [ [Function] ]

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

      Returns Function[]

      v0.1.26

    • Alias for emitter.removeListener().

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • listener: (...args: any[]) => void

      Returns this

      v10.0.0

    • Adds the listener function to the end of the listeners array for the event named eventName. No checks are made to see if the listener has already been added. Multiple calls passing the same combination of eventName and listener will result in the listener being added, and called, multiple times.

      server.on('connection', (stream) => {
      console.log('someone connected!');
      });

      Returns a reference to the EventEmitter, so that calls can be chained.

      By default, event listeners are invoked in the order they are added. The emitter.prependListener() method can be used as an alternative to add the event listener to the beginning of the listeners array.

      import { EventEmitter } from 'node:events';
      const myEE = new EventEmitter();
      myEE.on('foo', () => console.log('a'));
      myEE.prependListener('foo', () => console.log('b'));
      myEE.emit('foo');
      // Prints:
      // b
      // a

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event.

      • listener: (...args: any[]) => void

        The callback function

      Returns this

      v0.1.101

    • Adds a one-time listener function for the event named eventName. The next time eventName is triggered, this listener is removed and then invoked.

      server.once('connection', (stream) => {
      console.log('Ah, we have our first user!');
      });

      Returns a reference to the EventEmitter, so that calls can be chained.

      By default, event listeners are invoked in the order they are added. The emitter.prependOnceListener() method can be used as an alternative to add the event listener to the beginning of the listeners array.

      import { EventEmitter } from 'node:events';
      const myEE = new EventEmitter();
      myEE.once('foo', () => console.log('a'));
      myEE.prependOnceListener('foo', () => console.log('b'));
      myEE.emit('foo');
      // Prints:
      // b
      // a

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event.

      • listener: (...args: any[]) => void

        The callback function

      Returns this

      v0.3.0

    • Adds the listener function to the beginning of the listeners array for the event named eventName. No checks are made to see if the listener has already been added. Multiple calls passing the same combination of eventName and listener will result in the listener being added, and called, multiple times.

      server.prependListener('connection', (stream) => {
      console.log('someone connected!');
      });

      Returns a reference to the EventEmitter, so that calls can be chained.

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event.

      • listener: (...args: any[]) => void

        The callback function

      Returns this

      v6.0.0

    • Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this listener is removed, and then invoked.

      server.prependOnceListener('connection', (stream) => {
      console.log('Ah, we have our first user!');
      });

      Returns a reference to the EventEmitter, so that calls can be chained.

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

        The name of the event.

      • listener: (...args: any[]) => void

        The callback function

      Returns this

      v6.0.0

    • Returns a copy of the array of listeners for the event named eventName, including any wrappers (such as those created by .once()).

      import { EventEmitter } from 'node:events';
      const emitter = new EventEmitter();
      emitter.once('log', () => console.log('log once'));

      // Returns a new Array with a function `onceWrapper` which has a property
      // `listener` which contains the original listener bound above
      const listeners = emitter.rawListeners('log');
      const logFnWrapper = listeners[0];

      // Logs "log once" to the console and does not unbind the `once` event
      logFnWrapper.listener();

      // Logs "log once" to the console and removes the listener
      logFnWrapper();

      emitter.on('log', () => console.log('log persistently'));
      // Will return a new Array with a single function bound by `.on()` above
      const newListeners = emitter.rawListeners('log');

      // Logs "log persistently" twice
      newListeners[0]();
      emitter.emit('log');

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol

      Returns Function[]

      v9.4.0

    • Move a certificate to the rejected store. If the certificate was previously trusted, it will be removed from the trusted folder.

      Parameters

      • certificateOrChain: DER | DER[]

        the DER-encoded certificate or certificate chain

      Returns Promise<void>

    • Force a full re-scan of all PKI folders, rebuilding the in-memory _thumbs index from scratch.

      Call this after external processes have modified the PKI folders (e.g. via writeTrustList or CLI tools) to ensure the CertificateManager sees the latest state without waiting for file-system events.

      Returns Promise<void>

    • Removes all listeners, or those of the specified eventName.

      It is bad practice to remove listeners added elsewhere in the code, particularly when the EventEmitter instance was created by some other component or module (e.g. sockets or file streams).

      Returns a reference to the EventEmitter, so that calls can be chained.

      Parameters

      • OptionaleventName: string | symbol

      Returns this

      v0.1.26

    • Remove an issuer certificate identified by its SHA-1 thumbprint. Deletes the file on disk and removes the entry from the in-memory index.

      Parameters

      • thumbprint: string

        hex-encoded SHA-1 thumbprint (lowercase)

      Returns Promise<DER | null>

      the removed certificate buffer, or null if not found

    • Removes the specified listener from the listener array for the event named eventName.

      const callback = (stream) => {
      console.log('someone connected!');
      };
      server.on('connection', callback);
      // ...
      server.removeListener('connection', callback);

      removeListener() will remove, at most, one instance of a listener from the listener array. If any single listener has been added multiple times to the listener array for the specified eventName, then removeListener() must be called multiple times to remove each instance.

      Once an event is emitted, all listeners attached to it at the time of emitting are called in order. This implies that any removeListener() or removeAllListeners() calls after emitting and before the last listener finishes execution will not remove them fromemit() in progress. Subsequent events behave as expected.

      import { EventEmitter } from 'node:events';
      class MyEmitter extends EventEmitter {}
      const myEmitter = new MyEmitter();

      const callbackA = () => {
      console.log('A');
      myEmitter.removeListener('event', callbackB);
      };

      const callbackB = () => {
      console.log('B');
      };

      myEmitter.on('event', callbackA);

      myEmitter.on('event', callbackB);

      // callbackA removes listener callbackB but it will still be called.
      // Internal listener array at time of emit [callbackA, callbackB]
      myEmitter.emit('event');
      // Prints:
      // A
      // B

      // callbackB is now removed.
      // Internal listener array [callbackA]
      myEmitter.emit('event');
      // Prints:
      // A

      Because listeners are managed using an internal array, calling this will change the position indices of any listener registered after the listener being removed. This will not impact the order in which listeners are called, but it means that any copies of the listener array as returned by the emitter.listeners() method will need to be recreated.

      When a single function has been added as a handler multiple times for a single event (as in the example below), removeListener() will remove the most recently added instance. In the example the once('ping') listener is removed:

      import { EventEmitter } from 'node:events';
      const ee = new EventEmitter();

      function pong() {
      console.log('pong');
      }

      ee.on('ping', pong);
      ee.once('ping', pong);
      ee.removeListener('ping', pong);

      ee.emit('ping');
      ee.emit('ping');

      Returns a reference to the EventEmitter, so that calls can be chained.

      Type Parameters

      • K

      Parameters

      • eventName: string | symbol
      • listener: (...args: any[]) => void

      Returns this

      v0.1.26

    • Remove all CRL files that were issued by the given CA certificate from the specified folder (or both).

      Parameters

      • issuerCertificate: DER

        the CA certificate whose CRLs to remove

      • Optionaltarget: "all" | "issuers" | "trusted"

        "issuers", "trusted", or "all" (default "all")

      Returns Promise<void>

    • Remove a trusted certificate identified by its SHA-1 thumbprint. Deletes the file on disk and removes the entry from the in-memory index.

      Parameters

      • thumbprint: string

        hex-encoded SHA-1 thumbprint (lowercase)

      Returns Promise<DER | null>

      the removed certificate buffer, or null if not found

    • By default EventEmitters will print a warning if more than 10 listeners are added for a particular event. This is a useful default that helps finding memory leaks. The emitter.setMaxListeners() method allows the limit to be modified for this specific EventEmitter instance. The value can be set to Infinity (or 0) to indicate an unlimited number of listeners.

      Returns a reference to the EventEmitter, so that calls can be chained.

      Parameters

      • n: number

      Returns this

      v0.3.5

    • Move a certificate to the trusted store. If the certificate was previously rejected, it will be removed from the rejected folder.

      Parameters

      • certificateOrChain: DER | DER[]

        the DER-encoded certificate or certificate chain

      Returns Promise<void>

    • Verify a certificate against the PKI trust store.

      This performs a full validation including trust status, issuer chain, CRL revocation checks, and time validity.

      Parameters

      • certificate: DER | DER[]

        the DER-encoded certificate to verify

      • Optionaloptions: VerifyCertificateOptions

        optional flags to relax validation rules

      Returns Promise<VerificationStatus>

      the verification status code

    • Internal verification hook called by verifyCertificate.

      Subclasses can override this to inject additional validation logic (e.g. application-level policy checks) while still delegating to the default chain/CRL/trust verification.

      Parameters

      • certificate: DER | DER[]

        the DER-encoded certificate to verify

      • options: VerifyCertificateOptions

        verification options forwarded from the public API

      Returns Promise<VerificationStatus>

      the verification status code

    • Type Parameters

      • T

      Parameters

      • action: () => Promise<T>

      Returns Promise<T>

    • Listens once to the abort event on the provided signal.

      Listening to the abort event on abort signals is unsafe and may lead to resource leaks since another third party with the signal can call e.stopImmediatePropagation(). Unfortunately Node.js cannot change this since it would violate the web standard. Additionally, the original API makes it easy to forget to remove listeners.

      This API allows safely using AbortSignals in Node.js APIs by solving these two issues by listening to the event such that stopImmediatePropagation does not prevent the listener from running.

      Returns a disposable so that it may be unsubscribed from more easily.

      import { addAbortListener } from 'node:events';

      function example(signal) {
      let disposable;
      try {
      signal.addEventListener('abort', (e) => e.stopImmediatePropagation());
      disposable = addAbortListener(signal, (e) => {
      // Do something when signal is aborted.
      });
      } finally {
      disposable?.[Symbol.dispose]();
      }
      }

      Parameters

      • signal: AbortSignal
      • resource: (event: Event) => void

      Returns Disposable

      Disposable that removes the abort listener.

      v20.5.0

    • Assert that all CertificateManager instances have been properly disposed. Throws an Error listing the locations of any leaked instances.

      Intended for use in test afterAll() / afterEach() hooks to catch missing dispose() calls early.

      Returns void

      after(() => {
      CertificateManager.checkAllDisposed();
      });
    • Dispose all active CertificateManager instances, closing their file watchers and freeing resources.

      This is mainly useful in test tear-down to ensure the Node.js process can exit cleanly.

      Returns Promise<void>

    • Returns a copy of the array of listeners for the event named eventName.

      For EventEmitters this behaves exactly the same as calling .listeners on the emitter.

      For EventTargets this is the only way to get the event listeners for the event target. This is useful for debugging and diagnostic purposes.

      import { getEventListeners, EventEmitter } from 'node:events';

      {
      const ee = new EventEmitter();
      const listener = () => console.log('Events are fun');
      ee.on('foo', listener);
      console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
      }
      {
      const et = new EventTarget();
      const listener = () => console.log('Events are fun');
      et.addEventListener('foo', listener);
      console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
      }

      Parameters

      • emitter: EventTarget | EventEmitter<DefaultEventMap>
      • name: string | symbol

      Returns Function[]

      v15.2.0, v14.17.0

    • Returns the currently set max amount of listeners.

      For EventEmitters this behaves exactly the same as calling .getMaxListeners on the emitter.

      For EventTargets this is the only way to get the max event listeners for the event target. If the number of event handlers on a single EventTarget exceeds the max set, the EventTarget will print a warning.

      import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';

      {
      const ee = new EventEmitter();
      console.log(getMaxListeners(ee)); // 10
      setMaxListeners(11, ee);
      console.log(getMaxListeners(ee)); // 11
      }
      {
      const et = new EventTarget();
      console.log(getMaxListeners(et)); // 10
      setMaxListeners(11, et);
      console.log(getMaxListeners(et)); // 11
      }

      Parameters

      • emitter: EventTarget | EventEmitter<DefaultEventMap>

      Returns number

      v19.9.0

    • A class method that returns the number of listeners for the given eventName registered on the given emitter.

      import { EventEmitter, listenerCount } from 'node:events';

      const myEmitter = new EventEmitter();
      myEmitter.on('event', () => {});
      myEmitter.on('event', () => {});
      console.log(listenerCount(myEmitter, 'event'));
      // Prints: 2

      Parameters

      • emitter: EventEmitter

        The emitter to query

      • eventName: string | symbol

        The event name

      Returns number

      v0.9.12

      Since v3.2.0 - Use listenerCount instead.

    • import { on, EventEmitter } from 'node:events';
      import process from 'node:process';

      const ee = new EventEmitter();

      // Emit later on
      process.nextTick(() => {
      ee.emit('foo', 'bar');
      ee.emit('foo', 42);
      });

      for await (const event of on(ee, 'foo')) {
      // The execution of this inner block is synchronous and it
      // processes one event at a time (even with await). Do not use
      // if concurrent execution is required.
      console.log(event); // prints ['bar'] [42]
      }
      // Unreachable here

      Returns an AsyncIterator that iterates eventName events. It will throw if the EventEmitter emits 'error'. It removes all listeners when exiting the loop. The value returned by each iteration is an array composed of the emitted event arguments.

      An AbortSignal can be used to cancel waiting on events:

      import { on, EventEmitter } from 'node:events';
      import process from 'node:process';

      const ac = new AbortController();

      (async () => {
      const ee = new EventEmitter();

      // Emit later on
      process.nextTick(() => {
      ee.emit('foo', 'bar');
      ee.emit('foo', 42);
      });

      for await (const event of on(ee, 'foo', { signal: ac.signal })) {
      // The execution of this inner block is synchronous and it
      // processes one event at a time (even with await). Do not use
      // if concurrent execution is required.
      console.log(event); // prints ['bar'] [42]
      }
      // Unreachable here
      })();

      process.nextTick(() => ac.abort());

      Use the close option to specify an array of event names that will end the iteration:

      import { on, EventEmitter } from 'node:events';
      import process from 'node:process';

      const ee = new EventEmitter();

      // Emit later on
      process.nextTick(() => {
      ee.emit('foo', 'bar');
      ee.emit('foo', 42);
      ee.emit('close');
      });

      for await (const event of on(ee, 'foo', { close: ['close'] })) {
      console.log(event); // prints ['bar'] [42]
      }
      // the loop will exit after 'close' is emitted
      console.log('done'); // prints 'done'

      Parameters

      • emitter: EventEmitter
      • eventName: string | symbol
      • Optionaloptions: StaticEventEmitterIteratorOptions

      Returns AsyncIterator<any[]>

      An AsyncIterator that iterates eventName events emitted by the emitter

      v13.6.0, v12.16.0

    • import { on, EventEmitter } from 'node:events';
      import process from 'node:process';

      const ee = new EventEmitter();

      // Emit later on
      process.nextTick(() => {
      ee.emit('foo', 'bar');
      ee.emit('foo', 42);
      });

      for await (const event of on(ee, 'foo')) {
      // The execution of this inner block is synchronous and it
      // processes one event at a time (even with await). Do not use
      // if concurrent execution is required.
      console.log(event); // prints ['bar'] [42]
      }
      // Unreachable here

      Returns an AsyncIterator that iterates eventName events. It will throw if the EventEmitter emits 'error'. It removes all listeners when exiting the loop. The value returned by each iteration is an array composed of the emitted event arguments.

      An AbortSignal can be used to cancel waiting on events:

      import { on, EventEmitter } from 'node:events';
      import process from 'node:process';

      const ac = new AbortController();

      (async () => {
      const ee = new EventEmitter();

      // Emit later on
      process.nextTick(() => {
      ee.emit('foo', 'bar');
      ee.emit('foo', 42);
      });

      for await (const event of on(ee, 'foo', { signal: ac.signal })) {
      // The execution of this inner block is synchronous and it
      // processes one event at a time (even with await). Do not use
      // if concurrent execution is required.
      console.log(event); // prints ['bar'] [42]
      }
      // Unreachable here
      })();

      process.nextTick(() => ac.abort());

      Use the close option to specify an array of event names that will end the iteration:

      import { on, EventEmitter } from 'node:events';
      import process from 'node:process';

      const ee = new EventEmitter();

      // Emit later on
      process.nextTick(() => {
      ee.emit('foo', 'bar');
      ee.emit('foo', 42);
      ee.emit('close');
      });

      for await (const event of on(ee, 'foo', { close: ['close'] })) {
      console.log(event); // prints ['bar'] [42]
      }
      // the loop will exit after 'close' is emitted
      console.log('done'); // prints 'done'

      Parameters

      • emitter: EventTarget
      • eventName: string
      • Optionaloptions: StaticEventEmitterIteratorOptions

      Returns AsyncIterator<any[]>

      An AsyncIterator that iterates eventName events emitted by the emitter

      v13.6.0, v12.16.0

    • Creates a Promise that is fulfilled when the EventEmitter emits the given event or that is rejected if the EventEmitter emits 'error' while waiting. The Promise will resolve with an array of all the arguments emitted to the given event.

      This method is intentionally generic and works with the web platform EventTarget interface, which has no special'error' event semantics and does not listen to the 'error' event.

      import { once, EventEmitter } from 'node:events';
      import process from 'node:process';

      const ee = new EventEmitter();

      process.nextTick(() => {
      ee.emit('myevent', 42);
      });

      const [value] = await once(ee, 'myevent');
      console.log(value);

      const err = new Error('kaboom');
      process.nextTick(() => {
      ee.emit('error', err);
      });

      try {
      await once(ee, 'myevent');
      } catch (err) {
      console.error('error happened', err);
      }

      The special handling of the 'error' event is only used when events.once() is used to wait for another event. If events.once() is used to wait for the 'error' event itself, then it is treated as any other kind of event without special handling:

      import { EventEmitter, once } from 'node:events';

      const ee = new EventEmitter();

      once(ee, 'error')
      .then(([err]) => console.log('ok', err.message))
      .catch((err) => console.error('error', err.message));

      ee.emit('error', new Error('boom'));

      // Prints: ok boom

      An AbortSignal can be used to cancel waiting for the event:

      import { EventEmitter, once } from 'node:events';

      const ee = new EventEmitter();
      const ac = new AbortController();

      async function foo(emitter, event, signal) {
      try {
      await once(emitter, event, { signal });
      console.log('event emitted!');
      } catch (error) {
      if (error.name === 'AbortError') {
      console.error('Waiting for the event was canceled!');
      } else {
      console.error('There was an error', error.message);
      }
      }
      }

      foo(ee, 'foo', ac.signal);
      ac.abort(); // Abort waiting for the event
      ee.emit('foo'); // Prints: Waiting for the event was canceled!

      Parameters

      • emitter: EventEmitter
      • eventName: string | symbol
      • Optionaloptions: StaticEventEmitterOptions

      Returns Promise<any[]>

      v11.13.0, v10.16.0

    • Creates a Promise that is fulfilled when the EventEmitter emits the given event or that is rejected if the EventEmitter emits 'error' while waiting. The Promise will resolve with an array of all the arguments emitted to the given event.

      This method is intentionally generic and works with the web platform EventTarget interface, which has no special'error' event semantics and does not listen to the 'error' event.

      import { once, EventEmitter } from 'node:events';
      import process from 'node:process';

      const ee = new EventEmitter();

      process.nextTick(() => {
      ee.emit('myevent', 42);
      });

      const [value] = await once(ee, 'myevent');
      console.log(value);

      const err = new Error('kaboom');
      process.nextTick(() => {
      ee.emit('error', err);
      });

      try {
      await once(ee, 'myevent');
      } catch (err) {
      console.error('error happened', err);
      }

      The special handling of the 'error' event is only used when events.once() is used to wait for another event. If events.once() is used to wait for the 'error' event itself, then it is treated as any other kind of event without special handling:

      import { EventEmitter, once } from 'node:events';

      const ee = new EventEmitter();

      once(ee, 'error')
      .then(([err]) => console.log('ok', err.message))
      .catch((err) => console.error('error', err.message));

      ee.emit('error', new Error('boom'));

      // Prints: ok boom

      An AbortSignal can be used to cancel waiting for the event:

      import { EventEmitter, once } from 'node:events';

      const ee = new EventEmitter();
      const ac = new AbortController();

      async function foo(emitter, event, signal) {
      try {
      await once(emitter, event, { signal });
      console.log('event emitted!');
      } catch (error) {
      if (error.name === 'AbortError') {
      console.error('Waiting for the event was canceled!');
      } else {
      console.error('There was an error', error.message);
      }
      }
      }

      foo(ee, 'foo', ac.signal);
      ac.abort(); // Abort waiting for the event
      ee.emit('foo'); // Prints: Waiting for the event was canceled!

      Parameters

      • emitter: EventTarget
      • eventName: string
      • Optionaloptions: StaticEventEmitterOptions

      Returns Promise<any[]>

      v11.13.0, v10.16.0

    • import { setMaxListeners, EventEmitter } from 'node:events';

      const target = new EventTarget();
      const emitter = new EventEmitter();

      setMaxListeners(5, target, emitter);

      Parameters

      • Optionaln: number

        A non-negative number. The maximum number of listeners per EventTarget event.

      • ...eventTargets: (EventTarget | EventEmitter<DefaultEventMap>)[]

        Zero or more {EventTarget} or {EventEmitter} instances. If none are specified, n is set as the default max for all newly created {EventTarget} and {EventEmitter} objects.

      Returns void

      v15.4.0