From 9f06ab1e0efef89848fb6e6a2b80ed874717e580 Mon Sep 17 00:00:00 2001 From: Niels Klomp Date: Thu, 21 Dec 2023 19:08:30 +0100 Subject: [PATCH] fix: Add back jwt_vc format support for older versions --- packages/callback-example/package.json | 2 +- packages/client/lib/AccessTokenClient.ts | 18 +- .../client/lib/CredentialRequestClient.ts | 5 +- .../lib/CredentialRequestClientBuilder.ts | 19 + .../__tests__/CredentialRequestClient.spec.ts | 2 +- .../lib/__tests__/data/VciDataFixtures.ts | 2 +- packages/client/package.json | 4 +- .../lib/functions/CredentialOfferUtil.ts | 2 +- .../lib/functions/CredentialRequestUtil.ts | 2 +- packages/common/lib/functions/FormatUtils.ts | 2 +- packages/common/lib/functions/HttpUtils.ts | 10 +- .../lib/functions/IssuerMetadataUtils.ts | 7 +- packages/common/lib/functions/index.ts | 1 + .../common/lib/types/Authorization.types.ts | 5 +- packages/common/lib/types/Generic.types.ts | 8 +- packages/common/lib/types/QRCode.types.ts | 4 +- packages/common/package.json | 2 +- .../lib/__tests__/ClientIssuerIT.spec.ts | 2 +- packages/issuer-rest/package.json | 4 +- packages/issuer/package.json | 2 +- pnpm-lock.yaml | 445 +++++++++++++++++- 21 files changed, 489 insertions(+), 59 deletions(-) diff --git a/packages/callback-example/package.json b/packages/callback-example/package.json index 7373224e..667fae50 100644 --- a/packages/callback-example/package.json +++ b/packages/callback-example/package.json @@ -18,7 +18,7 @@ "@sphereon/oid4vci-client": "workspace:*", "@sphereon/oid4vci-common": "workspace:*", "@sphereon/oid4vci-issuer": "workspace:*", - "@sphereon/ssi-types": "0.17.2", + "@sphereon/ssi-types": "0.17.6-unstable.23", "jose": "^4.10.0" }, "devDependencies": { diff --git a/packages/client/lib/AccessTokenClient.ts b/packages/client/lib/AccessTokenClient.ts index bab1788f..47fb7a39 100644 --- a/packages/client/lib/AccessTokenClient.ts +++ b/packages/client/lib/AccessTokenClient.ts @@ -27,9 +27,11 @@ export class AccessTokenClient { public async acquireAccessToken(opts: AccessTokenRequestOpts): Promise> { const { asOpts, pin, codeVerifier, code, redirectUri, metadata } = opts; - const credentialOffer = await assertedUniformCredentialOffer(opts.credentialOffer); - const isPinRequired = this.isPinRequiredValue(credentialOffer.credential_offer); - const issuer = getIssuerFromCredentialOfferPayload(credentialOffer.credential_offer) ?? (metadata?.issuer as string); + const credentialOffer = opts.credentialOffer ? await assertedUniformCredentialOffer(opts.credentialOffer) : undefined; + const isPinRequired = credentialOffer && this.isPinRequiredValue(credentialOffer.credential_offer); + const issuer = + opts.credentialIssuer ?? + (credentialOffer ? getIssuerFromCredentialOfferPayload(credentialOffer.credential_offer) : (metadata?.issuer as string)); if (!issuer) { throw Error('Issuer required at this point'); } @@ -83,14 +85,14 @@ export class AccessTokenClient { public async createAccessTokenRequest(opts: AccessTokenRequestOpts): Promise { const { asOpts, pin, codeVerifier, code, redirectUri } = opts; - const credentialOfferRequest = await toUniformCredentialOfferRequest(opts.credentialOffer); + const credentialOfferRequest = opts.credentialOffer ? await toUniformCredentialOfferRequest(opts.credentialOffer) : undefined; const request: Partial = {}; if (asOpts?.clientId) { request.client_id = asOpts.clientId; } - if (credentialOfferRequest.supportedFlows.includes(AuthzFlowType.PRE_AUTHORIZED_CODE_FLOW)) { + if (credentialOfferRequest?.supportedFlows.includes(AuthzFlowType.PRE_AUTHORIZED_CODE_FLOW)) { this.assertNumericPin(this.isPinRequiredValue(credentialOfferRequest.credential_offer), pin); request.user_pin = pin; @@ -102,7 +104,7 @@ export class AccessTokenClient { return request as AccessTokenRequest; } - if (credentialOfferRequest.supportedFlows.includes(AuthzFlowType.AUTHORIZATION_CODE_FLOW)) { + if (!credentialOfferRequest || credentialOfferRequest.supportedFlows.includes(AuthzFlowType.AUTHORIZATION_CODE_FLOW)) { request.grant_type = GrantTypes.AUTHORIZATION_CODE; request.code = code; request.redirect_uri = redirectUri; @@ -243,7 +245,7 @@ export class AccessTokenClient { } private throwNotSupportedFlow(): void { - debug(`Only pre-authorized flow supported.`); - throw new Error('Only pre-authorized-code flow is supported'); + debug(`Only pre-authorized or authorization code flows supported.`); + throw new Error('Only pre-authorized-code or authorization code flows are supported'); } } diff --git a/packages/client/lib/CredentialRequestClient.ts b/packages/client/lib/CredentialRequestClient.ts index 8bcdfb89..fe2966c7 100644 --- a/packages/client/lib/CredentialRequestClient.ts +++ b/packages/client/lib/CredentialRequestClient.ts @@ -61,9 +61,10 @@ export class CredentialRequestClient { throw new Error(URL_NOT_VALID); } debug(`Acquiring credential(s) from: ${credentialEndpoint}`); + debug(`request\n: ${JSON.stringify(request, null, 2)}`); const requestToken: string = this.credentialRequestOpts.token; const response: OpenIDResponse = await post(credentialEndpoint, JSON.stringify(request), { bearerToken: requestToken }); - debug(`Credential endpoint ${credentialEndpoint} response:\r\n${response}`); + debug(`Credential endpoint ${credentialEndpoint} response:\r\n${JSON.stringify(response, null, 2)}`); return response; } @@ -99,7 +100,7 @@ export class CredentialRequestClient { : await proofInput.build(); // TODO: we should move format specific logic - if (format === 'jwt_vc_json') { + if (format === 'jwt_vc_json' || format === 'jwt_vc') { return { types, format, diff --git a/packages/client/lib/CredentialRequestClientBuilder.ts b/packages/client/lib/CredentialRequestClientBuilder.ts index c3a0498e..8d953825 100644 --- a/packages/client/lib/CredentialRequestClientBuilder.ts +++ b/packages/client/lib/CredentialRequestClientBuilder.ts @@ -23,6 +23,25 @@ export class CredentialRequestClientBuilder { token?: string; version?: OpenId4VCIVersion; + public static fromCredentialIssuer({ + credentialIssuer, + metadata, + version, + credentialTypes, + }: { + credentialIssuer: string; + metadata?: EndpointMetadata; + version?: OpenId4VCIVersion; + credentialTypes: string | string[]; + }): CredentialRequestClientBuilder { + const issuer = credentialIssuer; + const builder = new CredentialRequestClientBuilder(); + builder.withVersion(version ?? OpenId4VCIVersion.VER_1_0_11); + builder.withCredentialEndpoint(metadata?.credential_endpoint ?? (issuer.endsWith('/') ? `${issuer}credential` : `${issuer}/credential`)); + builder.withCredentialType(credentialTypes); + return builder; + } + public static async fromURI({ uri, metadata }: { uri: string; metadata?: EndpointMetadata }): Promise { const offer = await CredentialOfferClient.fromURI(uri); return CredentialRequestClientBuilder.fromCredentialOfferRequest({ request: offer, ...offer, metadata, version: offer.version }); diff --git a/packages/client/lib/__tests__/CredentialRequestClient.spec.ts b/packages/client/lib/__tests__/CredentialRequestClient.spec.ts index c908a5a9..dc87a1d4 100644 --- a/packages/client/lib/__tests__/CredentialRequestClient.spec.ts +++ b/packages/client/lib/__tests__/CredentialRequestClient.spec.ts @@ -128,7 +128,7 @@ describe('Credential Request Client ', () => { version: OpenId4VCIVersion.VER_1_0_08, }); expect(credentialRequest.proof?.jwt?.includes(partialJWT)).toBeTruthy(); - expect(credentialRequest.format).toEqual('jwt_vc_json'); + expect(credentialRequest.format).toEqual('jwt_vc'); const result = await credReqClient.acquireCredentialsUsingRequest(credentialRequest); expect(result?.successBody?.credential).toEqual(mockedVC); }); diff --git a/packages/client/lib/__tests__/data/VciDataFixtures.ts b/packages/client/lib/__tests__/data/VciDataFixtures.ts index afce2671..81653cd5 100644 --- a/packages/client/lib/__tests__/data/VciDataFixtures.ts +++ b/packages/client/lib/__tests__/data/VciDataFixtures.ts @@ -358,7 +358,7 @@ const mockData: VciMockDataStructure = { url: 'https://jff.walt.id/issuer-api/default/oidc/credential', request: { types: ['OpenBadgeCredential'], - format: 'jwt_vc_json', + format: 'jwt_vc', proof: { proof_type: 'jwt', jwt: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksiLCJraWQiOiJkaWQ6andrOmV5SmhiR2NpT2lKRlV6STFOa3NpTENKMWMyVWlPaUp6YVdjaUxDSnJkSGtpT2lKRlF5SXNJbU55ZGlJNkluTmxZM0F5TlRack1TSXNJbmdpT2lKclpuVmpTa0V0VEhKck9VWjBPRmx5TFVkMlQzSmpia3N3YjNkc2RqUlhNblUwU3pJeFNHZHZTVlIzSWl3aWVTSTZJalozY0ZCUE1rOUNRVXBTU0ZFMVRXdEtXVlJaV0dsQlJFUXdOMU5OTlV0amVXcDNYMkUzVUUxWmVGa2lmUSMwIn0.eyJhdWQiOiJodHRwczovL2pmZi53YWx0LmlkL2lzc3Vlci1hcGkvZGVmYXVsdC9vaWRjLyIsImlhdCI6MTY4MTkxMTk0Mi4yMzgsImV4cCI6MTY4MTkxMjYwMi4yMzgsIm5vbmNlIjoiZjA2YTMxMDUtYTJlZC00NGZjLTk1NGItNGEyNTk3MDM0OTNiIiwiaXNzIjoic3BoZXJlb246c3NpLXdhbGxldCIsImp0aSI6IjA1OWM3ODA5LTlmOGYtNGE3ZS1hZDI4YTNhMTNhMGIzNmViIn0.RfiWyybxpe3nkx3b0yIsqDHQtvB1WwhDW4t0X-kijy2dsSfv2cYhSEmAzs1shg7OV4EW8fSzt_Te79xiVl6jCw', diff --git a/packages/client/package.json b/packages/client/package.json index 1d1c5a01..3969ee1e 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -16,7 +16,7 @@ }, "dependencies": { "@sphereon/oid4vci-common": "workspace:*", - "@sphereon/ssi-types": "0.17.2", + "@sphereon/ssi-types": "0.17.6-unstable.23", "cross-fetch": "^3.1.8", "debug": "^4.3.4" }, @@ -25,6 +25,7 @@ "@types/node": "^18.17.4", "@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/parser": "^5.62.0", + "@sphereon/ssi-sdk-ext.key-utils": "^0.15.1-next.7", "codecov": "^3.8.3", "dotenv": "^16.3.1", "eslint": "^8.46.0", @@ -38,6 +39,7 @@ "npm-run-all": "^4.1.5", "uuid": "^9.0.1", "@transmute/did-key.js": "^0.3.0-unstable.10", + "@trust/keyto": "^2.0.0-alpha1", "@types/uuid": "^9.0.6", "open-cli": "^7.2.0", "ts-jest": "^29.1.1", diff --git a/packages/common/lib/functions/CredentialOfferUtil.ts b/packages/common/lib/functions/CredentialOfferUtil.ts index 7f2428f1..74e2bf4f 100644 --- a/packages/common/lib/functions/CredentialOfferUtil.ts +++ b/packages/common/lib/functions/CredentialOfferUtil.ts @@ -350,7 +350,7 @@ export function getTypesFromOffer(credentialOffer: UniformCredentialOfferPayload return [...prev, curr]; } else if (curr.format === 'jwt_vc_json-ld' || curr.format === 'ldp_vc') { return [...prev, ...curr.credential_definition.types]; - } else if (curr.format === 'jwt_vc_json') { + } else if (curr.format === 'jwt_vc_json' || curr.format === 'jwt_vc') { return [...prev, ...curr.types]; } else if (curr.format === 'vc+sd-jwt') { return [...prev, curr.credential_definition.vct]; diff --git a/packages/common/lib/functions/CredentialRequestUtil.ts b/packages/common/lib/functions/CredentialRequestUtil.ts index 66ee9fe6..4efdd5b4 100644 --- a/packages/common/lib/functions/CredentialRequestUtil.ts +++ b/packages/common/lib/functions/CredentialRequestUtil.ts @@ -4,7 +4,7 @@ import { getFormatForVersion } from './FormatUtils'; export function getTypesFromRequest(credentialRequest: UniformCredentialRequest, opts?: { filterVerifiableCredential: boolean }) { let types: string[] = []; - if (credentialRequest.format === 'jwt_vc_json') { + if (credentialRequest.format === 'jwt_vc_json' || credentialRequest.format === 'jwt_vc') { types = credentialRequest.types; } else if (credentialRequest.format === 'jwt_vc_json-ld' || credentialRequest.format === 'ldp_vc') { types = credentialRequest.credential_definition.types; diff --git a/packages/common/lib/functions/FormatUtils.ts b/packages/common/lib/functions/FormatUtils.ts index 2eda8449..ed2a6b08 100644 --- a/packages/common/lib/functions/FormatUtils.ts +++ b/packages/common/lib/functions/FormatUtils.ts @@ -28,7 +28,7 @@ export function getUniformFormat(format: string | OID4VCICredentialFormat | Cred // Older formats if (format === 'jwt_vc' || format === 'jwt') { - return 'jwt_vc_json'; + return 'jwt_vc'; } if (format === 'ldp_vc' || format === 'ldp') { return 'ldp_vc'; diff --git a/packages/common/lib/functions/HttpUtils.ts b/packages/common/lib/functions/HttpUtils.ts index 6090bef8..757f6f97 100644 --- a/packages/common/lib/functions/HttpUtils.ts +++ b/packages/common/lib/functions/HttpUtils.ts @@ -8,7 +8,7 @@ const debug = Debug('sphereon:openid4vci:http'); export const getJson = async ( URL: string, opts?: { - bearerToken?: string; + bearerToken?: (() => Promise) | string; contentType?: string; accept?: string; customHeaders?: Record; @@ -22,7 +22,7 @@ export const formPost = async ( url: string, body: BodyInit, opts?: { - bearerToken?: string; + bearerToken?: (() => Promise) | string; contentType?: string; accept?: string; customHeaders?: Record; @@ -36,7 +36,7 @@ export const post = async ( url: string, body?: BodyInit, opts?: { - bearerToken?: string; + bearerToken?: (() => Promise) | string; contentType?: string; accept?: string; customHeaders?: Record; @@ -51,7 +51,7 @@ const openIdFetch = async ( body?: BodyInit, opts?: { method?: string; - bearerToken?: string; + bearerToken?: (() => Promise) | string; contentType?: string; accept?: string; customHeaders?: Record; @@ -60,7 +60,7 @@ const openIdFetch = async ( ): Promise> => { const headers: Record = opts?.customHeaders ?? {}; if (opts?.bearerToken) { - headers['Authorization'] = `Bearer ${opts.bearerToken}`; + headers['Authorization'] = `Bearer ${typeof opts.bearerToken === 'function' ? await opts.bearerToken() : opts.bearerToken}`; } const method = opts?.method ? opts.method : body ? 'POST' : 'GET'; const accept = opts?.accept ? opts.accept : 'application/json'; diff --git a/packages/common/lib/functions/IssuerMetadataUtils.ts b/packages/common/lib/functions/IssuerMetadataUtils.ts index 40eb85d6..5bf406cc 100644 --- a/packages/common/lib/functions/IssuerMetadataUtils.ts +++ b/packages/common/lib/functions/IssuerMetadataUtils.ts @@ -101,7 +101,12 @@ export function getSupportedCredential(opts?: { export function getTypesFromCredentialSupported(credentialSupported: CredentialSupported, opts?: { filterVerifiableCredential: boolean }) { let types: string[] = []; - if (credentialSupported.format === 'jwt_vc_json' || credentialSupported.format === 'jwt_vc_json-ld' || credentialSupported.format === 'ldp_vc') { + if ( + credentialSupported.format === 'jwt_vc_json' || + credentialSupported.format === 'jwt_vc' || + credentialSupported.format === 'jwt_vc_json-ld' || + credentialSupported.format === 'ldp_vc' + ) { types = credentialSupported.types; } else if (credentialSupported.format === 'vc+sd-jwt') { types = [credentialSupported.credential_definition.vct]; diff --git a/packages/common/lib/functions/index.ts b/packages/common/lib/functions/index.ts index f192cab0..83f69014 100644 --- a/packages/common/lib/functions/index.ts +++ b/packages/common/lib/functions/index.ts @@ -2,4 +2,5 @@ export * from './CredentialRequestUtil'; export * from './CredentialOfferUtil'; export * from './Encoding'; export * from './TypeConversionUtils'; +export * from './IssuerMetadataUtils'; export * from './FormatUtils'; diff --git a/packages/common/lib/types/Authorization.types.ts b/packages/common/lib/types/Authorization.types.ts index 0276d510..b8240835 100644 --- a/packages/common/lib/types/Authorization.types.ts +++ b/packages/common/lib/types/Authorization.types.ts @@ -111,7 +111,7 @@ export interface CommonAuthorizationDetails { } export interface AuthorizationDetailsJwtVcJson extends CommonAuthorizationDetails { - format: 'jwt_vc_json'; + format: 'jwt_vc_json' | 'jwt_vc'; // jwt_vc added for backward compat /** * A JSON object containing a list of key value pairs, where the key identifies the claim offered in the Credential. @@ -177,7 +177,8 @@ export interface IssuerOpts { } export interface AccessTokenRequestOpts { - credentialOffer: UniformCredentialOffer; + credentialOffer?: UniformCredentialOffer; + credentialIssuer?: string; asOpts?: AuthorizationServerOpts; metadata?: EndpointMetadata; codeVerifier?: string; // only required for authorization flow diff --git a/packages/common/lib/types/Generic.types.ts b/packages/common/lib/types/Generic.types.ts index 16e042df..7df6c4a7 100644 --- a/packages/common/lib/types/Generic.types.ts +++ b/packages/common/lib/types/Generic.types.ts @@ -15,7 +15,7 @@ export interface ImageInfo { [key: string]: unknown; } -export type OID4VCICredentialFormat = 'jwt_vc_json' | 'jwt_vc_json-ld' | 'ldp_vc' | 'vc+sd-jwt' /*| 'mso_mdoc'*/; // we do not support mdocs at this point +export type OID4VCICredentialFormat = 'jwt_vc_json' | 'jwt_vc_json-ld' | 'ldp_vc' | 'vc+sd-jwt' | 'jwt_vc'; // jwt_vc is added for backwards compat /*| 'mso_mdoc'*/; // we do not support mdocs at this point export interface NameAndLocale { name?: string; // REQUIRED. String value of a display name for the Credential. @@ -87,7 +87,7 @@ export interface CredentialSupportedJwtVcJson extends CommonCredentialSupported types: string[]; // REQUIRED. JSON array designating the types a certain credential type supports credentialSubject?: IssuerCredentialSubject; // OPTIONAL. A JSON object containing a list of key value pairs, where the key identifies the claim offered in the Credential. The value MAY be a dictionary, which allows to represent the full (potentially deeply nested) structure of the verifiable credential to be issued. order?: string[]; //An array of claims.display.name values that lists them in the order they should be displayed by the Wallet. - format: 'jwt_vc_json'; + format: 'jwt_vc_json' | 'jwt_vc'; // jwt_vc added for backwards compat } export interface SdJwtVcCredentialDefinition { @@ -117,7 +117,7 @@ export interface CredentialOfferFormatJwtVcJsonLdAndLdpVc extends CommonCredenti } export interface CredentialOfferFormatJwtVcJson extends CommonCredentialOfferFormat { - format: 'jwt_vc_json'; + format: 'jwt_vc_json' | 'jwt_vc'; // jwt_vc is added for backwards compat types: string[]; // REQUIRED. JSON array as defined in Appendix E.1.1.2. This claim contains the type values the Wallet shall request in the subsequent Credential Request. } @@ -164,7 +164,7 @@ export interface CommonCredentialRequest { } export interface CredentialRequestJwtVcJson extends CommonCredentialRequest { - format: 'jwt_vc_json'; + format: 'jwt_vc_json' | 'jwt_vc'; // jwt_vc for backwards compat types: string[]; credentialSubject?: IssuerCredentialSubject; } diff --git a/packages/common/lib/types/QRCode.types.ts b/packages/common/lib/types/QRCode.types.ts index 99deb63b..16280dcb 100644 --- a/packages/common/lib/types/QRCode.types.ts +++ b/packages/common/lib/types/QRCode.types.ts @@ -60,7 +60,7 @@ export interface ComponentOptions { */ protectors?: boolean; }; -}; +} export interface QRCodeOpts { /** @@ -224,4 +224,4 @@ export interface QRCodeOpts { * @deafultValue 0.4 */ dotScale?: number; -}; +} diff --git a/packages/common/package.json b/packages/common/package.json index ff5ff6bd..eeb5f78f 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -10,7 +10,7 @@ "build:clean": "tsc --build --clean && tsc --build" }, "dependencies": { - "@sphereon/ssi-types": "0.17.2", + "@sphereon/ssi-types": "0.17.6-unstable.23", "cross-fetch": "^3.1.8", "jwt-decode": "^3.1.2" }, diff --git a/packages/issuer-rest/lib/__tests__/ClientIssuerIT.spec.ts b/packages/issuer-rest/lib/__tests__/ClientIssuerIT.spec.ts index c19316be..c0ef72d5 100644 --- a/packages/issuer-rest/lib/__tests__/ClientIssuerIT.spec.ts +++ b/packages/issuer-rest/lib/__tests__/ClientIssuerIT.spec.ts @@ -296,7 +296,7 @@ describe('VcIssuer', () => { }) it('should get state on server side', async () => { const preAuthCode = - client.credentialOffer.credential_offer.grants?.['urn:ietf:params:oauth:grant-type:pre-authorized_code']?.['pre-authorized_code'] + client.credentialOffer!.credential_offer.grants?.['urn:ietf:params:oauth:grant-type:pre-authorized_code']?.['pre-authorized_code'] expect(preAuthCode).toBeDefined() if (preAuthCode) { diff --git a/packages/issuer-rest/package.json b/packages/issuer-rest/package.json index 3f1e5ede..62418c0f 100644 --- a/packages/issuer-rest/package.json +++ b/packages/issuer-rest/package.json @@ -13,8 +13,8 @@ "dependencies": { "@sphereon/oid4vci-common": "workspace:*", "@sphereon/oid4vci-issuer": "workspace:*", - "@sphereon/ssi-express-support": "0.17.2", - "@sphereon/ssi-types": "0.17.2", + "@sphereon/ssi-express-support": "0.17.6-unstable.23", + "@sphereon/ssi-types": "0.17.6-unstable.23", "body-parser": "^1.20.2", "cookie-parser": "^1.4.6", "cors": "^2.8.5", diff --git a/packages/issuer/package.json b/packages/issuer/package.json index 5a68335c..89f2cc75 100644 --- a/packages/issuer/package.json +++ b/packages/issuer/package.json @@ -11,7 +11,7 @@ }, "dependencies": { "@sphereon/oid4vci-common": "workspace:*", - "@sphereon/ssi-types": "0.17.2", + "@sphereon/ssi-types": "0.17.6-unstable.23", "uuid": "^9.0.0" }, "peerDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cbe61181..2b99ee3d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -75,8 +75,8 @@ importers: specifier: workspace:* version: link:../issuer '@sphereon/ssi-types': - specifier: 0.17.2 - version: 0.17.2 + specifier: 0.17.6-unstable.23 + version: 0.17.6-unstable.23 jose: specifier: ^4.10.0 version: 4.14.6 @@ -118,8 +118,8 @@ importers: specifier: workspace:* version: link:../common '@sphereon/ssi-types': - specifier: 0.17.2 - version: 0.17.2 + specifier: 0.17.6-unstable.23 + version: 0.17.6-unstable.23 cross-fetch: specifier: ^3.1.8 version: 3.1.8 @@ -127,9 +127,15 @@ importers: specifier: ^4.3.4 version: 4.3.4 devDependencies: + '@sphereon/ssi-sdk-ext.key-utils': + specifier: ^0.15.1-next.7 + version: 0.15.1-next.7(expo-crypto@12.6.0)(expo@48.0.20)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@transmute/did-key.js': specifier: ^0.3.0-unstable.10 version: 0.3.0-unstable.10 + '@trust/keyto': + specifier: ^2.0.0-alpha1 + version: 2.0.0-alpha1 '@types/jest': specifier: ^29.5.3 version: 29.5.5 @@ -200,8 +206,8 @@ importers: packages/common: dependencies: '@sphereon/ssi-types': - specifier: 0.17.2 - version: 0.17.2 + specifier: 0.17.6-unstable.23 + version: 0.17.6-unstable.23 cross-fetch: specifier: ^3.1.8 version: 3.1.8 @@ -222,8 +228,8 @@ importers: specifier: workspace:* version: link:../common '@sphereon/ssi-types': - specifier: 0.17.2 - version: 0.17.2 + specifier: 0.17.6-unstable.23 + version: 0.17.6-unstable.23 awesome-qr: specifier: ^2.1.5-rc.0 version: 2.1.5-rc.0 @@ -256,11 +262,11 @@ importers: specifier: workspace:* version: link:../issuer '@sphereon/ssi-express-support': - specifier: 0.17.2 - version: 0.17.2 + specifier: 0.17.6-unstable.23 + version: 0.17.6-unstable.23 '@sphereon/ssi-types': - specifier: 0.17.2 - version: 0.17.2 + specifier: 0.17.6-unstable.23 + version: 0.17.6-unstable.23 body-parser: specifier: ^1.20.2 version: 1.20.2 @@ -1969,6 +1975,23 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@ethersproject/bytes@5.7.0: + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: true + + /@ethersproject/logger@5.7.0: + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + dev: true + + /@ethersproject/random@5.7.0: + resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: true + /@expo/bunyan@4.0.0: resolution: {integrity: sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA==} engines: {'0': node >=0.10.0} @@ -2770,10 +2793,29 @@ packages: dev: true optional: true + /@multiformats/base-x@4.0.1: + resolution: {integrity: sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==} + dev: true + + /@noble/ciphers@0.4.0: + resolution: {integrity: sha512-xaUaUUDWbHIFSxaQ/pIe+33VG2mfJp6N/KxKLmZr5biWdNznCAmfu24QRhX10BbVAuqOahAoyp0S4M9md6GPDw==} + dev: true + + /@noble/curves@1.2.0: + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + dependencies: + '@noble/hashes': 1.3.2 + dev: true + /@noble/ed25519@1.7.3: resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} dev: false + /@noble/hashes@1.3.2: + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + dev: true + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -3349,6 +3391,10 @@ packages: /@react-native/polyfills@2.0.0: resolution: {integrity: sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==} + /@scure/base@1.1.3: + resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} + dev: true + /@segment/loosely-validate-event@2.0.0: resolution: {integrity: sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==} dependencies: @@ -3412,8 +3458,35 @@ packages: dependencies: '@sinonjs/commons': 3.0.0 - /@sphereon/ssi-express-support@0.17.2: - resolution: {integrity: sha512-OrLC7YAelpUmCIzPRgHM97HBNFqDoSdJNNssstS6Ho0ZXswq4fsPDm+h49+//ogp1ERbuOl9Ywqhp+3DdLZCPA==} + /@sphereon/isomorphic-webcrypto@2.4.0-unstable.4(expo-crypto@12.6.0)(expo@48.0.20)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1): + resolution: {integrity: sha512-7i9GBta0yji3Z5ocyk82fXpqrV/swe7hXZVfVzOXRaGtTUNd+y8W/3cpHRQC2S4UEO/5N3lX7+B6qUunK9wS/Q==} + peerDependencies: + expo: '*' + expo-crypto: '*' + msrcrypto: ^1.5.8 + react-native-securerandom: ^1.0.1 + dependencies: + '@peculiar/webcrypto': 1.4.3 + asmcrypto.js: 2.3.2 + b64-lite: 1.4.0 + b64u-lite: 1.1.0 + cipher-base: 1.0.4 + create-hash: 1.2.0 + expo: 48.0.20(@babel/core@7.23.0) + expo-crypto: 12.6.0(expo@48.0.20) + inherits: 2.0.4 + md5.js: 1.3.5 + msrcrypto: 1.5.8 + randomfill: 1.0.4 + react-native-securerandom: 1.0.1(react-native@0.71.13) + ripemd160: 2.0.2 + sha.js: 2.4.11 + str2buf: 1.3.0 + webcrypto-shim: 0.1.7 + dev: true + + /@sphereon/ssi-express-support@0.17.6-unstable.23: + resolution: {integrity: sha512-1F6vhl0E0119H/UYM2mc9DUNOECb2VlVucfhQUdI+Znv6SCisgUw946GzalyqEt6EIkbAO7cN0KapD7m0g2Tww==} peerDependencies: '@noble/hashes': 1.2.0 passport-azure-ad: ^4.3.5 @@ -3443,12 +3516,42 @@ packages: - supports-color dev: false - /@sphereon/ssi-types@0.17.2: - resolution: {integrity: sha512-Qo1dkISavtPIe1WKZXZGyHvquoUvdUlDI0GLzb21clKFPuxbawXdlxpCqOh6NCNRfX7ohEeCUQdEA1PNBlnKYA==} + /@sphereon/ssi-sdk-ext.key-utils@0.15.1-next.7(expo-crypto@12.6.0)(expo@48.0.20)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1): + resolution: {integrity: sha512-dEvAricZE6+lFEQocW+gFw1dV1ZQNIu8BnQOeLk7RIkb0BoR6VE0W+dv3jw6HV24LSqVLjD+R5q0g2ZrYB+ekw==} + dependencies: + '@ethersproject/random': 5.7.0 + '@sphereon/isomorphic-webcrypto': 2.4.0-unstable.4(expo-crypto@12.6.0)(expo@48.0.20)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + '@stablelib/ed25519': 1.0.3 + '@stablelib/sha256': 1.0.1 + '@stablelib/sha512': 1.0.1 + '@veramo/core': 4.2.0 + base64url: 3.0.1 + debug: 4.3.4 + did-resolver: 4.1.0 + elliptic: 6.5.4 + lodash.isplainobject: 4.0.6 + multiformats: 9.9.0 + uint8arrays: 3.1.1 + varint: 6.0.0 + web-encoding: 1.1.5 + transitivePeerDependencies: + - expo + - expo-crypto + - msrcrypto + - react-native-securerandom + - supports-color + dev: true + + /@sphereon/ssi-types@0.17.6-unstable.23: + resolution: {integrity: sha512-ksMaQq8i0tlUc5uo+iinRFwEYXE5VM3QuOpYzeXtwqNRbbklCmf0mZR24XQGfu+vYH6RVf33U9j0hAaEqKU3ew==} dependencies: jwt-decode: 3.1.2 dev: false + /@stablelib/aead@1.0.1: + resolution: {integrity: sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==} + dev: true + /@stablelib/binary@1.0.1: resolution: {integrity: sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==} dependencies: @@ -3458,6 +3561,28 @@ packages: resolution: {integrity: sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==} dev: true + /@stablelib/chacha20poly1305@1.0.1: + resolution: {integrity: sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==} + dependencies: + '@stablelib/aead': 1.0.1 + '@stablelib/binary': 1.0.1 + '@stablelib/chacha': 1.0.1 + '@stablelib/constant-time': 1.0.1 + '@stablelib/poly1305': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: true + + /@stablelib/chacha@1.0.1: + resolution: {integrity: sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: true + + /@stablelib/constant-time@1.0.1: + resolution: {integrity: sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==} + dev: true + /@stablelib/ed25519@1.0.3: resolution: {integrity: sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==} dependencies: @@ -3477,6 +3602,13 @@ packages: '@stablelib/bytes': 1.0.1 dev: true + /@stablelib/poly1305@1.0.1: + resolution: {integrity: sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==} + dependencies: + '@stablelib/constant-time': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: true + /@stablelib/random@1.0.0: resolution: {integrity: sha512-G9vwwKrNCGMI/uHL6XeWe2Nk4BuxkYyWZagGaDU9wrsuV+9hUwNI1lok2WVo8uJDa2zx7ahNwN7Ij983hOUFEw==} dependencies: @@ -3490,6 +3622,14 @@ packages: '@stablelib/binary': 1.0.1 '@stablelib/wipe': 1.0.1 + /@stablelib/sha256@1.0.1: + resolution: {integrity: sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: true + /@stablelib/sha512@1.0.1: resolution: {integrity: sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==} dependencies: @@ -3508,6 +3648,24 @@ packages: '@stablelib/wipe': 1.0.1 dev: true + /@stablelib/xchacha20@1.0.1: + resolution: {integrity: sha512-1YkiZnFF4veUwBVhDnDYwo6EHeKzQK4FnLiO7ezCl/zu64uG0bCCAUROJaBkaLH+5BEsO3W7BTXTguMbSLlWSw==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/chacha': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: true + + /@stablelib/xchacha20poly1305@1.0.1: + resolution: {integrity: sha512-B1Abj0sMJ8h3HNmGnJ7vHBrAvxuNka6cJJoZ1ILN7iuacXp7sUYcgOVEOTLWj+rtQMpspY9tXSCRLPmN1mQNWg==} + dependencies: + '@stablelib/aead': 1.0.1 + '@stablelib/chacha20poly1305': 1.0.1 + '@stablelib/constant-time': 1.0.1 + '@stablelib/wipe': 1.0.1 + '@stablelib/xchacha20': 1.0.1 + dev: true + /@tokenizer/token@0.3.0: resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} dev: true @@ -3685,6 +3843,14 @@ packages: '@transmute/ld-key-pair': 0.7.0-unstable.81 dev: true + /@trust/keyto@2.0.0-alpha1: + resolution: {integrity: sha512-VmlOa+nOaDzhEUfprnVp7RxFQyuEwA4fJ5+smnsud5WM01gU16yQnO/ejZnDVMGXuq/sUwTa5pCej4JhkKA5Sg==} + dependencies: + asn1.js: 5.4.1 + base64url: 3.0.1 + elliptic: 6.5.4 + dev: true + /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true @@ -4090,6 +4256,19 @@ packages: graphql: 15.8.0 wonka: 4.0.15 + /@veramo/core@4.2.0: + resolution: {integrity: sha512-HIqbXfCbwOAJelR5Ohsm22vr63cy6ND8Ua/+9wfMDAiymUUS7NryaJ/v6NRtnmIrNZqUMDdR9/TWdp4cCq5eBg==} + dependencies: + credential-status: 2.0.6 + debug: 4.3.4 + did-jwt-vc: 3.2.14 + did-resolver: 4.1.0 + events: 3.3.0 + z-schema: 5.0.5 + transitivePeerDependencies: + - supports-color + dev: true + /@xmldom/xmldom@0.7.13: resolution: {integrity: sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==} engines: {node: '>=10.0.0'} @@ -4117,6 +4296,12 @@ packages: argparse: 2.0.1 dev: true + /@zxing/text-encoding@0.9.0: + resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} + requiresBuild: true + dev: true + optional: true + /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -4438,6 +4623,19 @@ packages: resolution: {integrity: sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA==} dev: false + /asmcrypto.js@2.3.2: + resolution: {integrity: sha512-3FgFARf7RupsZETQ1nHnhLUUvpcttcCq1iZCaVAbJZbCZ5VNRrNyvpDyHTOb0KC3llFcsyOT/a99NZcCbeiEsA==} + dev: true + + /asn1.js@5.4.1: + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + dependencies: + bn.js: 4.12.0 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + safer-buffer: 2.1.2 + dev: true + /asn1js@3.0.5: resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} engines: {node: '>=12.0.0'} @@ -4503,13 +4701,11 @@ packages: resolution: {integrity: sha512-aHe97M7DXt+dkpa8fHlCcm1CnskAHrJqEfMI0KN7dwqlzml/aUe1AGt6lk51HzrSfVD67xOso84sOpr+0wIe2w==} dependencies: base-64: 0.1.0 - dev: false /b64u-lite@1.1.0: resolution: {integrity: sha512-929qWGDVCRph7gQVTC6koHqQIpF4vtVaSbwLltFQo44B1bYUquALswZdBKFfrJCPEnsCOvWkJsPdQYZ/Ukhw8A==} dependencies: b64-lite: 1.4.0 - dev: false /babel-core@7.0.0-bridge.0(@babel/core@7.23.0): resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} @@ -4692,7 +4888,6 @@ packages: /base-64@0.1.0: resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==} - dev: false /base-x@3.0.9: resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} @@ -4724,6 +4919,10 @@ packages: safe-buffer: 5.1.2 dev: false + /bech32@2.0.0: + resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} + dev: true + /before-after-hook@2.2.3: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} dev: true @@ -5033,6 +5232,10 @@ packages: /canonicalize@1.0.8: resolution: {integrity: sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==} + /canonicalize@2.0.0: + resolution: {integrity: sha512-ulDEYPv7asdKvqahuAY35c1selLdzDwHqugK92hfkzvlDCwXRRelDkR+Er33md/PtnpqHemgkuDPanZ4fiYZ8w==} + dev: true + /canvas@2.11.2: resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} engines: {node: '>=6'} @@ -5102,6 +5305,13 @@ packages: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} + /cipher-base@1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + /cjs-module-lexer@1.2.3: resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} dev: true @@ -5563,6 +5773,16 @@ packages: typescript: 5.0.4 dev: true + /create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + dev: true + /create-jest@29.7.0(@types/node@18.18.0)(ts-node@10.9.1): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -5586,6 +5806,13 @@ packages: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true + /credential-status@2.0.6: + resolution: {integrity: sha512-l5ZwSbX/UXFJ3DQ3dFt4rc2BtfUu/rhlkefR7BL9EZsKPyCe21okJA9mDy4h/nXvMEwpYjSQEa5vzR7KZqhI9g==} + dependencies: + did-jwt: 6.11.6 + did-resolver: 4.1.0 + dev: true + /credentials-context@2.0.0: resolution: {integrity: sha512-/mFKax6FK26KjgV2KW2D4YqKgoJ5DVJpNt87X2Jc9IxT2HBMy7nEIlc+n7pEi+YFFe721XqrvZPd+jbyyBjsvQ==} dev: false @@ -5874,6 +6101,45 @@ packages: resolution: {integrity: sha512-iFpszgSxc7d1kNBJWC+PAzNTpe5LPalzsIunTMIpbG3O37Q7Zi7u4iIaedaM7UhziBhT+Agr9DyvAiXSUyfepQ==} dev: false + /did-jwt-vc@3.2.14: + resolution: {integrity: sha512-5O07lNiWQ3eUwYzJBuF6YFx/yqTlbqkcYNhP/Q4dmGN6Pwf8pfrU9fTb0alIfSwmvlyLk2fb2FkVi03iNk4jGQ==} + engines: {node: '>=18'} + dependencies: + did-jwt: 7.4.5 + did-resolver: 4.1.0 + dev: true + + /did-jwt@6.11.6: + resolution: {integrity: sha512-OfbWknRxJuUqH6Lk0x+H1FsuelGugLbBDEwsoJnicFOntIG/A4y19fn0a8RLxaQbWQ5gXg0yDq5E2huSBiiXzw==} + dependencies: + '@stablelib/ed25519': 1.0.3 + '@stablelib/random': 1.0.2 + '@stablelib/sha256': 1.0.1 + '@stablelib/x25519': 1.0.3 + '@stablelib/xchacha20poly1305': 1.0.1 + bech32: 2.0.0 + canonicalize: 2.0.0 + did-resolver: 4.1.0 + elliptic: 6.5.4 + js-sha3: 0.8.0 + multiformats: 9.9.0 + uint8arrays: 3.1.1 + dev: true + + /did-jwt@7.4.5: + resolution: {integrity: sha512-PjUFy/yhYeivNrQI5EaqYvF+cRL0itARQlXPfAnUUcj4tm40fzCU/0yWkhAoAPfM41e8O+QVRqOXwg0cZjlVeg==} + dependencies: + '@noble/ciphers': 0.4.0 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@scure/base': 1.1.3 + canonicalize: 2.0.0 + did-resolver: 4.1.0 + multibase: 4.0.6 + multiformats: 9.9.0 + uint8arrays: 3.1.1 + dev: true + /did-resolver@4.1.0: resolution: {integrity: sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==} dev: true @@ -6373,6 +6639,11 @@ packages: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} dev: true + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: true + /exec-async@2.2.0: resolution: {integrity: sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==} @@ -6492,6 +6763,15 @@ packages: transitivePeerDependencies: - supports-color + /expo-crypto@12.6.0(expo@48.0.20): + resolution: {integrity: sha512-wSq64eIJxk4lQBidtcW9wNF5AgO/UvV8W8mDhb7bo6P3xH41yvu/P4FcxevQY1taGA8VHD+fO+xQDrhPiHzFqQ==} + peerDependencies: + expo: '*' + dependencies: + base64-js: 1.5.1 + expo: 48.0.20(@babel/core@7.23.0) + dev: true + /expo-file-system@15.2.2(expo@48.0.20): resolution: {integrity: sha512-LFkOLcWwlmnjkURxZ3/0ukS35OswX8iuQknLHRHeyk8mUA8fpRPPelD/a1lS+yclqfqavMJmTXVKM1Nsq5XVMA==} peerDependencies: @@ -7431,6 +7711,15 @@ packages: dependencies: function-bind: 1.1.1 + /hash-base@3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + dev: true + /hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} dependencies: @@ -7775,6 +8064,14 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: @@ -7863,6 +8160,13 @@ packages: engines: {node: '>=6'} dev: true + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-glob@2.0.1: resolution: {integrity: sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==} engines: {node: '>=0.10.0'} @@ -8635,6 +8939,10 @@ packages: resolution: {integrity: sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg==} dev: false + /js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + dev: true + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -9072,10 +9380,22 @@ packages: /lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + /lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + dev: true + + /lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + dev: true + /lodash.ismatch@4.4.0: resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==} dev: true + /lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + dev: true + /lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} dev: true @@ -9239,6 +9559,14 @@ packages: dependencies: buffer-alloc: 1.2.0 + /md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + /md5@2.2.1: resolution: {integrity: sha512-PlGG4z5mBANDGCKsYQe0CaUYHdZYZt8ZPZLmEt+Urf0W4GlpTX4HescwHU+dc9+Z/G/vZKYZYFrwgm9VxK6QOQ==} dependencies: @@ -9884,7 +10212,14 @@ packages: /msrcrypto@1.5.8: resolution: {integrity: sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q==} - dev: false + + /multibase@4.0.6: + resolution: {integrity: sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==} + engines: {node: '>=12.0.0', npm: '>=6.0.0'} + deprecated: This module has been superseded by the multiformats module + dependencies: + '@multiformats/base-x': 4.0.1 + dev: true /multiformats@9.9.0: resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} @@ -11087,6 +11422,19 @@ packages: engines: {node: '>= 0.8'} dev: false + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /randomfill@1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + dependencies: + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: true + /range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -11176,7 +11524,6 @@ packages: dependencies: base64-js: 1.5.1 react-native: 0.71.13(@babel/core@7.23.0)(@babel/preset-env@7.22.20)(react@18.2.0) - dev: false /react-native@0.71.13(@babel/core@7.23.0)(@babel/preset-env@7.22.20)(react@18.2.0): resolution: {integrity: sha512-zEa69YQNLdv8Sf5Pn0CNDB1K9eGuNy1KoMNxXlrZ89JZ8d02b5hihZIoOCCIwhH+iPgslYwr3ZoGd3AY6FMrgw==} @@ -11583,6 +11930,13 @@ packages: glob: 10.3.10 dev: true + /ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + dev: true + /roarr@7.15.1: resolution: {integrity: sha512-0ExL9rjOXeQPvQvQo8IcV8SR2GTXmDr1FQFlY2HiAV+gdVQjaVZNOx9d4FI2RqFFsd0sNsiw2TRS/8RU9g0ZfA==} engines: {node: '>=12.0'} @@ -11780,6 +12134,14 @@ packages: /setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + /sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + /shallow-clone@3.0.1: resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} engines: {node: '>=8'} @@ -12024,7 +12386,6 @@ packages: /str2buf@1.3.0: resolution: {integrity: sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA==} - dev: false /stream-buffers@2.2.0: resolution: {integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==} @@ -13000,6 +13361,16 @@ packages: /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + /util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.12 + which-typed-array: 1.1.11 + dev: true + /utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} @@ -13060,6 +13431,15 @@ packages: builtins: 5.0.1 dev: true + /validator@13.11.0: + resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} + engines: {node: '>= 0.10'} + dev: true + + /varint@6.0.0: + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + dev: true + /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -13077,6 +13457,14 @@ packages: dependencies: defaults: 1.0.4 + /web-encoding@1.1.5: + resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==} + dependencies: + util: 0.12.5 + optionalDependencies: + '@zxing/text-encoding': 0.9.0 + dev: true + /webcrypto-core@1.7.7: resolution: {integrity: sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g==} dependencies: @@ -13088,7 +13476,6 @@ packages: /webcrypto-shim@0.1.7: resolution: {integrity: sha512-JAvAQR5mRNRxZW2jKigWMjCMkjSdmP5cColRP1U/pTg69VgHXEi1orv5vVpJ55Zc5MIaPc1aaurzd9pjv2bveg==} - dev: false /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -13412,3 +13799,15 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} dev: true + + /z-schema@5.0.5: + resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + lodash.get: 4.4.2 + lodash.isequal: 4.5.0 + validator: 13.11.0 + optionalDependencies: + commander: 9.5.0 + dev: true