diff --git a/packages/agent/package.json b/packages/agent/package.json index 5427ab86..e16fadaf 100644 --- a/packages/agent/package.json +++ b/packages/agent/package.json @@ -15,6 +15,7 @@ "@internal/openid4vc-client": "*", "@internal/utils": "*", "@tanstack/react-query": "^4.33.0", + "query-string": "^8.1.0", "rxjs": "^7.8.1" }, "peerDependencies": { diff --git a/packages/agent/src/parsers.ts b/packages/agent/src/parsers.ts index 1aa73258..74310b74 100644 --- a/packages/agent/src/parsers.ts +++ b/packages/agent/src/parsers.ts @@ -33,6 +33,7 @@ import { W3cCredentialRepository } from '@aries-framework/core/build/modules/vc/ import { supportsIncomingMessageType } from '@aries-framework/core/build/utils/messageType' import { OpenId4VpClientService, OpenIdCredentialFormatProfile } from '@internal/openid4vc-client' import { getHostNameFromUrl } from '@internal/utils' +import queryString from 'query-string' import { filter, firstValueFrom, merge, first, timeout } from 'rxjs' export enum QrTypes { @@ -346,12 +347,15 @@ export async function tryParseDidCommInvitation( invitationUrl: string ): Promise { try { + const parsedUrl = queryString.parseUrl(invitationUrl) + const updatedInvitationUrl = (parsedUrl['oobUrl'] as string | undefined) ?? invitationUrl + // Try to parse the invitation as an DIDComm invitation. // We can't know for sure, as it could be a shortened URL to a DIDComm invitation. // So we use the parseMessage from AFJ and see if this returns a valid message. // Parse invitation supports legacy connection invitations, oob invitations, and // legacy connectionless invitations, and will all transform them into an OOB invitation. - const invitation = await agent.oob.parseInvitation(invitationUrl) + const invitation = await agent.oob.parseInvitation(updatedInvitationUrl) agent.config.logger.debug(`Parsed didcomm invitation with id ${invitation.id}`) return invitation diff --git a/yarn.lock b/yarn.lock index 2bff4e74..6b66f9c9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3281,6 +3281,7 @@ __metadata: "@internal/openid4vc-client": "*" "@internal/utils": "*" "@tanstack/react-query": ^4.33.0 + query-string: ^8.1.0 rxjs: ^7.8.1 peerDependencies: "@hyperledger/anoncreds-react-native": ^0.1.0 @@ -8610,6 +8611,13 @@ __metadata: languageName: node linkType: hard +"decode-uri-component@npm:^0.4.1": + version: 0.4.1 + resolution: "decode-uri-component@npm:0.4.1" + checksum: 0473924860986fb6ca19ee65a2af13e08801b4f3660475b058500ea8479ed715c919884a026b6bf4296dbb640d3cea74fadf45490b2439152fc548271d0201ec + languageName: node + linkType: hard + "decompress-response@npm:^3.3.0": version: 3.3.0 resolution: "decompress-response@npm:3.3.0" @@ -10409,6 +10417,13 @@ __metadata: languageName: node linkType: hard +"filter-obj@npm:^5.1.0": + version: 5.1.0 + resolution: "filter-obj@npm:5.1.0" + checksum: ba7c24d9b2c0552ee87d268e07eca74483af61fb740545ffa809f7e9e5294de38cf163ecc55af0e8a40020af9a49512c32f4022de2a858b110420fc8bffa7c9c + languageName: node + linkType: hard + "finalhandler@npm:1.1.2": version: 1.1.2 resolution: "finalhandler@npm:1.1.2" @@ -15236,6 +15251,17 @@ __metadata: languageName: node linkType: hard +"query-string@npm:^8.1.0": + version: 8.1.0 + resolution: "query-string@npm:8.1.0" + dependencies: + decode-uri-component: ^0.4.1 + filter-obj: ^5.1.0 + split-on-first: ^3.0.0 + checksum: 16fe49ab714f2b802bd31bc417876a38a82cd49bea01c0d6c37ca3439604c774752c8c66f9eda5ee33c268de2fc2a65e0e0e27aa97d8d98159af5c1fc838a017 + languageName: node + linkType: hard + "querystring@npm:0.2.0": version: 0.2.0 resolution: "querystring@npm:0.2.0" @@ -16681,6 +16707,13 @@ __metadata: languageName: node linkType: hard +"split-on-first@npm:^3.0.0": + version: 3.0.0 + resolution: "split-on-first@npm:3.0.0" + checksum: 75dc27ecbac65cfbeab9a3b90cf046307220192d3d7a30e46aa0f19571cc9b4802aac813f3de2cc9b16f2e46aae72f275659b5d2614bb5369c77724d739e5f73 + languageName: node + linkType: hard + "split@npm:^1.0.1": version: 1.0.1 resolution: "split@npm:1.0.1"