@sphereon/ssi-types
Version:
SSI Common Types
165 lines • 6.99 kB
JavaScript
;
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