@sphereon/ssi-types 0.24.1-unstable.97 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,113 @@
1
+ /// <reference types="node" />
2
+ import { EventEmitter } from 'events';
3
+ export declare enum System {
4
+ GENERAL = "general",
5
+ KMS = "kms",
6
+ IDENTITY = "identity",
7
+ OID4VCI = "oid4vci",
8
+ OID4VP = "oid4vp",
9
+ SIOPv2 = "siopv2",
10
+ PE = "PE",
11
+ CREDENTIALS = "credentials",
12
+ WEB3 = "web3",
13
+ PROFILE = "profile",
14
+ CONTACT = "contact"
15
+ }
16
+ export declare enum SubSystem {
17
+ KEY = "key",
18
+ DID_PROVIDER = "did_provider",
19
+ DID_RESOLVER = "did_resolver",
20
+ OID4VP_OP = "oid4vp_op",
21
+ OID4VCI_CLIENT = "oid4vci_client",
22
+ SIOPv2_OP = "siopv2_op",
23
+ CONTACT_MANAGER = "contact_manager",
24
+ VC_ISSUER = "vc_issuer",
25
+ VC_VERIFIER = "vc_verifier",
26
+ VC_PERSISTENCE = "vc_persistence",
27
+ TRANSPORT = "transport",
28
+ PROFILE = "profile",
29
+ API = "api"
30
+ }
31
+ export declare enum ActionType {
32
+ CREATE = "create",
33
+ READ = "read",
34
+ UPDATE = "update",
35
+ DELETE = "delete",
36
+ EXECUTE = "execute"
37
+ }
38
+ export declare enum DefaultActionSubType {
39
+ KEY_GENERATION = "Key generation",
40
+ KEY_IMPORT = "Key import",
41
+ KEY_PERSISTENCE = "Key persistence",
42
+ KEY_REMOVAL = "Key removal",
43
+ DID_CREATION = "DID creation",
44
+ DID_RESOLUTION = "DID resolution",
45
+ DID_SERVICE_UPDATE = "DID service update",
46
+ VC_ISSUE = "VC issue",
47
+ VC_VERIFY = "VC verify"
48
+ }
49
+ export type ActionSubType = DefaultActionSubType | string;
50
+ export declare enum InitiatorType {
51
+ USER = "user",
52
+ SYSTEM = "system",
53
+ EXTERNAL = "external"
54
+ }
55
+ export declare enum SystemCorrelationIdType {
56
+ DID = "did",
57
+ URL = "url",
58
+ EMAIL = "email",
59
+ HOSTNAME = "hostname",
60
+ PHONE = "phone",
61
+ USER = "user"
62
+ }
63
+ export type EventData = {
64
+ system: string;
65
+ subSystemType: string;
66
+ };
67
+ export interface BasicEvent<SourceType, PayloadType extends EventData> {
68
+ id: string;
69
+ correlationId?: string;
70
+ eventName: string;
71
+ initiator?: string;
72
+ initiatorType: InitiatorType;
73
+ system: System;
74
+ subsystem: SubSystem;
75
+ data: PayloadType;
76
+ }
77
+ export declare class EventManager {
78
+ private static readonly INSTANCE;
79
+ private _emitters;
80
+ private constructor();
81
+ static instance(): EventManager;
82
+ register(name: string, emitter: EventEmitter, opts?: {
83
+ disabled: boolean;
84
+ }): EventEmitter;
85
+ get(name: string, opts?: {
86
+ onlyEnabled?: boolean;
87
+ }): EventEmitter;
88
+ getOrCreate(name: string, opts?: {
89
+ onlyEnabled?: boolean;
90
+ }): EventEmitter;
91
+ has(name: string): boolean;
92
+ emitters(filter?: {
93
+ eventName?: string | symbol;
94
+ onlyEnabled?: boolean;
95
+ }): Array<EventEmitter>;
96
+ hasEventName(eventName: string | symbol): boolean;
97
+ eventNames(): Array<string | symbol>;
98
+ emitBasic(event: BasicEvent<any, any>, ...args: any[]): void;
99
+ emit(eventName: string | symbol, event: Omit<BasicEvent<any, any>, 'eventName'> | any, ...args: any[]): void;
100
+ listenerCount(eventName: string | symbol): number;
101
+ listeners(filter: {
102
+ emitterName?: string;
103
+ eventName: string;
104
+ onlyEnabled?: boolean;
105
+ }): Array<Function>;
106
+ private emittersImpl;
107
+ }
108
+ export declare class BasicEventEmitter extends EventEmitter {
109
+ addListener(eventName: string | symbol, listener: (event: BasicEvent<any, any>, ...args: any[]) => void): this;
110
+ once(eventName: string | symbol, listener: (event: BasicEvent<any, any>, ...args: any[]) => void): this;
111
+ emit(eventName: string, event: BasicEvent<any, any>, ...args: any[]): boolean;
112
+ }
113
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BasicEventEmitter = exports.EventManager = exports.SystemCorrelationIdType = exports.InitiatorType = exports.DefaultActionSubType = exports.ActionType = exports.SubSystem = exports.System = void 0;
4
+ const events_1 = require("events");
5
+ const logging_1 = require("../logging");
6
+ var System;
7
+ (function (System) {
8
+ System["GENERAL"] = "general";
9
+ System["KMS"] = "kms";
10
+ System["IDENTITY"] = "identity";
11
+ System["OID4VCI"] = "oid4vci";
12
+ System["OID4VP"] = "oid4vp";
13
+ System["SIOPv2"] = "siopv2";
14
+ System["PE"] = "PE";
15
+ System["CREDENTIALS"] = "credentials";
16
+ System["WEB3"] = "web3";
17
+ System["PROFILE"] = "profile";
18
+ System["CONTACT"] = "contact";
19
+ })(System || (exports.System = System = {}));
20
+ var SubSystem;
21
+ (function (SubSystem) {
22
+ SubSystem["KEY"] = "key";
23
+ SubSystem["DID_PROVIDER"] = "did_provider";
24
+ SubSystem["DID_RESOLVER"] = "did_resolver";
25
+ SubSystem["OID4VP_OP"] = "oid4vp_op";
26
+ SubSystem["OID4VCI_CLIENT"] = "oid4vci_client";
27
+ SubSystem["SIOPv2_OP"] = "siopv2_op";
28
+ SubSystem["CONTACT_MANAGER"] = "contact_manager";
29
+ SubSystem["VC_ISSUER"] = "vc_issuer";
30
+ SubSystem["VC_VERIFIER"] = "vc_verifier";
31
+ SubSystem["VC_PERSISTENCE"] = "vc_persistence";
32
+ SubSystem["TRANSPORT"] = "transport";
33
+ SubSystem["PROFILE"] = "profile";
34
+ SubSystem["API"] = "api";
35
+ })(SubSystem || (exports.SubSystem = SubSystem = {}));
36
+ var ActionType;
37
+ (function (ActionType) {
38
+ ActionType["CREATE"] = "create";
39
+ ActionType["READ"] = "read";
40
+ ActionType["UPDATE"] = "update";
41
+ ActionType["DELETE"] = "delete";
42
+ ActionType["EXECUTE"] = "execute";
43
+ })(ActionType || (exports.ActionType = ActionType = {}));
44
+ var DefaultActionSubType;
45
+ (function (DefaultActionSubType) {
46
+ DefaultActionSubType["KEY_GENERATION"] = "Key generation";
47
+ DefaultActionSubType["KEY_IMPORT"] = "Key import";
48
+ DefaultActionSubType["KEY_PERSISTENCE"] = "Key persistence";
49
+ DefaultActionSubType["KEY_REMOVAL"] = "Key removal";
50
+ DefaultActionSubType["DID_CREATION"] = "DID creation";
51
+ DefaultActionSubType["DID_RESOLUTION"] = "DID resolution";
52
+ DefaultActionSubType["DID_SERVICE_UPDATE"] = "DID service update";
53
+ DefaultActionSubType["VC_ISSUE"] = "VC issue";
54
+ DefaultActionSubType["VC_VERIFY"] = "VC verify";
55
+ })(DefaultActionSubType || (exports.DefaultActionSubType = DefaultActionSubType = {}));
56
+ var InitiatorType;
57
+ (function (InitiatorType) {
58
+ InitiatorType["USER"] = "user";
59
+ InitiatorType["SYSTEM"] = "system";
60
+ InitiatorType["EXTERNAL"] = "external";
61
+ })(InitiatorType || (exports.InitiatorType = InitiatorType = {}));
62
+ var SystemCorrelationIdType;
63
+ (function (SystemCorrelationIdType) {
64
+ SystemCorrelationIdType["DID"] = "did";
65
+ SystemCorrelationIdType["URL"] = "url";
66
+ SystemCorrelationIdType["EMAIL"] = "email";
67
+ SystemCorrelationIdType["HOSTNAME"] = "hostname";
68
+ SystemCorrelationIdType["PHONE"] = "phone";
69
+ SystemCorrelationIdType["USER"] = "user";
70
+ })(SystemCorrelationIdType || (exports.SystemCorrelationIdType = SystemCorrelationIdType = {}));
71
+ class EventManager {
72
+ constructor() {
73
+ this._emitters = new Map();
74
+ }
75
+ static instance() {
76
+ return EventManager.INSTANCE;
77
+ }
78
+ register(name, emitter, opts) {
79
+ this._emitters.set(name, { emitter, enabled: (opts === null || opts === void 0 ? void 0 : opts.disabled) !== true });
80
+ return emitter;
81
+ }
82
+ get(name, opts) {
83
+ var _a;
84
+ const { emitter, enabled } = (_a = this._emitters.get(name)) !== null && _a !== void 0 ? _a : {};
85
+ if (!emitter) {
86
+ throw Error(`No emitter registered with name ${name}`);
87
+ }
88
+ else if ((opts === null || opts === void 0 ? void 0 : opts.onlyEnabled) && !enabled) {
89
+ throw Error(`Emitter with name ${name} is not enabled`);
90
+ }
91
+ return emitter;
92
+ }
93
+ getOrCreate(name, opts) {
94
+ if (this.has(name)) {
95
+ return this.get(name, opts);
96
+ }
97
+ return this.register(name, new BasicEventEmitter());
98
+ }
99
+ has(name) {
100
+ return this._emitters.has(name);
101
+ }
102
+ emitters(filter) {
103
+ const all = Array.from(new Set(this._emitters.values()));
104
+ return this.emittersImpl(all, filter).map((e) => e.emitter);
105
+ }
106
+ hasEventName(eventName) {
107
+ return this.eventNames().includes(eventName);
108
+ }
109
+ eventNames() {
110
+ return Array.from(new Set(this.emitters().flatMap((emitter) => emitter.eventNames())));
111
+ }
112
+ emitBasic(event, ...args) {
113
+ return this.emit(event.eventName, event, args);
114
+ }
115
+ emit(eventName, event, ...args) {
116
+ if ('id' in event && 'system' in event && !event.eventName) {
117
+ event.eventName = eventName;
118
+ }
119
+ logging_1.Loggers.DEFAULT.options('sphereon:events', {
120
+ methods: [logging_1.LogMethod.CONSOLE],
121
+ defaultLogLevel: logging_1.LogLevel.INFO,
122
+ })
123
+ .get('sphereon:events')
124
+ .log(`Emitting '${eventName.toString()}' event`, event);
125
+ const emitters = this.emitters({ eventName });
126
+ emitters.flatMap((emitter) => emitter.emit(eventName, event, args));
127
+ }
128
+ listenerCount(eventName) {
129
+ const emitters = this.emitters({ eventName });
130
+ return emitters.map((emitter) => emitter.listenerCount(eventName)).reduce((previous, current) => current + previous);
131
+ }
132
+ listeners(filter) {
133
+ const emitters = (filter === null || filter === void 0 ? void 0 : filter.emitterName) ? [this.get(filter.emitterName, filter)] : this.emitters(filter);
134
+ return Array.from(new Set(this.emittersImpl(emitters.map((emitter) => {
135
+ return { emitter, enabled: true };
136
+ }), filter).flatMap((emitter) => emitter.emitter.listeners(filter.eventName))));
137
+ }
138
+ emittersImpl(all, filter) {
139
+ const { eventName } = filter !== null && filter !== void 0 ? filter : {};
140
+ if (!eventName) {
141
+ return all;
142
+ }
143
+ const filtered = all.filter((emitter) => emitter.emitter.eventNames().includes(eventName) && (emitter.enabled || (filter === null || filter === void 0 ? void 0 : filter.onlyEnabled) !== true));
144
+ return Array.from(new Set(filtered));
145
+ }
146
+ }
147
+ exports.EventManager = EventManager;
148
+ EventManager.INSTANCE = new EventManager();
149
+ class BasicEventEmitter extends events_1.EventEmitter {
150
+ addListener(eventName, listener) {
151
+ return super.addListener(eventName, listener);
152
+ }
153
+ once(eventName, listener) {
154
+ return super.once(eventName, listener);
155
+ }
156
+ emit(eventName, event, ...args) {
157
+ return super.emit(eventName, ...args);
158
+ }
159
+ }
160
+ exports.BasicEventEmitter = BasicEventEmitter;
161
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ export * from './logging';
2
+ export * from './events';
1
3
  export * from './types';
