From 05ff2abd4fc23f411c2539b4fb635e5e6c37a8ab Mon Sep 17 00:00:00 2001 From: nitro-neal <5314059+nitro-neal@users.noreply.github.com> Date: Tue, 12 Dec 2023 13:39:49 -0600 Subject: [PATCH] Select creds test vector junit report (#344) * adding test vector * updates * underscores * upload junit xml for tests * fix path * fix merge * fix merge * Update .github/workflows/tests-ci.yml * Pin mocha-junit-reporter version Signed-off-by: Frank Hinek * Update test-vectors/presentation_exchange/select_credentials.json Co-authored-by: Frank Hinek * remove fs * remove fs * remove await --------- Signed-off-by: Frank Hinek Co-authored-by: finn Co-authored-by: Frank Hinek --- .github/workflows/tests-ci.yml | 10 ++- .gitignore | 2 + package-lock.json | 81 +++++++++++++++++++ packages/agent/package.json | 1 + packages/api/package.json | 1 + packages/common/package.json | 1 + packages/credentials/package.json | 1 + .../credentials/src/presentation-exchange.ts | 2 +- .../tests/presentation-exchange.spec.ts | 17 ++++ packages/crypto/package.json | 1 + packages/dids/package.json | 1 + packages/identity-agent/package.json | 1 + packages/proxy-agent/package.json | 1 + packages/user-agent/package.json | 1 + .../select_credentials.json | 59 ++++++++++++++ 15 files changed, 177 insertions(+), 3 deletions(-) create mode 100644 test-vectors/presentation_exchange/select_credentials.json diff --git a/.github/workflows/tests-ci.yml b/.github/workflows/tests-ci.yml index 97387bd67..9651fd6a4 100644 --- a/.github/workflows/tests-ci.yml +++ b/.github/workflows/tests-ci.yml @@ -55,13 +55,19 @@ jobs: echo "DWN_SERVER_BACKGROUND_PROCESS=$!" >> $GITHUB_ENV - name: Run tests for all packages - run: npm run test:node --ws -- --color + run: npm run test:node --ws -- --color --reporter mocha-junit-reporter --reporter-options mochaFile=./results.xml env: TEST_DWN_URL: http://localhost:3000 - name: Terminate dwn-server run: kill $DWN_SERVER_BACKGROUND_PROCESS || true + - name: Upload test results to update SDK reports + uses: actions/upload-artifact@v3 + with: + name: junit-results + path: packages/*/results.xml + - name: Upload test coverage to Codecov uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # v3.1.4 env: @@ -141,4 +147,4 @@ jobs: steps: - name: Checkout source uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 #v4.1.1 - - uses: TBD54566975/sdk-development@v0.2.3 + - uses: TBD54566975/sdk-development@v0.2.3 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 0e8366df5..e0b5c2fdb 100644 --- a/.gitignore +++ b/.gitignore @@ -158,3 +158,5 @@ dist # IntelliJ .idea + +results.xml \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a5981e353..9c1b17c41 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3932,6 +3932,15 @@ "node": ">=8" } }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/check-error": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", @@ -4541,6 +4550,15 @@ "node": ">= 8" } }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -8111,6 +8129,17 @@ "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", "dev": true }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -8122,6 +8151,12 @@ "safe-buffer": "^5.1.2" } }, + "node_modules/md5/node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -8353,6 +8388,37 @@ "url": "https://opencollective.com/mochajs" } }, + "node_modules/mocha-junit-reporter": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.2.1.tgz", + "integrity": "sha512-iDn2tlKHn8Vh8o4nCzcUVW4q7iXp7cC4EB78N0cDHIobLymyHNwe0XG8HEHHjc3hJlXm0Vy6zcrxaIhnI2fWmw==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "md5": "^2.3.0", + "mkdirp": "^3.0.0", + "strip-ansi": "^6.0.1", + "xml": "^1.0.1" + }, + "peerDependencies": { + "mocha": ">=2.2.5" + } + }, + "node_modules/mocha-junit-reporter/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/mocha/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -12771,6 +12837,12 @@ } } }, + "node_modules/xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", + "dev": true + }, "node_modules/xsalsa20": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/xsalsa20/-/xsalsa20-1.2.0.tgz", @@ -12932,6 +13004,7 @@ "eslint": "8.47.0", "eslint-plugin-mocha": "10.1.0", "mocha": "10.2.0", + "mocha-junit-reporter": "2.2.1", "node-stdlib-browser": "1.2.0", "playwright": "1.40.1", "rimraf": "4.4.0", @@ -13271,6 +13344,7 @@ "eslint": "8.47.0", "eslint-plugin-mocha": "10.1.0", "mocha": "10.2.0", + "mocha-junit-reporter": "2.2.1", "node-stdlib-browser": "1.2.0", "playwright": "1.40.1", "rimraf": "4.4.0", @@ -13603,6 +13677,7 @@ "eslint": "8.47.0", "eslint-plugin-mocha": "10.1.0", "mocha": "10.2.0", + "mocha-junit-reporter": "2.2.1", "playwright": "1.40.1", "rimraf": "4.4.0", "typescript": "5.1.6" @@ -13884,6 +13959,7 @@ "eslint": "8.47.0", "eslint-plugin-mocha": "10.1.0", "mocha": "10.2.0", + "mocha-junit-reporter": "2.2.1", "playwright": "1.40.1", "rimraf": "4.4.0", "typescript": "5.1.6" @@ -14160,6 +14236,7 @@ "eslint": "8.47.0", "eslint-plugin-mocha": "10.1.0", "mocha": "10.2.0", + "mocha-junit-reporter": "2.2.1", "playwright": "1.40.1", "rimraf": "4.4.0", "sinon": "15.0.2", @@ -14443,6 +14520,7 @@ "eslint": "8.47.0", "eslint-plugin-mocha": "10.1.0", "mocha": "10.2.0", + "mocha-junit-reporter": "2.2.1", "playwright": "1.40.1", "rimraf": "4.4.0", "sinon": "15.0.2", @@ -14775,6 +14853,7 @@ "eslint": "8.47.0", "eslint-plugin-mocha": "10.1.0", "mocha": "10.2.0", + "mocha-junit-reporter": "2.2.1", "node-stdlib-browser": "1.2.0", "playwright": "1.40.1", "rimraf": "4.4.0", @@ -15105,6 +15184,7 @@ "eslint": "8.47.0", "eslint-plugin-mocha": "10.1.0", "mocha": "10.2.0", + "mocha-junit-reporter": "2.2.1", "node-stdlib-browser": "1.2.0", "playwright": "1.40.1", "rimraf": "4.4.0", @@ -15435,6 +15515,7 @@ "eslint": "8.47.0", "eslint-plugin-mocha": "10.1.0", "mocha": "10.2.0", + "mocha-junit-reporter": "2.2.1", "node-stdlib-browser": "1.2.0", "playwright": "1.40.1", "rimraf": "4.4.0", diff --git a/packages/agent/package.json b/packages/agent/package.json index 56cfd71f7..4a136e696 100644 --- a/packages/agent/package.json +++ b/packages/agent/package.json @@ -94,6 +94,7 @@ "eslint": "8.47.0", "eslint-plugin-mocha": "10.1.0", "mocha": "10.2.0", + "mocha-junit-reporter": "2.2.1", "node-stdlib-browser": "1.2.0", "playwright": "1.40.1", "rimraf": "4.4.0", diff --git a/packages/api/package.json b/packages/api/package.json index 1368804e6..a26cc70e4 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -107,6 +107,7 @@ "eslint": "8.47.0", "eslint-plugin-mocha": "10.1.0", "mocha": "10.2.0", + "mocha-junit-reporter": "2.2.1", "node-stdlib-browser": "1.2.0", "playwright": "1.40.1", "rimraf": "4.4.0", diff --git a/packages/common/package.json b/packages/common/package.json index 6e1ea6088..7449a8589 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -90,6 +90,7 @@ "eslint": "8.47.0", "eslint-plugin-mocha": "10.1.0", "mocha": "10.2.0", + "mocha-junit-reporter": "2.2.1", "playwright": "1.40.1", "rimraf": "4.4.0", "typescript": "5.1.6" diff --git a/packages/credentials/package.json b/packages/credentials/package.json index 6a2e45baa..f7316d704 100644 --- a/packages/credentials/package.json +++ b/packages/credentials/package.json @@ -94,6 +94,7 @@ "eslint": "8.47.0", "eslint-plugin-mocha": "10.1.0", "mocha": "10.2.0", + "mocha-junit-reporter": "2.2.1", "playwright": "1.40.1", "rimraf": "4.4.0", "typescript": "5.1.6" diff --git a/packages/credentials/src/presentation-exchange.ts b/packages/credentials/src/presentation-exchange.ts index aecbb292d..adb968130 100644 --- a/packages/credentials/src/presentation-exchange.ts +++ b/packages/credentials/src/presentation-exchange.ts @@ -32,7 +32,7 @@ export class PresentationExchange { }): string[] { this.resetPex(); const selectResults: SelectResults = this.pex.selectFrom(presentationDefinition, vcJwts); - return selectResults.verifiableCredential as string[] ?? []; + return Array.from(new Set(selectResults.verifiableCredential as string[] ?? [])); } /** diff --git a/packages/credentials/tests/presentation-exchange.spec.ts b/packages/credentials/tests/presentation-exchange.spec.ts index c2e08265f..bf3082239 100644 --- a/packages/credentials/tests/presentation-exchange.spec.ts +++ b/packages/credentials/tests/presentation-exchange.spec.ts @@ -5,6 +5,8 @@ import type { Validated, PresentationDefinitionV2 } from '../src/presentation-ex import { VerifiableCredential } from '../src/verifiable-credential.js'; import { PresentationExchange } from '../src/presentation-exchange.js'; +import PresentationExchangeSelectCredentialsSpec from '../../../test-vectors/presentation_exchange/select_credentials.json' assert { type: 'json' }; + class BitcoinCredential { constructor( @@ -209,6 +211,21 @@ describe('PresentationExchange', () => { expect(warnings?.length).to.equal(0); }); }); + + describe('Web5TestVectorsPresentationExchangeSpec', () => { + it('select_credentials', async () => { + const vectors = PresentationExchangeSelectCredentialsSpec.vectors; + + for (let i = 0; i < vectors.length; i++) { + const input = vectors[i].input; + const expectedOutput = vectors[i].output.selectedCredentials; + + const selectedCreds = PresentationExchange.selectCredentials({ vcJwts: input.credentialJwts, presentationDefinition: input.presentationDefinition}); + + expect(selectedCreds).to.deep.equals(expectedOutput); + } + }); + }); }); function createPresentationDefinition(): PresentationDefinitionV2 { diff --git a/packages/crypto/package.json b/packages/crypto/package.json index 7d3f42096..16617ce34 100644 --- a/packages/crypto/package.json +++ b/packages/crypto/package.json @@ -99,6 +99,7 @@ "eslint": "8.47.0", "eslint-plugin-mocha": "10.1.0", "mocha": "10.2.0", + "mocha-junit-reporter": "2.2.1", "playwright": "1.40.1", "rimraf": "4.4.0", "sinon": "15.0.2", diff --git a/packages/dids/package.json b/packages/dids/package.json index 4c91071ac..5ca76fc16 100644 --- a/packages/dids/package.json +++ b/packages/dids/package.json @@ -105,6 +105,7 @@ "eslint": "8.47.0", "eslint-plugin-mocha": "10.1.0", "mocha": "10.2.0", + "mocha-junit-reporter": "2.2.1", "playwright": "1.40.1", "rimraf": "4.4.0", "sinon": "15.0.2", diff --git a/packages/identity-agent/package.json b/packages/identity-agent/package.json index d845d4799..83950223a 100644 --- a/packages/identity-agent/package.json +++ b/packages/identity-agent/package.json @@ -91,6 +91,7 @@ "eslint": "8.47.0", "eslint-plugin-mocha": "10.1.0", "mocha": "10.2.0", + "mocha-junit-reporter": "2.2.1", "node-stdlib-browser": "1.2.0", "playwright": "1.40.1", "rimraf": "4.4.0", diff --git a/packages/proxy-agent/package.json b/packages/proxy-agent/package.json index 76d8830f1..069da2aeb 100644 --- a/packages/proxy-agent/package.json +++ b/packages/proxy-agent/package.json @@ -90,6 +90,7 @@ "eslint": "8.47.0", "eslint-plugin-mocha": "10.1.0", "mocha": "10.2.0", + "mocha-junit-reporter": "2.2.1", "node-stdlib-browser": "1.2.0", "playwright": "1.40.1", "rimraf": "4.4.0", diff --git a/packages/user-agent/package.json b/packages/user-agent/package.json index 4bbb3c80f..c16079c2b 100644 --- a/packages/user-agent/package.json +++ b/packages/user-agent/package.json @@ -90,6 +90,7 @@ "eslint": "8.47.0", "eslint-plugin-mocha": "10.1.0", "mocha": "10.2.0", + "mocha-junit-reporter": "2.2.1", "node-stdlib-browser": "1.2.0", "playwright": "1.40.1", "rimraf": "4.4.0", diff --git a/test-vectors/presentation_exchange/select_credentials.json b/test-vectors/presentation_exchange/select_credentials.json new file mode 100644 index 000000000..544e8d1d8 --- /dev/null +++ b/test-vectors/presentation_exchange/select_credentials.json @@ -0,0 +1,59 @@ +{ + "description": "Select Credentials", + "vectors": [ + { + "description": "select credentials for presentation", + "input": { + "presentationDefinition": { + "id": "test-pd-id", + "name": "simple PD", + "purpose": "pd for testing", + "input_descriptors": [ + { + "id": "whatever", + "purpose": "id for testing", + "constraints": { + "fields": [ + { + "path": [ + "$.vc.credentialSubject.btcAddress", + "$.credentialSubject.btcAddress", + "$.btcAddress" + ] + } + ] + } + }, + { + "id": "whatever2", + "purpose": "id for testing2", + "constraints": { + "fields": [ + { + "path": [ + "$.vc.credentialSubject.dogeAddress", + "$.credentialSubject.dogeAddress", + "$.dogeAddress" + ] + } + ] + } + } + ] + }, + "credentialJwts": [ + "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HI3o2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsInN1YiI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlN0cmVldENyZWQiXSwiaWQiOiJ1cm46dXVpZDoxM2Q1YTg3YS1kY2Y1LTRmYjktOWUyOS0wZTYyZTI0YzQ0ODYiLCJpc3N1ZXIiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsImlzc3VhbmNlRGF0ZSI6IjIwMjMtMTItMDdUMTc6MTk6MTNaIiwiY3JlZGVudGlhbFN1YmplY3QiOnsiaWQiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsIm90aGVydGhpbmciOiJvdGhlcnN0dWZmIn19fQ.FVvL3z8LHJXm7lGX2bGFvH_U-bTyoheRbLzE7zIk_P1BKwRYeW4sbYNzsovFX59twXrnpF-hHkqVVsejSljxDw", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HI3o2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsInN1YiI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkJpdGNvaW5Eb2dlQ3JlZGVudGlhbCJdLCJpZCI6InVybjp1dWlkOjViZTkwNzQ0LWE3MjQtNGJlNy1hN2EzLTlmMjYwZWMwNDhkMSIsImlzc3VlciI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwiaXNzdWFuY2VEYXRlIjoiMjAyMy0xMi0wN1QxNzoxOToxM1oiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwiYnRjQWRkcmVzcyI6ImJ0Y0FkZHJlc3MxMjMiLCJkb2dlQWRkcmVzcyI6ImRvZ2VBZGRyZXNzMTIzIn19fQ.gTfgbVTj_IQS_rM-mOAURGan6Ojk7MSSgFHeog6cqo6DWpDq0pwSRxceAqZhZbSKsW2MFpbBpTko1BgNNMIrDQ", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HI3o2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsInN1YiI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkJpdGNvaW5DcmVkZW50aWFsIl0sImlkIjoidXJuOnV1aWQ6NGE0OGIyNzUtNTBmZC00MTQ0LWJmMTctY2E5ODMxYzlkYTYyIiwiaXNzdWVyIjoiZGlkOmtleTp6Nk1rZkhCTm1jNGNDaE50RHZhcjE4VFppZ2ZYdDdQNjVGQkd3cVFUdHhRb1FQbkciLCJpc3N1YW5jZURhdGUiOiIyMDIzLTEyLTA3VDE3OjE5OjEzWiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6Nk1rZkhCTm1jNGNDaE50RHZhcjE4VFppZ2ZYdDdQNjVGQkd3cVFUdHhRb1FQbkciLCJidGNBZGRyZXNzIjoiYnRjQWRkcmVzczEyMyJ9fX0.75Xyx-SWSeo8rfvHK-mxl3ixa3QZxj7waPuJZ58s52yTffs6AjpO3uSNAO3WOV-rtS-puIRm7vClZCsUA3JRAQ", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HI3o2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsInN1YiI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkJpdGNvaW5DcmVkZW50aWFsIl0sImlkIjoidXJuOnV1aWQ6NGE0OGIyNzUtNTBmZC00MTQ0LWJmMTctY2E5ODMxYzlkYTYyIiwiaXNzdWVyIjoiZGlkOmtleTp6Nk1rZkhCTm1jNGNDaE50RHZhcjE4VFppZ2ZYdDdQNjVGQkd3cVFUdHhRb1FQbkciLCJpc3N1YW5jZURhdGUiOiIyMDIzLTEyLTA3VDE3OjE5OjEzWiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6Nk1rZkhCTm1jNGNDaE50RHZhcjE4VFppZ2ZYdDdQNjVGQkd3cVFUdHhRb1FQbkciLCJidGNBZGRyZXNzIjoiYnRjQWRkcmVzczEyMyJ9fX0.75Xyx-SWSeo8rfvHK-mxl3ixa3QZxj7waPuJZ58s52yTffs6AjpO3uSNAO3WOV-rtS-puIRm7vClZCsUA3JRAQ" + ] + }, + "output": { + "selectedCredentials": [ + "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HI3o2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsInN1YiI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkJpdGNvaW5Eb2dlQ3JlZGVudGlhbCJdLCJpZCI6InVybjp1dWlkOjViZTkwNzQ0LWE3MjQtNGJlNy1hN2EzLTlmMjYwZWMwNDhkMSIsImlzc3VlciI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwiaXNzdWFuY2VEYXRlIjoiMjAyMy0xMi0wN1QxNzoxOToxM1oiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwiYnRjQWRkcmVzcyI6ImJ0Y0FkZHJlc3MxMjMiLCJkb2dlQWRkcmVzcyI6ImRvZ2VBZGRyZXNzMTIzIn19fQ.gTfgbVTj_IQS_rM-mOAURGan6Ojk7MSSgFHeog6cqo6DWpDq0pwSRxceAqZhZbSKsW2MFpbBpTko1BgNNMIrDQ", + "eyJ0eXAiOiJKV1QiLCJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HI3o2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyJ9.eyJpc3MiOiJkaWQ6a2V5Ono2TWtmSEJObWM0Y0NoTnREdmFyMThUWmlnZlh0N1A2NUZCR3dxUVR0eFFvUVBuRyIsInN1YiI6ImRpZDprZXk6ejZNa2ZIQk5tYzRjQ2hOdER2YXIxOFRaaWdmWHQ3UDY1RkJHd3FRVHR4UW9RUG5HIiwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkJpdGNvaW5DcmVkZW50aWFsIl0sImlkIjoidXJuOnV1aWQ6NGE0OGIyNzUtNTBmZC00MTQ0LWJmMTctY2E5ODMxYzlkYTYyIiwiaXNzdWVyIjoiZGlkOmtleTp6Nk1rZkhCTm1jNGNDaE50RHZhcjE4VFppZ2ZYdDdQNjVGQkd3cVFUdHhRb1FQbkciLCJpc3N1YW5jZURhdGUiOiIyMDIzLTEyLTA3VDE3OjE5OjEzWiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoiZGlkOmtleTp6Nk1rZkhCTm1jNGNDaE50RHZhcjE4VFppZ2ZYdDdQNjVGQkd3cVFUdHhRb1FQbkciLCJidGNBZGRyZXNzIjoiYnRjQWRkcmVzczEyMyJ9fX0.75Xyx-SWSeo8rfvHK-mxl3ixa3QZxj7waPuJZ58s52yTffs6AjpO3uSNAO3WOV-rtS-puIRm7vClZCsUA3JRAQ" + ] + } + } + ] +} \ No newline at end of file