@sphereon/ssi-sdk.core 0.34.1-next.3 → 0.34.1-next.322

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.
package/dist/index.cjs CHANGED
@@ -225,21 +225,21 @@ function agentContext(agent) {
225
225
  __name(agentContext, "agentContext");
226
226
 
227
227
  // src/types/events.ts
228
- var PartyCorrelationType = /* @__PURE__ */ function(PartyCorrelationType2) {
228
+ var PartyCorrelationType = /* @__PURE__ */ (function(PartyCorrelationType2) {
229
229
  PartyCorrelationType2["DID"] = "did";
230
230
  PartyCorrelationType2["URL"] = "url";
231
231
  PartyCorrelationType2["EMAIL"] = "email";
232
232
  PartyCorrelationType2["HOSTNAME"] = "hostname";
233
233
  PartyCorrelationType2["PHONE"] = "phone";
234
234
  return PartyCorrelationType2;
235
- }({});
236
- var CredentialType = /* @__PURE__ */ function(CredentialType2) {
235
+ })({});
236
+ var CredentialType = /* @__PURE__ */ (function(CredentialType2) {
237
237
  CredentialType2["JSON_LD"] = "JSON_LD";
238
238
  CredentialType2["JWT"] = "JWT";
239
239
  CredentialType2["SD_JWT"] = "SD_JWT";
240
240
  CredentialType2["MSO_MDOC"] = "MSO_MDOC";
241
241
  return CredentialType2;
242
- }({});
242
+ })({});
243
243
 
244
244
  // src/utils/generic.ts
245
245
  function isDefined(arg) {
@@ -332,10 +332,10 @@ var varint_default = _brrp_varint;
332
332
 
333
333
  // src/utils/encoding.ts
334
334
  var { decode: decode2 } = varint_default;
335
- var MultibaseFormat = /* @__PURE__ */ function(MultibaseFormat2) {
335
+ var MultibaseFormat = /* @__PURE__ */ (function(MultibaseFormat2) {
336
336
  MultibaseFormat2["BASE58"] = "z";
337
337
  return MultibaseFormat2;
338
- }({});
338
+ })({});
339
339
  function hexToMultibase(hex, type) {
340
340
  return {
341
341
  value: bytesToMultibase(hexToBytes(hex), type),
@@ -646,32 +646,32 @@ function SuppliedSigner(keyRef, context, algorithm) {
646
646
  };
647
647
  }
648
648
  __name(SuppliedSigner, "SuppliedSigner");
649
- var KeyAlgo = /* @__PURE__ */ function(KeyAlgo2) {
649
+ var KeyAlgo = /* @__PURE__ */ (function(KeyAlgo2) {
650
650
  KeyAlgo2["EDDSA"] = "EdDSA";
651
651
  KeyAlgo2["RS256"] = "RS256";
652
652
  KeyAlgo2["PS256"] = "PS256";
653
653
  KeyAlgo2["ES256"] = "ES256";
654
654
  KeyAlgo2["ES256K"] = "ES256K";
655
655
  return KeyAlgo2;
656
- }({});
656
+ })({});
657
657
 
658
658
  // src/link-handlers/LinkHandlers.ts
659
659
  var import_ssi_types4 = require("@sphereon/ssi-types");
660
660
 
661
661
  // src/link-handlers/types.ts
662
- var DefaultLinkPriorities = /* @__PURE__ */ function(DefaultLinkPriorities2) {
662
+ var DefaultLinkPriorities = /* @__PURE__ */ (function(DefaultLinkPriorities2) {
663
663
  DefaultLinkPriorities2[DefaultLinkPriorities2["HIGHEST"] = 0] = "HIGHEST";
664
664
  DefaultLinkPriorities2[DefaultLinkPriorities2["DEFAULT"] = Number.MAX_VALUE / 2] = "DEFAULT";
665
665
  DefaultLinkPriorities2[DefaultLinkPriorities2["LOWEST"] = Number.MAX_VALUE] = "LOWEST";
666
666
  return DefaultLinkPriorities2;
667
- }({});
668
- var emitLinkHandlerURLEvent = /* @__PURE__ */ __name((event, context) => {
669
- return context.agent.emit("link-handler-url", event);
667
+ })({});
668
+ var emitLinkHandlerURLEvent = /* @__PURE__ */ __name(async (event, context) => {
669
+ return await context.agent.emit("link-handler-url", event);
670
670
  }, "emitLinkHandlerURLEvent");
671
- var LinkHandlerEventType = /* @__PURE__ */ function(LinkHandlerEventType2) {
671
+ var LinkHandlerEventType = /* @__PURE__ */ (function(LinkHandlerEventType2) {
672
672
  LinkHandlerEventType2["LINK_HANDLER_URL"] = "link-handler-url";
673
673
  return LinkHandlerEventType2;
674
- }({});
674
+ })({});
675
675
 
676
676
  // src/link-handlers/LinkHandlers.ts
677
677
  var LinkHandlers = class {
@@ -709,9 +709,10 @@ var LinkHandlers = class {
709
709
  }
710
710
  try {
711
711
  if (singleHandlerOnly === true) {
712
- return await handlers[0].handle(url, otherOpts);
712
+ await handlers[0].handle(url, otherOpts);
713
+ } else {
714
+ await Promise.all(handlers.map((handler) => handler.handle(url, otherOpts)));
713
715
  }
714
- handlers.map(async (handler) => await handler.handle(url, otherOpts));
715
716
  } catch (e) {
716
717
  console.log(`Linkhandler error: ${e.message}`, e);
717
718
  return Promise.reject(e);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/loggers/eventLogger/EventLogger.ts","../src/loggers/eventLogger/EventLoggerBuilder.ts","../src/types/context.ts","../src/types/events.ts","../src/utils/generic.ts","../src/utils/encoding.ts","../src/utils/varint/varint.js","../src/utils/bearer-token.ts","../src/utils/hasher.ts","../src/utils/database.ts","../src/utils/image.ts","../src/signers/SuppliedSigner.ts","../src/link-handlers/LinkHandlers.ts","../src/link-handlers/types.ts","../src/link-handlers/agent/LinkHandlerPlugin.ts"],"sourcesContent":["import EventLogger from './loggers/eventLogger/EventLogger'\nimport EventLoggerBuilder from './loggers/eventLogger/EventLoggerBuilder'\n\nexport * from './types'\nexport * from './utils'\nexport { KeyAlgo, SuppliedSigner } from './signers'\nexport * from './link-handlers'\n\nexport { EventLogger, EventLoggerBuilder }\n","import {\n type InitiatorType,\n type ISimpleLogger,\n Loggers,\n LogLevel,\n LogMethod,\n type SimpleLogEvent,\n SimpleLogger,\n type SimpleLogOptions,\n SubSystem,\n System,\n} from '@sphereon/ssi-types'\nimport type { IAgentContext } from '@veramo/core'\nimport type { EventLoggerArgs, LogEventType, LoggingEvent } from '../../types'\n\nclass EventLogger {\n private readonly context?: IAgentContext<any>\n private readonly namespace: string\n private readonly system?: System\n private readonly subSystemType?: SubSystem\n private readonly logLevel: LogLevel\n private readonly initiatorType?: InitiatorType\n private static readonly LOGGERS = Loggers.DEFAULT\n\n constructor(args: EventLoggerArgs) {\n const { context, namespace = 'sphereon:ssi-sdk:EventLogger', system, subSystem, logLevel = LogLevel.INFO, initiatorType } = args\n\n this.context = context\n this.namespace = namespace\n this.system = system\n this.subSystemType = subSystem\n this.logLevel = logLevel\n this.initiatorType = initiatorType\n }\n\n private localListener(event: SimpleLogEvent) {\n const { level, data, type, ...rest } = event\n EventLogger.LOGGERS.get(this.namespace).logl(level ?? this.logLevel ?? LogLevel.INFO, data, {\n ...rest,\n ...(this.system && { system: this.system }),\n ...(this.subSystemType && { subSystem: this.subSystemType }),\n })\n if (this.context?.agent) {\n void this.context.agent.emit(type, event)\n }\n }\n\n public simple = (options?: Omit<SimpleLogOptions, 'namespace'>): ISimpleLogger<unknown> => {\n const logger = EventLogger.LOGGERS.options(\n this.namespace,\n options ?? {\n eventName: this.namespace,\n methods: [LogMethod.EVENT],\n },\n ).get(this.namespace) as SimpleLogger\n if (!logger.eventEmitter.listeners(logger.options.eventName ?? this.namespace).includes(this.localListener)) {\n logger.eventEmitter.addListener(logger.options.eventName ?? this.namespace, this.localListener)\n }\n return logger\n }\n\n public logEvent = async (event: LoggingEvent): Promise<void> => {\n const eventData = await this.eventData(event)\n EventLogger.LOGGERS.get(this.namespace).logl(eventData.level ?? LogLevel.INFO, JSON.stringify(eventData), eventData)\n if (this.context?.agent) {\n await this.context.agent.emit(event.type, eventData)\n }\n }\n\n private eventData = async (event: LoggingEvent): Promise<LogEventType> => {\n if (!this.system && !event.data.system) {\n return Promise.reject(Error('Required system is not present'))\n }\n\n if (!this.subSystemType && !event.data.subSystemType) {\n return Promise.reject(Error('Required sub system type is not present'))\n }\n\n const result = {\n ...event.data,\n ...(!event.data.level && { level: this.logLevel }),\n ...(!event.data.system && { system: this.system }),\n ...(!event.data.subSystemType && { subSystemType: this.subSystemType }),\n ...(!event.data.initiatorType && { initiatorType: this.initiatorType }),\n }\n return result\n }\n}\n\nexport default EventLogger\n","import { InitiatorType, LogLevel, SubSystem, System } from '@sphereon/ssi-types'\nimport type { IAgentContext } from '@veramo/core'\nimport EventLogger from './EventLogger'\n\nclass EventLoggerBuilder {\n private context?: IAgentContext<any>\n private namespace?: string\n private system?: System\n private subSystem?: SubSystem\n private logLevel?: LogLevel\n private initiatorType?: InitiatorType\n\n withContext(context: IAgentContext<any>): this {\n this.context = context\n return this\n }\n\n withNamespace(namespace: string): this {\n this.namespace = namespace\n return this\n }\n\n withSystem(system: System): this {\n this.system = system\n return this\n }\n\n withSubSystem(subSystem: SubSystem): this {\n this.subSystem = subSystem\n return this\n }\n\n withLogLevel(logLevel: LogLevel): this {\n this.logLevel = logLevel\n return this\n }\n\n withInitiatorType(initiatorType: InitiatorType): this {\n this.initiatorType = initiatorType\n return this\n }\n\n public build(): EventLogger {\n return new EventLogger({\n context: this.context,\n namespace: this.namespace,\n system: this.system,\n subSystem: this.subSystem,\n logLevel: this.logLevel,\n initiatorType: this.initiatorType,\n })\n }\n}\n\nexport default EventLoggerBuilder\n","import type { IAgentContext, IPluginMethodMap, TAgent } from '@veramo/core'\n\nexport function agentContext<TAgentTypes extends IPluginMethodMap>(agent: TAgent<TAgentTypes>): IAgentContext<TAgentTypes> {\n return {\n agent,\n }\n}\n","import {\n type ActionSubType,\n ActionType,\n InitiatorType,\n LoggingEventType,\n LogLevel,\n type SimpleLogEvent,\n SubSystem,\n System,\n SystemCorrelationIdType,\n} from '@sphereon/ssi-types'\nimport { IAgentContext } from '@veramo/core'\n\nexport enum PartyCorrelationType {\n DID = 'did',\n URL = 'url',\n EMAIL = 'email',\n HOSTNAME = 'hostname',\n PHONE = 'phone',\n}\n\nexport type AuditLoggingEvent = Omit<SimpleLogEvent, 'type' | 'data'> & {\n id: string\n type: LoggingEventType.AUDIT\n // timestamp: Date\n // level: LogLevel\n correlationId: string\n system: System\n subSystemType: SubSystem\n actionType: ActionType\n actionSubType: ActionSubType\n initiatorType: InitiatorType\n systemCorrelationIdType?: SystemCorrelationIdType\n systemCorrelationId?: string\n systemAlias?: string\n partyCorrelationType?: PartyCorrelationType\n partyCorrelationId?: string\n partyAlias?: string\n description: string\n data?: any\n // diagnosticData?: any\n}\n\nexport enum CredentialType {\n JSON_LD = 'JSON_LD',\n JWT = 'JWT',\n SD_JWT = 'SD_JWT',\n MSO_MDOC = 'MSO_MDOC',\n}\n\n//TODO the fields credentialType, data, originalCredential and credentialHash should be required in this type\n// create a general type that can be shared between AuditLoggingEvent and ActivityLoggingEvent\nexport type ActivityLoggingEvent = Omit<SimpleLogEvent, 'data' | 'type'> & {\n id: string\n type: LoggingEventType.ACTIVITY\n originalCredential?: string\n credentialHash?: string\n parentCredentialHash?: string\n credentialType?: CredentialType\n sharePurpose?: string\n correlationId: string\n system: System\n subSystemType: SubSystem\n actionType: ActionType\n actionSubType: ActionSubType\n initiatorType: InitiatorType\n systemCorrelationIdType?: SystemCorrelationIdType\n systemCorrelationId?: string\n systemAlias?: string\n partyCorrelationType?: PartyCorrelationType\n partyCorrelationId?: string\n partyAlias?: string\n description: string\n data?: any\n}\n\nexport type PartialAuditLoggingEvent = Partial<AuditLoggingEvent>\n\nexport type PartialActivityLoggingEvent = Partial<ActivityLoggingEvent>\n\nexport type NonPersistedAuditLoggingEvent = Omit<\n AuditLoggingEvent,\n 'id' | 'timestamp' | 'level' | 'correlationId' | 'system' | 'subSystemType' | 'initiatorType' | 'type'\n> & {\n level?: LogLevel\n correlationId?: string\n system?: System\n subSystemType?: SubSystem\n initiatorType?: InitiatorType\n}\n\nexport type NonPersistedActivityLoggingEvent = Omit<\n ActivityLoggingEvent,\n 'id' | 'timestamp' | 'level' | 'correlationId' | 'system' | 'subSystemType' | 'initiatorType' | 'type'\n> & {\n level?: LogLevel\n correlationId?: string\n system?: System\n subSystemType?: SubSystem\n initiatorType?: InitiatorType\n credentialType?: CredentialType\n sharePurpose?: string\n}\n\nexport type LoggingEvent = {\n type: LoggingEventType\n data: LogEventType\n}\n\nexport type LogEventType = NonPersistedAuditLoggingEvent | NonPersistedActivityLoggingEvent\n\nexport type EventLoggerArgs = {\n context?: IAgentContext<any>\n namespace?: string\n system?: System\n subSystem?: SubSystem\n logLevel?: LogLevel\n initiatorType?: InitiatorType\n}\n","/**\n * Checks if a variable is defined and not null.\n * After this check, typescript sees the variable as defined.\n *\n * @param arg - The input to be verified\n *\n * @returns true if the input variable is defined.\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function isDefined<T>(arg: T): arg is Exclude<T, null | undefined> {\n return arg !== null && typeof arg !== 'undefined'\n}\n\n/**\n * Ensures that a given input is an array. If the input is a single item, it is converted to an array with a single\n * entry.\n *\n * @param arg - a variable that needs to be converted to array\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function asArray<T>(arg?: T | T[] | any): (T | any)[] {\n return isDefined(arg) ? (Array.isArray(arg) ? arg : [arg]) : []\n}\n\n/**\n * Checks if an object is iterable (can be used for `for..of`)\n * @param obj - the variable to be checked\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function isIterable<T>(obj: any): obj is Iterable<T> {\n return obj != null && typeof obj[Symbol.iterator] === 'function'\n}\n/**\n * Compute the intersection of two arrays\n * Elements are compared by reference so object types will appear as unique even if they contain the same data.\n *\n * @param a - first array\n * @param b - second array\n * @returns The intersection of the two arrays.\n *\n * @public\n */\nexport function intersect<T>(a: T[] | any, b: any[] | any): T[] {\n const setB = new Set<T>(asArray(b))\n return [...new Set(asArray(a))].filter((x) => setB.has(x))\n}\n","import type { TKeyType } from '@veramo/core'\n// @ts-ignore\nimport { concat as concatArrays } from 'uint8arrays/concat'\n// @ts-ignore\nimport { fromString } from 'uint8arrays/from-string'\n// @ts-ignore\nimport { toString } from 'uint8arrays/to-string'\nimport varint from './varint/varint'\nconst { decode } = varint\n\nexport enum MultibaseFormat {\n BASE58 = 'z',\n}\n\nexport function hexToMultibase(hex: string, type: TKeyType): { value: string; format: MultibaseFormat; keyType: TKeyType } {\n return { value: bytesToMultibase(hexToBytes(hex), type), format: MultibaseFormat.BASE58, keyType: type }\n}\n\nexport function multibaseToHex(multibase: string): { value: string; keyType: TKeyType; format: MultibaseFormat } {\n if (!multibase.startsWith(MultibaseFormat.BASE58)) {\n throw new Error('Only base58 supported for now using multibase!')\n }\n\n const props = multibaseKeyToProps(multibase)\n return { value: bytesToHex(multibaseKeyToBytes(multibase)), keyType: props.keyType, format: MultibaseFormat.BASE58 }\n}\n\n/**\n * Converts a Uint8Array to a base64url string\n * @param b - the array to be converted\n *\n * @public\n */\nexport function bytesToBase64url(b: Uint8Array): string {\n return toString(b, 'base64url')\n}\n\n/**\n * Converts a base64url string to the Uint8Array it represents.\n *\n * @param s - the string to be converted\n *\n * @throws if the string is not formatted correctly.\n *\n * @public\n */\nexport function base64ToBytes(s: string): Uint8Array {\n const inputBase64Url = s.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '')\n return fromString(inputBase64Url, 'base64url')\n}\n/**\n * Encodes a Uint8Array to a base64 string representation with padding.\n * @param b - the byte array to convert\n *\n * @public\n */\nexport function bytesToBase64(b: Uint8Array): string {\n return toString(b, 'base64pad')\n}\n\n/**\n * Encodes the bytes of an input string to base64url\n * @param s - the original string\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function encodeBase64url(s: string): string {\n return bytesToBase64url(fromString(s))\n}\n\n/**\n * Decodes a base64url string to a utf8 string represented by the same bytes.\n * @param s - the base64url string to be decoded\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function decodeBase64url(s: string): string {\n return toString(base64ToBytes(s))\n}\n\n/**\n * Builds a string from a Uint8Array using the utf-8 encoding.\n * @param b - the array to be converted\n *\n * @public\n */\nexport function bytesToUtf8String(b: Uint8Array): string {\n return toString(b, 'utf-8')\n}\n\n/**\n * Encodes a string to a Uint8Array using the utf-8 encoding.\n * @param s - the string to be encoded\n *\n * @public\n */\nexport function stringToUtf8Bytes(s: string): Uint8Array {\n return fromString(s, 'utf-8')\n}\n\n/**\n * Stringifies a JSON object and encodes the bytes of the resulting string to a base64url representation.\n * @param payload - the object to be encoded\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function encodeJoseBlob(payload: {}) {\n return toString(fromString(JSON.stringify(payload), 'utf-8'), 'base64url')\n}\n\n/**\n * Decodes a base64url string representing stringified JSON to a JSON object.\n *\n * @param blob - The base64url encoded stringified JSON to be decoded\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function decodeJoseBlob(blob: string) {\n return JSON.parse(toString(fromString(blob, 'base64url'), 'utf-8'))\n}\n\n/**\n * Converts a hex string (with or without prefix) to a byte array (Uint8Array)\n *\n * @param hexString - The string representing the encoding\n * @returns the `Uint8Array` represented by the given string\n *\n * @throws `illegal_argument` error if the parameter is not a string\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function hexToBytes(hexString: string): Uint8Array {\n // @ts-ignore\n if (hexString instanceof Uint8Array) {\n return Uint8Array.from(hexString)\n }\n if (typeof hexString !== 'string') {\n throw new Error('illegal_argument: a string must be provided for a hex-string to byte array conversion')\n }\n const noPrefix = hexString.startsWith('0x') ? hexString.substring(2) : hexString\n const padded = noPrefix.length % 2 !== 0 ? `0${noPrefix}` : noPrefix\n return fromString(padded.toLowerCase(), 'base16')\n}\n\n/**\n * Converts a Uint8Array input to a hex string\n *\n * @param byteArray - The array to be converted\n * @param prefix - If this is set to true, the resulting hex string will be prefixed with 0x\n *\n * @returns the hex encoding of the input byte array\n *\n * @throws `illegal_argument` error if the input is not a Uint8Array\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function bytesToHex(byteArray: Uint8Array, prefix: boolean = false): string {\n if (!(byteArray instanceof Uint8Array)) {\n throw new Error('illegal_argument: only byte arrays can be converted to hex encoding')\n }\n const result = toString(byteArray, 'base16')\n return prefix ? `0x${result}` : result\n}\n\n/**\n * Converts a base58 string to the Uint8Array it represents.\n *\n * @param s - the string to be converted\n *\n * @throws if the string is not formatted correctly.\n *\n * @public\n */\nexport function base58ToBytes(s: string): Uint8Array {\n return fromString(s, 'base58btc')\n}\n\n/**\n * Converts a base58 string to the Uint8Array it represents.\n *\n * @param s - the string to be converted\n *\n * @throws if the string is not formatted correctly.\n *\n * @public\n */\nexport function bytesToBase58(byteArray: Uint8Array): string {\n return toString(byteArray, 'base58btc')\n}\n\n/**\n * Converts a multibase string to the Uint8Array it represents.\n *\n * @param s - the string to be converted\n *\n * @throws if the string is not formatted correctly.\n *\n * @public\n */\nexport function multibaseKeyToBytes(s: string): Uint8Array {\n if (s.charAt(0) !== 'z') {\n throw new Error('invalid multibase string: string is not base58 encoded (does not start with \"z\")')\n }\n const bytes = fromString(s.substring(1), 'base58btc')\n const props = multibaseKeyToProps(s)\n const keyLength = props.code.length / 2\n\n if (props.keyType === 'RSA') {\n if (bytes[2] !== 48) {\n throw Error('Invalid RSA octet sequence')\n }\n return bytes.slice(2)\n } else if (props.keyType === 'Secp256r1') {\n return bytes.slice(2)\n }\n if (bytes[keyLength] !== 0x01) {\n throw Error(`Invalid multicodec value at position ${keyLength}: ${bytes[keyLength]}`)\n }\n return bytes.slice(keyLength + 1)\n}\n\nexport function multibaseKeyToProps(s: string): MultiCodedLookup {\n if (s.charAt(0) !== 'z') {\n throw new Error('invalid multibase string: string is not base58 encoded (does not start with \"z\")')\n }\n\n const bytes = fromString(s.substring(1), 'base58btc')\n const code = decode(bytes)\n return getMultibasePropsByCode(code)\n}\n\nexport interface MultiCodedLookup {\n code: string\n keyType: TKeyType\n minLegth: number\n maxLength: number\n}\n\nexport const SUPPORTED_KEY_CODECS: MultiCodedLookup[] = [\n { code: 'e7', keyType: 'Secp256k1', minLegth: 33, maxLength: 33 },\n { code: 'ec', keyType: 'X25519', minLegth: 32, maxLength: 32 },\n { code: 'ed', keyType: 'Ed25519', minLegth: 32, maxLength: 32 },\n { code: '1200', keyType: 'Secp256r1', minLegth: 33, maxLength: 34 },\n // {code: \"1201\", keyType: 'Secp384r1', minLegth: 49, maxLength: 49}, //TODO: Implement keytype\n // {code: \"1202\", keyType: 'Secp521r1', minLegth: 65, maxLength: 65}, //TODO: Implement keytype\n { code: '1205', keyType: 'RSA', minLegth: 10, maxLength: 512 }, // TODO: Lookup what we should put here\n]\n\nexport function getMultibasePropsByType(keytype: TKeyType) {\n const props = SUPPORTED_KEY_CODECS.find((row) => row.keyType === keytype)\n if (!props) {\n throw Error(`Multibase not supported (yet) for key type: ${keytype}`)\n }\n return props\n}\n\nexport function getMultibasePropsByCode(code: string | number) {\n const props = SUPPORTED_KEY_CODECS.find((row) => (typeof code === 'string' ? row.code === code : row.code === code.toString(16)))\n if (!props) {\n throw Error(`Multibase not supported (yet) for code: ${code}`)\n }\n return props\n}\n\n/**\n * Converts a Uint8Array to a multibase string.\n *\n * @param b - the array to be converted\n * @param type - the type of the key to be represented\n *\n * @throws if the array is not formatted correctly.\n *\n * @public\n */\nexport function bytesToMultibase(byteArray: Uint8Array, type: TKeyType): string {\n const props = getMultibasePropsByType(type)\n if (byteArray.length < props.minLegth || byteArray.length > props.maxLength) {\n throw Error(`Length of provided bytes (${byteArray.length}) falls outside of the bounds ${props.minLegth} and ${props.maxLength}`)\n }\n const multicodec = '01'\n const varCode = Number.parseInt(props.code, 16)\n const length = props.code.length / 2\n const varType = new Uint8Array(length)\n varint.encode(varCode, varType)\n const bytes = concatArrays([\n varType,\n props.keyType === 'RSA' || props.keyType === 'Secp256r1' ? new Uint8Array(0) : fromString(multicodec, 'base16'),\n byteArray,\n ])\n return 'z' + toString(bytes, 'base58btc')\n}\n\n/**\n * Concatenates a bunch of arrays into one Uint8Array\n * @param arrays - the arrays to be concatenated\n * @param length - the maximum length of the resulting array\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function concat(arrays: ArrayLike<number>[], length?: number): Uint8Array {\n // @ts-ignore\n return concatArrays(arrays, length)\n}\n","var encode_1 = encode\n\nvar MSB = 0x80,\n REST = 0x7f,\n MSBALL = ~REST,\n INT = Math.pow(2, 31)\n\nfunction encode(num, out, offset) {\n out = out || []\n offset = offset || 0\n var oldOffset = offset\n\n while (num >= INT) {\n out[offset++] = (num & 0xff) | MSB\n num /= 128\n }\n while (num & MSBALL) {\n out[offset++] = (num & 0xff) | MSB\n num >>>= 7\n }\n out[offset] = num | 0\n\n encode.bytes = offset - oldOffset + 1\n\n return out\n}\n\nvar decode = read\n\nvar MSB$1 = 0x80,\n REST$1 = 0x7f\n\nfunction read(buf, offset) {\n var res = 0,\n offset = offset || 0,\n shift = 0,\n counter = offset,\n b,\n l = buf.length\n\n do {\n if (counter >= l) {\n read.bytes = 0\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++]\n res += shift < 28 ? (b & REST$1) << shift : (b & REST$1) * Math.pow(2, shift)\n shift += 7\n } while (b >= MSB$1)\n\n read.bytes = counter - offset\n\n return res\n}\n\nvar N1 = Math.pow(2, 7)\nvar N2 = Math.pow(2, 14)\nvar N3 = Math.pow(2, 21)\nvar N4 = Math.pow(2, 28)\nvar N5 = Math.pow(2, 35)\nvar N6 = Math.pow(2, 42)\nvar N7 = Math.pow(2, 49)\nvar N8 = Math.pow(2, 56)\nvar N9 = Math.pow(2, 63)\n\nvar length = function (value) {\n return value < N1\n ? 1\n : value < N2\n ? 2\n : value < N3\n ? 3\n : value < N4\n ? 4\n : value < N5\n ? 5\n : value < N6\n ? 6\n : value < N7\n ? 7\n : value < N8\n ? 8\n : value < N9\n ? 9\n : 10\n}\n\nvar varint = {\n encode: encode_1,\n decode: decode,\n encodingLength: length,\n}\n\nvar _brrp_varint = varint\n\nexport default _brrp_varint\n","import type { BearerTokenArg } from '@sphereon/ssi-types'\n\nexport const bearerToken = async (\n token: BearerTokenArg,\n opts?: {\n includeBearerHeader: boolean\n },\n): Promise<string> => {\n const bearer = typeof token === 'string' ? token : await token()\n\n if (opts?.includeBearerHeader) {\n return `Bearer ${bearer}`\n }\n return bearer\n}\n","import { defaultHasher as defaultHasherOrig, sha256 as sha256Orig } from '@sphereon/ssi-types'\n\n// re-export as these where here before\nexport const sha256 = sha256Orig\nexport const shaHasher = defaultHasherOrig\nexport const defaultHasher = defaultHasherOrig\n","export const flattenArray = <T>(args: { items: Array<T | Array<T>> }): Array<T> => args.items.flat() as Array<T>\n\nexport const flattenMigrations = <T>(args: { migrations: Array<T | Array<T>> }): Array<T> => args.migrations.flat() as Array<T>\n\ntype QueryRunnerType = {\n query(query: string, parameters: any[] | undefined, useStructuredResult: true): Promise<any>\n query(query: string, parameters?: any[]): Promise<any>\n}\n\n/**\n * It should accept the type QueryRunner from the typeorm\n */\nexport const enablePostgresUuidExtension = async (queryRunner: QueryRunnerType) => {\n try {\n await queryRunner.query(`CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";`)\n } catch (error) {\n console.error(\n `Please enable the uuid-ossp.control extension in your PostgreSQL installation. It enables generating V4 UUID and can be found in the postgresql-contrib package`,\n )\n throw error\n }\n}\n","import { Loggers } from '@sphereon/ssi-types'\nimport fetch from 'cross-fetch'\n// @ts-ignore\nimport { imageSize } from 'image-size'\nimport { IImageDimensions, IImageResource } from '../types'\n\n// @ts-ignore\nimport { fromString } from 'uint8arrays/from-string'\n// @ts-ignore\nimport { toString } from 'uint8arrays/to-string'\n\nconst logger = Loggers.DEFAULT.get('sphereon:core')\ntype SizeCalculationResult = {\n width?: number\n height?: number\n orientation?: number\n type?: string\n}\n\n// TODO: here we're handling svg separately, remove this section when image-size starts supporting it in version 2\nconst isSvg = (uint8Array: Uint8Array): boolean => {\n const maxCheckLength: number = Math.min(80, uint8Array.length)\n const initialText: string = toString(uint8Array.subarray(0, maxCheckLength))\n const normalizedText: string = initialText.trim().toLowerCase()\n return normalizedText.startsWith('<svg') || normalizedText.startsWith('<?xml')\n}\n\nconst parseDimension = (dimension: string): number => {\n const match: RegExpMatchArray | null = dimension.match(/^(\\d+(?:\\.\\d+)?)([a-z%]*)$/)\n return match ? parseFloat(match[1]) : 0\n}\n\nconst getSvgDimensions = (uint8Array: Uint8Array): SizeCalculationResult => {\n const svgContent: string = new TextDecoder().decode(uint8Array)\n const widthMatch: RegExpMatchArray | null = svgContent.match(/width=\"([^\"]+)\"/)\n const heightMatch: RegExpMatchArray | null = svgContent.match(/height=\"([^\"]+)\"/)\n const viewBoxMatch: RegExpMatchArray | null = svgContent.match(/viewBox=\"[^\"]*\"/)\n\n let width: number | undefined = widthMatch ? parseDimension(widthMatch[1]) : undefined\n let height: number | undefined = heightMatch ? parseDimension(heightMatch[1]) : undefined\n\n if (viewBoxMatch && (!width || !height)) {\n const parts = viewBoxMatch[0].match(/[\\d\\.]+/g)?.map(Number)\n if (parts && parts.length === 4) {\n const [x, y, viewBoxWidth, viewBoxHeight] = parts\n width = width ?? viewBoxWidth - x\n height = height ?? viewBoxHeight - y\n }\n }\n\n return { width, height, type: 'svg' }\n}\n\n/**\n *\n * @param value can be both (base64) string and Uint8Array\n */\nexport const getImageMediaType = async (value: string | Uint8Array): Promise<string | undefined> => {\n const uint8Array = typeof value === 'string' ? fromString(value, 'base64') : value\n if (isSvg(uint8Array)) {\n return `image/svg+xml`\n }\n const result: SizeCalculationResult = imageSize(uint8Array)\n return `image/${result.type}`\n}\n\n/**\n *\n * @param value can be both (base64) string and Uint8Array\n */\nexport const getImageDimensions = async (value: string | Uint8Array): Promise<IImageDimensions> => {\n const uint8Array = typeof value === 'string' ? fromString(value, 'base64') : value\n const dimensions: SizeCalculationResult = isSvg(uint8Array) ? getSvgDimensions(uint8Array) : imageSize(uint8Array)\n\n if (!dimensions.width || !dimensions.height) {\n return Promise.reject(Error('Unable to get image dimensions'))\n }\n\n return { width: dimensions.width, height: dimensions.height }\n}\n\nexport const downloadImage = async (url: string): Promise<IImageResource | undefined> => {\n logger.debug(`Downloading image from url: ${url}`)\n if (!url) {\n logger.warning(`Could not download image when nu url is provided`)\n return\n } else if (!url.startsWith('http://') && !url.startsWith('https://')) {\n logger.warning(`Could not download image when url does not start with http(s):// : ${url}`)\n return\n }\n try {\n const response: Response = await fetch(url)\n if (!response.ok) {\n logger.error(`Could not download image ${url}. Status: ${response.status} ${response.statusText}`)\n }\n\n const contentType: string | null = response.headers.get('Content-Type')\n const base64Content: string = Buffer.from(await response.arrayBuffer()).toString('base64')\n\n return {\n base64Content,\n contentType: contentType || undefined,\n }\n } catch (e) {\n logger.error(`Could not download image ${url}`, e)\n return undefined\n }\n}\n","import type { IKey, IAgentContext, IKeyManager } from '@veramo/core'\n\nexport function SuppliedSigner(keyRef: Pick<IKey, 'kid'>, context: IAgentContext<IKeyManager>, algorithm: KeyAlgo): Signer {\n return async (data: string | Uint8Array): Promise<string> => {\n const input = data instanceof Object.getPrototypeOf(Uint8Array) ? new TextDecoder().decode(data as Uint8Array) : (data as string)\n\n return await context.agent.keyManagerSign({ keyRef: keyRef.kid, algorithm, data: input })\n }\n}\nexport type Signer = (data: string | Uint8Array) => Promise<EcdsaSignature | string>\n\nexport enum KeyAlgo {\n EDDSA = 'EdDSA',\n RS256 = 'RS256',\n PS256 = 'PS256',\n ES256 = 'ES256',\n ES256K = 'ES256K',\n}\nexport interface EcdsaSignature {\n r: string\n s: string\n recoveryParam?: number | null\n}\n","import { Loggers } from '@sphereon/ssi-types'\nimport { DefaultLinkPriorities, type LinkHandler, type LinkHandlerRegistry } from './types'\n\n/**\n * Class registering multiple LinkHandlers, allowing the developer to use a single compound link handler.\n * @implements {LinkHandler}\n * @implements {LinkHandlerRegistry}\n */\nexport class LinkHandlers implements LinkHandler, LinkHandlerRegistry {\n private readonly _id = '_LinkHandlers'\n private readonly _priority = DefaultLinkPriorities.DEFAULT // Allow someone to create a new implementation with higher priority\n private readonly _handlers: Map<string, LinkHandler> = new Map()\n private readonly _protocols: Set<string | RegExp> = new Set()\n\n get id() {\n return this._id\n }\n\n get priority(): DefaultLinkPriorities {\n return this._priority\n }\n\n get protocols(): Array<string | RegExp> {\n return Array.from(this._protocols)\n }\n\n get(id: string): LinkHandler | undefined {\n return this._handlers.get(id)\n }\n\n supports(urlArg: string | URL): boolean {\n const url = new URL(urlArg)\n // Optimization, does not take into account regexp registrations, but these are taken care of via the handlers\n if (\n !Array.from(this._protocols.values()).some((predicate) =>\n typeof predicate === 'string' ? url.protocol === predicate.toLowerCase() : predicate.test(url.protocol),\n )\n ) {\n return false\n }\n return this.all().some((handler) => handler.supports(url))\n }\n\n async handle(\n url: string | URL,\n opts?: {\n singleHandlerOnly?: boolean\n noExceptionOnNoHandler?: boolean\n } & Record<string, any>,\n ): Promise<void> {\n const { singleHandlerOnly, noExceptionOnNoHandler, ...otherOpts } = opts ?? {}\n const handlers = this.all().filter((handler) => handler.supports(url))\n\n if ((handlers.length === 0 || (handlers.length === 1 && handlers[0].id === LogLinkHandler.ID)) && noExceptionOnNoHandler !== true) {\n return Promise.reject(new Error(`No link handler was registered that supports URL: ${url}`))\n }\n try {\n if (singleHandlerOnly === true) {\n return await handlers[0].handle(url, otherOpts)\n }\n handlers.map(async (handler) => await handler.handle(url, otherOpts))\n } catch (e) {\n console.log(`Linkhandler error: ${e.message}`, e)\n return Promise.reject(e)\n }\n }\n\n add(handler: LinkHandler | LinkHandler[]): this {\n const handlers = Array.isArray(handler) ? handler : [handler]\n handlers.forEach((handler) => {\n this._handlers.set(handler.id, handler)\n handler.protocols.forEach((protocol) =>\n this._protocols.add(typeof protocol === 'string' ? (protocol.endsWith(':') ? protocol : `${protocol}:`) : protocol),\n )\n })\n return this\n }\n\n remove(handler: LinkHandler | string): boolean {\n const result = this._handlers.delete(typeof handler === 'string' ? handler : handler.id)\n this.rePopulateProtocols()\n return result\n }\n\n has(handler: LinkHandler | string): boolean {\n return this._handlers.has(typeof handler === 'string' ? handler : handler.id)\n }\n\n clear(): this {\n this._handlers.clear()\n this.rePopulateProtocols()\n return this\n }\n\n all(): LinkHandler[] {\n // Returns the handlers sorted in priority order, not insertion order\n return Array.from(this._handlers.values()).sort(\n (handler1, handler2) => (handler1.priority ?? DefaultLinkPriorities.DEFAULT) - (handler2.priority ?? DefaultLinkPriorities.DEFAULT),\n )\n }\n\n private rePopulateProtocols(): void {\n this._protocols.clear()\n this.all().forEach((handler) => handler.protocols.forEach((protocol) => this._protocols.add(protocol)))\n }\n}\n\n/**\n * LinkHandlerAdapter is an abstract class that implements the LinkHandler interface. It provides basic functionality\n * for handling links and can be extended to create custom link handler.\n *\n * @abstract\n * @implements {LinkHandler}\n */\nexport abstract class LinkHandlerAdapter implements LinkHandler {\n private readonly _id: string\n private _priority: number | DefaultLinkPriorities\n private _protocols: Array<string | RegExp>\n\n protected constructor(args: { id: string; priority?: number | DefaultLinkPriorities; protocols?: Array<string | RegExp> }) {\n this._id = args.id\n this._priority = args.priority ?? DefaultLinkPriorities.DEFAULT\n this._protocols =\n args.protocols?.map((protocol) =>\n typeof protocol !== 'string' ? protocol : protocol.endsWith(':') ? protocol.toLowerCase() : `${protocol.toLowerCase()}:`,\n ) ?? []\n }\n\n get id(): string {\n return this._id\n }\n\n get protocols(): Array<string | RegExp> {\n return this._protocols\n }\n\n protected set protocols(value: Array<string | RegExp>) {\n this._protocols = value\n }\n\n get priority(): number | DefaultLinkPriorities {\n return this._priority\n }\n\n protected set priority(value: number | DefaultLinkPriorities) {\n this._priority = value\n }\n\n handle(url: string | URL, opts?: Record<string, any>): Promise<void> {\n return Promise.reject(new Error(`Adapter does not handle a URL. Please implement`))\n }\n\n supports(urlArg: string | URL): boolean {\n const url = LinkHandlerAdapter.toURL(urlArg)\n return this.protocols.some((predicate) =>\n typeof predicate === 'string' ? url.protocol === predicate.toLowerCase() : predicate.test(url.toString()),\n )\n }\n\n protected static toURL(url: string | URL) {\n return new URL(url)\n }\n}\n\n/**\n * A class that logs links.\n */\nexport class LogLinkHandler extends LinkHandlerAdapter {\n static ID = '_log'\n\n constructor(args?: { priority?: number | DefaultLinkPriorities; protocols?: Array<string | RegExp> }) {\n super({\n id: LogLinkHandler.ID,\n protocols: args?.protocols ?? [/.*/],\n priority: args?.priority ?? DefaultLinkPriorities.LOWEST,\n })\n }\n\n handle(url: string | URL): Promise<void> {\n return Promise.resolve(Loggers.DEFAULT.get(`sphereon:link-handler:${LogLinkHandler.ID}`).log(url))\n }\n}\n","import type { IAgentContext, IPluginMethodMap } from '@veramo/core'\n\nexport enum DefaultLinkPriorities {\n HIGHEST = 0,\n DEFAULT = Number.MAX_VALUE / 2,\n LOWEST = Number.MAX_VALUE,\n}\n\nexport type LinkHandler = {\n id: string\n priority?: number | DefaultLinkPriorities\n supports: (url: string | URL) => boolean\n protocols: Array<string | RegExp>\n handle: (url: string | URL, opts?: Record<string, any>) => Promise<void>\n}\n\nexport type LinkHandlerRegistry = {\n add: (handler: LinkHandler | LinkHandler[]) => LinkHandlerRegistry\n remove: (handler: LinkHandler | string) => boolean\n get: (id: string) => LinkHandler | undefined\n all: () => LinkHandler[]\n has: (handler: LinkHandler | string) => boolean\n clear: () => LinkHandlerRegistry\n}\n\nexport type LinkHandlerEventSource = 'QR' | 'IntentHandler' | 'URL'\n\nexport type LinkHandlerEvent = {\n type: LinkHandlerEventType\n data: LinkHandlerEventData\n}\n\nexport type LinkHandlerEventData = {\n source: LinkHandlerEventSource | string\n url: string | URL\n options?: Record<string, any>\n}\n\nexport const emitLinkHandlerURLEvent = (event: LinkHandlerEventData, context: IAgentContext<any>): Promise<void> => {\n return context.agent.emit(LinkHandlerEventType.LINK_HANDLER_URL, event)\n}\n\nexport enum LinkHandlerEventType {\n LINK_HANDLER_URL = 'link-handler-url',\n}\n\nexport type LinkHandlerEventArgs = LinkHandlerEventData\nexport interface ILinkHandlerPlugin extends IPluginMethodMap {\n linkHandlerHandleURL(args: LinkHandlerEventArgs, context: IAgentContext<ILinkHandlerPlugin>): Promise<void>\n}\n","import type { IAgentContext, IAgentPlugin } from '@veramo/core'\nimport Debug from 'debug'\nimport { type ILinkHandlerPlugin, type LinkHandlerEvent, type LinkHandlerEventArgs, LinkHandlerEventType, LinkHandlers } from '../index'\n\nconst debug = Debug(`sphereon:ssi-sdk:LinkHandler`)\n/**\n * {@inheritDoc ILinkHandlerPlugin}\n */\n\nexport class LinkHandlerPlugin implements IAgentPlugin {\n // readonly schema = schema.IEventLogger\n readonly eventTypes?: Array<LinkHandlerEventType> = []\n readonly handlers: LinkHandlers\n\n readonly methods: ILinkHandlerPlugin = {\n linkHandlerHandleURL: this.linkHandlerHandleURL.bind(this),\n }\n\n constructor(options: { eventTypes?: LinkHandlerEventType[]; handlers: LinkHandlers }) {\n const { eventTypes, handlers } = options\n this.eventTypes = eventTypes\n this.handlers = handlers\n }\n\n public async onEvent(event: LinkHandlerEvent, context: IAgentContext<ILinkHandlerPlugin>): Promise<void> {\n switch (event.type) {\n case LinkHandlerEventType.LINK_HANDLER_URL:\n // Calling the context of the agent to make sure the REST client is called when configured\n await context.agent.linkHandlerHandleURL({ ...event.data })\n break\n default:\n return Promise.reject(Error(`Event type ${event.type} not supported`))\n }\n }\n\n private async linkHandlerHandleURL(args: LinkHandlerEventArgs): Promise<void> {\n const { url, source, options } = args\n debug(`received url '${url} from source ${source}`)\n return await this.handlers.handle(args.url, options)\n }\n}\n"],"mappings":"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","names":["EventLogger","context","namespace","system","subSystemType","logLevel","initiatorType","LOGGERS","Loggers","DEFAULT","args","subSystem","LogLevel","INFO","localListener","event","level","data","type","rest","get","logl","agent","emit","simple","options","logger","eventName","methods","LogMethod","EVENT","eventEmitter","listeners","includes","addListener","logEvent","eventData","JSON","stringify","Promise","reject","Error","result","EventLoggerBuilder","context","namespace","system","subSystem","logLevel","initiatorType","withContext","withNamespace","withSystem","withSubSystem","withLogLevel","withInitiatorType","build","EventLogger","agentContext","agent","PartyCorrelationType","CredentialType","isDefined","arg","asArray","Array","isArray","isIterable","obj","Symbol","iterator","intersect","a","b","setB","Set","filter","x","has","encode_1","encode","MSB","REST","MSBALL","INT","Math","pow","num","out","offset","oldOffset","bytes","decode","read","MSB$1","REST$1","buf","res","shift","counter","b","l","length","RangeError","N1","N2","N3","N4","N5","N6","N7","N8","N9","value","varint","encodingLength","_brrp_varint","decode","varint","MultibaseFormat","hexToMultibase","hex","type","value","bytesToMultibase","hexToBytes","format","keyType","multibaseToHex","multibase","startsWith","Error","props","multibaseKeyToProps","bytesToHex","multibaseKeyToBytes","bytesToBase64url","b","toString","base64ToBytes","s","inputBase64Url","replace","fromString","bytesToBase64","encodeBase64url","decodeBase64url","bytesToUtf8String","stringToUtf8Bytes","encodeJoseBlob","payload","JSON","stringify","decodeJoseBlob","blob","parse","hexString","Uint8Array","from","noPrefix","substring","padded","length","toLowerCase","byteArray","prefix","result","base58ToBytes","bytesToBase58","charAt","bytes","keyLength","code","slice","getMultibasePropsByCode","SUPPORTED_KEY_CODECS","minLegth","maxLength","getMultibasePropsByType","keytype","find","row","multicodec","varCode","Number","parseInt","varType","encode","concatArrays","concat","arrays","bearerToken","token","opts","bearer","includeBearerHeader","import_ssi_types","sha256","sha256Orig","shaHasher","defaultHasherOrig","defaultHasher","flattenArray","args","items","flat","flattenMigrations","migrations","enablePostgresUuidExtension","queryRunner","query","error","console","import_ssi_types","import_from_string","import_to_string","logger","Loggers","DEFAULT","get","isSvg","uint8Array","maxCheckLength","Math","min","length","initialText","toString","subarray","normalizedText","trim","toLowerCase","startsWith","parseDimension","dimension","match","parseFloat","getSvgDimensions","svgContent","TextDecoder","decode","widthMatch","heightMatch","viewBoxMatch","width","undefined","height","parts","map","Number","x","y","viewBoxWidth","viewBoxHeight","type","getImageMediaType","value","fromString","result","imageSize","getImageDimensions","dimensions","Promise","reject","Error","downloadImage","url","debug","warning","response","fetch","ok","error","status","statusText","contentType","headers","base64Content","Buffer","from","arrayBuffer","e","SuppliedSigner","keyRef","context","algorithm","data","input","Object","getPrototypeOf","Uint8Array","TextDecoder","decode","agent","keyManagerSign","kid","KeyAlgo","import_ssi_types","DefaultLinkPriorities","Number","MAX_VALUE","emitLinkHandlerURLEvent","event","context","agent","emit","LinkHandlerEventType","LinkHandlers","_id","_priority","DefaultLinkPriorities","DEFAULT","_handlers","Map","_protocols","Set","id","priority","protocols","Array","from","get","supports","urlArg","url","URL","values","some","predicate","protocol","toLowerCase","test","all","handler","handle","opts","singleHandlerOnly","noExceptionOnNoHandler","otherOpts","handlers","filter","length","LogLinkHandler","ID","Promise","reject","Error","map","e","console","log","message","add","isArray","forEach","set","endsWith","remove","result","delete","rePopulateProtocols","has","clear","sort","handler1","handler2","LinkHandlerAdapter","args","value","toURL","toString","LOWEST","resolve","Loggers","debug","Debug","LinkHandlerPlugin","eventTypes","handlers","methods","linkHandlerHandleURL","bind","options","onEvent","event","context","type","LinkHandlerEventType","LINK_HANDLER_URL","agent","data","Promise","reject","Error","args","url","source","handle"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/loggers/eventLogger/EventLogger.ts","../src/loggers/eventLogger/EventLoggerBuilder.ts","../src/types/context.ts","../src/types/events.ts","../src/utils/generic.ts","../src/utils/encoding.ts","../src/utils/varint/varint.js","../src/utils/bearer-token.ts","../src/utils/hasher.ts","../src/utils/database.ts","../src/utils/image.ts","../src/signers/SuppliedSigner.ts","../src/link-handlers/LinkHandlers.ts","../src/link-handlers/types.ts","../src/link-handlers/agent/LinkHandlerPlugin.ts"],"sourcesContent":["import EventLogger from './loggers/eventLogger/EventLogger'\nimport EventLoggerBuilder from './loggers/eventLogger/EventLoggerBuilder'\n\nexport * from './types'\nexport * from './utils'\nexport { KeyAlgo, SuppliedSigner } from './signers'\nexport * from './link-handlers'\n\nexport { EventLogger, EventLoggerBuilder }\n","import {\n type InitiatorType,\n type ISimpleLogger,\n Loggers,\n LogLevel,\n LogMethod,\n type SimpleLogEvent,\n SimpleLogger,\n type SimpleLogOptions,\n SubSystem,\n System,\n} from '@sphereon/ssi-types'\nimport type { IAgentContext } from '@veramo/core'\nimport type { EventLoggerArgs, LogEventType, LoggingEvent } from '../../types'\n\nclass EventLogger {\n private readonly context?: IAgentContext<any>\n private readonly namespace: string\n private readonly system?: System\n private readonly subSystemType?: SubSystem\n private readonly logLevel: LogLevel\n private readonly initiatorType?: InitiatorType\n private static readonly LOGGERS = Loggers.DEFAULT\n\n constructor(args: EventLoggerArgs) {\n const { context, namespace = 'sphereon:ssi-sdk:EventLogger', system, subSystem, logLevel = LogLevel.INFO, initiatorType } = args\n\n this.context = context\n this.namespace = namespace\n this.system = system\n this.subSystemType = subSystem\n this.logLevel = logLevel\n this.initiatorType = initiatorType\n }\n\n private localListener(event: SimpleLogEvent) {\n const { level, data, type, ...rest } = event\n EventLogger.LOGGERS.get(this.namespace).logl(level ?? this.logLevel ?? LogLevel.INFO, data, {\n ...rest,\n ...(this.system && { system: this.system }),\n ...(this.subSystemType && { subSystem: this.subSystemType }),\n })\n if (this.context?.agent) {\n void this.context.agent.emit(type, event)\n }\n }\n\n public simple = (options?: Omit<SimpleLogOptions, 'namespace'>): ISimpleLogger<unknown> => {\n const logger = EventLogger.LOGGERS.options(\n this.namespace,\n options ?? {\n eventName: this.namespace,\n methods: [LogMethod.EVENT],\n },\n ).get(this.namespace) as SimpleLogger\n if (!logger.eventEmitter.listeners(logger.options.eventName ?? this.namespace).includes(this.localListener)) {\n logger.eventEmitter.addListener(logger.options.eventName ?? this.namespace, this.localListener)\n }\n return logger\n }\n\n public logEvent = async (event: LoggingEvent): Promise<void> => {\n const eventData = await this.eventData(event)\n EventLogger.LOGGERS.get(this.namespace).logl(eventData.level ?? LogLevel.INFO, JSON.stringify(eventData), eventData)\n if (this.context?.agent) {\n await this.context.agent.emit(event.type, eventData)\n }\n }\n\n private eventData = async (event: LoggingEvent): Promise<LogEventType> => {\n if (!this.system && !event.data.system) {\n return Promise.reject(Error('Required system is not present'))\n }\n\n if (!this.subSystemType && !event.data.subSystemType) {\n return Promise.reject(Error('Required sub system type is not present'))\n }\n\n const result = {\n ...event.data,\n ...(!event.data.level && { level: this.logLevel }),\n ...(!event.data.system && { system: this.system }),\n ...(!event.data.subSystemType && { subSystemType: this.subSystemType }),\n ...(!event.data.initiatorType && { initiatorType: this.initiatorType }),\n }\n return result\n }\n}\n\nexport default EventLogger\n","import { InitiatorType, LogLevel, SubSystem, System } from '@sphereon/ssi-types'\nimport type { IAgentContext } from '@veramo/core'\nimport EventLogger from './EventLogger'\n\nclass EventLoggerBuilder {\n private context?: IAgentContext<any>\n private namespace?: string\n private system?: System\n private subSystem?: SubSystem\n private logLevel?: LogLevel\n private initiatorType?: InitiatorType\n\n withContext(context: IAgentContext<any>): this {\n this.context = context\n return this\n }\n\n withNamespace(namespace: string): this {\n this.namespace = namespace\n return this\n }\n\n withSystem(system: System): this {\n this.system = system\n return this\n }\n\n withSubSystem(subSystem: SubSystem): this {\n this.subSystem = subSystem\n return this\n }\n\n withLogLevel(logLevel: LogLevel): this {\n this.logLevel = logLevel\n return this\n }\n\n withInitiatorType(initiatorType: InitiatorType): this {\n this.initiatorType = initiatorType\n return this\n }\n\n public build(): EventLogger {\n return new EventLogger({\n context: this.context,\n namespace: this.namespace,\n system: this.system,\n subSystem: this.subSystem,\n logLevel: this.logLevel,\n initiatorType: this.initiatorType,\n })\n }\n}\n\nexport default EventLoggerBuilder\n","import type { IAgentContext, IPluginMethodMap, TAgent } from '@veramo/core'\n\nexport function agentContext<TAgentTypes extends IPluginMethodMap>(agent: TAgent<TAgentTypes>): IAgentContext<TAgentTypes> {\n return {\n agent,\n }\n}\n","import {\n type ActionSubType,\n ActionType,\n InitiatorType,\n LoggingEventType,\n LogLevel,\n type SimpleLogEvent,\n SubSystem,\n System,\n SystemCorrelationIdType,\n} from '@sphereon/ssi-types'\nimport { IAgentContext } from '@veramo/core'\n\nexport enum PartyCorrelationType {\n DID = 'did',\n URL = 'url',\n EMAIL = 'email',\n HOSTNAME = 'hostname',\n PHONE = 'phone',\n}\n\nexport type AuditLoggingEvent = Omit<SimpleLogEvent, 'type' | 'data'> & {\n id: string\n type: LoggingEventType.AUDIT\n // timestamp: Date\n // level: LogLevel\n correlationId: string\n system: System\n subSystemType: SubSystem\n actionType: ActionType\n actionSubType: ActionSubType\n initiatorType: InitiatorType\n systemCorrelationIdType?: SystemCorrelationIdType\n systemCorrelationId?: string\n systemAlias?: string\n partyCorrelationType?: PartyCorrelationType\n partyCorrelationId?: string\n partyAlias?: string\n description: string\n data?: any\n // diagnosticData?: any\n}\n\nexport enum CredentialType {\n JSON_LD = 'JSON_LD',\n JWT = 'JWT',\n SD_JWT = 'SD_JWT',\n MSO_MDOC = 'MSO_MDOC',\n}\n\n//TODO the fields credentialType, data, originalCredential and credentialHash should be required in this type\n// create a general type that can be shared between AuditLoggingEvent and ActivityLoggingEvent\nexport type ActivityLoggingEvent = Omit<SimpleLogEvent, 'data' | 'type'> & {\n id: string\n type: LoggingEventType.ACTIVITY\n originalCredential?: string\n credentialHash?: string\n parentCredentialHash?: string\n credentialType?: CredentialType\n sharePurpose?: string\n correlationId: string\n system: System\n subSystemType: SubSystem\n actionType: ActionType\n actionSubType: ActionSubType\n initiatorType: InitiatorType\n systemCorrelationIdType?: SystemCorrelationIdType\n systemCorrelationId?: string\n systemAlias?: string\n partyCorrelationType?: PartyCorrelationType\n partyCorrelationId?: string\n partyAlias?: string\n description: string\n data?: any\n}\n\nexport type PartialAuditLoggingEvent = Partial<AuditLoggingEvent>\n\nexport type PartialActivityLoggingEvent = Partial<ActivityLoggingEvent>\n\nexport type NonPersistedAuditLoggingEvent = Omit<\n AuditLoggingEvent,\n 'id' | 'timestamp' | 'level' | 'correlationId' | 'system' | 'subSystemType' | 'initiatorType' | 'type'\n> & {\n level?: LogLevel\n correlationId?: string\n system?: System\n subSystemType?: SubSystem\n initiatorType?: InitiatorType\n}\n\nexport type NonPersistedActivityLoggingEvent = Omit<\n ActivityLoggingEvent,\n 'id' | 'timestamp' | 'level' | 'correlationId' | 'system' | 'subSystemType' | 'initiatorType' | 'type'\n> & {\n level?: LogLevel\n correlationId?: string\n system?: System\n subSystemType?: SubSystem\n initiatorType?: InitiatorType\n credentialType?: CredentialType\n sharePurpose?: string\n}\n\nexport type LoggingEvent = {\n type: LoggingEventType\n data: LogEventType\n}\n\nexport type LogEventType = NonPersistedAuditLoggingEvent | NonPersistedActivityLoggingEvent\n\nexport type EventLoggerArgs = {\n context?: IAgentContext<any>\n namespace?: string\n system?: System\n subSystem?: SubSystem\n logLevel?: LogLevel\n initiatorType?: InitiatorType\n}\n","/**\n * Checks if a variable is defined and not null.\n * After this check, typescript sees the variable as defined.\n *\n * @param arg - The input to be verified\n *\n * @returns true if the input variable is defined.\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function isDefined<T>(arg: T): arg is Exclude<T, null | undefined> {\n return arg !== null && typeof arg !== 'undefined'\n}\n\n/**\n * Ensures that a given input is an array. If the input is a single item, it is converted to an array with a single\n * entry.\n *\n * @param arg - a variable that needs to be converted to array\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function asArray<T>(arg?: T | T[] | any): (T | any)[] {\n return isDefined(arg) ? (Array.isArray(arg) ? arg : [arg]) : []\n}\n\n/**\n * Checks if an object is iterable (can be used for `for..of`)\n * @param obj - the variable to be checked\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function isIterable<T>(obj: any): obj is Iterable<T> {\n return obj != null && typeof obj[Symbol.iterator] === 'function'\n}\n/**\n * Compute the intersection of two arrays\n * Elements are compared by reference so object types will appear as unique even if they contain the same data.\n *\n * @param a - first array\n * @param b - second array\n * @returns The intersection of the two arrays.\n *\n * @public\n */\nexport function intersect<T>(a: T[] | any, b: any[] | any): T[] {\n const setB = new Set<T>(asArray(b))\n return [...new Set(asArray(a))].filter((x) => setB.has(x))\n}\n","import type { TKeyType } from '@veramo/core'\n// @ts-ignore\nimport { concat as concatArrays } from 'uint8arrays/concat'\n// @ts-ignore\nimport { fromString } from 'uint8arrays/from-string'\n// @ts-ignore\nimport { toString } from 'uint8arrays/to-string'\nimport varint from './varint/varint'\nconst { decode } = varint\n\nexport enum MultibaseFormat {\n BASE58 = 'z',\n}\n\nexport function hexToMultibase(hex: string, type: TKeyType): { value: string; format: MultibaseFormat; keyType: TKeyType } {\n return { value: bytesToMultibase(hexToBytes(hex), type), format: MultibaseFormat.BASE58, keyType: type }\n}\n\nexport function multibaseToHex(multibase: string): { value: string; keyType: TKeyType; format: MultibaseFormat } {\n if (!multibase.startsWith(MultibaseFormat.BASE58)) {\n throw new Error('Only base58 supported for now using multibase!')\n }\n\n const props = multibaseKeyToProps(multibase)\n return { value: bytesToHex(multibaseKeyToBytes(multibase)), keyType: props.keyType, format: MultibaseFormat.BASE58 }\n}\n\n/**\n * Converts a Uint8Array to a base64url string\n * @param b - the array to be converted\n *\n * @public\n */\nexport function bytesToBase64url(b: Uint8Array): string {\n return toString(b, 'base64url')\n}\n\n/**\n * Converts a base64url string to the Uint8Array it represents.\n *\n * @param s - the string to be converted\n *\n * @throws if the string is not formatted correctly.\n *\n * @public\n */\nexport function base64ToBytes(s: string): Uint8Array {\n const inputBase64Url = s.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '')\n return fromString(inputBase64Url, 'base64url')\n}\n/**\n * Encodes a Uint8Array to a base64 string representation with padding.\n * @param b - the byte array to convert\n *\n * @public\n */\nexport function bytesToBase64(b: Uint8Array): string {\n return toString(b, 'base64pad')\n}\n\n/**\n * Encodes the bytes of an input string to base64url\n * @param s - the original string\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function encodeBase64url(s: string): string {\n return bytesToBase64url(fromString(s))\n}\n\n/**\n * Decodes a base64url string to a utf8 string represented by the same bytes.\n * @param s - the base64url string to be decoded\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function decodeBase64url(s: string): string {\n return toString(base64ToBytes(s))\n}\n\n/**\n * Builds a string from a Uint8Array using the utf-8 encoding.\n * @param b - the array to be converted\n *\n * @public\n */\nexport function bytesToUtf8String(b: Uint8Array): string {\n return toString(b, 'utf-8')\n}\n\n/**\n * Encodes a string to a Uint8Array using the utf-8 encoding.\n * @param s - the string to be encoded\n *\n * @public\n */\nexport function stringToUtf8Bytes(s: string): Uint8Array {\n return fromString(s, 'utf-8')\n}\n\n/**\n * Stringifies a JSON object and encodes the bytes of the resulting string to a base64url representation.\n * @param payload - the object to be encoded\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function encodeJoseBlob(payload: {}) {\n return toString(fromString(JSON.stringify(payload), 'utf-8'), 'base64url')\n}\n\n/**\n * Decodes a base64url string representing stringified JSON to a JSON object.\n *\n * @param blob - The base64url encoded stringified JSON to be decoded\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function decodeJoseBlob(blob: string) {\n return JSON.parse(toString(fromString(blob, 'base64url'), 'utf-8'))\n}\n\n/**\n * Converts a hex string (with or without prefix) to a byte array (Uint8Array)\n *\n * @param hexString - The string representing the encoding\n * @returns the `Uint8Array` represented by the given string\n *\n * @throws `illegal_argument` error if the parameter is not a string\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function hexToBytes(hexString: string): Uint8Array {\n // @ts-ignore\n if (hexString instanceof Uint8Array) {\n return Uint8Array.from(hexString)\n }\n if (typeof hexString !== 'string') {\n throw new Error('illegal_argument: a string must be provided for a hex-string to byte array conversion')\n }\n const noPrefix = hexString.startsWith('0x') ? hexString.substring(2) : hexString\n const padded = noPrefix.length % 2 !== 0 ? `0${noPrefix}` : noPrefix\n return fromString(padded.toLowerCase(), 'base16')\n}\n\n/**\n * Converts a Uint8Array input to a hex string\n *\n * @param byteArray - The array to be converted\n * @param prefix - If this is set to true, the resulting hex string will be prefixed with 0x\n *\n * @returns the hex encoding of the input byte array\n *\n * @throws `illegal_argument` error if the input is not a Uint8Array\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function bytesToHex(byteArray: Uint8Array, prefix: boolean = false): string {\n if (!(byteArray instanceof Uint8Array)) {\n throw new Error('illegal_argument: only byte arrays can be converted to hex encoding')\n }\n const result = toString(byteArray, 'base16')\n return prefix ? `0x${result}` : result\n}\n\n/**\n * Converts a base58 string to the Uint8Array it represents.\n *\n * @param s - the string to be converted\n *\n * @throws if the string is not formatted correctly.\n *\n * @public\n */\nexport function base58ToBytes(s: string): Uint8Array {\n return fromString(s, 'base58btc')\n}\n\n/**\n * Converts a base58 string to the Uint8Array it represents.\n *\n * @param s - the string to be converted\n *\n * @throws if the string is not formatted correctly.\n *\n * @public\n */\nexport function bytesToBase58(byteArray: Uint8Array): string {\n return toString(byteArray, 'base58btc')\n}\n\n/**\n * Converts a multibase string to the Uint8Array it represents.\n *\n * @param s - the string to be converted\n *\n * @throws if the string is not formatted correctly.\n *\n * @public\n */\nexport function multibaseKeyToBytes(s: string): Uint8Array {\n if (s.charAt(0) !== 'z') {\n throw new Error('invalid multibase string: string is not base58 encoded (does not start with \"z\")')\n }\n const bytes = fromString(s.substring(1), 'base58btc')\n const props = multibaseKeyToProps(s)\n const keyLength = props.code.length / 2\n\n if (props.keyType === 'RSA') {\n if (bytes[2] !== 48) {\n throw Error('Invalid RSA octet sequence')\n }\n return bytes.slice(2)\n } else if (props.keyType === 'Secp256r1') {\n return bytes.slice(2)\n }\n if (bytes[keyLength] !== 0x01) {\n throw Error(`Invalid multicodec value at position ${keyLength}: ${bytes[keyLength]}`)\n }\n return bytes.slice(keyLength + 1)\n}\n\nexport function multibaseKeyToProps(s: string): MultiCodedLookup {\n if (s.charAt(0) !== 'z') {\n throw new Error('invalid multibase string: string is not base58 encoded (does not start with \"z\")')\n }\n\n const bytes = fromString(s.substring(1), 'base58btc')\n const code = decode(bytes)\n return getMultibasePropsByCode(code)\n}\n\nexport interface MultiCodedLookup {\n code: string\n keyType: TKeyType\n minLegth: number\n maxLength: number\n}\n\nexport const SUPPORTED_KEY_CODECS: MultiCodedLookup[] = [\n { code: 'e7', keyType: 'Secp256k1', minLegth: 33, maxLength: 33 },\n { code: 'ec', keyType: 'X25519', minLegth: 32, maxLength: 32 },\n { code: 'ed', keyType: 'Ed25519', minLegth: 32, maxLength: 32 },\n { code: '1200', keyType: 'Secp256r1', minLegth: 33, maxLength: 34 },\n // {code: \"1201\", keyType: 'Secp384r1', minLegth: 49, maxLength: 49}, //TODO: Implement keytype\n // {code: \"1202\", keyType: 'Secp521r1', minLegth: 65, maxLength: 65}, //TODO: Implement keytype\n { code: '1205', keyType: 'RSA', minLegth: 10, maxLength: 512 }, // TODO: Lookup what we should put here\n]\n\nexport function getMultibasePropsByType(keytype: TKeyType) {\n const props = SUPPORTED_KEY_CODECS.find((row) => row.keyType === keytype)\n if (!props) {\n throw Error(`Multibase not supported (yet) for key type: ${keytype}`)\n }\n return props\n}\n\nexport function getMultibasePropsByCode(code: string | number) {\n const props = SUPPORTED_KEY_CODECS.find((row) => (typeof code === 'string' ? row.code === code : row.code === code.toString(16)))\n if (!props) {\n throw Error(`Multibase not supported (yet) for code: ${code}`)\n }\n return props\n}\n\n/**\n * Converts a Uint8Array to a multibase string.\n *\n * @param b - the array to be converted\n * @param type - the type of the key to be represented\n *\n * @throws if the array is not formatted correctly.\n *\n * @public\n */\nexport function bytesToMultibase(byteArray: Uint8Array, type: TKeyType): string {\n const props = getMultibasePropsByType(type)\n if (byteArray.length < props.minLegth || byteArray.length > props.maxLength) {\n throw Error(`Length of provided bytes (${byteArray.length}) falls outside of the bounds ${props.minLegth} and ${props.maxLength}`)\n }\n const multicodec = '01'\n const varCode = Number.parseInt(props.code, 16)\n const length = props.code.length / 2\n const varType = new Uint8Array(length)\n varint.encode(varCode, varType)\n const bytes = concatArrays([\n varType,\n props.keyType === 'RSA' || props.keyType === 'Secp256r1' ? new Uint8Array(0) : fromString(multicodec, 'base16'),\n byteArray,\n ])\n return 'z' + toString(bytes, 'base58btc')\n}\n\n/**\n * Concatenates a bunch of arrays into one Uint8Array\n * @param arrays - the arrays to be concatenated\n * @param length - the maximum length of the resulting array\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function concat(arrays: ArrayLike<number>[], length?: number): Uint8Array {\n // @ts-ignore\n return concatArrays(arrays, length)\n}\n","var encode_1 = encode\n\nvar MSB = 0x80,\n REST = 0x7f,\n MSBALL = ~REST,\n INT = Math.pow(2, 31)\n\nfunction encode(num, out, offset) {\n out = out || []\n offset = offset || 0\n var oldOffset = offset\n\n while (num >= INT) {\n out[offset++] = (num & 0xff) | MSB\n num /= 128\n }\n while (num & MSBALL) {\n out[offset++] = (num & 0xff) | MSB\n num >>>= 7\n }\n out[offset] = num | 0\n\n encode.bytes = offset - oldOffset + 1\n\n return out\n}\n\nvar decode = read\n\nvar MSB$1 = 0x80,\n REST$1 = 0x7f\n\nfunction read(buf, offset) {\n var res = 0,\n offset = offset || 0,\n shift = 0,\n counter = offset,\n b,\n l = buf.length\n\n do {\n if (counter >= l) {\n read.bytes = 0\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++]\n res += shift < 28 ? (b & REST$1) << shift : (b & REST$1) * Math.pow(2, shift)\n shift += 7\n } while (b >= MSB$1)\n\n read.bytes = counter - offset\n\n return res\n}\n\nvar N1 = Math.pow(2, 7)\nvar N2 = Math.pow(2, 14)\nvar N3 = Math.pow(2, 21)\nvar N4 = Math.pow(2, 28)\nvar N5 = Math.pow(2, 35)\nvar N6 = Math.pow(2, 42)\nvar N7 = Math.pow(2, 49)\nvar N8 = Math.pow(2, 56)\nvar N9 = Math.pow(2, 63)\n\nvar length = function (value) {\n return value < N1\n ? 1\n : value < N2\n ? 2\n : value < N3\n ? 3\n : value < N4\n ? 4\n : value < N5\n ? 5\n : value < N6\n ? 6\n : value < N7\n ? 7\n : value < N8\n ? 8\n : value < N9\n ? 9\n : 10\n}\n\nvar varint = {\n encode: encode_1,\n decode: decode,\n encodingLength: length,\n}\n\nvar _brrp_varint = varint\n\nexport default _brrp_varint\n","import type { BearerTokenArg } from '@sphereon/ssi-types'\n\nexport const bearerToken = async (\n token: BearerTokenArg,\n opts?: {\n includeBearerHeader: boolean\n },\n): Promise<string> => {\n const bearer = typeof token === 'string' ? token : await token()\n\n if (opts?.includeBearerHeader) {\n return `Bearer ${bearer}`\n }\n return bearer\n}\n","import { defaultHasher as defaultHasherOrig, sha256 as sha256Orig } from '@sphereon/ssi-types'\n\n// re-export as these where here before\nexport const sha256 = sha256Orig\nexport const shaHasher = defaultHasherOrig\nexport const defaultHasher = defaultHasherOrig\n","export const flattenArray = <T>(args: { items: Array<T | Array<T>> }): Array<T> => args.items.flat() as Array<T>\n\nexport const flattenMigrations = <T>(args: { migrations: Array<T | Array<T>> }): Array<T> => args.migrations.flat() as Array<T>\n\ntype QueryRunnerType = {\n query(query: string, parameters: any[] | undefined, useStructuredResult: true): Promise<any>\n query(query: string, parameters?: any[]): Promise<any>\n}\n\n/**\n * It should accept the type QueryRunner from the typeorm\n */\nexport const enablePostgresUuidExtension = async (queryRunner: QueryRunnerType) => {\n try {\n await queryRunner.query(`CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";`)\n } catch (error) {\n console.error(\n `Please enable the uuid-ossp.control extension in your PostgreSQL installation. It enables generating V4 UUID and can be found in the postgresql-contrib package`,\n )\n throw error\n }\n}\n","import { Loggers } from '@sphereon/ssi-types'\nimport fetch from 'cross-fetch'\n// @ts-ignore\nimport { imageSize } from 'image-size'\nimport { IImageDimensions, IImageResource } from '../types'\n\n// @ts-ignore\nimport { fromString } from 'uint8arrays/from-string'\n// @ts-ignore\nimport { toString } from 'uint8arrays/to-string'\n\nconst logger = Loggers.DEFAULT.get('sphereon:core')\ntype SizeCalculationResult = {\n width?: number\n height?: number\n orientation?: number\n type?: string\n}\n\n// TODO: here we're handling svg separately, remove this section when image-size starts supporting it in version 2\nconst isSvg = (uint8Array: Uint8Array): boolean => {\n const maxCheckLength: number = Math.min(80, uint8Array.length)\n const initialText: string = toString(uint8Array.subarray(0, maxCheckLength))\n const normalizedText: string = initialText.trim().toLowerCase()\n return normalizedText.startsWith('<svg') || normalizedText.startsWith('<?xml')\n}\n\nconst parseDimension = (dimension: string): number => {\n const match: RegExpMatchArray | null = dimension.match(/^(\\d+(?:\\.\\d+)?)([a-z%]*)$/)\n return match ? parseFloat(match[1]) : 0\n}\n\nconst getSvgDimensions = (uint8Array: Uint8Array): SizeCalculationResult => {\n const svgContent: string = new TextDecoder().decode(uint8Array)\n const widthMatch: RegExpMatchArray | null = svgContent.match(/width=\"([^\"]+)\"/)\n const heightMatch: RegExpMatchArray | null = svgContent.match(/height=\"([^\"]+)\"/)\n const viewBoxMatch: RegExpMatchArray | null = svgContent.match(/viewBox=\"[^\"]*\"/)\n\n let width: number | undefined = widthMatch ? parseDimension(widthMatch[1]) : undefined\n let height: number | undefined = heightMatch ? parseDimension(heightMatch[1]) : undefined\n\n if (viewBoxMatch && (!width || !height)) {\n const parts = viewBoxMatch[0].match(/[\\d\\.]+/g)?.map(Number)\n if (parts && parts.length === 4) {\n const [x, y, viewBoxWidth, viewBoxHeight] = parts\n width = width ?? viewBoxWidth - x\n height = height ?? viewBoxHeight - y\n }\n }\n\n return { width, height, type: 'svg' }\n}\n\n/**\n *\n * @param value can be both (base64) string and Uint8Array\n */\nexport const getImageMediaType = async (value: string | Uint8Array): Promise<string | undefined> => {\n const uint8Array = typeof value === 'string' ? fromString(value, 'base64') : value\n if (isSvg(uint8Array)) {\n return `image/svg+xml`\n }\n const result: SizeCalculationResult = imageSize(uint8Array)\n return `image/${result.type}`\n}\n\n/**\n *\n * @param value can be both (base64) string and Uint8Array\n */\nexport const getImageDimensions = async (value: string | Uint8Array): Promise<IImageDimensions> => {\n const uint8Array = typeof value === 'string' ? fromString(value, 'base64') : value\n const dimensions: SizeCalculationResult = isSvg(uint8Array) ? getSvgDimensions(uint8Array) : imageSize(uint8Array)\n\n if (!dimensions.width || !dimensions.height) {\n return Promise.reject(Error('Unable to get image dimensions'))\n }\n\n return { width: dimensions.width, height: dimensions.height }\n}\n\nexport const downloadImage = async (url: string): Promise<IImageResource | undefined> => {\n logger.debug(`Downloading image from url: ${url}`)\n if (!url) {\n logger.warning(`Could not download image when nu url is provided`)\n return\n } else if (!url.startsWith('http://') && !url.startsWith('https://')) {\n logger.warning(`Could not download image when url does not start with http(s):// : ${url}`)\n return\n }\n try {\n const response: Response = await fetch(url)\n if (!response.ok) {\n logger.error(`Could not download image ${url}. Status: ${response.status} ${response.statusText}`)\n }\n\n const contentType: string | null = response.headers.get('Content-Type')\n const base64Content: string = Buffer.from(await response.arrayBuffer()).toString('base64')\n\n return {\n base64Content,\n contentType: contentType || undefined,\n }\n } catch (e) {\n logger.error(`Could not download image ${url}`, e)\n return undefined\n }\n}\n","import type { IKey, IAgentContext, IKeyManager } from '@veramo/core'\n\nexport function SuppliedSigner(keyRef: Pick<IKey, 'kid'>, context: IAgentContext<IKeyManager>, algorithm: KeyAlgo): Signer {\n return async (data: string | Uint8Array): Promise<string> => {\n const input = data instanceof Object.getPrototypeOf(Uint8Array) ? new TextDecoder().decode(data as Uint8Array) : (data as string)\n\n return await context.agent.keyManagerSign({ keyRef: keyRef.kid, algorithm, data: input })\n }\n}\nexport type Signer = (data: string | Uint8Array) => Promise<EcdsaSignature | string>\n\nexport enum KeyAlgo {\n EDDSA = 'EdDSA',\n RS256 = 'RS256',\n PS256 = 'PS256',\n ES256 = 'ES256',\n ES256K = 'ES256K',\n}\nexport interface EcdsaSignature {\n r: string\n s: string\n recoveryParam?: number | null\n}\n","import { Loggers } from '@sphereon/ssi-types'\nimport { DefaultLinkPriorities, type LinkHandler, type LinkHandlerRegistry } from './types'\n\n/**\n * Class registering multiple LinkHandlers, allowing the developer to use a single compound link handler.\n * @implements {LinkHandler}\n * @implements {LinkHandlerRegistry}\n */\nexport class LinkHandlers implements LinkHandler, LinkHandlerRegistry {\n private readonly _id = '_LinkHandlers'\n private readonly _priority = DefaultLinkPriorities.DEFAULT // Allow someone to create a new implementation with higher priority\n private readonly _handlers: Map<string, LinkHandler> = new Map()\n private readonly _protocols: Set<string | RegExp> = new Set()\n\n get id() {\n return this._id\n }\n\n get priority(): DefaultLinkPriorities {\n return this._priority\n }\n\n get protocols(): Array<string | RegExp> {\n return Array.from(this._protocols)\n }\n\n get(id: string): LinkHandler | undefined {\n return this._handlers.get(id)\n }\n\n supports(urlArg: string | URL): boolean {\n const url = new URL(urlArg)\n // Optimization, does not take into account regexp registrations, but these are taken care of via the handlers\n if (\n !Array.from(this._protocols.values()).some((predicate) =>\n typeof predicate === 'string' ? url.protocol === predicate.toLowerCase() : predicate.test(url.protocol),\n )\n ) {\n return false\n }\n return this.all().some((handler) => handler.supports(url))\n }\n\n async handle(\n url: string | URL,\n opts?: {\n singleHandlerOnly?: boolean\n noExceptionOnNoHandler?: boolean\n } & Record<string, any>,\n ): Promise<void> {\n const { singleHandlerOnly, noExceptionOnNoHandler, ...otherOpts } = opts ?? {}\n const handlers = this.all().filter((handler) => handler.supports(url))\n\n if ((handlers.length === 0 || (handlers.length === 1 && handlers[0].id === LogLinkHandler.ID)) && noExceptionOnNoHandler !== true) {\n return Promise.reject(new Error(`No link handler was registered that supports URL: ${url}`))\n }\n try {\n if (singleHandlerOnly === true) {\n await handlers[0].handle(url, otherOpts)\n } else {\n await Promise.all(handlers.map((handler) => handler.handle(url, otherOpts)))\n }\n } catch (e) {\n console.log(`Linkhandler error: ${e.message}`, e)\n return Promise.reject(e)\n }\n }\n\n add(handler: LinkHandler | LinkHandler[]): this {\n const handlers = Array.isArray(handler) ? handler : [handler]\n handlers.forEach((handler) => {\n this._handlers.set(handler.id, handler)\n handler.protocols.forEach((protocol) =>\n this._protocols.add(typeof protocol === 'string' ? (protocol.endsWith(':') ? protocol : `${protocol}:`) : protocol),\n )\n })\n return this\n }\n\n remove(handler: LinkHandler | string): boolean {\n const result = this._handlers.delete(typeof handler === 'string' ? handler : handler.id)\n this.rePopulateProtocols()\n return result\n }\n\n has(handler: LinkHandler | string): boolean {\n return this._handlers.has(typeof handler === 'string' ? handler : handler.id)\n }\n\n clear(): this {\n this._handlers.clear()\n this.rePopulateProtocols()\n return this\n }\n\n all(): LinkHandler[] {\n // Returns the handlers sorted in priority order, not insertion order\n return Array.from(this._handlers.values()).sort(\n (handler1, handler2) => (handler1.priority ?? DefaultLinkPriorities.DEFAULT) - (handler2.priority ?? DefaultLinkPriorities.DEFAULT),\n )\n }\n\n private rePopulateProtocols(): void {\n this._protocols.clear()\n this.all().forEach((handler) => handler.protocols.forEach((protocol) => this._protocols.add(protocol)))\n }\n}\n\n/**\n * LinkHandlerAdapter is an abstract class that implements the LinkHandler interface. It provides basic functionality\n * for handling links and can be extended to create custom link handler.\n *\n * @abstract\n * @implements {LinkHandler}\n */\nexport abstract class LinkHandlerAdapter implements LinkHandler {\n private readonly _id: string\n private _priority: number | DefaultLinkPriorities\n private _protocols: Array<string | RegExp>\n\n protected constructor(args: { id: string; priority?: number | DefaultLinkPriorities; protocols?: Array<string | RegExp> }) {\n this._id = args.id\n this._priority = args.priority ?? DefaultLinkPriorities.DEFAULT\n this._protocols =\n args.protocols?.map((protocol) =>\n typeof protocol !== 'string' ? protocol : protocol.endsWith(':') ? protocol.toLowerCase() : `${protocol.toLowerCase()}:`,\n ) ?? []\n }\n\n get id(): string {\n return this._id\n }\n\n get protocols(): Array<string | RegExp> {\n return this._protocols\n }\n\n protected set protocols(value: Array<string | RegExp>) {\n this._protocols = value\n }\n\n get priority(): number | DefaultLinkPriorities {\n return this._priority\n }\n\n protected set priority(value: number | DefaultLinkPriorities) {\n this._priority = value\n }\n\n handle(url: string | URL, opts?: Record<string, any>): Promise<void> {\n return Promise.reject(new Error(`Adapter does not handle a URL. Please implement`))\n }\n\n supports(urlArg: string | URL): boolean {\n const url = LinkHandlerAdapter.toURL(urlArg)\n return this.protocols.some((predicate) =>\n typeof predicate === 'string' ? url.protocol === predicate.toLowerCase() : predicate.test(url.toString()),\n )\n }\n\n protected static toURL(url: string | URL) {\n return new URL(url)\n }\n}\n\n/**\n * A class that logs links.\n */\nexport class LogLinkHandler extends LinkHandlerAdapter {\n static ID = '_log'\n\n constructor(args?: { priority?: number | DefaultLinkPriorities; protocols?: Array<string | RegExp> }) {\n super({\n id: LogLinkHandler.ID,\n protocols: args?.protocols ?? [/.*/],\n priority: args?.priority ?? DefaultLinkPriorities.LOWEST,\n })\n }\n\n handle(url: string | URL): Promise<void> {\n return Promise.resolve(Loggers.DEFAULT.get(`sphereon:link-handler:${LogLinkHandler.ID}`).log(url))\n }\n}\n","import type { IAgentContext, IPluginMethodMap } from '@veramo/core'\n\nexport enum DefaultLinkPriorities {\n HIGHEST = 0,\n DEFAULT = Number.MAX_VALUE / 2,\n LOWEST = Number.MAX_VALUE,\n}\n\nexport type LinkHandler = {\n id: string\n priority?: number | DefaultLinkPriorities\n supports: (url: string | URL) => boolean\n protocols: Array<string | RegExp>\n handle: (url: string | URL, opts?: Record<string, any>) => Promise<void>\n}\n\nexport type LinkHandlerRegistry = {\n add: (handler: LinkHandler | LinkHandler[]) => LinkHandlerRegistry\n remove: (handler: LinkHandler | string) => boolean\n get: (id: string) => LinkHandler | undefined\n all: () => LinkHandler[]\n has: (handler: LinkHandler | string) => boolean\n clear: () => LinkHandlerRegistry\n}\n\nexport type LinkHandlerEventSource = 'QR' | 'IntentHandler' | 'URL'\n\nexport type LinkHandlerEvent = {\n type: LinkHandlerEventType\n data: LinkHandlerEventData\n}\n\nexport type LinkHandlerEventData = {\n source: LinkHandlerEventSource | string\n url: string | URL\n options?: Record<string, any>\n}\n\nexport const emitLinkHandlerURLEvent = async (event: LinkHandlerEventData, context: IAgentContext<any>): Promise<void> => {\n return await context.agent.emit(LinkHandlerEventType.LINK_HANDLER_URL, event)\n}\n\nexport enum LinkHandlerEventType {\n LINK_HANDLER_URL = 'link-handler-url',\n}\n\nexport type LinkHandlerEventArgs = LinkHandlerEventData\nexport interface ILinkHandlerPlugin extends IPluginMethodMap {\n linkHandlerHandleURL(args: LinkHandlerEventArgs, context: IAgentContext<ILinkHandlerPlugin>): Promise<void>\n}\n","import type { IAgentContext, IAgentPlugin } from '@veramo/core'\nimport Debug from 'debug'\nimport { type ILinkHandlerPlugin, type LinkHandlerEvent, type LinkHandlerEventArgs, LinkHandlerEventType, LinkHandlers } from '../index'\n\nconst debug = Debug(`sphereon:ssi-sdk:LinkHandler`)\n/**\n * {@inheritDoc ILinkHandlerPlugin}\n */\n\nexport class LinkHandlerPlugin implements IAgentPlugin {\n // readonly schema = schema.IEventLogger\n readonly eventTypes?: Array<LinkHandlerEventType> = []\n readonly handlers: LinkHandlers\n\n readonly methods: ILinkHandlerPlugin = {\n linkHandlerHandleURL: this.linkHandlerHandleURL.bind(this),\n }\n\n constructor(options: { eventTypes?: LinkHandlerEventType[]; handlers: LinkHandlers }) {\n const { eventTypes, handlers } = options\n this.eventTypes = eventTypes\n this.handlers = handlers\n }\n\n public async onEvent(event: LinkHandlerEvent, context: IAgentContext<ILinkHandlerPlugin>): Promise<void> {\n switch (event.type) {\n case LinkHandlerEventType.LINK_HANDLER_URL:\n // Calling the context of the agent to make sure the REST client is called when configured\n await context.agent.linkHandlerHandleURL({ ...event.data })\n break\n default:\n return Promise.reject(Error(`Event type ${event.type} not supported`))\n }\n }\n\n private async linkHandlerHandleURL(args: LinkHandlerEventArgs): Promise<void> {\n const { url, source, options } = args\n debug(`received url '${url} from source ${source}`)\n return await this.handlers.handle(args.url, options)\n }\n}\n"],"mappings":"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","names":["EventLogger","context","namespace","system","subSystemType","logLevel","initiatorType","LOGGERS","Loggers","DEFAULT","args","subSystem","LogLevel","INFO","localListener","event","level","data","type","rest","get","logl","agent","emit","simple","options","logger","eventName","methods","LogMethod","EVENT","eventEmitter","listeners","includes","addListener","logEvent","eventData","JSON","stringify","Promise","reject","Error","result","EventLoggerBuilder","context","namespace","system","subSystem","logLevel","initiatorType","withContext","withNamespace","withSystem","withSubSystem","withLogLevel","withInitiatorType","build","EventLogger","agentContext","agent","PartyCorrelationType","CredentialType","isDefined","arg","asArray","Array","isArray","isIterable","obj","Symbol","iterator","intersect","a","b","setB","Set","filter","x","has","encode_1","encode","MSB","REST","MSBALL","INT","Math","pow","num","out","offset","oldOffset","bytes","decode","read","MSB$1","REST$1","buf","res","shift","counter","b","l","length","RangeError","N1","N2","N3","N4","N5","N6","N7","N8","N9","value","varint","encodingLength","_brrp_varint","decode","varint","MultibaseFormat","hexToMultibase","hex","type","value","bytesToMultibase","hexToBytes","format","keyType","multibaseToHex","multibase","startsWith","Error","props","multibaseKeyToProps","bytesToHex","multibaseKeyToBytes","bytesToBase64url","b","toString","base64ToBytes","s","inputBase64Url","replace","fromString","bytesToBase64","encodeBase64url","decodeBase64url","bytesToUtf8String","stringToUtf8Bytes","encodeJoseBlob","payload","JSON","stringify","decodeJoseBlob","blob","parse","hexString","Uint8Array","from","noPrefix","substring","padded","length","toLowerCase","byteArray","prefix","result","base58ToBytes","bytesToBase58","charAt","bytes","keyLength","code","slice","getMultibasePropsByCode","SUPPORTED_KEY_CODECS","minLegth","maxLength","getMultibasePropsByType","keytype","find","row","multicodec","varCode","Number","parseInt","varType","encode","concatArrays","concat","arrays","bearerToken","token","opts","bearer","includeBearerHeader","import_ssi_types","sha256","sha256Orig","shaHasher","defaultHasherOrig","defaultHasher","flattenArray","args","items","flat","flattenMigrations","migrations","enablePostgresUuidExtension","queryRunner","query","error","console","import_ssi_types","import_from_string","import_to_string","logger","Loggers","DEFAULT","get","isSvg","uint8Array","maxCheckLength","Math","min","length","initialText","toString","subarray","normalizedText","trim","toLowerCase","startsWith","parseDimension","dimension","match","parseFloat","getSvgDimensions","svgContent","TextDecoder","decode","widthMatch","heightMatch","viewBoxMatch","width","undefined","height","parts","map","Number","x","y","viewBoxWidth","viewBoxHeight","type","getImageMediaType","value","fromString","result","imageSize","getImageDimensions","dimensions","Promise","reject","Error","downloadImage","url","debug","warning","response","fetch","ok","error","status","statusText","contentType","headers","base64Content","Buffer","from","arrayBuffer","e","SuppliedSigner","keyRef","context","algorithm","data","input","Object","getPrototypeOf","Uint8Array","TextDecoder","decode","agent","keyManagerSign","kid","KeyAlgo","import_ssi_types","DefaultLinkPriorities","Number","MAX_VALUE","emitLinkHandlerURLEvent","event","context","agent","emit","LinkHandlerEventType","LinkHandlers","_id","_priority","DefaultLinkPriorities","DEFAULT","_handlers","Map","_protocols","Set","id","priority","protocols","Array","from","get","supports","urlArg","url","URL","values","some","predicate","protocol","toLowerCase","test","all","handler","handle","opts","singleHandlerOnly","noExceptionOnNoHandler","otherOpts","handlers","filter","length","LogLinkHandler","ID","Promise","reject","Error","map","e","console","log","message","add","isArray","forEach","set","endsWith","remove","result","delete","rePopulateProtocols","has","clear","sort","handler1","handler2","LinkHandlerAdapter","args","value","toURL","toString","LOWEST","resolve","Loggers","debug","Debug","LinkHandlerPlugin","eventTypes","handlers","methods","linkHandlerHandleURL","bind","options","onEvent","event","context","type","LinkHandlerEventType","LINK_HANDLER_URL","agent","data","Promise","reject","Error","args","url","source","handle"]}
package/dist/index.js CHANGED
@@ -141,21 +141,21 @@ function agentContext(agent) {
141
141
  __name(agentContext, "agentContext");
142
142
 
143
143
  // src/types/events.ts
144
- var PartyCorrelationType = /* @__PURE__ */ function(PartyCorrelationType2) {
144
+ var PartyCorrelationType = /* @__PURE__ */ (function(PartyCorrelationType2) {
145
145
  PartyCorrelationType2["DID"] = "did";
146
146
  PartyCorrelationType2["URL"] = "url";
147
147
  PartyCorrelationType2["EMAIL"] = "email";
148
148
  PartyCorrelationType2["HOSTNAME"] = "hostname";
149
149
  PartyCorrelationType2["PHONE"] = "phone";
150
150
  return PartyCorrelationType2;
151
- }({});
152
- var CredentialType = /* @__PURE__ */ function(CredentialType2) {
151
+ })({});
152
+ var CredentialType = /* @__PURE__ */ (function(CredentialType2) {
153
153
  CredentialType2["JSON_LD"] = "JSON_LD";
154
154
  CredentialType2["JWT"] = "JWT";
155
155
  CredentialType2["SD_JWT"] = "SD_JWT";
156
156
  CredentialType2["MSO_MDOC"] = "MSO_MDOC";
157
157
  return CredentialType2;
158
- }({});
158
+ })({});
159
159
 
160
160
  // src/utils/generic.ts
161
161
  function isDefined(arg) {
@@ -248,10 +248,10 @@ var varint_default = _brrp_varint;
248
248
 
249
249
  // src/utils/encoding.ts
250
250
  var { decode: decode2 } = varint_default;
251
- var MultibaseFormat = /* @__PURE__ */ function(MultibaseFormat2) {
251
+ var MultibaseFormat = /* @__PURE__ */ (function(MultibaseFormat2) {
252
252
  MultibaseFormat2["BASE58"] = "z";
253
253
  return MultibaseFormat2;
254
- }({});
254
+ })({});
255
255
  function hexToMultibase(hex, type) {
256
256
  return {
257
257
  value: bytesToMultibase(hexToBytes(hex), type),
@@ -562,32 +562,32 @@ function SuppliedSigner(keyRef, context, algorithm) {
562
562
  };
563
563
  }
564
564
  __name(SuppliedSigner, "SuppliedSigner");
565
- var KeyAlgo = /* @__PURE__ */ function(KeyAlgo2) {
565
+ var KeyAlgo = /* @__PURE__ */ (function(KeyAlgo2) {
566
566
  KeyAlgo2["EDDSA"] = "EdDSA";
567
567
  KeyAlgo2["RS256"] = "RS256";
568
568
  KeyAlgo2["PS256"] = "PS256";
569
569
  KeyAlgo2["ES256"] = "ES256";
570
570
  KeyAlgo2["ES256K"] = "ES256K";
571
571
  return KeyAlgo2;
572
- }({});
572
+ })({});
573
573
 
574
574
  // src/link-handlers/LinkHandlers.ts
575
575
  import { Loggers as Loggers3 } from "@sphereon/ssi-types";
576
576
 
577
577
  // src/link-handlers/types.ts
578
- var DefaultLinkPriorities = /* @__PURE__ */ function(DefaultLinkPriorities2) {
578
+ var DefaultLinkPriorities = /* @__PURE__ */ (function(DefaultLinkPriorities2) {
579
579
  DefaultLinkPriorities2[DefaultLinkPriorities2["HIGHEST"] = 0] = "HIGHEST";
580
580
  DefaultLinkPriorities2[DefaultLinkPriorities2["DEFAULT"] = Number.MAX_VALUE / 2] = "DEFAULT";
581
581
  DefaultLinkPriorities2[DefaultLinkPriorities2["LOWEST"] = Number.MAX_VALUE] = "LOWEST";
582
582
  return DefaultLinkPriorities2;
583
- }({});
584
- var emitLinkHandlerURLEvent = /* @__PURE__ */ __name((event, context) => {
585
- return context.agent.emit("link-handler-url", event);
583
+ })({});
584
+ var emitLinkHandlerURLEvent = /* @__PURE__ */ __name(async (event, context) => {
585
+ return await context.agent.emit("link-handler-url", event);
586
586
  }, "emitLinkHandlerURLEvent");
587
- var LinkHandlerEventType = /* @__PURE__ */ function(LinkHandlerEventType2) {
587
+ var LinkHandlerEventType = /* @__PURE__ */ (function(LinkHandlerEventType2) {
588
588
  LinkHandlerEventType2["LINK_HANDLER_URL"] = "link-handler-url";
589
589
  return LinkHandlerEventType2;
590
- }({});
590
+ })({});
591
591
 
592
592
  // src/link-handlers/LinkHandlers.ts
593
593
  var LinkHandlers = class {
@@ -625,9 +625,10 @@ var LinkHandlers = class {
625
625
  }
626
626
  try {
627
627
  if (singleHandlerOnly === true) {
628
- return await handlers[0].handle(url, otherOpts);
628
+ await handlers[0].handle(url, otherOpts);
629
+ } else {
630
+ await Promise.all(handlers.map((handler) => handler.handle(url, otherOpts)));
629
631
  }
630
- handlers.map(async (handler) => await handler.handle(url, otherOpts));
631
632
  } catch (e) {
632
633
  console.log(`Linkhandler error: ${e.message}`, e);
633
634
  return Promise.reject(e);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/loggers/eventLogger/EventLogger.ts","../src/loggers/eventLogger/EventLoggerBuilder.ts","../src/types/context.ts","../src/types/events.ts","../src/utils/generic.ts","../src/utils/encoding.ts","../src/utils/varint/varint.js","../src/utils/bearer-token.ts","../src/utils/hasher.ts","../src/utils/database.ts","../src/utils/image.ts","../src/signers/SuppliedSigner.ts","../src/link-handlers/LinkHandlers.ts","../src/link-handlers/types.ts","../src/link-handlers/agent/LinkHandlerPlugin.ts"],"sourcesContent":["import {\n type InitiatorType,\n type ISimpleLogger,\n Loggers,\n LogLevel,\n LogMethod,\n type SimpleLogEvent,\n SimpleLogger,\n type SimpleLogOptions,\n SubSystem,\n System,\n} from '@sphereon/ssi-types'\nimport type { IAgentContext } from '@veramo/core'\nimport type { EventLoggerArgs, LogEventType, LoggingEvent } from '../../types'\n\nclass EventLogger {\n private readonly context?: IAgentContext<any>\n private readonly namespace: string\n private readonly system?: System\n private readonly subSystemType?: SubSystem\n private readonly logLevel: LogLevel\n private readonly initiatorType?: InitiatorType\n private static readonly LOGGERS = Loggers.DEFAULT\n\n constructor(args: EventLoggerArgs) {\n const { context, namespace = 'sphereon:ssi-sdk:EventLogger', system, subSystem, logLevel = LogLevel.INFO, initiatorType } = args\n\n this.context = context\n this.namespace = namespace\n this.system = system\n this.subSystemType = subSystem\n this.logLevel = logLevel\n this.initiatorType = initiatorType\n }\n\n private localListener(event: SimpleLogEvent) {\n const { level, data, type, ...rest } = event\n EventLogger.LOGGERS.get(this.namespace).logl(level ?? this.logLevel ?? LogLevel.INFO, data, {\n ...rest,\n ...(this.system && { system: this.system }),\n ...(this.subSystemType && { subSystem: this.subSystemType }),\n })\n if (this.context?.agent) {\n void this.context.agent.emit(type, event)\n }\n }\n\n public simple = (options?: Omit<SimpleLogOptions, 'namespace'>): ISimpleLogger<unknown> => {\n const logger = EventLogger.LOGGERS.options(\n this.namespace,\n options ?? {\n eventName: this.namespace,\n methods: [LogMethod.EVENT],\n },\n ).get(this.namespace) as SimpleLogger\n if (!logger.eventEmitter.listeners(logger.options.eventName ?? this.namespace).includes(this.localListener)) {\n logger.eventEmitter.addListener(logger.options.eventName ?? this.namespace, this.localListener)\n }\n return logger\n }\n\n public logEvent = async (event: LoggingEvent): Promise<void> => {\n const eventData = await this.eventData(event)\n EventLogger.LOGGERS.get(this.namespace).logl(eventData.level ?? LogLevel.INFO, JSON.stringify(eventData), eventData)\n if (this.context?.agent) {\n await this.context.agent.emit(event.type, eventData)\n }\n }\n\n private eventData = async (event: LoggingEvent): Promise<LogEventType> => {\n if (!this.system && !event.data.system) {\n return Promise.reject(Error('Required system is not present'))\n }\n\n if (!this.subSystemType && !event.data.subSystemType) {\n return Promise.reject(Error('Required sub system type is not present'))\n }\n\n const result = {\n ...event.data,\n ...(!event.data.level && { level: this.logLevel }),\n ...(!event.data.system && { system: this.system }),\n ...(!event.data.subSystemType && { subSystemType: this.subSystemType }),\n ...(!event.data.initiatorType && { initiatorType: this.initiatorType }),\n }\n return result\n }\n}\n\nexport default EventLogger\n","import { InitiatorType, LogLevel, SubSystem, System } from '@sphereon/ssi-types'\nimport type { IAgentContext } from '@veramo/core'\nimport EventLogger from './EventLogger'\n\nclass EventLoggerBuilder {\n private context?: IAgentContext<any>\n private namespace?: string\n private system?: System\n private subSystem?: SubSystem\n private logLevel?: LogLevel\n private initiatorType?: InitiatorType\n\n withContext(context: IAgentContext<any>): this {\n this.context = context\n return this\n }\n\n withNamespace(namespace: string): this {\n this.namespace = namespace\n return this\n }\n\n withSystem(system: System): this {\n this.system = system\n return this\n }\n\n withSubSystem(subSystem: SubSystem): this {\n this.subSystem = subSystem\n return this\n }\n\n withLogLevel(logLevel: LogLevel): this {\n this.logLevel = logLevel\n return this\n }\n\n withInitiatorType(initiatorType: InitiatorType): this {\n this.initiatorType = initiatorType\n return this\n }\n\n public build(): EventLogger {\n return new EventLogger({\n context: this.context,\n namespace: this.namespace,\n system: this.system,\n subSystem: this.subSystem,\n logLevel: this.logLevel,\n initiatorType: this.initiatorType,\n })\n }\n}\n\nexport default EventLoggerBuilder\n","import type { IAgentContext, IPluginMethodMap, TAgent } from '@veramo/core'\n\nexport function agentContext<TAgentTypes extends IPluginMethodMap>(agent: TAgent<TAgentTypes>): IAgentContext<TAgentTypes> {\n return {\n agent,\n }\n}\n","import {\n type ActionSubType,\n ActionType,\n InitiatorType,\n LoggingEventType,\n LogLevel,\n type SimpleLogEvent,\n SubSystem,\n System,\n SystemCorrelationIdType,\n} from '@sphereon/ssi-types'\nimport { IAgentContext } from '@veramo/core'\n\nexport enum PartyCorrelationType {\n DID = 'did',\n URL = 'url',\n EMAIL = 'email',\n HOSTNAME = 'hostname',\n PHONE = 'phone',\n}\n\nexport type AuditLoggingEvent = Omit<SimpleLogEvent, 'type' | 'data'> & {\n id: string\n type: LoggingEventType.AUDIT\n // timestamp: Date\n // level: LogLevel\n correlationId: string\n system: System\n subSystemType: SubSystem\n actionType: ActionType\n actionSubType: ActionSubType\n initiatorType: InitiatorType\n systemCorrelationIdType?: SystemCorrelationIdType\n systemCorrelationId?: string\n systemAlias?: string\n partyCorrelationType?: PartyCorrelationType\n partyCorrelationId?: string\n partyAlias?: string\n description: string\n data?: any\n // diagnosticData?: any\n}\n\nexport enum CredentialType {\n JSON_LD = 'JSON_LD',\n JWT = 'JWT',\n SD_JWT = 'SD_JWT',\n MSO_MDOC = 'MSO_MDOC',\n}\n\n//TODO the fields credentialType, data, originalCredential and credentialHash should be required in this type\n// create a general type that can be shared between AuditLoggingEvent and ActivityLoggingEvent\nexport type ActivityLoggingEvent = Omit<SimpleLogEvent, 'data' | 'type'> & {\n id: string\n type: LoggingEventType.ACTIVITY\n originalCredential?: string\n credentialHash?: string\n parentCredentialHash?: string\n credentialType?: CredentialType\n sharePurpose?: string\n correlationId: string\n system: System\n subSystemType: SubSystem\n actionType: ActionType\n actionSubType: ActionSubType\n initiatorType: InitiatorType\n systemCorrelationIdType?: SystemCorrelationIdType\n systemCorrelationId?: string\n systemAlias?: string\n partyCorrelationType?: PartyCorrelationType\n partyCorrelationId?: string\n partyAlias?: string\n description: string\n data?: any\n}\n\nexport type PartialAuditLoggingEvent = Partial<AuditLoggingEvent>\n\nexport type PartialActivityLoggingEvent = Partial<ActivityLoggingEvent>\n\nexport type NonPersistedAuditLoggingEvent = Omit<\n AuditLoggingEvent,\n 'id' | 'timestamp' | 'level' | 'correlationId' | 'system' | 'subSystemType' | 'initiatorType' | 'type'\n> & {\n level?: LogLevel\n correlationId?: string\n system?: System\n subSystemType?: SubSystem\n initiatorType?: InitiatorType\n}\n\nexport type NonPersistedActivityLoggingEvent = Omit<\n ActivityLoggingEvent,\n 'id' | 'timestamp' | 'level' | 'correlationId' | 'system' | 'subSystemType' | 'initiatorType' | 'type'\n> & {\n level?: LogLevel\n correlationId?: string\n system?: System\n subSystemType?: SubSystem\n initiatorType?: InitiatorType\n credentialType?: CredentialType\n sharePurpose?: string\n}\n\nexport type LoggingEvent = {\n type: LoggingEventType\n data: LogEventType\n}\n\nexport type LogEventType = NonPersistedAuditLoggingEvent | NonPersistedActivityLoggingEvent\n\nexport type EventLoggerArgs = {\n context?: IAgentContext<any>\n namespace?: string\n system?: System\n subSystem?: SubSystem\n logLevel?: LogLevel\n initiatorType?: InitiatorType\n}\n","/**\n * Checks if a variable is defined and not null.\n * After this check, typescript sees the variable as defined.\n *\n * @param arg - The input to be verified\n *\n * @returns true if the input variable is defined.\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function isDefined<T>(arg: T): arg is Exclude<T, null | undefined> {\n return arg !== null && typeof arg !== 'undefined'\n}\n\n/**\n * Ensures that a given input is an array. If the input is a single item, it is converted to an array with a single\n * entry.\n *\n * @param arg - a variable that needs to be converted to array\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function asArray<T>(arg?: T | T[] | any): (T | any)[] {\n return isDefined(arg) ? (Array.isArray(arg) ? arg : [arg]) : []\n}\n\n/**\n * Checks if an object is iterable (can be used for `for..of`)\n * @param obj - the variable to be checked\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function isIterable<T>(obj: any): obj is Iterable<T> {\n return obj != null && typeof obj[Symbol.iterator] === 'function'\n}\n/**\n * Compute the intersection of two arrays\n * Elements are compared by reference so object types will appear as unique even if they contain the same data.\n *\n * @param a - first array\n * @param b - second array\n * @returns The intersection of the two arrays.\n *\n * @public\n */\nexport function intersect<T>(a: T[] | any, b: any[] | any): T[] {\n const setB = new Set<T>(asArray(b))\n return [...new Set(asArray(a))].filter((x) => setB.has(x))\n}\n","import type { TKeyType } from '@veramo/core'\n// @ts-ignore\nimport { concat as concatArrays } from 'uint8arrays/concat'\n// @ts-ignore\nimport { fromString } from 'uint8arrays/from-string'\n// @ts-ignore\nimport { toString } from 'uint8arrays/to-string'\nimport varint from './varint/varint'\nconst { decode } = varint\n\nexport enum MultibaseFormat {\n BASE58 = 'z',\n}\n\nexport function hexToMultibase(hex: string, type: TKeyType): { value: string; format: MultibaseFormat; keyType: TKeyType } {\n return { value: bytesToMultibase(hexToBytes(hex), type), format: MultibaseFormat.BASE58, keyType: type }\n}\n\nexport function multibaseToHex(multibase: string): { value: string; keyType: TKeyType; format: MultibaseFormat } {\n if (!multibase.startsWith(MultibaseFormat.BASE58)) {\n throw new Error('Only base58 supported for now using multibase!')\n }\n\n const props = multibaseKeyToProps(multibase)\n return { value: bytesToHex(multibaseKeyToBytes(multibase)), keyType: props.keyType, format: MultibaseFormat.BASE58 }\n}\n\n/**\n * Converts a Uint8Array to a base64url string\n * @param b - the array to be converted\n *\n * @public\n */\nexport function bytesToBase64url(b: Uint8Array): string {\n return toString(b, 'base64url')\n}\n\n/**\n * Converts a base64url string to the Uint8Array it represents.\n *\n * @param s - the string to be converted\n *\n * @throws if the string is not formatted correctly.\n *\n * @public\n */\nexport function base64ToBytes(s: string): Uint8Array {\n const inputBase64Url = s.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '')\n return fromString(inputBase64Url, 'base64url')\n}\n/**\n * Encodes a Uint8Array to a base64 string representation with padding.\n * @param b - the byte array to convert\n *\n * @public\n */\nexport function bytesToBase64(b: Uint8Array): string {\n return toString(b, 'base64pad')\n}\n\n/**\n * Encodes the bytes of an input string to base64url\n * @param s - the original string\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function encodeBase64url(s: string): string {\n return bytesToBase64url(fromString(s))\n}\n\n/**\n * Decodes a base64url string to a utf8 string represented by the same bytes.\n * @param s - the base64url string to be decoded\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function decodeBase64url(s: string): string {\n return toString(base64ToBytes(s))\n}\n\n/**\n * Builds a string from a Uint8Array using the utf-8 encoding.\n * @param b - the array to be converted\n *\n * @public\n */\nexport function bytesToUtf8String(b: Uint8Array): string {\n return toString(b, 'utf-8')\n}\n\n/**\n * Encodes a string to a Uint8Array using the utf-8 encoding.\n * @param s - the string to be encoded\n *\n * @public\n */\nexport function stringToUtf8Bytes(s: string): Uint8Array {\n return fromString(s, 'utf-8')\n}\n\n/**\n * Stringifies a JSON object and encodes the bytes of the resulting string to a base64url representation.\n * @param payload - the object to be encoded\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function encodeJoseBlob(payload: {}) {\n return toString(fromString(JSON.stringify(payload), 'utf-8'), 'base64url')\n}\n\n/**\n * Decodes a base64url string representing stringified JSON to a JSON object.\n *\n * @param blob - The base64url encoded stringified JSON to be decoded\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function decodeJoseBlob(blob: string) {\n return JSON.parse(toString(fromString(blob, 'base64url'), 'utf-8'))\n}\n\n/**\n * Converts a hex string (with or without prefix) to a byte array (Uint8Array)\n *\n * @param hexString - The string representing the encoding\n * @returns the `Uint8Array` represented by the given string\n *\n * @throws `illegal_argument` error if the parameter is not a string\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function hexToBytes(hexString: string): Uint8Array {\n // @ts-ignore\n if (hexString instanceof Uint8Array) {\n return Uint8Array.from(hexString)\n }\n if (typeof hexString !== 'string') {\n throw new Error('illegal_argument: a string must be provided for a hex-string to byte array conversion')\n }\n const noPrefix = hexString.startsWith('0x') ? hexString.substring(2) : hexString\n const padded = noPrefix.length % 2 !== 0 ? `0${noPrefix}` : noPrefix\n return fromString(padded.toLowerCase(), 'base16')\n}\n\n/**\n * Converts a Uint8Array input to a hex string\n *\n * @param byteArray - The array to be converted\n * @param prefix - If this is set to true, the resulting hex string will be prefixed with 0x\n *\n * @returns the hex encoding of the input byte array\n *\n * @throws `illegal_argument` error if the input is not a Uint8Array\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function bytesToHex(byteArray: Uint8Array, prefix: boolean = false): string {\n if (!(byteArray instanceof Uint8Array)) {\n throw new Error('illegal_argument: only byte arrays can be converted to hex encoding')\n }\n const result = toString(byteArray, 'base16')\n return prefix ? `0x${result}` : result\n}\n\n/**\n * Converts a base58 string to the Uint8Array it represents.\n *\n * @param s - the string to be converted\n *\n * @throws if the string is not formatted correctly.\n *\n * @public\n */\nexport function base58ToBytes(s: string): Uint8Array {\n return fromString(s, 'base58btc')\n}\n\n/**\n * Converts a base58 string to the Uint8Array it represents.\n *\n * @param s - the string to be converted\n *\n * @throws if the string is not formatted correctly.\n *\n * @public\n */\nexport function bytesToBase58(byteArray: Uint8Array): string {\n return toString(byteArray, 'base58btc')\n}\n\n/**\n * Converts a multibase string to the Uint8Array it represents.\n *\n * @param s - the string to be converted\n *\n * @throws if the string is not formatted correctly.\n *\n * @public\n */\nexport function multibaseKeyToBytes(s: string): Uint8Array {\n if (s.charAt(0) !== 'z') {\n throw new Error('invalid multibase string: string is not base58 encoded (does not start with \"z\")')\n }\n const bytes = fromString(s.substring(1), 'base58btc')\n const props = multibaseKeyToProps(s)\n const keyLength = props.code.length / 2\n\n if (props.keyType === 'RSA') {\n if (bytes[2] !== 48) {\n throw Error('Invalid RSA octet sequence')\n }\n return bytes.slice(2)\n } else if (props.keyType === 'Secp256r1') {\n return bytes.slice(2)\n }\n if (bytes[keyLength] !== 0x01) {\n throw Error(`Invalid multicodec value at position ${keyLength}: ${bytes[keyLength]}`)\n }\n return bytes.slice(keyLength + 1)\n}\n\nexport function multibaseKeyToProps(s: string): MultiCodedLookup {\n if (s.charAt(0) !== 'z') {\n throw new Error('invalid multibase string: string is not base58 encoded (does not start with \"z\")')\n }\n\n const bytes = fromString(s.substring(1), 'base58btc')\n const code = decode(bytes)\n return getMultibasePropsByCode(code)\n}\n\nexport interface MultiCodedLookup {\n code: string\n keyType: TKeyType\n minLegth: number\n maxLength: number\n}\n\nexport const SUPPORTED_KEY_CODECS: MultiCodedLookup[] = [\n { code: 'e7', keyType: 'Secp256k1', minLegth: 33, maxLength: 33 },\n { code: 'ec', keyType: 'X25519', minLegth: 32, maxLength: 32 },\n { code: 'ed', keyType: 'Ed25519', minLegth: 32, maxLength: 32 },\n { code: '1200', keyType: 'Secp256r1', minLegth: 33, maxLength: 34 },\n // {code: \"1201\", keyType: 'Secp384r1', minLegth: 49, maxLength: 49}, //TODO: Implement keytype\n // {code: \"1202\", keyType: 'Secp521r1', minLegth: 65, maxLength: 65}, //TODO: Implement keytype\n { code: '1205', keyType: 'RSA', minLegth: 10, maxLength: 512 }, // TODO: Lookup what we should put here\n]\n\nexport function getMultibasePropsByType(keytype: TKeyType) {\n const props = SUPPORTED_KEY_CODECS.find((row) => row.keyType === keytype)\n if (!props) {\n throw Error(`Multibase not supported (yet) for key type: ${keytype}`)\n }\n return props\n}\n\nexport function getMultibasePropsByCode(code: string | number) {\n const props = SUPPORTED_KEY_CODECS.find((row) => (typeof code === 'string' ? row.code === code : row.code === code.toString(16)))\n if (!props) {\n throw Error(`Multibase not supported (yet) for code: ${code}`)\n }\n return props\n}\n\n/**\n * Converts a Uint8Array to a multibase string.\n *\n * @param b - the array to be converted\n * @param type - the type of the key to be represented\n *\n * @throws if the array is not formatted correctly.\n *\n * @public\n */\nexport function bytesToMultibase(byteArray: Uint8Array, type: TKeyType): string {\n const props = getMultibasePropsByType(type)\n if (byteArray.length < props.minLegth || byteArray.length > props.maxLength) {\n throw Error(`Length of provided bytes (${byteArray.length}) falls outside of the bounds ${props.minLegth} and ${props.maxLength}`)\n }\n const multicodec = '01'\n const varCode = Number.parseInt(props.code, 16)\n const length = props.code.length / 2\n const varType = new Uint8Array(length)\n varint.encode(varCode, varType)\n const bytes = concatArrays([\n varType,\n props.keyType === 'RSA' || props.keyType === 'Secp256r1' ? new Uint8Array(0) : fromString(multicodec, 'base16'),\n byteArray,\n ])\n return 'z' + toString(bytes, 'base58btc')\n}\n\n/**\n * Concatenates a bunch of arrays into one Uint8Array\n * @param arrays - the arrays to be concatenated\n * @param length - the maximum length of the resulting array\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function concat(arrays: ArrayLike<number>[], length?: number): Uint8Array {\n // @ts-ignore\n return concatArrays(arrays, length)\n}\n","var encode_1 = encode\n\nvar MSB = 0x80,\n REST = 0x7f,\n MSBALL = ~REST,\n INT = Math.pow(2, 31)\n\nfunction encode(num, out, offset) {\n out = out || []\n offset = offset || 0\n var oldOffset = offset\n\n while (num >= INT) {\n out[offset++] = (num & 0xff) | MSB\n num /= 128\n }\n while (num & MSBALL) {\n out[offset++] = (num & 0xff) | MSB\n num >>>= 7\n }\n out[offset] = num | 0\n\n encode.bytes = offset - oldOffset + 1\n\n return out\n}\n\nvar decode = read\n\nvar MSB$1 = 0x80,\n REST$1 = 0x7f\n\nfunction read(buf, offset) {\n var res = 0,\n offset = offset || 0,\n shift = 0,\n counter = offset,\n b,\n l = buf.length\n\n do {\n if (counter >= l) {\n read.bytes = 0\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++]\n res += shift < 28 ? (b & REST$1) << shift : (b & REST$1) * Math.pow(2, shift)\n shift += 7\n } while (b >= MSB$1)\n\n read.bytes = counter - offset\n\n return res\n}\n\nvar N1 = Math.pow(2, 7)\nvar N2 = Math.pow(2, 14)\nvar N3 = Math.pow(2, 21)\nvar N4 = Math.pow(2, 28)\nvar N5 = Math.pow(2, 35)\nvar N6 = Math.pow(2, 42)\nvar N7 = Math.pow(2, 49)\nvar N8 = Math.pow(2, 56)\nvar N9 = Math.pow(2, 63)\n\nvar length = function (value) {\n return value < N1\n ? 1\n : value < N2\n ? 2\n : value < N3\n ? 3\n : value < N4\n ? 4\n : value < N5\n ? 5\n : value < N6\n ? 6\n : value < N7\n ? 7\n : value < N8\n ? 8\n : value < N9\n ? 9\n : 10\n}\n\nvar varint = {\n encode: encode_1,\n decode: decode,\n encodingLength: length,\n}\n\nvar _brrp_varint = varint\n\nexport default _brrp_varint\n","import type { BearerTokenArg } from '@sphereon/ssi-types'\n\nexport const bearerToken = async (\n token: BearerTokenArg,\n opts?: {\n includeBearerHeader: boolean\n },\n): Promise<string> => {\n const bearer = typeof token === 'string' ? token : await token()\n\n if (opts?.includeBearerHeader) {\n return `Bearer ${bearer}`\n }\n return bearer\n}\n","import { defaultHasher as defaultHasherOrig, sha256 as sha256Orig } from '@sphereon/ssi-types'\n\n// re-export as these where here before\nexport const sha256 = sha256Orig\nexport const shaHasher = defaultHasherOrig\nexport const defaultHasher = defaultHasherOrig\n","export const flattenArray = <T>(args: { items: Array<T | Array<T>> }): Array<T> => args.items.flat() as Array<T>\n\nexport const flattenMigrations = <T>(args: { migrations: Array<T | Array<T>> }): Array<T> => args.migrations.flat() as Array<T>\n\ntype QueryRunnerType = {\n query(query: string, parameters: any[] | undefined, useStructuredResult: true): Promise<any>\n query(query: string, parameters?: any[]): Promise<any>\n}\n\n/**\n * It should accept the type QueryRunner from the typeorm\n */\nexport const enablePostgresUuidExtension = async (queryRunner: QueryRunnerType) => {\n try {\n await queryRunner.query(`CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";`)\n } catch (error) {\n console.error(\n `Please enable the uuid-ossp.control extension in your PostgreSQL installation. It enables generating V4 UUID and can be found in the postgresql-contrib package`,\n )\n throw error\n }\n}\n","import { Loggers } from '@sphereon/ssi-types'\nimport fetch from 'cross-fetch'\n// @ts-ignore\nimport { imageSize } from 'image-size'\nimport { IImageDimensions, IImageResource } from '../types'\n\n// @ts-ignore\nimport { fromString } from 'uint8arrays/from-string'\n// @ts-ignore\nimport { toString } from 'uint8arrays/to-string'\n\nconst logger = Loggers.DEFAULT.get('sphereon:core')\ntype SizeCalculationResult = {\n width?: number\n height?: number\n orientation?: number\n type?: string\n}\n\n// TODO: here we're handling svg separately, remove this section when image-size starts supporting it in version 2\nconst isSvg = (uint8Array: Uint8Array): boolean => {\n const maxCheckLength: number = Math.min(80, uint8Array.length)\n const initialText: string = toString(uint8Array.subarray(0, maxCheckLength))\n const normalizedText: string = initialText.trim().toLowerCase()\n return normalizedText.startsWith('<svg') || normalizedText.startsWith('<?xml')\n}\n\nconst parseDimension = (dimension: string): number => {\n const match: RegExpMatchArray | null = dimension.match(/^(\\d+(?:\\.\\d+)?)([a-z%]*)$/)\n return match ? parseFloat(match[1]) : 0\n}\n\nconst getSvgDimensions = (uint8Array: Uint8Array): SizeCalculationResult => {\n const svgContent: string = new TextDecoder().decode(uint8Array)\n const widthMatch: RegExpMatchArray | null = svgContent.match(/width=\"([^\"]+)\"/)\n const heightMatch: RegExpMatchArray | null = svgContent.match(/height=\"([^\"]+)\"/)\n const viewBoxMatch: RegExpMatchArray | null = svgContent.match(/viewBox=\"[^\"]*\"/)\n\n let width: number | undefined = widthMatch ? parseDimension(widthMatch[1]) : undefined\n let height: number | undefined = heightMatch ? parseDimension(heightMatch[1]) : undefined\n\n if (viewBoxMatch && (!width || !height)) {\n const parts = viewBoxMatch[0].match(/[\\d\\.]+/g)?.map(Number)\n if (parts && parts.length === 4) {\n const [x, y, viewBoxWidth, viewBoxHeight] = parts\n width = width ?? viewBoxWidth - x\n height = height ?? viewBoxHeight - y\n }\n }\n\n return { width, height, type: 'svg' }\n}\n\n/**\n *\n * @param value can be both (base64) string and Uint8Array\n */\nexport const getImageMediaType = async (value: string | Uint8Array): Promise<string | undefined> => {\n const uint8Array = typeof value === 'string' ? fromString(value, 'base64') : value\n if (isSvg(uint8Array)) {\n return `image/svg+xml`\n }\n const result: SizeCalculationResult = imageSize(uint8Array)\n return `image/${result.type}`\n}\n\n/**\n *\n * @param value can be both (base64) string and Uint8Array\n */\nexport const getImageDimensions = async (value: string | Uint8Array): Promise<IImageDimensions> => {\n const uint8Array = typeof value === 'string' ? fromString(value, 'base64') : value\n const dimensions: SizeCalculationResult = isSvg(uint8Array) ? getSvgDimensions(uint8Array) : imageSize(uint8Array)\n\n if (!dimensions.width || !dimensions.height) {\n return Promise.reject(Error('Unable to get image dimensions'))\n }\n\n return { width: dimensions.width, height: dimensions.height }\n}\n\nexport const downloadImage = async (url: string): Promise<IImageResource | undefined> => {\n logger.debug(`Downloading image from url: ${url}`)\n if (!url) {\n logger.warning(`Could not download image when nu url is provided`)\n return\n } else if (!url.startsWith('http://') && !url.startsWith('https://')) {\n logger.warning(`Could not download image when url does not start with http(s):// : ${url}`)\n return\n }\n try {\n const response: Response = await fetch(url)\n if (!response.ok) {\n logger.error(`Could not download image ${url}. Status: ${response.status} ${response.statusText}`)\n }\n\n const contentType: string | null = response.headers.get('Content-Type')\n const base64Content: string = Buffer.from(await response.arrayBuffer()).toString('base64')\n\n return {\n base64Content,\n contentType: contentType || undefined,\n }\n } catch (e) {\n logger.error(`Could not download image ${url}`, e)\n return undefined\n }\n}\n","import type { IKey, IAgentContext, IKeyManager } from '@veramo/core'\n\nexport function SuppliedSigner(keyRef: Pick<IKey, 'kid'>, context: IAgentContext<IKeyManager>, algorithm: KeyAlgo): Signer {\n return async (data: string | Uint8Array): Promise<string> => {\n const input = data instanceof Object.getPrototypeOf(Uint8Array) ? new TextDecoder().decode(data as Uint8Array) : (data as string)\n\n return await context.agent.keyManagerSign({ keyRef: keyRef.kid, algorithm, data: input })\n }\n}\nexport type Signer = (data: string | Uint8Array) => Promise<EcdsaSignature | string>\n\nexport enum KeyAlgo {\n EDDSA = 'EdDSA',\n RS256 = 'RS256',\n PS256 = 'PS256',\n ES256 = 'ES256',\n ES256K = 'ES256K',\n}\nexport interface EcdsaSignature {\n r: string\n s: string\n recoveryParam?: number | null\n}\n","import { Loggers } from '@sphereon/ssi-types'\nimport { DefaultLinkPriorities, type LinkHandler, type LinkHandlerRegistry } from './types'\n\n/**\n * Class registering multiple LinkHandlers, allowing the developer to use a single compound link handler.\n * @implements {LinkHandler}\n * @implements {LinkHandlerRegistry}\n */\nexport class LinkHandlers implements LinkHandler, LinkHandlerRegistry {\n private readonly _id = '_LinkHandlers'\n private readonly _priority = DefaultLinkPriorities.DEFAULT // Allow someone to create a new implementation with higher priority\n private readonly _handlers: Map<string, LinkHandler> = new Map()\n private readonly _protocols: Set<string | RegExp> = new Set()\n\n get id() {\n return this._id\n }\n\n get priority(): DefaultLinkPriorities {\n return this._priority\n }\n\n get protocols(): Array<string | RegExp> {\n return Array.from(this._protocols)\n }\n\n get(id: string): LinkHandler | undefined {\n return this._handlers.get(id)\n }\n\n supports(urlArg: string | URL): boolean {\n const url = new URL(urlArg)\n // Optimization, does not take into account regexp registrations, but these are taken care of via the handlers\n if (\n !Array.from(this._protocols.values()).some((predicate) =>\n typeof predicate === 'string' ? url.protocol === predicate.toLowerCase() : predicate.test(url.protocol),\n )\n ) {\n return false\n }\n return this.all().some((handler) => handler.supports(url))\n }\n\n async handle(\n url: string | URL,\n opts?: {\n singleHandlerOnly?: boolean\n noExceptionOnNoHandler?: boolean\n } & Record<string, any>,\n ): Promise<void> {\n const { singleHandlerOnly, noExceptionOnNoHandler, ...otherOpts } = opts ?? {}\n const handlers = this.all().filter((handler) => handler.supports(url))\n\n if ((handlers.length === 0 || (handlers.length === 1 && handlers[0].id === LogLinkHandler.ID)) && noExceptionOnNoHandler !== true) {\n return Promise.reject(new Error(`No link handler was registered that supports URL: ${url}`))\n }\n try {\n if (singleHandlerOnly === true) {\n return await handlers[0].handle(url, otherOpts)\n }\n handlers.map(async (handler) => await handler.handle(url, otherOpts))\n } catch (e) {\n console.log(`Linkhandler error: ${e.message}`, e)\n return Promise.reject(e)\n }\n }\n\n add(handler: LinkHandler | LinkHandler[]): this {\n const handlers = Array.isArray(handler) ? handler : [handler]\n handlers.forEach((handler) => {\n this._handlers.set(handler.id, handler)\n handler.protocols.forEach((protocol) =>\n this._protocols.add(typeof protocol === 'string' ? (protocol.endsWith(':') ? protocol : `${protocol}:`) : protocol),\n )\n })\n return this\n }\n\n remove(handler: LinkHandler | string): boolean {\n const result = this._handlers.delete(typeof handler === 'string' ? handler : handler.id)\n this.rePopulateProtocols()\n return result\n }\n\n has(handler: LinkHandler | string): boolean {\n return this._handlers.has(typeof handler === 'string' ? handler : handler.id)\n }\n\n clear(): this {\n this._handlers.clear()\n this.rePopulateProtocols()\n return this\n }\n\n all(): LinkHandler[] {\n // Returns the handlers sorted in priority order, not insertion order\n return Array.from(this._handlers.values()).sort(\n (handler1, handler2) => (handler1.priority ?? DefaultLinkPriorities.DEFAULT) - (handler2.priority ?? DefaultLinkPriorities.DEFAULT),\n )\n }\n\n private rePopulateProtocols(): void {\n this._protocols.clear()\n this.all().forEach((handler) => handler.protocols.forEach((protocol) => this._protocols.add(protocol)))\n }\n}\n\n/**\n * LinkHandlerAdapter is an abstract class that implements the LinkHandler interface. It provides basic functionality\n * for handling links and can be extended to create custom link handler.\n *\n * @abstract\n * @implements {LinkHandler}\n */\nexport abstract class LinkHandlerAdapter implements LinkHandler {\n private readonly _id: string\n private _priority: number | DefaultLinkPriorities\n private _protocols: Array<string | RegExp>\n\n protected constructor(args: { id: string; priority?: number | DefaultLinkPriorities; protocols?: Array<string | RegExp> }) {\n this._id = args.id\n this._priority = args.priority ?? DefaultLinkPriorities.DEFAULT\n this._protocols =\n args.protocols?.map((protocol) =>\n typeof protocol !== 'string' ? protocol : protocol.endsWith(':') ? protocol.toLowerCase() : `${protocol.toLowerCase()}:`,\n ) ?? []\n }\n\n get id(): string {\n return this._id\n }\n\n get protocols(): Array<string | RegExp> {\n return this._protocols\n }\n\n protected set protocols(value: Array<string | RegExp>) {\n this._protocols = value\n }\n\n get priority(): number | DefaultLinkPriorities {\n return this._priority\n }\n\n protected set priority(value: number | DefaultLinkPriorities) {\n this._priority = value\n }\n\n handle(url: string | URL, opts?: Record<string, any>): Promise<void> {\n return Promise.reject(new Error(`Adapter does not handle a URL. Please implement`))\n }\n\n supports(urlArg: string | URL): boolean {\n const url = LinkHandlerAdapter.toURL(urlArg)\n return this.protocols.some((predicate) =>\n typeof predicate === 'string' ? url.protocol === predicate.toLowerCase() : predicate.test(url.toString()),\n )\n }\n\n protected static toURL(url: string | URL) {\n return new URL(url)\n }\n}\n\n/**\n * A class that logs links.\n */\nexport class LogLinkHandler extends LinkHandlerAdapter {\n static ID = '_log'\n\n constructor(args?: { priority?: number | DefaultLinkPriorities; protocols?: Array<string | RegExp> }) {\n super({\n id: LogLinkHandler.ID,\n protocols: args?.protocols ?? [/.*/],\n priority: args?.priority ?? DefaultLinkPriorities.LOWEST,\n })\n }\n\n handle(url: string | URL): Promise<void> {\n return Promise.resolve(Loggers.DEFAULT.get(`sphereon:link-handler:${LogLinkHandler.ID}`).log(url))\n }\n}\n","import type { IAgentContext, IPluginMethodMap } from '@veramo/core'\n\nexport enum DefaultLinkPriorities {\n HIGHEST = 0,\n DEFAULT = Number.MAX_VALUE / 2,\n LOWEST = Number.MAX_VALUE,\n}\n\nexport type LinkHandler = {\n id: string\n priority?: number | DefaultLinkPriorities\n supports: (url: string | URL) => boolean\n protocols: Array<string | RegExp>\n handle: (url: string | URL, opts?: Record<string, any>) => Promise<void>\n}\n\nexport type LinkHandlerRegistry = {\n add: (handler: LinkHandler | LinkHandler[]) => LinkHandlerRegistry\n remove: (handler: LinkHandler | string) => boolean\n get: (id: string) => LinkHandler | undefined\n all: () => LinkHandler[]\n has: (handler: LinkHandler | string) => boolean\n clear: () => LinkHandlerRegistry\n}\n\nexport type LinkHandlerEventSource = 'QR' | 'IntentHandler' | 'URL'\n\nexport type LinkHandlerEvent = {\n type: LinkHandlerEventType\n data: LinkHandlerEventData\n}\n\nexport type LinkHandlerEventData = {\n source: LinkHandlerEventSource | string\n url: string | URL\n options?: Record<string, any>\n}\n\nexport const emitLinkHandlerURLEvent = (event: LinkHandlerEventData, context: IAgentContext<any>): Promise<void> => {\n return context.agent.emit(LinkHandlerEventType.LINK_HANDLER_URL, event)\n}\n\nexport enum LinkHandlerEventType {\n LINK_HANDLER_URL = 'link-handler-url',\n}\n\nexport type LinkHandlerEventArgs = LinkHandlerEventData\nexport interface ILinkHandlerPlugin extends IPluginMethodMap {\n linkHandlerHandleURL(args: LinkHandlerEventArgs, context: IAgentContext<ILinkHandlerPlugin>): Promise<void>\n}\n","import type { IAgentContext, IAgentPlugin } from '@veramo/core'\nimport Debug from 'debug'\nimport { type ILinkHandlerPlugin, type LinkHandlerEvent, type LinkHandlerEventArgs, LinkHandlerEventType, LinkHandlers } from '../index'\n\nconst debug = Debug(`sphereon:ssi-sdk:LinkHandler`)\n/**\n * {@inheritDoc ILinkHandlerPlugin}\n */\n\nexport class LinkHandlerPlugin implements IAgentPlugin {\n // readonly schema = schema.IEventLogger\n readonly eventTypes?: Array<LinkHandlerEventType> = []\n readonly handlers: LinkHandlers\n\n readonly methods: ILinkHandlerPlugin = {\n linkHandlerHandleURL: this.linkHandlerHandleURL.bind(this),\n }\n\n constructor(options: { eventTypes?: LinkHandlerEventType[]; handlers: LinkHandlers }) {\n const { eventTypes, handlers } = options\n this.eventTypes = eventTypes\n this.handlers = handlers\n }\n\n public async onEvent(event: LinkHandlerEvent, context: IAgentContext<ILinkHandlerPlugin>): Promise<void> {\n switch (event.type) {\n case LinkHandlerEventType.LINK_HANDLER_URL:\n // Calling the context of the agent to make sure the REST client is called when configured\n await context.agent.linkHandlerHandleURL({ ...event.data })\n break\n default:\n return Promise.reject(Error(`Event type ${event.type} not supported`))\n }\n }\n\n private async linkHandlerHandleURL(args: LinkHandlerEventArgs): Promise<void> {\n const { url, source, options } = args\n debug(`received url '${url} from source ${source}`)\n return await this.handlers.handle(args.url, options)\n }\n}\n"],"mappings":"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","names":["Loggers","LogLevel","LogMethod","EventLogger","context","namespace","system","subSystemType","logLevel","initiatorType","LOGGERS","Loggers","DEFAULT","args","subSystem","LogLevel","INFO","localListener","event","level","data","type","rest","get","logl","agent","emit","simple","options","logger","eventName","methods","LogMethod","EVENT","eventEmitter","listeners","includes","addListener","logEvent","eventData","JSON","stringify","Promise","reject","Error","result","EventLoggerBuilder","context","namespace","system","subSystem","logLevel","initiatorType","withContext","withNamespace","withSystem","withSubSystem","withLogLevel","withInitiatorType","build","EventLogger","agentContext","agent","PartyCorrelationType","CredentialType","isDefined","arg","asArray","Array","isArray","isIterable","obj","Symbol","iterator","intersect","a","b","setB","Set","filter","x","has","concat","concatArrays","fromString","toString","encode_1","encode","MSB","REST","MSBALL","INT","Math","pow","num","out","offset","oldOffset","bytes","decode","read","MSB$1","REST$1","buf","res","shift","counter","b","l","length","RangeError","N1","N2","N3","N4","N5","N6","N7","N8","N9","value","varint","encodingLength","_brrp_varint","decode","varint","MultibaseFormat","hexToMultibase","hex","type","value","bytesToMultibase","hexToBytes","format","keyType","multibaseToHex","multibase","startsWith","Error","props","multibaseKeyToProps","bytesToHex","multibaseKeyToBytes","bytesToBase64url","b","toString","base64ToBytes","s","inputBase64Url","replace","fromString","bytesToBase64","encodeBase64url","decodeBase64url","bytesToUtf8String","stringToUtf8Bytes","encodeJoseBlob","payload","JSON","stringify","decodeJoseBlob","blob","parse","hexString","Uint8Array","from","noPrefix","substring","padded","length","toLowerCase","byteArray","prefix","result","base58ToBytes","bytesToBase58","charAt","bytes","keyLength","code","slice","getMultibasePropsByCode","SUPPORTED_KEY_CODECS","minLegth","maxLength","getMultibasePropsByType","keytype","find","row","multicodec","varCode","Number","parseInt","varType","encode","concatArrays","concat","arrays","bearerToken","token","opts","bearer","includeBearerHeader","defaultHasher","defaultHasherOrig","sha256","sha256Orig","shaHasher","flattenArray","args","items","flat","flattenMigrations","migrations","enablePostgresUuidExtension","queryRunner","query","error","console","Loggers","fetch","imageSize","fromString","toString","logger","Loggers","DEFAULT","get","isSvg","uint8Array","maxCheckLength","Math","min","length","initialText","toString","subarray","normalizedText","trim","toLowerCase","startsWith","parseDimension","dimension","match","parseFloat","getSvgDimensions","svgContent","TextDecoder","decode","widthMatch","heightMatch","viewBoxMatch","width","undefined","height","parts","map","Number","x","y","viewBoxWidth","viewBoxHeight","type","getImageMediaType","value","fromString","result","imageSize","getImageDimensions","dimensions","Promise","reject","Error","downloadImage","url","debug","warning","response","fetch","ok","error","status","statusText","contentType","headers","base64Content","Buffer","from","arrayBuffer","e","SuppliedSigner","keyRef","context","algorithm","data","input","Object","getPrototypeOf","Uint8Array","TextDecoder","decode","agent","keyManagerSign","kid","KeyAlgo","Loggers","DefaultLinkPriorities","Number","MAX_VALUE","emitLinkHandlerURLEvent","event","context","agent","emit","LinkHandlerEventType","LinkHandlers","_id","_priority","DefaultLinkPriorities","DEFAULT","_handlers","Map","_protocols","Set","id","priority","protocols","Array","from","get","supports","urlArg","url","URL","values","some","predicate","protocol","toLowerCase","test","all","handler","handle","opts","singleHandlerOnly","noExceptionOnNoHandler","otherOpts","handlers","filter","length","LogLinkHandler","ID","Promise","reject","Error","map","e","console","log","message","add","isArray","forEach","set","endsWith","remove","result","delete","rePopulateProtocols","has","clear","sort","handler1","handler2","LinkHandlerAdapter","args","value","toURL","toString","LOWEST","resolve","Loggers","Debug","debug","Debug","LinkHandlerPlugin","eventTypes","handlers","methods","linkHandlerHandleURL","bind","options","onEvent","event","context","type","LinkHandlerEventType","LINK_HANDLER_URL","agent","data","Promise","reject","Error","args","url","source","handle"]}
1
+ {"version":3,"sources":["../src/loggers/eventLogger/EventLogger.ts","../src/loggers/eventLogger/EventLoggerBuilder.ts","../src/types/context.ts","../src/types/events.ts","../src/utils/generic.ts","../src/utils/encoding.ts","../src/utils/varint/varint.js","../src/utils/bearer-token.ts","../src/utils/hasher.ts","../src/utils/database.ts","../src/utils/image.ts","../src/signers/SuppliedSigner.ts","../src/link-handlers/LinkHandlers.ts","../src/link-handlers/types.ts","../src/link-handlers/agent/LinkHandlerPlugin.ts"],"sourcesContent":["import {\n type InitiatorType,\n type ISimpleLogger,\n Loggers,\n LogLevel,\n LogMethod,\n type SimpleLogEvent,\n SimpleLogger,\n type SimpleLogOptions,\n SubSystem,\n System,\n} from '@sphereon/ssi-types'\nimport type { IAgentContext } from '@veramo/core'\nimport type { EventLoggerArgs, LogEventType, LoggingEvent } from '../../types'\n\nclass EventLogger {\n private readonly context?: IAgentContext<any>\n private readonly namespace: string\n private readonly system?: System\n private readonly subSystemType?: SubSystem\n private readonly logLevel: LogLevel\n private readonly initiatorType?: InitiatorType\n private static readonly LOGGERS = Loggers.DEFAULT\n\n constructor(args: EventLoggerArgs) {\n const { context, namespace = 'sphereon:ssi-sdk:EventLogger', system, subSystem, logLevel = LogLevel.INFO, initiatorType } = args\n\n this.context = context\n this.namespace = namespace\n this.system = system\n this.subSystemType = subSystem\n this.logLevel = logLevel\n this.initiatorType = initiatorType\n }\n\n private localListener(event: SimpleLogEvent) {\n const { level, data, type, ...rest } = event\n EventLogger.LOGGERS.get(this.namespace).logl(level ?? this.logLevel ?? LogLevel.INFO, data, {\n ...rest,\n ...(this.system && { system: this.system }),\n ...(this.subSystemType && { subSystem: this.subSystemType }),\n })\n if (this.context?.agent) {\n void this.context.agent.emit(type, event)\n }\n }\n\n public simple = (options?: Omit<SimpleLogOptions, 'namespace'>): ISimpleLogger<unknown> => {\n const logger = EventLogger.LOGGERS.options(\n this.namespace,\n options ?? {\n eventName: this.namespace,\n methods: [LogMethod.EVENT],\n },\n ).get(this.namespace) as SimpleLogger\n if (!logger.eventEmitter.listeners(logger.options.eventName ?? this.namespace).includes(this.localListener)) {\n logger.eventEmitter.addListener(logger.options.eventName ?? this.namespace, this.localListener)\n }\n return logger\n }\n\n public logEvent = async (event: LoggingEvent): Promise<void> => {\n const eventData = await this.eventData(event)\n EventLogger.LOGGERS.get(this.namespace).logl(eventData.level ?? LogLevel.INFO, JSON.stringify(eventData), eventData)\n if (this.context?.agent) {\n await this.context.agent.emit(event.type, eventData)\n }\n }\n\n private eventData = async (event: LoggingEvent): Promise<LogEventType> => {\n if (!this.system && !event.data.system) {\n return Promise.reject(Error('Required system is not present'))\n }\n\n if (!this.subSystemType && !event.data.subSystemType) {\n return Promise.reject(Error('Required sub system type is not present'))\n }\n\n const result = {\n ...event.data,\n ...(!event.data.level && { level: this.logLevel }),\n ...(!event.data.system && { system: this.system }),\n ...(!event.data.subSystemType && { subSystemType: this.subSystemType }),\n ...(!event.data.initiatorType && { initiatorType: this.initiatorType }),\n }\n return result\n }\n}\n\nexport default EventLogger\n","import { InitiatorType, LogLevel, SubSystem, System } from '@sphereon/ssi-types'\nimport type { IAgentContext } from '@veramo/core'\nimport EventLogger from './EventLogger'\n\nclass EventLoggerBuilder {\n private context?: IAgentContext<any>\n private namespace?: string\n private system?: System\n private subSystem?: SubSystem\n private logLevel?: LogLevel\n private initiatorType?: InitiatorType\n\n withContext(context: IAgentContext<any>): this {\n this.context = context\n return this\n }\n\n withNamespace(namespace: string): this {\n this.namespace = namespace\n return this\n }\n\n withSystem(system: System): this {\n this.system = system\n return this\n }\n\n withSubSystem(subSystem: SubSystem): this {\n this.subSystem = subSystem\n return this\n }\n\n withLogLevel(logLevel: LogLevel): this {\n this.logLevel = logLevel\n return this\n }\n\n withInitiatorType(initiatorType: InitiatorType): this {\n this.initiatorType = initiatorType\n return this\n }\n\n public build(): EventLogger {\n return new EventLogger({\n context: this.context,\n namespace: this.namespace,\n system: this.system,\n subSystem: this.subSystem,\n logLevel: this.logLevel,\n initiatorType: this.initiatorType,\n })\n }\n}\n\nexport default EventLoggerBuilder\n","import type { IAgentContext, IPluginMethodMap, TAgent } from '@veramo/core'\n\nexport function agentContext<TAgentTypes extends IPluginMethodMap>(agent: TAgent<TAgentTypes>): IAgentContext<TAgentTypes> {\n return {\n agent,\n }\n}\n","import {\n type ActionSubType,\n ActionType,\n InitiatorType,\n LoggingEventType,\n LogLevel,\n type SimpleLogEvent,\n SubSystem,\n System,\n SystemCorrelationIdType,\n} from '@sphereon/ssi-types'\nimport { IAgentContext } from '@veramo/core'\n\nexport enum PartyCorrelationType {\n DID = 'did',\n URL = 'url',\n EMAIL = 'email',\n HOSTNAME = 'hostname',\n PHONE = 'phone',\n}\n\nexport type AuditLoggingEvent = Omit<SimpleLogEvent, 'type' | 'data'> & {\n id: string\n type: LoggingEventType.AUDIT\n // timestamp: Date\n // level: LogLevel\n correlationId: string\n system: System\n subSystemType: SubSystem\n actionType: ActionType\n actionSubType: ActionSubType\n initiatorType: InitiatorType\n systemCorrelationIdType?: SystemCorrelationIdType\n systemCorrelationId?: string\n systemAlias?: string\n partyCorrelationType?: PartyCorrelationType\n partyCorrelationId?: string\n partyAlias?: string\n description: string\n data?: any\n // diagnosticData?: any\n}\n\nexport enum CredentialType {\n JSON_LD = 'JSON_LD',\n JWT = 'JWT',\n SD_JWT = 'SD_JWT',\n MSO_MDOC = 'MSO_MDOC',\n}\n\n//TODO the fields credentialType, data, originalCredential and credentialHash should be required in this type\n// create a general type that can be shared between AuditLoggingEvent and ActivityLoggingEvent\nexport type ActivityLoggingEvent = Omit<SimpleLogEvent, 'data' | 'type'> & {\n id: string\n type: LoggingEventType.ACTIVITY\n originalCredential?: string\n credentialHash?: string\n parentCredentialHash?: string\n credentialType?: CredentialType\n sharePurpose?: string\n correlationId: string\n system: System\n subSystemType: SubSystem\n actionType: ActionType\n actionSubType: ActionSubType\n initiatorType: InitiatorType\n systemCorrelationIdType?: SystemCorrelationIdType\n systemCorrelationId?: string\n systemAlias?: string\n partyCorrelationType?: PartyCorrelationType\n partyCorrelationId?: string\n partyAlias?: string\n description: string\n data?: any\n}\n\nexport type PartialAuditLoggingEvent = Partial<AuditLoggingEvent>\n\nexport type PartialActivityLoggingEvent = Partial<ActivityLoggingEvent>\n\nexport type NonPersistedAuditLoggingEvent = Omit<\n AuditLoggingEvent,\n 'id' | 'timestamp' | 'level' | 'correlationId' | 'system' | 'subSystemType' | 'initiatorType' | 'type'\n> & {\n level?: LogLevel\n correlationId?: string\n system?: System\n subSystemType?: SubSystem\n initiatorType?: InitiatorType\n}\n\nexport type NonPersistedActivityLoggingEvent = Omit<\n ActivityLoggingEvent,\n 'id' | 'timestamp' | 'level' | 'correlationId' | 'system' | 'subSystemType' | 'initiatorType' | 'type'\n> & {\n level?: LogLevel\n correlationId?: string\n system?: System\n subSystemType?: SubSystem\n initiatorType?: InitiatorType\n credentialType?: CredentialType\n sharePurpose?: string\n}\n\nexport type LoggingEvent = {\n type: LoggingEventType\n data: LogEventType\n}\n\nexport type LogEventType = NonPersistedAuditLoggingEvent | NonPersistedActivityLoggingEvent\n\nexport type EventLoggerArgs = {\n context?: IAgentContext<any>\n namespace?: string\n system?: System\n subSystem?: SubSystem\n logLevel?: LogLevel\n initiatorType?: InitiatorType\n}\n","/**\n * Checks if a variable is defined and not null.\n * After this check, typescript sees the variable as defined.\n *\n * @param arg - The input to be verified\n *\n * @returns true if the input variable is defined.\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function isDefined<T>(arg: T): arg is Exclude<T, null | undefined> {\n return arg !== null && typeof arg !== 'undefined'\n}\n\n/**\n * Ensures that a given input is an array. If the input is a single item, it is converted to an array with a single\n * entry.\n *\n * @param arg - a variable that needs to be converted to array\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function asArray<T>(arg?: T | T[] | any): (T | any)[] {\n return isDefined(arg) ? (Array.isArray(arg) ? arg : [arg]) : []\n}\n\n/**\n * Checks if an object is iterable (can be used for `for..of`)\n * @param obj - the variable to be checked\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function isIterable<T>(obj: any): obj is Iterable<T> {\n return obj != null && typeof obj[Symbol.iterator] === 'function'\n}\n/**\n * Compute the intersection of two arrays\n * Elements are compared by reference so object types will appear as unique even if they contain the same data.\n *\n * @param a - first array\n * @param b - second array\n * @returns The intersection of the two arrays.\n *\n * @public\n */\nexport function intersect<T>(a: T[] | any, b: any[] | any): T[] {\n const setB = new Set<T>(asArray(b))\n return [...new Set(asArray(a))].filter((x) => setB.has(x))\n}\n","import type { TKeyType } from '@veramo/core'\n// @ts-ignore\nimport { concat as concatArrays } from 'uint8arrays/concat'\n// @ts-ignore\nimport { fromString } from 'uint8arrays/from-string'\n// @ts-ignore\nimport { toString } from 'uint8arrays/to-string'\nimport varint from './varint/varint'\nconst { decode } = varint\n\nexport enum MultibaseFormat {\n BASE58 = 'z',\n}\n\nexport function hexToMultibase(hex: string, type: TKeyType): { value: string; format: MultibaseFormat; keyType: TKeyType } {\n return { value: bytesToMultibase(hexToBytes(hex), type), format: MultibaseFormat.BASE58, keyType: type }\n}\n\nexport function multibaseToHex(multibase: string): { value: string; keyType: TKeyType; format: MultibaseFormat } {\n if (!multibase.startsWith(MultibaseFormat.BASE58)) {\n throw new Error('Only base58 supported for now using multibase!')\n }\n\n const props = multibaseKeyToProps(multibase)\n return { value: bytesToHex(multibaseKeyToBytes(multibase)), keyType: props.keyType, format: MultibaseFormat.BASE58 }\n}\n\n/**\n * Converts a Uint8Array to a base64url string\n * @param b - the array to be converted\n *\n * @public\n */\nexport function bytesToBase64url(b: Uint8Array): string {\n return toString(b, 'base64url')\n}\n\n/**\n * Converts a base64url string to the Uint8Array it represents.\n *\n * @param s - the string to be converted\n *\n * @throws if the string is not formatted correctly.\n *\n * @public\n */\nexport function base64ToBytes(s: string): Uint8Array {\n const inputBase64Url = s.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '')\n return fromString(inputBase64Url, 'base64url')\n}\n/**\n * Encodes a Uint8Array to a base64 string representation with padding.\n * @param b - the byte array to convert\n *\n * @public\n */\nexport function bytesToBase64(b: Uint8Array): string {\n return toString(b, 'base64pad')\n}\n\n/**\n * Encodes the bytes of an input string to base64url\n * @param s - the original string\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function encodeBase64url(s: string): string {\n return bytesToBase64url(fromString(s))\n}\n\n/**\n * Decodes a base64url string to a utf8 string represented by the same bytes.\n * @param s - the base64url string to be decoded\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function decodeBase64url(s: string): string {\n return toString(base64ToBytes(s))\n}\n\n/**\n * Builds a string from a Uint8Array using the utf-8 encoding.\n * @param b - the array to be converted\n *\n * @public\n */\nexport function bytesToUtf8String(b: Uint8Array): string {\n return toString(b, 'utf-8')\n}\n\n/**\n * Encodes a string to a Uint8Array using the utf-8 encoding.\n * @param s - the string to be encoded\n *\n * @public\n */\nexport function stringToUtf8Bytes(s: string): Uint8Array {\n return fromString(s, 'utf-8')\n}\n\n/**\n * Stringifies a JSON object and encodes the bytes of the resulting string to a base64url representation.\n * @param payload - the object to be encoded\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function encodeJoseBlob(payload: {}) {\n return toString(fromString(JSON.stringify(payload), 'utf-8'), 'base64url')\n}\n\n/**\n * Decodes a base64url string representing stringified JSON to a JSON object.\n *\n * @param blob - The base64url encoded stringified JSON to be decoded\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function decodeJoseBlob(blob: string) {\n return JSON.parse(toString(fromString(blob, 'base64url'), 'utf-8'))\n}\n\n/**\n * Converts a hex string (with or without prefix) to a byte array (Uint8Array)\n *\n * @param hexString - The string representing the encoding\n * @returns the `Uint8Array` represented by the given string\n *\n * @throws `illegal_argument` error if the parameter is not a string\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function hexToBytes(hexString: string): Uint8Array {\n // @ts-ignore\n if (hexString instanceof Uint8Array) {\n return Uint8Array.from(hexString)\n }\n if (typeof hexString !== 'string') {\n throw new Error('illegal_argument: a string must be provided for a hex-string to byte array conversion')\n }\n const noPrefix = hexString.startsWith('0x') ? hexString.substring(2) : hexString\n const padded = noPrefix.length % 2 !== 0 ? `0${noPrefix}` : noPrefix\n return fromString(padded.toLowerCase(), 'base16')\n}\n\n/**\n * Converts a Uint8Array input to a hex string\n *\n * @param byteArray - The array to be converted\n * @param prefix - If this is set to true, the resulting hex string will be prefixed with 0x\n *\n * @returns the hex encoding of the input byte array\n *\n * @throws `illegal_argument` error if the input is not a Uint8Array\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function bytesToHex(byteArray: Uint8Array, prefix: boolean = false): string {\n if (!(byteArray instanceof Uint8Array)) {\n throw new Error('illegal_argument: only byte arrays can be converted to hex encoding')\n }\n const result = toString(byteArray, 'base16')\n return prefix ? `0x${result}` : result\n}\n\n/**\n * Converts a base58 string to the Uint8Array it represents.\n *\n * @param s - the string to be converted\n *\n * @throws if the string is not formatted correctly.\n *\n * @public\n */\nexport function base58ToBytes(s: string): Uint8Array {\n return fromString(s, 'base58btc')\n}\n\n/**\n * Converts a base58 string to the Uint8Array it represents.\n *\n * @param s - the string to be converted\n *\n * @throws if the string is not formatted correctly.\n *\n * @public\n */\nexport function bytesToBase58(byteArray: Uint8Array): string {\n return toString(byteArray, 'base58btc')\n}\n\n/**\n * Converts a multibase string to the Uint8Array it represents.\n *\n * @param s - the string to be converted\n *\n * @throws if the string is not formatted correctly.\n *\n * @public\n */\nexport function multibaseKeyToBytes(s: string): Uint8Array {\n if (s.charAt(0) !== 'z') {\n throw new Error('invalid multibase string: string is not base58 encoded (does not start with \"z\")')\n }\n const bytes = fromString(s.substring(1), 'base58btc')\n const props = multibaseKeyToProps(s)\n const keyLength = props.code.length / 2\n\n if (props.keyType === 'RSA') {\n if (bytes[2] !== 48) {\n throw Error('Invalid RSA octet sequence')\n }\n return bytes.slice(2)\n } else if (props.keyType === 'Secp256r1') {\n return bytes.slice(2)\n }\n if (bytes[keyLength] !== 0x01) {\n throw Error(`Invalid multicodec value at position ${keyLength}: ${bytes[keyLength]}`)\n }\n return bytes.slice(keyLength + 1)\n}\n\nexport function multibaseKeyToProps(s: string): MultiCodedLookup {\n if (s.charAt(0) !== 'z') {\n throw new Error('invalid multibase string: string is not base58 encoded (does not start with \"z\")')\n }\n\n const bytes = fromString(s.substring(1), 'base58btc')\n const code = decode(bytes)\n return getMultibasePropsByCode(code)\n}\n\nexport interface MultiCodedLookup {\n code: string\n keyType: TKeyType\n minLegth: number\n maxLength: number\n}\n\nexport const SUPPORTED_KEY_CODECS: MultiCodedLookup[] = [\n { code: 'e7', keyType: 'Secp256k1', minLegth: 33, maxLength: 33 },\n { code: 'ec', keyType: 'X25519', minLegth: 32, maxLength: 32 },\n { code: 'ed', keyType: 'Ed25519', minLegth: 32, maxLength: 32 },\n { code: '1200', keyType: 'Secp256r1', minLegth: 33, maxLength: 34 },\n // {code: \"1201\", keyType: 'Secp384r1', minLegth: 49, maxLength: 49}, //TODO: Implement keytype\n // {code: \"1202\", keyType: 'Secp521r1', minLegth: 65, maxLength: 65}, //TODO: Implement keytype\n { code: '1205', keyType: 'RSA', minLegth: 10, maxLength: 512 }, // TODO: Lookup what we should put here\n]\n\nexport function getMultibasePropsByType(keytype: TKeyType) {\n const props = SUPPORTED_KEY_CODECS.find((row) => row.keyType === keytype)\n if (!props) {\n throw Error(`Multibase not supported (yet) for key type: ${keytype}`)\n }\n return props\n}\n\nexport function getMultibasePropsByCode(code: string | number) {\n const props = SUPPORTED_KEY_CODECS.find((row) => (typeof code === 'string' ? row.code === code : row.code === code.toString(16)))\n if (!props) {\n throw Error(`Multibase not supported (yet) for code: ${code}`)\n }\n return props\n}\n\n/**\n * Converts a Uint8Array to a multibase string.\n *\n * @param b - the array to be converted\n * @param type - the type of the key to be represented\n *\n * @throws if the array is not formatted correctly.\n *\n * @public\n */\nexport function bytesToMultibase(byteArray: Uint8Array, type: TKeyType): string {\n const props = getMultibasePropsByType(type)\n if (byteArray.length < props.minLegth || byteArray.length > props.maxLength) {\n throw Error(`Length of provided bytes (${byteArray.length}) falls outside of the bounds ${props.minLegth} and ${props.maxLength}`)\n }\n const multicodec = '01'\n const varCode = Number.parseInt(props.code, 16)\n const length = props.code.length / 2\n const varType = new Uint8Array(length)\n varint.encode(varCode, varType)\n const bytes = concatArrays([\n varType,\n props.keyType === 'RSA' || props.keyType === 'Secp256r1' ? new Uint8Array(0) : fromString(multicodec, 'base16'),\n byteArray,\n ])\n return 'z' + toString(bytes, 'base58btc')\n}\n\n/**\n * Concatenates a bunch of arrays into one Uint8Array\n * @param arrays - the arrays to be concatenated\n * @param length - the maximum length of the resulting array\n *\n * @beta This API may change without a BREAKING CHANGE notice.\n */\nexport function concat(arrays: ArrayLike<number>[], length?: number): Uint8Array {\n // @ts-ignore\n return concatArrays(arrays, length)\n}\n","var encode_1 = encode\n\nvar MSB = 0x80,\n REST = 0x7f,\n MSBALL = ~REST,\n INT = Math.pow(2, 31)\n\nfunction encode(num, out, offset) {\n out = out || []\n offset = offset || 0\n var oldOffset = offset\n\n while (num >= INT) {\n out[offset++] = (num & 0xff) | MSB\n num /= 128\n }\n while (num & MSBALL) {\n out[offset++] = (num & 0xff) | MSB\n num >>>= 7\n }\n out[offset] = num | 0\n\n encode.bytes = offset - oldOffset + 1\n\n return out\n}\n\nvar decode = read\n\nvar MSB$1 = 0x80,\n REST$1 = 0x7f\n\nfunction read(buf, offset) {\n var res = 0,\n offset = offset || 0,\n shift = 0,\n counter = offset,\n b,\n l = buf.length\n\n do {\n if (counter >= l) {\n read.bytes = 0\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++]\n res += shift < 28 ? (b & REST$1) << shift : (b & REST$1) * Math.pow(2, shift)\n shift += 7\n } while (b >= MSB$1)\n\n read.bytes = counter - offset\n\n return res\n}\n\nvar N1 = Math.pow(2, 7)\nvar N2 = Math.pow(2, 14)\nvar N3 = Math.pow(2, 21)\nvar N4 = Math.pow(2, 28)\nvar N5 = Math.pow(2, 35)\nvar N6 = Math.pow(2, 42)\nvar N7 = Math.pow(2, 49)\nvar N8 = Math.pow(2, 56)\nvar N9 = Math.pow(2, 63)\n\nvar length = function (value) {\n return value < N1\n ? 1\n : value < N2\n ? 2\n : value < N3\n ? 3\n : value < N4\n ? 4\n : value < N5\n ? 5\n : value < N6\n ? 6\n : value < N7\n ? 7\n : value < N8\n ? 8\n : value < N9\n ? 9\n : 10\n}\n\nvar varint = {\n encode: encode_1,\n decode: decode,\n encodingLength: length,\n}\n\nvar _brrp_varint = varint\n\nexport default _brrp_varint\n","import type { BearerTokenArg } from '@sphereon/ssi-types'\n\nexport const bearerToken = async (\n token: BearerTokenArg,\n opts?: {\n includeBearerHeader: boolean\n },\n): Promise<string> => {\n const bearer = typeof token === 'string' ? token : await token()\n\n if (opts?.includeBearerHeader) {\n return `Bearer ${bearer}`\n }\n return bearer\n}\n","import { defaultHasher as defaultHasherOrig, sha256 as sha256Orig } from '@sphereon/ssi-types'\n\n// re-export as these where here before\nexport const sha256 = sha256Orig\nexport const shaHasher = defaultHasherOrig\nexport const defaultHasher = defaultHasherOrig\n","export const flattenArray = <T>(args: { items: Array<T | Array<T>> }): Array<T> => args.items.flat() as Array<T>\n\nexport const flattenMigrations = <T>(args: { migrations: Array<T | Array<T>> }): Array<T> => args.migrations.flat() as Array<T>\n\ntype QueryRunnerType = {\n query(query: string, parameters: any[] | undefined, useStructuredResult: true): Promise<any>\n query(query: string, parameters?: any[]): Promise<any>\n}\n\n/**\n * It should accept the type QueryRunner from the typeorm\n */\nexport const enablePostgresUuidExtension = async (queryRunner: QueryRunnerType) => {\n try {\n await queryRunner.query(`CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\";`)\n } catch (error) {\n console.error(\n `Please enable the uuid-ossp.control extension in your PostgreSQL installation. It enables generating V4 UUID and can be found in the postgresql-contrib package`,\n )\n throw error\n }\n}\n","import { Loggers } from '@sphereon/ssi-types'\nimport fetch from 'cross-fetch'\n// @ts-ignore\nimport { imageSize } from 'image-size'\nimport { IImageDimensions, IImageResource } from '../types'\n\n// @ts-ignore\nimport { fromString } from 'uint8arrays/from-string'\n// @ts-ignore\nimport { toString } from 'uint8arrays/to-string'\n\nconst logger = Loggers.DEFAULT.get('sphereon:core')\ntype SizeCalculationResult = {\n width?: number\n height?: number\n orientation?: number\n type?: string\n}\n\n// TODO: here we're handling svg separately, remove this section when image-size starts supporting it in version 2\nconst isSvg = (uint8Array: Uint8Array): boolean => {\n const maxCheckLength: number = Math.min(80, uint8Array.length)\n const initialText: string = toString(uint8Array.subarray(0, maxCheckLength))\n const normalizedText: string = initialText.trim().toLowerCase()\n return normalizedText.startsWith('<svg') || normalizedText.startsWith('<?xml')\n}\n\nconst parseDimension = (dimension: string): number => {\n const match: RegExpMatchArray | null = dimension.match(/^(\\d+(?:\\.\\d+)?)([a-z%]*)$/)\n return match ? parseFloat(match[1]) : 0\n}\n\nconst getSvgDimensions = (uint8Array: Uint8Array): SizeCalculationResult => {\n const svgContent: string = new TextDecoder().decode(uint8Array)\n const widthMatch: RegExpMatchArray | null = svgContent.match(/width=\"([^\"]+)\"/)\n const heightMatch: RegExpMatchArray | null = svgContent.match(/height=\"([^\"]+)\"/)\n const viewBoxMatch: RegExpMatchArray | null = svgContent.match(/viewBox=\"[^\"]*\"/)\n\n let width: number | undefined = widthMatch ? parseDimension(widthMatch[1]) : undefined\n let height: number | undefined = heightMatch ? parseDimension(heightMatch[1]) : undefined\n\n if (viewBoxMatch && (!width || !height)) {\n const parts = viewBoxMatch[0].match(/[\\d\\.]+/g)?.map(Number)\n if (parts && parts.length === 4) {\n const [x, y, viewBoxWidth, viewBoxHeight] = parts\n width = width ?? viewBoxWidth - x\n height = height ?? viewBoxHeight - y\n }\n }\n\n return { width, height, type: 'svg' }\n}\n\n/**\n *\n * @param value can be both (base64) string and Uint8Array\n */\nexport const getImageMediaType = async (value: string | Uint8Array): Promise<string | undefined> => {\n const uint8Array = typeof value === 'string' ? fromString(value, 'base64') : value\n if (isSvg(uint8Array)) {\n return `image/svg+xml`\n }\n const result: SizeCalculationResult = imageSize(uint8Array)\n return `image/${result.type}`\n}\n\n/**\n *\n * @param value can be both (base64) string and Uint8Array\n */\nexport const getImageDimensions = async (value: string | Uint8Array): Promise<IImageDimensions> => {\n const uint8Array = typeof value === 'string' ? fromString(value, 'base64') : value\n const dimensions: SizeCalculationResult = isSvg(uint8Array) ? getSvgDimensions(uint8Array) : imageSize(uint8Array)\n\n if (!dimensions.width || !dimensions.height) {\n return Promise.reject(Error('Unable to get image dimensions'))\n }\n\n return { width: dimensions.width, height: dimensions.height }\n}\n\nexport const downloadImage = async (url: string): Promise<IImageResource | undefined> => {\n logger.debug(`Downloading image from url: ${url}`)\n if (!url) {\n logger.warning(`Could not download image when nu url is provided`)\n return\n } else if (!url.startsWith('http://') && !url.startsWith('https://')) {\n logger.warning(`Could not download image when url does not start with http(s):// : ${url}`)\n return\n }\n try {\n const response: Response = await fetch(url)\n if (!response.ok) {\n logger.error(`Could not download image ${url}. Status: ${response.status} ${response.statusText}`)\n }\n\n const contentType: string | null = response.headers.get('Content-Type')\n const base64Content: string = Buffer.from(await response.arrayBuffer()).toString('base64')\n\n return {\n base64Content,\n contentType: contentType || undefined,\n }\n } catch (e) {\n logger.error(`Could not download image ${url}`, e)\n return undefined\n }\n}\n","import type { IKey, IAgentContext, IKeyManager } from '@veramo/core'\n\nexport function SuppliedSigner(keyRef: Pick<IKey, 'kid'>, context: IAgentContext<IKeyManager>, algorithm: KeyAlgo): Signer {\n return async (data: string | Uint8Array): Promise<string> => {\n const input = data instanceof Object.getPrototypeOf(Uint8Array) ? new TextDecoder().decode(data as Uint8Array) : (data as string)\n\n return await context.agent.keyManagerSign({ keyRef: keyRef.kid, algorithm, data: input })\n }\n}\nexport type Signer = (data: string | Uint8Array) => Promise<EcdsaSignature | string>\n\nexport enum KeyAlgo {\n EDDSA = 'EdDSA',\n RS256 = 'RS256',\n PS256 = 'PS256',\n ES256 = 'ES256',\n ES256K = 'ES256K',\n}\nexport interface EcdsaSignature {\n r: string\n s: string\n recoveryParam?: number | null\n}\n","import { Loggers } from '@sphereon/ssi-types'\nimport { DefaultLinkPriorities, type LinkHandler, type LinkHandlerRegistry } from './types'\n\n/**\n * Class registering multiple LinkHandlers, allowing the developer to use a single compound link handler.\n * @implements {LinkHandler}\n * @implements {LinkHandlerRegistry}\n */\nexport class LinkHandlers implements LinkHandler, LinkHandlerRegistry {\n private readonly _id = '_LinkHandlers'\n private readonly _priority = DefaultLinkPriorities.DEFAULT // Allow someone to create a new implementation with higher priority\n private readonly _handlers: Map<string, LinkHandler> = new Map()\n private readonly _protocols: Set<string | RegExp> = new Set()\n\n get id() {\n return this._id\n }\n\n get priority(): DefaultLinkPriorities {\n return this._priority\n }\n\n get protocols(): Array<string | RegExp> {\n return Array.from(this._protocols)\n }\n\n get(id: string): LinkHandler | undefined {\n return this._handlers.get(id)\n }\n\n supports(urlArg: string | URL): boolean {\n const url = new URL(urlArg)\n // Optimization, does not take into account regexp registrations, but these are taken care of via the handlers\n if (\n !Array.from(this._protocols.values()).some((predicate) =>\n typeof predicate === 'string' ? url.protocol === predicate.toLowerCase() : predicate.test(url.protocol),\n )\n ) {\n return false\n }\n return this.all().some((handler) => handler.supports(url))\n }\n\n async handle(\n url: string | URL,\n opts?: {\n singleHandlerOnly?: boolean\n noExceptionOnNoHandler?: boolean\n } & Record<string, any>,\n ): Promise<void> {\n const { singleHandlerOnly, noExceptionOnNoHandler, ...otherOpts } = opts ?? {}\n const handlers = this.all().filter((handler) => handler.supports(url))\n\n if ((handlers.length === 0 || (handlers.length === 1 && handlers[0].id === LogLinkHandler.ID)) && noExceptionOnNoHandler !== true) {\n return Promise.reject(new Error(`No link handler was registered that supports URL: ${url}`))\n }\n try {\n if (singleHandlerOnly === true) {\n await handlers[0].handle(url, otherOpts)\n } else {\n await Promise.all(handlers.map((handler) => handler.handle(url, otherOpts)))\n }\n } catch (e) {\n console.log(`Linkhandler error: ${e.message}`, e)\n return Promise.reject(e)\n }\n }\n\n add(handler: LinkHandler | LinkHandler[]): this {\n const handlers = Array.isArray(handler) ? handler : [handler]\n handlers.forEach((handler) => {\n this._handlers.set(handler.id, handler)\n handler.protocols.forEach((protocol) =>\n this._protocols.add(typeof protocol === 'string' ? (protocol.endsWith(':') ? protocol : `${protocol}:`) : protocol),\n )\n })\n return this\n }\n\n remove(handler: LinkHandler | string): boolean {\n const result = this._handlers.delete(typeof handler === 'string' ? handler : handler.id)\n this.rePopulateProtocols()\n return result\n }\n\n has(handler: LinkHandler | string): boolean {\n return this._handlers.has(typeof handler === 'string' ? handler : handler.id)\n }\n\n clear(): this {\n this._handlers.clear()\n this.rePopulateProtocols()\n return this\n }\n\n all(): LinkHandler[] {\n // Returns the handlers sorted in priority order, not insertion order\n return Array.from(this._handlers.values()).sort(\n (handler1, handler2) => (handler1.priority ?? DefaultLinkPriorities.DEFAULT) - (handler2.priority ?? DefaultLinkPriorities.DEFAULT),\n )\n }\n\n private rePopulateProtocols(): void {\n this._protocols.clear()\n this.all().forEach((handler) => handler.protocols.forEach((protocol) => this._protocols.add(protocol)))\n }\n}\n\n/**\n * LinkHandlerAdapter is an abstract class that implements the LinkHandler interface. It provides basic functionality\n * for handling links and can be extended to create custom link handler.\n *\n * @abstract\n * @implements {LinkHandler}\n */\nexport abstract class LinkHandlerAdapter implements LinkHandler {\n private readonly _id: string\n private _priority: number | DefaultLinkPriorities\n private _protocols: Array<string | RegExp>\n\n protected constructor(args: { id: string; priority?: number | DefaultLinkPriorities; protocols?: Array<string | RegExp> }) {\n this._id = args.id\n this._priority = args.priority ?? DefaultLinkPriorities.DEFAULT\n this._protocols =\n args.protocols?.map((protocol) =>\n typeof protocol !== 'string' ? protocol : protocol.endsWith(':') ? protocol.toLowerCase() : `${protocol.toLowerCase()}:`,\n ) ?? []\n }\n\n get id(): string {\n return this._id\n }\n\n get protocols(): Array<string | RegExp> {\n return this._protocols\n }\n\n protected set protocols(value: Array<string | RegExp>) {\n this._protocols = value\n }\n\n get priority(): number | DefaultLinkPriorities {\n return this._priority\n }\n\n protected set priority(value: number | DefaultLinkPriorities) {\n this._priority = value\n }\n\n handle(url: string | URL, opts?: Record<string, any>): Promise<void> {\n return Promise.reject(new Error(`Adapter does not handle a URL. Please implement`))\n }\n\n supports(urlArg: string | URL): boolean {\n const url = LinkHandlerAdapter.toURL(urlArg)\n return this.protocols.some((predicate) =>\n typeof predicate === 'string' ? url.protocol === predicate.toLowerCase() : predicate.test(url.toString()),\n )\n }\n\n protected static toURL(url: string | URL) {\n return new URL(url)\n }\n}\n\n/**\n * A class that logs links.\n */\nexport class LogLinkHandler extends LinkHandlerAdapter {\n static ID = '_log'\n\n constructor(args?: { priority?: number | DefaultLinkPriorities; protocols?: Array<string | RegExp> }) {\n super({\n id: LogLinkHandler.ID,\n protocols: args?.protocols ?? [/.*/],\n priority: args?.priority ?? DefaultLinkPriorities.LOWEST,\n })\n }\n\n handle(url: string | URL): Promise<void> {\n return Promise.resolve(Loggers.DEFAULT.get(`sphereon:link-handler:${LogLinkHandler.ID}`).log(url))\n }\n}\n","import type { IAgentContext, IPluginMethodMap } from '@veramo/core'\n\nexport enum DefaultLinkPriorities {\n HIGHEST = 0,\n DEFAULT = Number.MAX_VALUE / 2,\n LOWEST = Number.MAX_VALUE,\n}\n\nexport type LinkHandler = {\n id: string\n priority?: number | DefaultLinkPriorities\n supports: (url: string | URL) => boolean\n protocols: Array<string | RegExp>\n handle: (url: string | URL, opts?: Record<string, any>) => Promise<void>\n}\n\nexport type LinkHandlerRegistry = {\n add: (handler: LinkHandler | LinkHandler[]) => LinkHandlerRegistry\n remove: (handler: LinkHandler | string) => boolean\n get: (id: string) => LinkHandler | undefined\n all: () => LinkHandler[]\n has: (handler: LinkHandler | string) => boolean\n clear: () => LinkHandlerRegistry\n}\n\nexport type LinkHandlerEventSource = 'QR' | 'IntentHandler' | 'URL'\n\nexport type LinkHandlerEvent = {\n type: LinkHandlerEventType\n data: LinkHandlerEventData\n}\n\nexport type LinkHandlerEventData = {\n source: LinkHandlerEventSource | string\n url: string | URL\n options?: Record<string, any>\n}\n\nexport const emitLinkHandlerURLEvent = async (event: LinkHandlerEventData, context: IAgentContext<any>): Promise<void> => {\n return await context.agent.emit(LinkHandlerEventType.LINK_HANDLER_URL, event)\n}\n\nexport enum LinkHandlerEventType {\n LINK_HANDLER_URL = 'link-handler-url',\n}\n\nexport type LinkHandlerEventArgs = LinkHandlerEventData\nexport interface ILinkHandlerPlugin extends IPluginMethodMap {\n linkHandlerHandleURL(args: LinkHandlerEventArgs, context: IAgentContext<ILinkHandlerPlugin>): Promise<void>\n}\n","import type { IAgentContext, IAgentPlugin } from '@veramo/core'\nimport Debug from 'debug'\nimport { type ILinkHandlerPlugin, type LinkHandlerEvent, type LinkHandlerEventArgs, LinkHandlerEventType, LinkHandlers } from '../index'\n\nconst debug = Debug(`sphereon:ssi-sdk:LinkHandler`)\n/**\n * {@inheritDoc ILinkHandlerPlugin}\n */\n\nexport class LinkHandlerPlugin implements IAgentPlugin {\n // readonly schema = schema.IEventLogger\n readonly eventTypes?: Array<LinkHandlerEventType> = []\n readonly handlers: LinkHandlers\n\n readonly methods: ILinkHandlerPlugin = {\n linkHandlerHandleURL: this.linkHandlerHandleURL.bind(this),\n }\n\n constructor(options: { eventTypes?: LinkHandlerEventType[]; handlers: LinkHandlers }) {\n const { eventTypes, handlers } = options\n this.eventTypes = eventTypes\n this.handlers = handlers\n }\n\n public async onEvent(event: LinkHandlerEvent, context: IAgentContext<ILinkHandlerPlugin>): Promise<void> {\n switch (event.type) {\n case LinkHandlerEventType.LINK_HANDLER_URL:\n // Calling the context of the agent to make sure the REST client is called when configured\n await context.agent.linkHandlerHandleURL({ ...event.data })\n break\n default:\n return Promise.reject(Error(`Event type ${event.type} not supported`))\n }\n }\n\n private async linkHandlerHandleURL(args: LinkHandlerEventArgs): Promise<void> {\n const { url, source, options } = args\n debug(`received url '${url} from source ${source}`)\n return await this.handlers.handle(args.url, options)\n }\n}\n"],"mappings":"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","names":["Loggers","LogLevel","LogMethod","EventLogger","context","namespace","system","subSystemType","logLevel","initiatorType","LOGGERS","Loggers","DEFAULT","args","subSystem","LogLevel","INFO","localListener","event","level","data","type","rest","get","logl","agent","emit","simple","options","logger","eventName","methods","LogMethod","EVENT","eventEmitter","listeners","includes","addListener","logEvent","eventData","JSON","stringify","Promise","reject","Error","result","EventLoggerBuilder","context","namespace","system","subSystem","logLevel","initiatorType","withContext","withNamespace","withSystem","withSubSystem","withLogLevel","withInitiatorType","build","EventLogger","agentContext","agent","PartyCorrelationType","CredentialType","isDefined","arg","asArray","Array","isArray","isIterable","obj","Symbol","iterator","intersect","a","b","setB","Set","filter","x","has","concat","concatArrays","fromString","toString","encode_1","encode","MSB","REST","MSBALL","INT","Math","pow","num","out","offset","oldOffset","bytes","decode","read","MSB$1","REST$1","buf","res","shift","counter","b","l","length","RangeError","N1","N2","N3","N4","N5","N6","N7","N8","N9","value","varint","encodingLength","_brrp_varint","decode","varint","MultibaseFormat","hexToMultibase","hex","type","value","bytesToMultibase","hexToBytes","format","keyType","multibaseToHex","multibase","startsWith","Error","props","multibaseKeyToProps","bytesToHex","multibaseKeyToBytes","bytesToBase64url","b","toString","base64ToBytes","s","inputBase64Url","replace","fromString","bytesToBase64","encodeBase64url","decodeBase64url","bytesToUtf8String","stringToUtf8Bytes","encodeJoseBlob","payload","JSON","stringify","decodeJoseBlob","blob","parse","hexString","Uint8Array","from","noPrefix","substring","padded","length","toLowerCase","byteArray","prefix","result","base58ToBytes","bytesToBase58","charAt","bytes","keyLength","code","slice","getMultibasePropsByCode","SUPPORTED_KEY_CODECS","minLegth","maxLength","getMultibasePropsByType","keytype","find","row","multicodec","varCode","Number","parseInt","varType","encode","concatArrays","concat","arrays","bearerToken","token","opts","bearer","includeBearerHeader","defaultHasher","defaultHasherOrig","sha256","sha256Orig","shaHasher","flattenArray","args","items","flat","flattenMigrations","migrations","enablePostgresUuidExtension","queryRunner","query","error","console","Loggers","fetch","imageSize","fromString","toString","logger","Loggers","DEFAULT","get","isSvg","uint8Array","maxCheckLength","Math","min","length","initialText","toString","subarray","normalizedText","trim","toLowerCase","startsWith","parseDimension","dimension","match","parseFloat","getSvgDimensions","svgContent","TextDecoder","decode","widthMatch","heightMatch","viewBoxMatch","width","undefined","height","parts","map","Number","x","y","viewBoxWidth","viewBoxHeight","type","getImageMediaType","value","fromString","result","imageSize","getImageDimensions","dimensions","Promise","reject","Error","downloadImage","url","debug","warning","response","fetch","ok","error","status","statusText","contentType","headers","base64Content","Buffer","from","arrayBuffer","e","SuppliedSigner","keyRef","context","algorithm","data","input","Object","getPrototypeOf","Uint8Array","TextDecoder","decode","agent","keyManagerSign","kid","KeyAlgo","Loggers","DefaultLinkPriorities","Number","MAX_VALUE","emitLinkHandlerURLEvent","event","context","agent","emit","LinkHandlerEventType","LinkHandlers","_id","_priority","DefaultLinkPriorities","DEFAULT","_handlers","Map","_protocols","Set","id","priority","protocols","Array","from","get","supports","urlArg","url","URL","values","some","predicate","protocol","toLowerCase","test","all","handler","handle","opts","singleHandlerOnly","noExceptionOnNoHandler","otherOpts","handlers","filter","length","LogLinkHandler","ID","Promise","reject","Error","map","e","console","log","message","add","isArray","forEach","set","endsWith","remove","result","delete","rePopulateProtocols","has","clear","sort","handler1","handler2","LinkHandlerAdapter","args","value","toURL","toString","LOWEST","resolve","Loggers","Debug","debug","Debug","LinkHandlerPlugin","eventTypes","handlers","methods","linkHandlerHandleURL","bind","options","onEvent","event","context","type","LinkHandlerEventType","LINK_HANDLER_URL","agent","data","Promise","reject","Error","args","url","source","handle"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sphereon/ssi-sdk.core",
3
3
  "description": "SSI SDK Core & Interfaces",
4
- "version": "0.34.1-next.3+6c49ea2f",
4
+ "version": "0.34.1-next.322+78f8dd31",
5
5
  "source": "./src/index.ts",
6
6
  "type": "module",
7
7
  "main": "./dist/index.cjs",
@@ -23,9 +23,9 @@
23
23
  },
24
24
  "dependencies": {
25
25
  "@noble/hashes": "^1.6.1",
26
- "@sphereon/ssi-types": "0.34.1-next.3+6c49ea2f",
26
+ "@sphereon/ssi-types": "0.34.1-next.322+78f8dd31",
27
27
  "@veramo/core": "4.2.0",
28
- "cross-fetch": "^3.1.8",
28
+ "cross-fetch": "^4.1.0",
29
29
  "debug": "^4.3.5",
30
30
  "image-size": "2.0.1",
31
31
  "uint8arrays": "^3.1.1"
@@ -48,5 +48,5 @@
48
48
  "author": "Sphereon <dev@sphereon.com>",
49
49
  "license": "Apache-2.0",
50
50
  "keywords": [],
51
- "gitHead": "6c49ea2f9c1bc61641ca2c98e3aa0a5b48018d91"
51
+ "gitHead": "78f8dd3157066ae8cf11d2ae50c8c3d8f43b8ed0"
52
52
  }
@@ -56,9 +56,10 @@ export class LinkHandlers implements LinkHandler, LinkHandlerRegistry {
56
56
  }
57
57
  try {
58
58
  if (singleHandlerOnly === true) {
59
- return await handlers[0].handle(url, otherOpts)
59
+ await handlers[0].handle(url, otherOpts)
60
+ } else {
61
+ await Promise.all(handlers.map((handler) => handler.handle(url, otherOpts)))
60
62
  }
61
- handlers.map(async (handler) => await handler.handle(url, otherOpts))
62
63
  } catch (e) {
63
64
  console.log(`Linkhandler error: ${e.message}`, e)
64
65
  return Promise.reject(e)
@@ -36,8 +36,8 @@ export type LinkHandlerEventData = {
36
36
  options?: Record<string, any>
37
37
  }
38
38
 
39
- export const emitLinkHandlerURLEvent = (event: LinkHandlerEventData, context: IAgentContext<any>): Promise<void> => {
40
- return context.agent.emit(LinkHandlerEventType.LINK_HANDLER_URL, event)
39
+ export const emitLinkHandlerURLEvent = async (event: LinkHandlerEventData, context: IAgentContext<any>): Promise<void> => {
40
+ return await context.agent.emit(LinkHandlerEventType.LINK_HANDLER_URL, event)
41
41
  }
42
42
 
43
43
  export enum LinkHandlerEventType {