2
4
  export * from './utils';
3
5
  export * from './mapper';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA"}
package/dist/index.js CHANGED
@@ -14,6 +14,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
+ const logging_1 = require("./logging");
18
+ // We call the logger first, making sure that any library (re-)using the logger has the static initialized
19
+ logging_1.Loggers.DEFAULT.get('sphereon:ssi').debug(`Sphereon logger initialized`);
20
+ __exportStar(require("./logging"), exports);
21
+ __exportStar(require("./events"), exports);
17
22
  __exportStar(require("./types"), exports);
18
23
  __exportStar(require("./utils"), exports);
19
24
  __exportStar(require("./mapper"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAuB;AACvB,0CAAuB;AACvB,2CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uCAAmC;AACnC,0GAA0G;AAC1G,iBAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;AAExE,4CAAyB;AACzB,2CAAwB;AACxB,0CAAuB;AACvB,0CAAuB;AACvB,2CAAwB"}
@@ -0,0 +1,72 @@
1
+ /// <reference types="node" />
2
+ import { EventEmitter } from 'events';
3
+ export declare enum LogLevel {
4
+ TRACE = 0,
5
+ DEBUG = 1,
6
+ INFO = 2,
7
+ WARNING = 3,
8
+ ERROR = 4
9
+ }
10
+ export declare enum LoggingEventType {
11
+ AUDIT = "audit",
12
+ GENERAL = "general"
13
+ }
14
+ export interface SimpleLogEvent {
15
+ type: LoggingEventType.GENERAL;
16
+ level: LogLevel;
17
+ correlationId?: string;
18
+ timestamp: Date;
19
+ data: string;
20
+ diagnosticData?: any;
21
+ }
22
+ export declare enum LogMethod {
23
+ DEBUG_PKG = 0,
24
+ CONSOLE = 1,
25
+ EVENT = 2
26
+ }
27
+ export interface SimpleLogOptions {
28
+ namespace?: string;
29
+ eventName?: string;
30
+ defaultLogLevel?: LogLevel;
31
+ methods?: LogMethod[];
32
+ }
33
+ export declare function logOptions(opts?: SimpleLogOptions): Required<SimpleLogOptions>;
34
+ export declare class Loggers {
35
+ private static readonly DEFAULT_KEY;
36
+ static readonly DEFAULT: Loggers;
37
+ private readonly namespaceOptions;
38
+ private readonly loggers;
39
+ constructor(defaultOptions?: Omit<SimpleLogOptions, 'namespace'>);
40
+ options(namespace: string, options: Omit<SimpleLogOptions, 'namespace'>): this;
41
+ defaultOptions(options: Omit<SimpleLogOptions, 'namespace'>): this;
42
+ register<T>(namespace: string, logger: ISimpleLogger<T>): ISimpleLogger<T>;
43
+ get<T>(namespace: string, registerLogger?: ISimpleLogger<T>): ISimpleLogger<T>;
44
+ }
45
+ export type ISimpleLogger<LogType> = {
46
+ options: Required<SimpleLogOptions>;
47
+ log(value: LogType, ...args: any[]): void;
48
+ info(value: LogType, ...args: any[]): void;
49
+ debug(value: LogType, ...args: any[]): void;
50
+ trace(value: LogType, ...args: any[]): void;
51
+ warning(value: LogType, ...args: any[]): void;
52
+ error(value: LogType, ...args: any[]): void;
53
+ logl(level: LogLevel, value: LogType, ...args: any[]): void;
54
+ };
55
+ export declare class SimpleLogger implements ISimpleLogger<any> {
56
+ private _eventEmitter;
57
+ private _options;
58
+ constructor(opts?: SimpleLogOptions);
59
+ get eventEmitter(): EventEmitter;
60
+ get options(): Required<SimpleLogOptions>;
61
+ trace(value: any, ...args: any[]): void;
62
+ debug(value: any, ...args: any[]): void;
63
+ info(value: any, ...args: any[]): void;
64
+ warning(value: any, ...args: any[]): void;
65
+ error(value: any, ...args: any[]): void;
66
+ logl(level: LogLevel, value: any, ...args: any[]): void;
67
+ log(value: any, args?: any[]): void;
68
+ }
69
+ export declare class SimpleRecordLogger extends SimpleLogger implements ISimpleLogger<Record<string, any>> {
70
+ constructor(opts?: SimpleLogOptions);
71
+ }
72
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logging/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SimpleRecordLogger = exports.SimpleLogger = exports.Loggers = exports.logOptions = exports.LogMethod = exports.LoggingEventType = exports.LogLevel = void 0;
7
+ const debug_1 = __importDefault(require("debug"));
8
+ const events_1 = require("events");
9
+ var LogLevel;
10
+ (function (LogLevel) {
11
+ LogLevel[LogLevel["TRACE"] = 0] = "TRACE";
12
+ LogLevel[LogLevel["DEBUG"] = 1] = "DEBUG";
13
+ LogLevel[LogLevel["INFO"] = 2] = "INFO";
14
+ LogLevel[LogLevel["WARNING"] = 3] = "WARNING";
15
+ LogLevel[LogLevel["ERROR"] = 4] = "ERROR";
16
+ })(LogLevel || (exports.LogLevel = LogLevel = {}));
17
+ var LoggingEventType;
18
+ (function (LoggingEventType) {
19
+ LoggingEventType["AUDIT"] = "audit";
20
+ LoggingEventType["GENERAL"] = "general";
21
+ })(LoggingEventType || (exports.LoggingEventType = LoggingEventType = {}));
22
+ var LogMethod;
23
+ (function (LogMethod) {
24
+ LogMethod[LogMethod["DEBUG_PKG"] = 0] = "DEBUG_PKG";
25
+ LogMethod[LogMethod["CONSOLE"] = 1] = "CONSOLE";
26
+ LogMethod[LogMethod["EVENT"] = 2] = "EVENT";
27
+ })(LogMethod || (exports.LogMethod = LogMethod = {}));
28
+ function logOptions(opts) {
29
+ var _a, _b, _c, _d;
30
+ return {
31
+ namespace: (_a = opts === null || opts === void 0 ? void 0 : opts.namespace) !== null && _a !== void 0 ? _a : 'sphereon',
32
+ eventName: (_b = opts === null || opts === void 0 ? void 0 : opts.eventName) !== null && _b !== void 0 ? _b : 'sphereon:default',
33
+ defaultLogLevel: (_c = opts === null || opts === void 0 ? void 0 : opts.defaultLogLevel) !== null && _c !== void 0 ? _c : LogLevel.INFO,
34
+ methods: (_d = opts === null || opts === void 0 ? void 0 : opts.methods) !== null && _d !== void 0 ? _d : [LogMethod.DEBUG_PKG, LogMethod.EVENT],
35
+ };
36
+ }
37
+ exports.logOptions = logOptions;
38
+ class Loggers {
39
+ constructor(defaultOptions) {
40
+ this.namespaceOptions = new Map();
41
+ this.loggers = new WeakMap();
42
+ this.defaultOptions(logOptions(defaultOptions));
43
+ }
44
+ options(namespace, options) {
45
+ this.namespaceOptions.set(namespace, logOptions(Object.assign(Object.assign({}, options), { namespace })));
46
+ return this;
47
+ }
48
+ defaultOptions(options) {
49
+ this.options(Loggers.DEFAULT_KEY, options);
50
+ return this;
51
+ }
52
+ register(namespace, logger) {
53
+ return this.get(namespace, logger);
54
+ }
55
+ get(namespace, registerLogger) {
56
+ var _a, _b;
57
+ const options = (_b = (_a = this.namespaceOptions.get(namespace)) !== null && _a !== void 0 ? _a : registerLogger === null || registerLogger === void 0 ? void 0 : registerLogger.options) !== null && _b !== void 0 ? _b : this.namespaceOptions.get(Loggers.DEFAULT_KEY);
58
+ if (!options) {
59
+ throw Error(`No logging options found for namespace ${namespace}`);
60
+ }
61
+ this.namespaceOptions.set(namespace, options);
62
+ let logger = this.loggers.get(options);
63
+ if (!logger) {
64
+ logger = registerLogger !== null && registerLogger !== void 0 ? registerLogger : new SimpleLogger(options);
65
+ this.loggers.set(options, logger);
66
+ }
67
+ return logger;
68
+ }
69
+ }
70
+ exports.Loggers = Loggers;
71
+ Loggers.DEFAULT_KEY = '__DEFAULT__';
72
+ Loggers.DEFAULT = new Loggers({ defaultLogLevel: LogLevel.INFO, methods: [LogMethod.DEBUG_PKG, LogMethod.EVENT] });
73
+ class SimpleLogger {
74
+ constructor(opts) {
75
+ this._eventEmitter = new events_1.EventEmitter({ captureRejections: true });
76
+ this._options = logOptions(opts);
77
+ }
78
+ get eventEmitter() {
79
+ return this._eventEmitter;
80
+ }
81
+ get options() {
82
+ return this._options;
83
+ }
84
+ trace(value, ...args) {
85
+ this.logl(LogLevel.TRACE, value, args);
86
+ }
87
+ debug(value, ...args) {
88
+ this.logl(LogLevel.DEBUG, value, args);
89
+ }
90
+ info(value, ...args) {
91
+ this.logl(LogLevel.INFO, value, args);
92
+ }
93
+ warning(value, ...args) {
94
+ this.logl(LogLevel.WARNING, value, args);
95
+ }
96
+ error(value, ...args) {
97
+ this.logl(LogLevel.ERROR, value, args);
98
+ }
99
+ logl(level, value, ...args) {
100
+ const date = new Date().toISOString();
101
+ const filteredArgs = args.filter((v) => v);
102
+ const arg = filteredArgs.length === 0 || filteredArgs[0] == undefined ? undefined : filteredArgs;
103
+ function toLogValue(options) {
104
+ if (typeof value === 'string') {
105
+ return `${date}-(${options.namespace}) ${value}`;
106
+ }
107
+ else if (typeof value === 'object') {
108
+ value['namespace'] = options.namespace;
109
+ value['time'] = date;
110
+ }
111
+ return value;
112
+ }
113
+ const logValue = toLogValue(this.options);
114
+ const logArgs = [logValue];
115
+ if (arg) {
116
+ logArgs.push(args);
117
+ }
118
+ if (this.options.methods.includes(LogMethod.DEBUG_PKG)) {
119
+ if (arg) {
120
+ (0, debug_1.default)(this._options.namespace)(`${date}- ${value}`, arg);
121
+ }
122
+ else {
123
+ (0, debug_1.default)(this._options.namespace)(`${date}- ${value}`);
124
+ }
125
+ }
126
+ if (this.options.methods.includes(LogMethod.CONSOLE)) {
127
+ switch (level) {
128
+ case LogLevel.TRACE:
129
+ return console.trace(logArgs);
130
+ case LogLevel.DEBUG:
131
+ return console.debug(logArgs);
132
+ case LogLevel.INFO:
133
+ return console.info(logArgs);
134
+ case LogLevel.WARNING:
135
+ return console.warn(logArgs);
136
+ case LogLevel.ERROR:
137
+ return console.error(logArgs);
138
+ }
139
+ }
140
+ if (this.options.methods.includes(LogMethod.EVENT)) {
141
+ this._eventEmitter.emit(this.options.eventName, {
142
+ data: value.toString(),
143
+ timestamp: new Date(date),
144
+ level,
145
+ type: LoggingEventType.GENERAL,
146
+ diagnosticData: logArgs,
147
+ });
148
+ }
149
+ }
150
+ log(value, args) {
151
+ this.logl(this.options.defaultLogLevel, value, args);
152
+ }
153
+ }
154
+ exports.SimpleLogger = SimpleLogger;
155
+ class SimpleRecordLogger extends SimpleLogger {
156
+ constructor(opts) {
157
+ super(opts);
158
+ }
159
+ }
160
+ exports.SimpleRecordLogger = SimpleRecordLogger;
161
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logging/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sphereon/ssi-types",
3
3
  "description": "SSI Common Types",
4
- "version": "0.24.1-unstable.97+9f30b82c",
4
+ "version": "0.25.0",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "scripts": {
@@ -10,6 +10,8 @@
10
10
  },
11
11
  "dependencies": {
12
12
  "@sd-jwt/decode": "^0.6.1",
13
+ "debug": "^4.3.5",
14
+ "events": "^3.3.0",
13
15
  "jwt-decode": "^3.1.2"
14
16
  },
15
17
  "devDependencies": {
@@ -42,5 +44,5 @@
42
44
  "Verifiable Credentials",
43
45
  "DIDs"
44
46
  ],
45
- "gitHead": "9f30b82c59fe696fd272c26456872be3e1e90155"
47
+ "gitHead": "99bf4e65105924a3a186bb15e402ae8457731400"
46
48
  }
@@ -0,0 +1,206 @@
1
+ import { EventEmitter } from 'events'
2
+ import { Loggers, LogLevel, LogMethod } from '../logging'
3
+
4
+ export enum System {
5
+ GENERAL = 'general',
6
+ KMS = 'kms',
7
+ IDENTITY = 'identity',
8
+ OID4VCI = 'oid4vci',
9
+ OID4VP = 'oid4vp',
10
+ SIOPv2 = 'siopv2',
11
+ PE = 'PE',
12
+ CREDENTIALS = 'credentials',
13
+ WEB3 = 'web3',
14
+ PROFILE = 'profile',
15
+ CONTACT = 'contact',
16
+ }
17
+
18
+ export enum SubSystem {
19
+ KEY = 'key',
20
+ DID_PROVIDER = 'did_provider',
21
+ DID_RESOLVER = 'did_resolver',
22
+ OID4VP_OP = 'oid4vp_op',
23
+ OID4VCI_CLIENT = 'oid4vci_client',
24
+ SIOPv2_OP = 'siopv2_op',
25
+ CONTACT_MANAGER = 'contact_manager',
26
+ VC_ISSUER = 'vc_issuer',
27
+ VC_VERIFIER = 'vc_verifier',
28
+ VC_PERSISTENCE = 'vc_persistence',
29
+ TRANSPORT = 'transport',
30
+ PROFILE = 'profile',
31
+ API = 'api',
32
+ }
33
+
34
+ export enum ActionType {
35
+ CREATE = 'create',
36
+ READ = 'read',
37
+ UPDATE = 'update',
38
+ DELETE = 'delete',
39
+ EXECUTE = 'execute',
40
+ }
41
+
42
+ export enum DefaultActionSubType {
43
+ KEY_GENERATION = 'Key generation',
44
+ KEY_IMPORT = 'Key import',
45
+ KEY_PERSISTENCE = 'Key persistence',
46
+ KEY_REMOVAL = 'Key removal',
47
+ DID_CREATION = 'DID creation',
48
+ DID_RESOLUTION = 'DID resolution',
49
+ DID_SERVICE_UPDATE = 'DID service update',
50
+ VC_ISSUE = 'VC issue',
51
+ VC_VERIFY = 'VC verify',
52
+ }
53
+
54
+ export type ActionSubType = DefaultActionSubType | string
55
+
56
+ export enum InitiatorType {
57
+ USER = 'user',
58
+ SYSTEM = 'system',
59
+ EXTERNAL = 'external',
60
+ }
61
+
62
+ export enum SystemCorrelationIdType {
63
+ DID = 'did',
64
+ URL = 'url',
65
+ EMAIL = 'email',
66
+ HOSTNAME = 'hostname',
67
+ PHONE = 'phone',
68
+ USER = 'user',
69
+ }
70
+
71
+ export type EventData = {
72
+ system: string
73
+ subSystemType: string
74
+ }
75
+
76
+ export interface BasicEvent<SourceType, PayloadType extends EventData> {
77
+ id: string
78
+ correlationId?: string
79
+ eventName: string
80
+ initiator?: string
81
+ initiatorType: InitiatorType
82
+ system: System
83
+ subsystem: SubSystem
84
+ data: PayloadType
85
+ }
86
+
87
+ type EmitterInstance = {
88
+ enabled: boolean
89
+ emitter: EventEmitter
90
+ }
91
+
92
+ export class EventManager {
93
+ private static readonly INSTANCE = new EventManager()
94
+ private _emitters = new Map<string, EmitterInstance>()
95
+
96
+ private constructor() {}
97
+
98
+ public static instance(): EventManager {
99
+ return EventManager.INSTANCE
100
+ }
101
+
102
+ register(name: string, emitter: EventEmitter, opts?: { disabled: boolean }): EventEmitter {
103
+ this._emitters.set(name, { emitter, enabled: opts?.disabled !== true })
104
+ return emitter
105
+ }
106
+
107
+ get(name: string, opts?: { onlyEnabled?: boolean }): EventEmitter {
108
+ const { emitter, enabled } = this._emitters.get(name) ?? {}
109
+ if (!emitter) {
110
+ throw Error(`No emitter registered with name ${name}`)
111
+ } else if (opts?.onlyEnabled && !enabled) {
112
+ throw Error(`Emitter with name ${name} is not enabled`)
113
+ }
114
+ return emitter
115
+ }
116
+
117
+ getOrCreate(name: string, opts?: { onlyEnabled?: boolean }): EventEmitter {
118
+ if (this.has(name)) {
119
+ return this.get(name, opts)
120
+ }
121
+ return this.register(name, new BasicEventEmitter())
122
+ }
123
+
124
+ has(name: string): boolean {
125
+ return this._emitters.has(name)
126
+ }
127
+
128
+ emitters(filter?: { eventName?: string | symbol; onlyEnabled?: boolean }): Array<EventEmitter> {
129
+ const all = Array.from(new Set(this._emitters.values()))
130
+ return this.emittersImpl(all, filter).map((e) => e.emitter)
131
+ }
132
+
133
+ hasEventName(eventName: string | symbol) {
134
+ return this.eventNames().includes(eventName)
135
+ }
136
+
137
+ eventNames(): Array<string | symbol> {
138
+ return Array.from(new Set(this.emitters().flatMap((emitter) => emitter.eventNames())))
139
+ }
140
+
141
+ emitBasic(event: BasicEvent<any, any>, ...args: any[]) {
142
+ return this.emit(event.eventName, event, args)
143
+ }
144
+
145
+ emit(eventName: string | symbol, event: Omit<BasicEvent<any, any>, 'eventName'> | any, ...args: any[]): void {
146
+ if ('id' in event && 'system' in event && !event.eventName) {
147
+ event.eventName = eventName
148
+ }
149
+ Loggers.DEFAULT.options('sphereon:events', {
150
+ methods: [LogMethod.CONSOLE],
151
+ defaultLogLevel: LogLevel.INFO,
152
+ })
153
+ .get('sphereon:events')
154
+ .log(`Emitting '${eventName.toString()}' event`, event)
155
+ const emitters = this.emitters({ eventName })
156
+ emitters.flatMap((emitter) => emitter.emit(eventName, event, args))
157
+ }
158
+
159
+ listenerCount(eventName: string | symbol) {
160
+ const emitters = this.emitters({ eventName })
161
+ return emitters.map((emitter) => emitter.listenerCount(eventName)).reduce((previous, current) => current + previous)
162
+ }
163
+
164
+ listeners(filter: { emitterName?: string; eventName: string; onlyEnabled?: boolean }): Array<Function> {
165
+ const emitters = filter?.emitterName ? [this.get(filter.emitterName, filter)] : this.emitters(filter)
166
+ return Array.from(
167
+ new Set(
168
+ this.emittersImpl(
169
+ emitters.map((emitter) => {
170
+ return { emitter, enabled: true }
171
+ }),
172
+ filter,
173
+ ).flatMap((emitter) => emitter.emitter.listeners(filter.eventName)),
174
+ ),
175
+ )
176
+ }
177
+
178
+ private emittersImpl(
179
+ all: { emitter: EventEmitter; enabled: boolean }[],
180
+ filter?: {
181
+ eventName?: string | symbol
182
+ onlyEnabled?: boolean
183
+ },
184
+ ): Array<EmitterInstance> {
185
+ const { eventName } = filter ?? {}
186
+ if (!eventName) {
187
+ return all
188
+ }
189
+ const filtered = all.filter((emitter) => emitter.emitter.eventNames().includes(eventName) && (emitter.enabled || filter?.onlyEnabled !== true))
190
+ return Array.from(new Set(filtered))
191
+ }
192
+ }
193
+
194
+ export class BasicEventEmitter extends EventEmitter {
195
+ addListener(eventName: string | symbol, listener: (event: BasicEvent<any, any>, ...args: any[]) => void): this {
196
+ return super.addListener(eventName, listener)
197
+ }
198
+
199
+ once(eventName: string | symbol, listener: (event: BasicEvent<any, any>, ...args: any[]) => void): this {
200
+ return super.once(eventName, listener)
201
+ }
202
+
203
+ emit(eventName: string, event: BasicEvent<any, any>, ...args: any[]): boolean {
204
+ return super.emit(eventName, ...args)
205
+ }
206
+ }
package/src/index.ts CHANGED
@@ -1,3 +1,9 @@
1
+ import { Loggers } from './logging'
2
+ // We call the logger first, making sure that any library (re-)using the logger has the static initialized
3
+ Loggers.DEFAULT.get('sphereon:ssi').debug(`Sphereon logger initialized`)
4
+
5
+ export * from './logging'
6
+ export * from './events'
1
7
  export * from './types'
2
8
  export * from './utils'
3
9
  export * from './mapper'
@@ -0,0 +1,198 @@
1
+ import Debug from 'debug'
2
+ import { EventEmitter } from 'events'
3
+
4
+ export enum LogLevel {
5
+ TRACE = 0,
6
+ DEBUG,
7
+ INFO,
8
+ WARNING,
9
+ ERROR,
10
+ }
11
+
12
+ export enum LoggingEventType {
13
+ AUDIT = 'audit',
14
+ GENERAL = 'general',
15
+ }
16
+
17
+ export interface SimpleLogEvent {
18
+ type: LoggingEventType.GENERAL
19
+ level: LogLevel
20
+ correlationId?: string
21
+ timestamp: Date
22
+ data: string
23
+ diagnosticData?: any
24
+ }
25
+
26
+ export enum LogMethod {
27
+ DEBUG_PKG,
28
+ CONSOLE,
29
+ EVENT,
30
+ }
31
+
32
+ export interface SimpleLogOptions {
33
+ namespace?: string
34
+ eventName?: string
35
+ defaultLogLevel?: LogLevel
36
+ methods?: LogMethod[]
37
+ }
38
+
39
+ export function logOptions(opts?: SimpleLogOptions): Required<SimpleLogOptions> {
40
+ return {
41
+ namespace: opts?.namespace ?? 'sphereon',
42
+ eventName: opts?.eventName ?? 'sphereon:default',
43
+ defaultLogLevel: opts?.defaultLogLevel ?? LogLevel.INFO,
44
+ methods: opts?.methods ?? [LogMethod.DEBUG_PKG, LogMethod.EVENT],
45
+ }
46
+ }
47
+
48
+ export class Loggers {
49
+ private static readonly DEFAULT_KEY = '__DEFAULT__'
50
+ public static readonly DEFAULT: Loggers = new Loggers({ defaultLogLevel: LogLevel.INFO, methods: [LogMethod.DEBUG_PKG, LogMethod.EVENT] })
51
+ private readonly namespaceOptions: Map<string, Required<SimpleLogOptions>> = new Map()
52
+ private readonly loggers: WeakMap<Required<SimpleLogOptions>, ISimpleLogger<any>> = new WeakMap()
53
+
54
+ constructor(defaultOptions?: Omit<SimpleLogOptions, 'namespace'>) {
55
+ this.defaultOptions(logOptions(defaultOptions))
56
+ }
57
+
58
+ public options(namespace: string, options: Omit<SimpleLogOptions, 'namespace'>): this {
59
+ this.namespaceOptions.set(namespace, logOptions({ ...options, namespace }))
60
+ return this
61
+ }
62
+
63
+ public defaultOptions(options: Omit<SimpleLogOptions, 'namespace'>): this {
64
+ this.options(Loggers.DEFAULT_KEY, options)
65
+ return this
66
+ }
67
+
68
+ register<T>(namespace: string, logger: ISimpleLogger<T>): ISimpleLogger<T> {
69
+ return this.get(namespace, logger)
70
+ }
71
+
72
+ get<T>(namespace: string, registerLogger?: ISimpleLogger<T>): ISimpleLogger<T> {
73
+ const options = this.namespaceOptions.get(namespace) ?? registerLogger?.options ?? this.namespaceOptions.get(Loggers.DEFAULT_KEY)
74
+ if (!options) {
75
+ throw Error(`No logging options found for namespace ${namespace}`)
76
+ }
77
+ this.namespaceOptions.set(namespace, options)
78
+
79
+ let logger = this.loggers.get(options)
80
+ if (!logger) {
81
+ logger = registerLogger ?? new SimpleLogger(options)
82
+ this.loggers.set(options, logger)
83
+ }
84
+ return logger
85
+ }
86
+ }
87
+
88
+ export type ISimpleLogger<LogType> = {
89
+ options: Required<SimpleLogOptions>
90
+ log(value: LogType, ...args: any[]): void
91
+ info(value: LogType, ...args: any[]): void
92
+ debug(value: LogType, ...args: any[]): void
93
+ trace(value: LogType, ...args: any[]): void
94
+ warning(value: LogType, ...args: any[]): void
95
+ error(value: LogType, ...args: any[]): void
96
+ logl(level: LogLevel, value: LogType, ...args: any[]): void
97
+ }
98
+
99
+ export class SimpleLogger implements ISimpleLogger<any> {
100
+ private _eventEmitter = new EventEmitter({ captureRejections: true })
101
+ private _options: Required<SimpleLogOptions>
102
+
103
+ constructor(opts?: SimpleLogOptions) {
104
+ this._options = logOptions(opts)
105
+ }
106
+
107
+ get eventEmitter(): EventEmitter {
108
+ return this._eventEmitter
109
+ }
110
+
111
+ get options(): Required<SimpleLogOptions> {
112
+ return this._options
113
+ }
114
+
115
+ trace(value: any, ...args: any[]) {
116
+ this.logl(LogLevel.TRACE, value, args)
117
+ }
118
+
119
+ debug(value: any, ...args: any[]) {
120
+ this.logl(LogLevel.DEBUG, value, args)
121
+ }
122
+
123
+ info(value: any, ...args: any[]) {
124
+ this.logl(LogLevel.INFO, value, args)
125
+ }
126
+
127
+ warning(value: any, ...args: any[]) {
128
+ this.logl(LogLevel.WARNING, value, args)
129
+ }
130
+
131
+ error(value: any, ...args: any[]) {
132
+ this.logl(LogLevel.ERROR, value, args)
133
+ }
134
+
135
+ logl(level: LogLevel, value: any, ...args: any[]) {
136
+ const date = new Date().toISOString()
137
+ const filteredArgs = args.filter((v) => v!!)
138
+ const arg = filteredArgs.length === 0 || filteredArgs[0] == undefined ? undefined : filteredArgs
139
+
140
+ function toLogValue(options: SimpleLogOptions): any {
141
+ if (typeof value === 'string') {
142
+ return `${date}-(${options.namespace}) ${value}`
143
+ } else if (typeof value === 'object') {
144
+ value['namespace'] = options.namespace
145
+ value['time'] = date
146
+ }
147
+ return value
148
+ }
149
+
150
+ const logValue = toLogValue(this.options)
151
+ const logArgs = [logValue]
152
+ if (arg) {
153
+ logArgs.push(args)
154
+ }
155
+ if (this.options.methods.includes(LogMethod.DEBUG_PKG)) {
156
+ if (arg) {
157
+ Debug(this._options.namespace)(`${date}- ${value}`, arg)
158
+ } else {
159
+ Debug(this._options.namespace)(`${date}- ${value}`)
160
+ }
161
+ }
162
+
163
+ if (this.options.methods.includes(LogMethod.CONSOLE)) {
164
+ switch (level) {
165
+ case LogLevel.TRACE:
166
+ return console.trace(logArgs)
167
+ case LogLevel.DEBUG:
168
+ return console.debug(logArgs)
169
+ case LogLevel.INFO:
170
+ return console.info(logArgs)
171
+ case LogLevel.WARNING:
172
+ return console.warn(logArgs)
173
+ case LogLevel.ERROR:
174
+ return console.error(logArgs)
175
+ }
176
+ }
177
+
178
+ if (this.options.methods.includes(LogMethod.EVENT)) {
179
+ this._eventEmitter.emit(this.options.eventName, {
180
+ data: value.toString(),
181
+ timestamp: new Date(date),
182
+ level,
183
+ type: LoggingEventType.GENERAL,
184
+ diagnosticData: logArgs,
185
+ } satisfies SimpleLogEvent)
186
+ }
187
+ }
188
+
189
+ log(value: any, args?: any[]) {
190
+ this.logl(this.options.defaultLogLevel, value, args)
191
+ }
192
+ }
193
+
194
+ export class SimpleRecordLogger extends SimpleLogger implements ISimpleLogger<Record<string, any>> {
195
+ constructor(opts?: SimpleLogOptions) {
196
+ super(opts)
197
+ }
198
+ }