UNPKG

@sphereon/ssi-types

Version:

SSI Common Types

165 lines • 6.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BasicEventEmitter = exports.EventManager = exports.SystemCorrelationIdType = exports.InitiatorType = exports.DefaultActionSubType = exports.ActionType = exports.SubSystem = exports.System = void 0; const events_1 = require("events"); const logging_1 = require("../logging"); var System; (function (System) { System["GENERAL"] = "general"; System["KMS"] = "kms"; System["IDENTITY"] = "identity"; System["OID4VCI"] = "oid4vci"; System["OID4VP"] = "oid4vp"; System["SIOPv2"] = "siopv2"; System["PE"] = "PE"; System["CREDENTIALS"] = "credentials"; System["WEB3"] = "web3"; System["PROFILE"] = "profile"; System["CONTACT"] = "contact"; })(System || (exports.System = System = {})); var SubSystem; (function (SubSystem) { SubSystem["KEY"] = "key"; SubSystem["DID_PROVIDER"] = "did_provider"; SubSystem["DID_RESOLVER"] = "did_resolver"; SubSystem["OID4VP_OP"] = "oid4vp_op"; SubSystem["OID4VCI_CLIENT"] = "oid4vci_client"; SubSystem["SIOPv2_OP"] = "siopv2_op"; SubSystem["CONTACT_MANAGER"] = "contact_manager"; SubSystem["VC_ISSUER"] = "vc_issuer"; SubSystem["VC_VERIFIER"] = "vc_verifier"; SubSystem["VC_PERSISTENCE"] = "vc_persistence"; SubSystem["TRANSPORT"] = "transport"; SubSystem["PROFILE"] = "profile"; SubSystem["API"] = "api"; })(SubSystem || (exports.SubSystem = SubSystem = {})); var ActionType; (function (ActionType) { ActionType["CREATE"] = "create"; ActionType["READ"] = "read"; ActionType["UPDATE"] = "update"; ActionType["DELETE"] = "delete"; ActionType["EXECUTE"] = "execute"; })(ActionType || (exports.ActionType = ActionType = {})); var DefaultActionSubType; (function (DefaultActionSubType) { DefaultActionSubType["KEY_GENERATION"] = "Key generation"; DefaultActionSubType["KEY_IMPORT"] = "Key import"; DefaultActionSubType["KEY_PERSISTENCE"] = "Key persistence"; DefaultActionSubType["KEY_REMOVAL"] = "Key removal"; DefaultActionSubType["DID_CREATION"] = "DID creation"; DefaultActionSubType["DID_RESOLUTION"] = "DID resolution"; DefaultActionSubType["DID_SERVICE_UPDATE"] = "DID service update"; DefaultActionSubType["VC_ISSUE"] = "VC issue"; DefaultActionSubType["VC_VERIFY"] = "VC verify"; DefaultActionSubType["VC_SHARE"] = "VC share"; DefaultActionSubType["VC_DELETE"] = "VC delete"; DefaultActionSubType["VC_ISSUE_DECLINE"] = "VC issue decline"; DefaultActionSubType["VC_SHARE_DECLINE"] = "VC share decline"; })(DefaultActionSubType || (exports.DefaultActionSubType = DefaultActionSubType = {})); var InitiatorType; (function (InitiatorType) { InitiatorType["USER"] = "user"; InitiatorType["SYSTEM"] = "system"; InitiatorType["EXTERNAL"] = "external"; })(InitiatorType || (exports.InitiatorType = InitiatorType = {})); var SystemCorrelationIdType; (function (SystemCorrelationIdType) { SystemCorrelationIdType["DID"] = "did"; SystemCorrelationIdType["URL"] = "url"; SystemCorrelationIdType["EMAIL"] = "email"; SystemCorrelationIdType["HOSTNAME"] = "hostname"; SystemCorrelationIdType["PHONE"] = "phone"; SystemCorrelationIdType["USER"] = "user"; })(SystemCorrelationIdType || (exports.SystemCorrelationIdType = SystemCorrelationIdType = {})); class EventManager { constructor() { this._emitters = new Map(); } static instance() { return EventManager.INSTANCE; } register(name, emitter, opts) { this._emitters.set(name, { emitter, enabled: (opts === null || opts === void 0 ? void 0 : opts.disabled) !== true }); return emitter; } get(name, opts) { var _a; const { emitter, enabled } = (_a = this._emitters.get(name)) !== null && _a !== void 0 ? _a : {}; if (!emitter) { throw Error(`No emitter registered with name ${name}`); } else if ((opts === null || opts === void 0 ? void 0 : opts.onlyEnabled) && !enabled) { throw Error(`Emitter with name ${name} is not enabled`); } return emitter; } getOrCreate(name, opts) { if (this.has(name)) { return this.get(name, opts); } return this.register(name, new BasicEventEmitter()); } has(name) { return this._emitters.has(name); } emitters(filter) { const all = Array.from(new Set(this._emitters.values())); return this.emittersImpl(all, filter).map((e) => e.emitter); } hasEventName(eventName) { return this.eventNames().includes(eventName); } eventNames() { return Array.from(new Set(this.emitters().flatMap((emitter) => emitter.eventNames()))); } emitBasic(event, ...args) { return this.emit(event.eventName, event, args); } emit(eventName, event, ...args) { if ('id' in event && 'system' in event && !event.eventName) { event.eventName = eventName; } logging_1.Loggers.DEFAULT.options('sphereon:events', { methods: [logging_1.LogMethod.CONSOLE], defaultLogLevel: logging_1.LogLevel.INFO, }) .get('sphereon:events') .log(`Emitting '${eventName.toString()}' event`, event); const emitters = this.emitters({ eventName }); emitters.flatMap((emitter) => emitter.emit(eventName, event, args)); } listenerCount(eventName) { const emitters = this.emitters({ eventName }); return emitters.map((emitter) => emitter.listenerCount(eventName)).reduce((previous, current) => current + previous); } listeners(filter) { const emitters = (filter === null || filter === void 0 ? void 0 : filter.emitterName) ? [this.get(filter.emitterName, filter)] : this.emitters(filter); return Array.from(new Set(this.emittersImpl(emitters.map((emitter) => { return { emitter, enabled: true }; }), filter).flatMap((emitter) => emitter.emitter.listeners(filter.eventName)))); } emittersImpl(all, filter) { const { eventName } = filter !== null && filter !== void 0 ? filter : {}; if (!eventName) { return all; } const filtered = all.filter((emitter) => emitter.emitter.eventNames().includes(eventName) && (emitter.enabled || (filter === null || filter === void 0 ? void 0 : filter.onlyEnabled) !== true)); return Array.from(new Set(filtered)); } } exports.EventManager = EventManager; EventManager.INSTANCE = new EventManager(); class BasicEventEmitter extends events_1.EventEmitter { addListener(eventName, listener) { return super.addListener(eventName, listener); } once(eventName, listener) { return super.once(eventName, listener); } emit(eventName, event, ...args) { return super.emit(eventName, ...args); } } exports.BasicEventEmitter = BasicEventEmitter; //# sourceMappingURL=index.js.map