From e3aa902e3d8a78b3bc52199bf7d7a5842b819191 Mon Sep 17 00:00:00 2001 From: pennhan-dex Date: Wed, 14 Jan 2026 13:39:41 +0800 Subject: [PATCH 01/18] implement verify command --- src/commands/verify.ts | 62 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/commands/verify.ts diff --git a/src/commands/verify.ts b/src/commands/verify.ts new file mode 100644 index 0000000..f4cd59e --- /dev/null +++ b/src/commands/verify.ts @@ -0,0 +1,62 @@ +import { input } from '@inquirer/prompts'; +import { readJsonFile } from '../utils'; +import { SignedVerifiableCredential, VerificationFragment, VerificationFragmentWithData, verifyDocument } from '@trustvc/trustvc'; +import signale from 'signale'; + +const isFragmentWithData = (fragment: VerificationFragment): fragment is VerificationFragmentWithData => fragment.status !== 'SKIPPED'; + +export const command = 'verify'; +export const describe = 'Verify a document signed using w3c or OpenAttestation'; + +export const handler = async () => { + try { + const answers = await promptQuestions(); + if (!answers) return; + + await verify(answers); + + } catch (err: unknown) { + signale.error(err instanceof Error ? err.message : String(err)); + } +} + +export const promptQuestions = async (): Promise<{ signedVC: SignedVerifiableCredential }> => { + const pathToSignedVC = await input({ + message: "Please enter the path to your signed credential file:", + required: true, + validate: (value: string) => { + if (!value || value.trim() === '') { + return 'signed credential file path is required'; + } + return true; + }, + }); + + const signedVC: SignedVerifiableCredential = readJsonFile(pathToSignedVC, 'document'); + + return { + signedVC, + } +} + +export const verify = async ({ signedVC }: { signedVC: SignedVerifiableCredential }) => { + const resultFragments = await verifyDocument(signedVC); // This function will handle both w3c and OA verification + const relevantTypes = new Set(['DOCUMENT_INTEGRITY', 'DOCUMENT_STATUS', 'ISSUER_IDENTITY']); + console.log(resultFragments); + const nonSkipped = (resultFragments as VerificationFragment[]) + .filter((fragment: VerificationFragment) => relevantTypes.has(fragment.type)) + .filter(isFragmentWithData); + + if (nonSkipped.length === 0) { + signale.info('No results for DOCUMENT_INTEGRITY, DOCUMENT_STATUS, or ISSUER_IDENTITY.'); + return; + } + + for (const fragment of nonSkipped) { + if (fragment.status === 'VALID') { + signale.success(`${fragment.type}: ${fragment.status}`); + } else { + signale.warn(`${fragment.type}: ${fragment.status} [${fragment.reason.message}]`); + } + } +} From 257430a4b3181e10c5d553aed4c9158afaea1b2f Mon Sep 17 00:00:00 2001 From: pennhan-dex Date: Wed, 14 Jan 2026 15:50:49 +0800 Subject: [PATCH 02/18] implement verifiy command --- src/commands/verify.ts | 60 ++++++++++++++++++++++++----------------- src/utils/formatting.ts | 16 +++++++++++ 2 files changed, 51 insertions(+), 25 deletions(-) diff --git a/src/commands/verify.ts b/src/commands/verify.ts index f4cd59e..36d7f8a 100644 --- a/src/commands/verify.ts +++ b/src/commands/verify.ts @@ -1,10 +1,8 @@ import { input } from '@inquirer/prompts'; -import { readJsonFile } from '../utils'; +import { readJsonFile, withAsyncCaptureConsoleWarn } from '../utils'; import { SignedVerifiableCredential, VerificationFragment, VerificationFragmentWithData, verifyDocument } from '@trustvc/trustvc'; import signale from 'signale'; -const isFragmentWithData = (fragment: VerificationFragment): fragment is VerificationFragmentWithData => fragment.status !== 'SKIPPED'; - export const command = 'verify'; export const describe = 'Verify a document signed using w3c or OpenAttestation'; @@ -20,13 +18,13 @@ export const handler = async () => { } } -export const promptQuestions = async (): Promise<{ signedVC: SignedVerifiableCredential }> => { +export const promptQuestions = async (): Promise => { const pathToSignedVC = await input({ - message: "Please enter the path to your signed credential file:", + message: "Please enter the path to your signed Verifiable Credential file:", required: true, validate: (value: string) => { if (!value || value.trim() === '') { - return 'signed credential file path is required'; + return 'signed Verifiable Credential file path is required'; } return true; }, @@ -34,29 +32,41 @@ export const promptQuestions = async (): Promise<{ signedVC: SignedVerifiableCre const signedVC: SignedVerifiableCredential = readJsonFile(pathToSignedVC, 'document'); - return { - signedVC, + return signedVC; +} + +export const verify = async (signedVC: SignedVerifiableCredential) => { + const { result, warnings } = await withAsyncCaptureConsoleWarn(() => verifyDocument(signedVC)); + logExpiredCredentialWarning(warnings); + + logResultStatus(getResultFromFragment('DOCUMENT_INTEGRITY', result)); + logResultStatus(getResultFromFragment('DOCUMENT_STATUS', result)); + logResultStatus(getResultFromFragment('ISSUER_IDENTITY', result)); +} + +// ==== Helper Functions ==== + + +const getResultFromFragment = (fragmentType: string, resultFragments: VerificationFragment[]): VerificationFragmentWithData => { + const fragment = resultFragments.find((fragment: VerificationFragment) => fragment.type === fragmentType && fragment.status !== 'SKIPPED'); + if (!fragment) { + throw new Error(`${fragmentType} could not be verified.`); } + return fragment as VerificationFragmentWithData; } -export const verify = async ({ signedVC }: { signedVC: SignedVerifiableCredential }) => { - const resultFragments = await verifyDocument(signedVC); // This function will handle both w3c and OA verification - const relevantTypes = new Set(['DOCUMENT_INTEGRITY', 'DOCUMENT_STATUS', 'ISSUER_IDENTITY']); - console.log(resultFragments); - const nonSkipped = (resultFragments as VerificationFragment[]) - .filter((fragment: VerificationFragment) => relevantTypes.has(fragment.type)) - .filter(isFragmentWithData); - - if (nonSkipped.length === 0) { - signale.info('No results for DOCUMENT_INTEGRITY, DOCUMENT_STATUS, or ISSUER_IDENTITY.'); - return; +const logResultStatus = (fragment: VerificationFragmentWithData): void => { + if (fragment.status === 'VALID') { + signale.success(`${fragment.type}: ${fragment.status}`); + } else { + signale.warn(`${fragment.type}: ${fragment.status} [${fragment.reason.message}]`); } +} - for (const fragment of nonSkipped) { - if (fragment.status === 'VALID') { - signale.success(`${fragment.type}: ${fragment.status}`); - } else { - signale.warn(`${fragment.type}: ${fragment.status} [${fragment.reason.message}]`); - } +// currently not logging to align outputs for w3c and openattestation +const logExpiredCredentialWarning = (warnings: unknown[][]) => { + const expiredWarning = warnings.find((warning) => warning[0] === 'Credential has expired.'); + if (expiredWarning) { + // signale.warn(`The Verifiable Credential has expired.`); } } diff --git a/src/utils/formatting.ts b/src/utils/formatting.ts index 5d008ac..78a597e 100644 --- a/src/utils/formatting.ts +++ b/src/utils/formatting.ts @@ -39,3 +39,19 @@ export const getErrorMessage = function (error: unknown): string { return extractErrorMessage(error); } }; + +export const withAsyncCaptureConsoleWarn = async (fn: () => Promise): Promise<{ result: T; warnings: unknown[][] }> => { + const originalWarn = console.warn; + const warnings: unknown[][] = []; + + console.warn = (...args) => { + warnings.push(args); + }; + + try { + const result = await fn(); + return { result, warnings }; + } finally { + console.warn = originalWarn; + } +} \ No newline at end of file From 75d870be6b77878a725e8afea879b068430f1945 Mon Sep 17 00:00:00 2001 From: pennhan-dex Date: Wed, 14 Jan 2026 17:40:57 +0800 Subject: [PATCH 03/18] implement unit tests --- .gitignore | 3 - src/commands/verify.ts | 10 +- src/utils/formatting.ts | 1 + tests/commands/verify.test.ts | 250 ++++++++++++++++++ .../oa/certificate-of-origin-default.json | 167 ++++++++++++ .../oa/certificate-of-origin-expired.json | 168 ++++++++++++ .../oa/certificate-of-origin-redacted.json | 161 +++++++++++ .../oa/certificate-of-origin-revoked.json | 168 ++++++++++++ .../w3c/certificate-of-origin-default.json | 101 +++++++ .../w3c/certificate-of-origin-expired.json | 102 +++++++ .../w3c/certificate-of-origin-redacted.json | 43 +++ .../w3c/certificate-of-origin-revoked.json | 111 ++++++++ 12 files changed, 1277 insertions(+), 8 deletions(-) create mode 100644 tests/commands/verify.test.ts create mode 100644 tests/fixtures/oa/certificate-of-origin-default.json create mode 100644 tests/fixtures/oa/certificate-of-origin-expired.json create mode 100644 tests/fixtures/oa/certificate-of-origin-redacted.json create mode 100644 tests/fixtures/oa/certificate-of-origin-revoked.json create mode 100644 tests/fixtures/w3c/certificate-of-origin-default.json create mode 100644 tests/fixtures/w3c/certificate-of-origin-expired.json create mode 100644 tests/fixtures/w3c/certificate-of-origin-redacted.json create mode 100644 tests/fixtures/w3c/certificate-of-origin-revoked.json diff --git a/.gitignore b/.gitignore index b0c1ad2..1926801 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,3 @@ -# Sample files for testing -fixtures - # Generated files from CLI commands keypair.json didKeyPairs.json diff --git a/src/commands/verify.ts b/src/commands/verify.ts index 36d7f8a..b2004b8 100644 --- a/src/commands/verify.ts +++ b/src/commands/verify.ts @@ -37,7 +37,7 @@ export const promptQuestions = async (): Promise => export const verify = async (signedVC: SignedVerifiableCredential) => { const { result, warnings } = await withAsyncCaptureConsoleWarn(() => verifyDocument(signedVC)); - logExpiredCredentialWarning(warnings); + handleExpiredCredentialWarning(warnings); logResultStatus(getResultFromFragment('DOCUMENT_INTEGRITY', result)); logResultStatus(getResultFromFragment('DOCUMENT_STATUS', result)); @@ -47,7 +47,7 @@ export const verify = async (signedVC: SignedVerifiableCredential) => { // ==== Helper Functions ==== -const getResultFromFragment = (fragmentType: string, resultFragments: VerificationFragment[]): VerificationFragmentWithData => { +export const getResultFromFragment = (fragmentType: string, resultFragments: VerificationFragment[]): VerificationFragmentWithData => { const fragment = resultFragments.find((fragment: VerificationFragment) => fragment.type === fragmentType && fragment.status !== 'SKIPPED'); if (!fragment) { throw new Error(`${fragmentType} could not be verified.`); @@ -55,7 +55,7 @@ const getResultFromFragment = (fragmentType: string, resultFragments: Verificati return fragment as VerificationFragmentWithData; } -const logResultStatus = (fragment: VerificationFragmentWithData): void => { +export const logResultStatus = (fragment: VerificationFragmentWithData): void => { if (fragment.status === 'VALID') { signale.success(`${fragment.type}: ${fragment.status}`); } else { @@ -63,9 +63,9 @@ const logResultStatus = (fragment: VerificationFragmentWithData): void => { } } -// currently not logging to align outputs for w3c and openattestation -const logExpiredCredentialWarning = (warnings: unknown[][]) => { +export const handleExpiredCredentialWarning = (warnings: unknown[][]) => { const expiredWarning = warnings.find((warning) => warning[0] === 'Credential has expired.'); + // currently not logging to align output for w3c (reports expiration) and openattestation (does not report expiration) if (expiredWarning) { // signale.warn(`The Verifiable Credential has expired.`); } diff --git a/src/utils/formatting.ts b/src/utils/formatting.ts index 78a597e..3e8a6ca 100644 --- a/src/utils/formatting.ts +++ b/src/utils/formatting.ts @@ -40,6 +40,7 @@ export const getErrorMessage = function (error: unknown): string { } }; +// Captures console.warn for an async function to handle expected console.warn. Restores original console.warn functionality after the function is executed. export const withAsyncCaptureConsoleWarn = async (fn: () => Promise): Promise<{ result: T; warnings: unknown[][] }> => { const originalWarn = console.warn; const warnings: unknown[][] = []; diff --git a/tests/commands/verify.test.ts b/tests/commands/verify.test.ts new file mode 100644 index 0000000..b244dc6 --- /dev/null +++ b/tests/commands/verify.test.ts @@ -0,0 +1,250 @@ +import * as prompts from '@inquirer/prompts'; +import path from 'node:path'; +import { beforeEach, describe, expect, it, MockedFunction, vi } from 'vitest'; +import { promptQuestions, verify } from '../../src/commands/verify'; +import { SignedVerifiableCredential } from '@trustvc/trustvc'; +import { getResultFromFragment, handleExpiredCredentialWarning, logResultStatus } from '../../src/commands/verify'; + + +const W3C_SIGNED_VC_DEFAULT_FIXTURE_PATH = path.resolve( + process.cwd(), + 'tests/fixtures/w3c/certificate-of-origin-default.json', +); +const W3C_SIGNED_VC_EXPIRED_FIXTURE_PATH = path.resolve( + process.cwd(), + 'tests/fixtures/w3c/certificate-of-origin-expired.json', +); +const W3C_SIGNED_VC_REDACTED_FIXTURE_PATH = path.resolve( + process.cwd(), + 'tests/fixtures/w3c/certificate-of-origin-redacted.json', +); +const W3C_SIGNED_VC_REVOKED_FIXTURE_PATH = path.resolve( + process.cwd(), + 'tests/fixtures/w3c/certificate-of-origin-revoked.json', +); +const OA_SIGNED_VC_DEFAULT_FIXTURE_PATH = path.resolve( + process.cwd(), + 'tests/fixtures/oa/certificate-of-origin-default.json', +); +const OA_SIGNED_VC_EXPIRED_FIXTURE_PATH = path.resolve( + process.cwd(), + 'tests/fixtures/oa/certificate-of-origin-expired.json', +); +const OA_SIGNED_VC_REDACTED_FIXTURE_PATH = path.resolve( + process.cwd(), + 'tests/fixtures/oa/certificate-of-origin-redacted.json', +); +const OA_SIGNED_VC_REVOKED_FIXTURE_PATH = path.resolve( + process.cwd(), + 'tests/fixtures/oa/certificate-of-origin-revoked.json', +); + + +vi.mock('@inquirer/prompts'); + +vi.mock('signale', () => ({ + default: { + success: vi.fn(), + error: vi.fn(), + warn: vi.fn(), + info: vi.fn(), + }, + Signale: vi.fn().mockImplementation(() => ({ + await: vi.fn(), + success: vi.fn(), + })), +})); + +describe('verify', () => { + beforeEach(() => { + vi.restoreAllMocks(); + vi.clearAllMocks(); + }); + + describe('helper functions', () => { + let signaleSuccessMock: MockedFunction; + let signaleWarnMock: MockedFunction; + + beforeEach(async () => { + const signale = await import('signale'); + signaleSuccessMock = (signale.default as any).success; + signaleWarnMock = (signale.default as any).warn; + }); + + describe('getResultFromFragment', () => { + it('should return the first non-SKIPPED fragment with matching type', () => { + const fragments: any[] = [ + { type: 'DOCUMENT_STATUS', status: 'SKIPPED' }, + { type: 'DOCUMENT_STATUS', status: 'VALID', data: { ok: true } }, + ]; + + const fragment = getResultFromFragment('DOCUMENT_STATUS', fragments as any); + expect(fragment).toMatchObject({ type: 'DOCUMENT_STATUS', status: 'VALID' }); + }); + + it('should throw when no matching non-SKIPPED fragment exists', () => { + const fragments: any[] = [ + { type: 'DOCUMENT_STATUS', status: 'SKIPPED' }, + { type: 'DOCUMENT_INTEGRITY', status: 'VALID' }, + ]; + + expect(() => getResultFromFragment('ISSUER_IDENTITY', fragments as any)).toThrow( + 'ISSUER_IDENTITY could not be verified.', + ); + }); + }); + + describe('logResultStatus', () => { + it('should log success when fragment status is VALID', () => { + logResultStatus({ type: 'DOCUMENT_INTEGRITY', status: 'VALID' } as any); + expect(signaleSuccessMock).toHaveBeenCalledWith('DOCUMENT_INTEGRITY: VALID'); + expect(signaleWarnMock).not.toHaveBeenCalled(); + }); + + it('should log warning when fragment status is not VALID', () => { + logResultStatus({ + type: 'DOCUMENT_STATUS', + status: 'INVALID', + reason: { message: 'Revoked' }, + } as any); + + expect(signaleWarnMock).toHaveBeenCalledWith('DOCUMENT_STATUS: INVALID [Revoked]'); + }); + }); + + describe('handleExpiredCredentialWarning', () => { + it('should not log when expiration warning is present (currently intentionally silent)', () => { + handleExpiredCredentialWarning([['Credential has expired.']]); + expect(signaleWarnMock).not.toHaveBeenCalled(); + }); + + it('should not log when there is no expiration warning', () => { + handleExpiredCredentialWarning([['Some other warning']]); + expect(signaleWarnMock).not.toHaveBeenCalled(); + }); + }); + }); + + describe('promptQuestions', () => { + it('should return parsed signed VC from readJsonFile', async () => { + (prompts.input as any).mockResolvedValueOnce(W3C_SIGNED_VC_DEFAULT_FIXTURE_PATH); + + const result = await promptQuestions(); + + expect(result).toBeTruthy(); + }); + + it('should abide by validation rules for path input', async () => { + (prompts.input as any).mockResolvedValueOnce(W3C_SIGNED_VC_DEFAULT_FIXTURE_PATH); + + await promptQuestions(); + + const inputArgs = (prompts.input as any).mock.calls[0][0]; + + expect(inputArgs.required).toBe(true); + expect(inputArgs.validate('')).toBe('signed Verifiable Credential file path is required'); + expect(inputArgs.validate(' ')).toBe('signed Verifiable Credential file path is required'); + expect(inputArgs.validate('./signed_vc.json')).toBe(true); + }); + + it('should throw error when given an invalid signed VC file path (readJsonFile fails)', async () => { + const missingPath = './missing.json'; + + (prompts.input as any).mockResolvedValueOnce(missingPath); + + await expect(promptQuestions()).rejects.toThrow( + `Invalid document file path: ${missingPath}`, + ); + }); + }); + + describe.sequential('verify', () => { + let signaleSuccessMock: MockedFunction; + let signaleWarnMock: MockedFunction; + + beforeEach(async () => { + const signale = await import('signale'); + signaleSuccessMock = (signale.default as any).success; + signaleWarnMock = (signale.default as any).warn; + }); + + const testCases = [ + { + name: 'default w3c', + filePath: W3C_SIGNED_VC_DEFAULT_FIXTURE_PATH, + expectWarn: false, + }, + { + name: 'expired w3c', + filePath: W3C_SIGNED_VC_EXPIRED_FIXTURE_PATH, + expectWarn: false, + }, + { + name: 'redacted w3c', + filePath: W3C_SIGNED_VC_REDACTED_FIXTURE_PATH, + expectWarn: false, + }, + { + name: 'revoked w3c', + filePath: W3C_SIGNED_VC_REVOKED_FIXTURE_PATH, + expectWarn: true, + }, + { + name: 'default oa', + filePath: OA_SIGNED_VC_DEFAULT_FIXTURE_PATH, + expectWarn: false, + }, + { + name: 'expired oa', + filePath: OA_SIGNED_VC_EXPIRED_FIXTURE_PATH, + expectWarn: false, + }, + { + name: 'redacted oa', + filePath: OA_SIGNED_VC_REDACTED_FIXTURE_PATH, + expectWarn: false, + }, + { + name: 'revoked oa', + filePath: OA_SIGNED_VC_REVOKED_FIXTURE_PATH, + expectWarn: true, + }, + ]; + + it.each(testCases)( + 'should verify real signed VC fixture: $name', + async ({ filePath, expectWarn }) => { + const utils = await import('../../src/utils'); + const signedVC = utils.readJsonFile(filePath, 'document'); + + await verify(signedVC); + + const successCalls = signaleSuccessMock.mock.calls ?? []; + const warnCalls = signaleWarnMock.mock.calls ?? []; + + const successMessages = successCalls.map((call: any[]) => call[0]); + const warnMessages = warnCalls.map((call: any[]) => call[0]); + + const combinedMessages = [...successMessages, ...warnMessages]; + + expect(successMessages.join('\n')).toContain('DOCUMENT_INTEGRITY:'); + expect(successMessages.join('\n')).toContain('ISSUER_IDENTITY:'); + expect(combinedMessages.join('\n')).toContain('DOCUMENT_STATUS:'); + + if (expectWarn) { + expect(warnMessages.length).toBeGreaterThan(0); + expect(warnMessages.join('\n')).toContain('DOCUMENT_STATUS:'); + } else { + expect(warnMessages.length).toBe(0); + expect(successMessages).toEqual( + expect.arrayContaining([ + 'DOCUMENT_INTEGRITY: VALID', + 'DOCUMENT_STATUS: VALID', + 'ISSUER_IDENTITY: VALID', + ]) + ); + } + }, + ); + }); +}); diff --git a/tests/fixtures/oa/certificate-of-origin-default.json b/tests/fixtures/oa/certificate-of-origin-default.json new file mode 100644 index 0000000..b3f533b --- /dev/null +++ b/tests/fixtures/oa/certificate-of-origin-default.json @@ -0,0 +1,167 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "issuers": [ + { + "id": "754d428d-9ffd-451e-8224-38afb65943a2:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", + "name": "99313671-a504-442b-a9a9-338a2b7e8a75:string:DEMO STORE", + "revocation": { + "type": "114eb88a-cb8d-4659-adbb-5f857d636f9a:string:NONE" + }, + "identityProof": { + "type": "e9c79a03-21c0-4ad1-bdaa-fed23e770c5a:string:DID", + "key": "a3edd524-dd6a-40b6-ac09-8a25940ca0de:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller" + } + } + ], + "network": { + "chain": "e28c5040-d7df-4580-9ee2-d11a90e7549e:string:FREE", + "chainId": "5582af29-6311-4674-a4ba-cf88f88e5ad8:string:101010" + }, + "$template": { + "type": "4ce2d55e-cdc0-43e8-8ab9-d935ddcb2342:string:EMBEDDED_RENDERER", + "name": "98556820-c86f-46b8-a0f7-aaf0fc581857:string:CHAFTA_COO", + "url": "3961d1a2-7a18-4772-8e76-0180195156bb:string:https://generic-templates.tradetrust.io" + }, + "firstSignatoryAuthentication": { + "signature": "35779d25-ae79-4e6a-ad46-21cf9b13246d:string:data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=" + }, + "supplyChainConsignment": { + "exportCountry": { + "code": "d64748c6-0073-4390-b100-dd46d72e8fe4:string:IN" + }, + "exporter": { + "postalAddress": { + "line1": "2a26839f-7298-4f32-90b7-5e143ce045cd:string:Plot 123, Industrial Estate", + "line2": "2c3c1154-340b-45f6-85bf-614941bd4bf4:string:Sector 5, Tech Park", + "cityName": "854ad5e7-f029-4acb-a23d-0ecf61a904a2:string:Mumbai", + "postcode": "3755c153-8bb4-4b54-8e6a-d536a66c83a3:string:400001", + "countrySubDivisionName": "ee35a80a-204d-44e4-b2a1-e2c09ce3b188:string:Maharashtra", + "countryCode": "898c7bfd-a07b-4822-865f-421eda226bff:string:In" + }, + "iD": "9c2762de-c486-4926-8b25-d06e29dc0536:string:EXP-IN-XYZ-0001", + "name": "68251700-9677-4e94-806e-10e328a3d0ba:string:XYZ Exports Pvt. Ltd." + }, + "importCountry": { + "code": "1b382857-8ab9-40b1-afbe-07bb6b2a0bbf:string:GB" + }, + "importer": { + "postalAddress": { + "line1": "cd60002e-7e8d-4bcc-ae49-2ca257342781:string:Unit 88, Commercial Docks", + "line2": "1c549937-21b0-48b1-8306-986c50a695c4:string:Trade Zone West", + "cityName": "14058f21-7fff-44b6-b165-d5ee38986d31:string:London", + "postcode": "dc83cafa-6e5a-408f-bd6f-aba910015ba1:string:E16 4HQ", + "countrySubDivisionName": "ec68fdf6-f32d-4acd-9e54-240b20b98a38:string:Greater London", + "countryCode": "0f98d1f1-a6c6-4fe7-ac32-ff19acb5f92c:string:GB" + }, + "iD": "cb84099b-8d32-4149-bc61-dcac3181207b:string:IMP-UK-XYZ-9999", + "name": "fea99ede-2f34-4cc1-bc3a-102f5350ef86:string:XYZ Foods Ltd." + }, + "includedConsignmentItems": [ + { + "crossBorderRegulatoryProcedure": { + "originCriteriaText": "b2474991-0665-4cb0-8136-b4376d6c6a33:string:Gross Volume: 2.5 CBM" + }, + "manufacturer": { + "postalAddress": { + "line1": "9cdc706f-d3d3-4723-9b93-597dfb380bf0:string:Plot 45, Agro Park", + "line2": "161eff98-8ecb-4eaf-9471-303cdb3546dd:string:Phase II", + "cityName": "79acb9d9-ad41-49bd-9652-d8afcc2fa256:string:Karnal", + "postcode": "6cb4ffa6-c788-4ee5-b41c-4fec7d3c545e:string:132001", + "countrySubDivisionName": "3b33e818-6a47-45d5-88d9-80a73430db58:string:Haryana", + "countryCode": "595b5f5d-0403-453d-8a96-4bdd6eec52cc:string:in" + }, + "iD": "20f7c163-2cbd-4221-9327-0fc002167966:string:MFG-IN-XYZ-001", + "name": "3238b26f-1a16-4579-92ca-515583488e7a:string:XYZ Agro Industries" + }, + "tradeLineItems": [ + { + "invoiceReference": { + "attachedBinaryFile": { + "uRI": "bd95f78a-b91c-463a-aa9a-1184c4e6e2b0:string:https://docs.tweglobal.com/8c624a35-9497-41fb-a548-cb5cf43bac21.pdf" + }, + "iD": "3c2781d7-c075-456f-8570-ba5ff207efaf:string: INV-XYZ-0001", + "formattedIssueDateTime": "710c0a3b-168d-426b-abdd-ebec8909ed78:string:2025-06-10T10:09:00.000Z" + }, + "tradeProduct": { + "harmonisedTariffCode": { + "classCode": "aba71884-cdd2-4d95-a30d-efe8ecbfa0f4:string:10063090", + "className": "5c32be41-583a-4fe6-9144-ea0370840393:string:Semi-milled or wholly milled rice, whether or not polished or glazed" + }, + "originCountry": { + "code": "45a37c72-ba8b-40cf-984c-3f820a85eac7:string:IN" + }, + "iD": "4720139d-2821-4cd3-9eb5-9804d86c19cb:string:TP-XYZ-1001", + "description": "fc8ba8e1-1e1c-42a3-b051-cc9a4adedf48:string:XYZ Premium Basmati Rice, 25kg Bag" + }, + "transportPackages": [ + { + "iD": "63d07b67-9fc3-451f-830e-293577352b90:string:PKG-XYZ-0001", + "grossVolume": "ddb61b3e-da02-4816-b7f8-f0356e627d9d:string:3.0 CBM", + "grossWeight": "bf4c0354-3f4e-47fc-a26e-9f9946570605:string:1000 kg" + } + ], + "sequenceNumber": "645c1034-6fc4-471d-9bd4-633ff530e117:number:1" + } + ], + "iD": "99cc7004-af3e-4921-8d72-58d47d811d01:string:10063090", + "information": "571a2c29-4fcf-4694-992a-bf242bb58ff3:string:Sample Rice Product, 25kg Bag" + } + ], + "loadingBaseportLocation": { + "iD": "64bf0e3e-a6bf-41c9-be42-61168c538a55:string:PORT-IN-XYZ", + "name": "26d23a82-eb35-4ab0-a886-373112059d2f:string:Nhava Sheva (JNPT), India" + }, + "mainCarriageTransportMovement": { + "usedTransportMeans": { + "name": "8f328a2d-84d5-4f73-81b0-600c1785e166:string:Vessel – XYZ CARRIER", + "iD": "017b50e4-da36-4159-98df-7d6dbf42afd1:string:VSL-XYZ-0001" + }, + "departureEvent": { + "departureDateTime": "b4f8b6c0-9397-4e8c-bb0e-d7f2ed9c4857:string:2025-06-18T10:17:00.000Z" + }, + "iD": "c484f17b-e364-4e4d-813c-1c2891922ae3:string:MCTM-XYZ-1234", + "information": "91ec2f31-2b01-40bb-90b4-f7142b759610:string:Ocean Freight via XYZ Shipping Lines" + }, + "unloadingBaseportLocation": { + "iD": "7bd91422-902d-4fe2-8ec5-ef7543e2bd25:string:PORT-UK-XYZ", + "name": "a166db24-2ce7-43ad-a66d-504e5791bfe5:string:Port of Felixstowe, United Kingdom" + }, + "iD": "fb940979-043c-4ea8-a6a4-2f0adbd53aeb:string:CONS-FAKE-12345" + }, + "iD": "9049a350-027c-4319-a95a-e4228e762284:string:COO-FAKE-0001", + "issueDateTime": "1995060c-7834-4afb-916b-05dcc51eaf86:string:2025-06-18T10:09:00.000Z", + "attachments": [ + { + "data": "2b4a88df-aabe-413e-bdd3-7eaae1ea92b6:string:JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==", + "filename": "58243cfb-be63-4bfb-be7c-1af7c63ee9cf:string:sample.pdf", + "type": "5f416e01-88d7-4af3-b620-7051eb493d9d:string:application/pdf" + }, + { + "data": "eb357020-d72b-4bfa-a54e-2db451ea5c44:string:JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", + "filename": "261a20f8-9bfc-4c31-b522-21081a8b523c:string:veryverylongfilenameoverhereveryverylongfilenameoverhere.pdf", + "type": "6526eadc-303d-4ea7-96fa-699752656f9c:string:application/pdf" + } + ], + "links": { + "self": { + "href": "07b25fd3-89e4-435d-8ebe-b17e7dba7bb7:string:https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2FOA%2Fcertificate-of-origin-default.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + } + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "656b09e9a4cb9aa9e24718b0b88e2dc38aabd3cd2500acbd78476fc226f80cbd", + "proof": [], + "merkleRoot": "656b09e9a4cb9aa9e24718b0b88e2dc38aabd3cd2500acbd78476fc226f80cbd" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2025-08-21T14:00:49.644Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller", + "signature": "0x3395ea9fc2cae1ced5482100c3532b435f2a432e0a1cd801576a0e17bf12ad4075408e99be26b577371aedfccf46cb5786c39b0da6d8eec29e8791c64d3def831c" + } + ] +} \ No newline at end of file diff --git a/tests/fixtures/oa/certificate-of-origin-expired.json b/tests/fixtures/oa/certificate-of-origin-expired.json new file mode 100644 index 0000000..b9721b5 --- /dev/null +++ b/tests/fixtures/oa/certificate-of-origin-expired.json @@ -0,0 +1,168 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "issuers": [ + { + "id": "6747b6c5-4b59-423a-a911-8b1a634b80d1:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", + "name": "db896058-bbaa-4ce2-8324-070a80fd5d27:string:DEMO STORE", + "revocation": { + "type": "f4db51cc-4300-4a07-b5a3-46e71c4b0fee:string:NONE" + }, + "identityProof": { + "type": "506e8ee2-69b6-4b0c-8610-96bf47083133:string:DID", + "key": "d35fa642-e368-4351-a2ca-69683ad3ad7a:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller" + } + } + ], + "network": { + "chain": "68ba05b3-9895-4cf4-9a01-07242409b218:string:FREE", + "chainId": "5473ad3d-9a0f-47ba-95c8-7768d69a8adc:string:101010" + }, + "$template": { + "type": "f29329cd-5d28-4c5f-aa3a-ef09dbf9d27a:string:EMBEDDED_RENDERER", + "name": "a645f7a8-124a-4e1d-b21c-24c818cbd734:string:CHAFTA_COO", + "url": "89fbe50d-9af7-49f6-9445-d652ba79788b:string:https://generic-templates.tradetrust.io" + }, + "firstSignatoryAuthentication": { + "signature": "31b8ade6-aa20-4c39-9880-b1b06c7bd0ad:string:data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=" + }, + "supplyChainConsignment": { + "exportCountry": { + "code": "fa6cfc33-44c4-4e49-a9fe-562aa94daf41:string:IN" + }, + "exporter": { + "postalAddress": { + "line1": "79ec83f5-5b9a-4761-a447-dd7591f58363:string:Plot 123, Industrial Estate", + "line2": "a85b9cd4-8eb4-451f-9a9e-f4420d6ca4c1:string:Sector 5, Tech Park", + "cityName": "400ff27d-d7e2-4ac2-b0de-91c98ad978b3:string:Mumbai", + "postcode": "5b1dd8a5-8ffa-4cf8-8f0f-1c5fc6e73cd1:string:400001", + "countrySubDivisionName": "cd3907f5-46a6-4b27-a25c-9f227648668c:string:Maharashtra", + "countryCode": "552c6f04-a89d-458f-b9f9-49c4e8e979cc:string:In" + }, + "iD": "e1fd9de3-2fb1-4a96-8b93-53e7350bec17:string:EXP-IN-XYZ-0001", + "name": "b3c35c45-5392-4d13-9761-1dc28ee80260:string:XYZ Exports Pvt. Ltd." + }, + "importCountry": { + "code": "b042bf95-f31c-4e50-b759-8b7b7e534cb1:string:GB" + }, + "importer": { + "postalAddress": { + "line1": "418e14f9-d0fc-4418-8c88-8844085e0a2f:string:Unit 88, Commercial Docks", + "line2": "bfc8969e-59a0-40b2-b239-57a71177baf8:string:Trade Zone West", + "cityName": "f27eae79-e670-46bd-9bc6-7fe7abc5645a:string:London", + "postcode": "4a73955f-8f31-4fb5-9d76-4fac491431ff:string:E16 4HQ", + "countrySubDivisionName": "1f3a197b-d44d-43f0-b9bd-cb642f6bd216:string:Greater London", + "countryCode": "ee751102-e9e1-46b9-9e7a-2218352ff9a4:string:GB" + }, + "iD": "399cd239-13f2-45ec-9827-4527f298f07b:string:IMP-UK-XYZ-9999", + "name": "5344f286-44fd-46be-a1df-870c9c6ba933:string:XYZ Foods Ltd." + }, + "includedConsignmentItems": [ + { + "crossBorderRegulatoryProcedure": { + "originCriteriaText": "0aedd1df-1429-4611-acac-fdffcbb2ff4e:string:Gross Volume: 2.5 CBM" + }, + "manufacturer": { + "postalAddress": { + "line1": "95cb6ecd-5eff-4726-9b81-abd05543ed57:string:Plot 45, Agro Park", + "line2": "994bb72b-9b14-4543-b8fd-bd777feb1852:string:Phase II", + "cityName": "2685ec39-1bfe-47e3-8c9b-0b9ba20cdb83:string:Karnal", + "postcode": "f344e926-8460-49e8-96a3-6a1fa86aa904:string:132001", + "countrySubDivisionName": "5f8a38ef-9da4-4e18-bb75-a05633c03f04:string:Haryana", + "countryCode": "a1b17ff5-89da-4cda-b114-e3ada18cc302:string:in" + }, + "iD": "7b3514bf-c3df-4d39-9388-1a58f6782585:string:MFG-IN-XYZ-001", + "name": "ce305fba-7e4e-4914-bce5-1bb5d274b30c:string:XYZ Agro Industries" + }, + "tradeLineItems": [ + { + "invoiceReference": { + "attachedBinaryFile": { + "uRI": "49d3ccb4-eabb-463e-855e-36172a2b01e9:string:https://docs.tweglobal.com/8c624a35-9497-41fb-a548-cb5cf43bac21.pdf" + }, + "iD": "8bd77660-6084-459d-9723-163be4408ce6:string: INV-XYZ-0001", + "formattedIssueDateTime": "d92e4c92-2002-481b-ba9d-6f7e503c9c34:string:2025-06-10T10:09:00.000Z" + }, + "tradeProduct": { + "harmonisedTariffCode": { + "classCode": "4622c771-43bc-4ffa-b948-c284530d388c:string:10063090", + "className": "46ed95e6-e517-4669-9ebe-cb79b21c8043:string:Semi-milled or wholly milled rice, whether or not polished or glazed" + }, + "originCountry": { + "code": "29c3c86e-d4e7-4aba-b2b6-555eceaaa304:string:IN" + }, + "iD": "59c7776c-f4e5-4a7b-8430-6e5902304798:string:TP-XYZ-1001", + "description": "1c6565ac-74e6-42fa-a4a9-f69c2cb89d91:string:XYZ Premium Basmati Rice, 25kg Bag" + }, + "transportPackages": [ + { + "iD": "8a72d825-336e-437d-b9e5-0d87513b72b9:string:PKG-XYZ-0001", + "grossVolume": "e8644dfe-1d38-48ea-a147-94001c1c6547:string:3.0 CBM", + "grossWeight": "36eeadba-72b8-4e1d-8b32-bf9100fc8630:string:1000 kg" + } + ], + "sequenceNumber": "f812bbba-f2d4-4436-b66a-4ca520ce934c:number:1" + } + ], + "iD": "7c082f4a-4ed8-48c8-8853-0a50931328fb:string:10063090", + "information": "da97f454-5025-40e1-94c2-690ba00382ae:string:Sample Rice Product, 25kg Bag" + } + ], + "loadingBaseportLocation": { + "iD": "bd348aa1-c4fc-4b08-bba8-dd0889ff00a3:string:PORT-IN-XYZ", + "name": "273a7de1-1f13-4b7d-94d5-cf45937f330a:string:Nhava Sheva (JNPT), India" + }, + "mainCarriageTransportMovement": { + "usedTransportMeans": { + "name": "cda08412-7d44-460b-a7f6-deea26a404b1:string:Vessel – XYZ CARRIER", + "iD": "3d18c84c-5c9c-4814-b656-6d79988c697e:string:VSL-XYZ-0001" + }, + "departureEvent": { + "departureDateTime": "18d561c1-5fa8-4865-8c94-b306e8b00d13:string:2025-06-18T10:17:00.000Z" + }, + "iD": "7fc1c9a0-b1c6-49be-bed0-b16f5874c3ab:string:MCTM-XYZ-1234", + "information": "90060c91-fd06-41bc-b522-0532ecb2526b:string:Ocean Freight via XYZ Shipping Lines" + }, + "unloadingBaseportLocation": { + "iD": "11ad7398-a932-47bf-bb79-f78d49b7aafa:string:PORT-UK-XYZ", + "name": "fffa049e-540a-46b0-a1bc-1db4f015ba6d:string:Port of Felixstowe, United Kingdom" + }, + "iD": "046cb142-eb7e-4241-9e21-70254e53f218:string:CONS-FAKE-12345" + }, + "iD": "4f28cb85-ca45-4639-89e8-d8547ff5e65a:string:COO-FAKE-0001", + "issueDateTime": "12da194c-9d7e-4f3a-bc2e-039867adc304:string:2025-06-18T10:09:00.000Z", + "attachments": [ + { + "data": "1463645f-dc76-4fd1-bef3-f5fd945ed4c6:string:JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==", + "filename": "00abe2b0-0267-4f7e-96d7-a15e67d769c3:string:sample.pdf", + "type": "36cfc8d1-8d84-46de-8e26-945cc6a42665:string:application/pdf" + }, + { + "data": "8585522b-7c04-4496-a7f9-ec09e40a0c58:string:JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", + "filename": "f3d24afe-a438-4031-a17c-2df33adab185:string:veryverylongfilenameoverhereveryverylongfilenameoverhere.pdf", + "type": "0d5a5a3c-af2e-44a9-a28e-9cdee38aa6d6:string:application/pdf" + } + ], + "expirationDate": "d06ac3e9-707f-413d-9bb5-6beb761da33c:string:2024-12-03T12:19:52Z", + "links": { + "self": { + "href": "6c4b0e7c-8983-42d8-a3bb-672f0262ee22:string:https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2FOA%2Fcertificate-of-origin-expired.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + } + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "1b8c82c0d684838c10bd17ce7b3ebbce284cc183cc99a5eca0c08781f5d54312", + "proof": [], + "merkleRoot": "1b8c82c0d684838c10bd17ce7b3ebbce284cc183cc99a5eca0c08781f5d54312" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2025-08-21T14:01:01.127Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller", + "signature": "0xafd9e67ddb8580a272cf0358087b8e06f5595de803fc863590d0e8ddd17296ea5d4b213d13bee3bb5171bad43a7d681566c1af6386758fc2caa8dbecd93009031b" + } + ] +} \ No newline at end of file diff --git a/tests/fixtures/oa/certificate-of-origin-redacted.json b/tests/fixtures/oa/certificate-of-origin-redacted.json new file mode 100644 index 0000000..30b2dd0 --- /dev/null +++ b/tests/fixtures/oa/certificate-of-origin-redacted.json @@ -0,0 +1,161 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "issuers": [ + { + "id": "f6d613a5-2a54-426f-a7db-e80684e6b702:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", + "name": "a50cf38f-b707-4022-8840-ea77da955fdd:string:DEMO STORE", + "revocation": { + "type": "71dccf61-f581-42aa-98a9-b5f6962b4df3:string:NONE" + }, + "identityProof": { + "type": "3f467050-2dd5-4790-a4b3-0a8130fa23d3:string:DID", + "key": "65aa20a7-6b1b-4c29-b528-450f650d99aa:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller" + } + } + ], + "network": { + "chain": "4c679a48-07e2-4c09-affa-2ff088c14866:string:FREE", + "chainId": "9e5be908-50af-462c-a0b3-aa50972cd988:string:101010" + }, + "$template": { + "type": "5f441941-dfc5-4688-9ec0-a73abf4e4073:string:EMBEDDED_RENDERER", + "name": "89f05b41-326e-4b00-b1c7-fa3b7e0ac899:string:CHAFTA_COO", + "url": "c9c33a49-0a82-4554-a21f-3d596e782027:string:https://generic-templates.tradetrust.io" + }, + "firstSignatoryAuthentication": { + "signature": "b735e37c-525a-4471-b5a0-1e9472687022:string:data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=" + }, + "supplyChainConsignment": { + "exportCountry": { + "code": "cde9d7af-ce47-4eca-9883-2da73bcd8295:string:IN" + }, + "exporter": { + "postalAddress": { + "line1": "79cc004a-a601-45d6-bc58-c1536d090967:string:Plot 123, Industrial Estate", + "line2": "c4ba03e1-ff9f-4beb-8a12-01b09e17eba8:string:Sector 5, Tech Park", + "cityName": "aa8b7da6-9c90-4b84-9218-251b4372ceb2:string:Mumbai", + "postcode": "601bf4b0-8745-4995-ac4d-db89a9e4bbbb:string:400001", + "countrySubDivisionName": "126c435a-aaea-4256-b2e7-0f7cf050e9fc:string:Maharashtra", + "countryCode": "40a395cc-a559-4195-9046-2858c299432c:string:In" + }, + "iD": "11544bd4-86ab-41e0-8b61-a8eb423bd528:string:EXP-IN-XYZ-0001", + "name": "c887d7ec-2244-4e96-a04f-aaaf5b841b49:string:XYZ Exports Pvt. Ltd." + }, + "importCountry": { + "code": "55ed96f6-699a-4855-b843-42e97c491a3e:string:GB" + }, + "includedConsignmentItems": [ + { + "crossBorderRegulatoryProcedure": { + "originCriteriaText": "c4240203-fc3a-431d-a99d-764f7144f29c:string:Gross Volume: 2.5 CBM" + }, + "tradeLineItems": [ + { + "invoiceReference": { + "attachedBinaryFile": { + "uRI": "1a81099b-7122-411f-895f-60fb2e5ae19f:string:https://docs.tweglobal.com/8c624a35-9497-41fb-a548-cb5cf43bac21.pdf" + }, + "iD": "9d549e32-1013-48ad-adeb-9de057a7c450:string: INV-XYZ-0001", + "formattedIssueDateTime": "cb12bab9-f88f-4657-beec-8e6a271ff471:string:2025-06-10T10:09:00.000Z" + }, + "tradeProduct": { + "harmonisedTariffCode": { + "classCode": "9b1e556d-8a34-4b21-9e0c-76cbe3fa59f4:string:10063090", + "className": "fca3f9a3-8218-4b1c-bcf4-0ee435f548cb:string:Semi-milled or wholly milled rice, whether or not polished or glazed" + }, + "originCountry": { + "code": "26df7bb4-8cdf-4dd0-8df1-7ed969912560:string:IN" + }, + "iD": "9611c4ee-6ad8-42b0-8762-eade4ca8449f:string:TP-XYZ-1001", + "description": "b49815d1-1efc-4bd2-9c1f-1ef99a79835c:string:XYZ Premium Basmati Rice, 25kg Bag" + }, + "transportPackages": [ + { + "iD": "29ced890-565d-4525-9713-3d7996fbc987:string:PKG-XYZ-0001", + "grossVolume": "9994486e-e904-43ae-a0e5-fc6a8e2a0357:string:3.0 CBM", + "grossWeight": "2c0f35c9-59ec-4e7f-a20f-5163864332fd:string:1000 kg" + } + ], + "sequenceNumber": "4bfc8068-dd1a-4918-95c5-5726879a33f1:number:1" + } + ], + "iD": "d2a6f155-9358-4ee7-9b9c-4aa8eb8c672d:string:10063090", + "information": "0a489d9f-8f14-4d1c-ac94-a6b0799dac7e:string:Sample Rice Product, 25kg Bag" + } + ], + "mainCarriageTransportMovement": { + "usedTransportMeans": { + "name": "f3676147-d86e-4c9a-ac8d-fa6c84098033:string:Vessel – XYZ CARRIER", + "iD": "040d9f3b-7117-4c1c-acb6-79df8647dbfe:string:VSL-XYZ-0001" + }, + "departureEvent": { + "departureDateTime": "fc509fdd-dfd5-4ed7-9542-30e59adea252:string:2025-06-18T10:17:00.000Z" + }, + "iD": "d1496b17-5d59-484b-8a46-7099adfd6619:string:MCTM-XYZ-1234", + "information": "575984c7-ee94-4bfa-8b16-47e3b69caaa8:string:Ocean Freight via XYZ Shipping Lines" + }, + "unloadingBaseportLocation": { + "iD": "da4989c2-f7f9-4f40-bd4c-b07413e8bd20:string:PORT-UK-XYZ", + "name": "c1f1b659-9be5-4cd1-8988-e597d92a81f3:string:Port of Felixstowe, United Kingdom" + }, + "iD": "c8faa94e-68b0-48aa-8b03-22386e9994b1:string:CONS-FAKE-12345" + }, + "iD": "a0fb5596-100b-4111-bc72-10e03260329b:string:COO-FAKE-0001", + "issueDateTime": "1b5ae600-1bd3-4370-aa3a-f8aea81dcdfd:string:2025-06-18T10:09:00.000Z", + "attachments": [ + { + "data": "ca3dbb17-e752-4fb1-a91d-6178eb83efb7:string:JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==", + "filename": "05b26bf1-2d48-45a1-9cec-ad8f92c37b33:string:sample.pdf", + "type": "380dc5e1-10e6-4e06-b228-fd36d7233dd7:string:application/pdf" + }, + { + "data": "c4ec6f12-d368-42a4-a102-20b88e7d19d9:string:JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", + "filename": "752ba85c-b675-421e-ac79-304df93d8ef9:string:veryverylongfilenameoverhereveryverylongfilenameoverhere.pdf", + "type": "806e5597-fcc6-4ded-9311-fbb78531c125:string:application/pdf" + } + ], + "links": { + "self": { + "href": "92567c15-b7bf-4015-a9e5-7f632bcbdbd5:string:https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2FOA%2Fcertificate-of-origin-redacted.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + } + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "d1452863da30b45dd5925a9454730b6d2999f293e8f3fae1f7073a4695897893", + "proof": [], + "merkleRoot": "d1452863da30b45dd5925a9454730b6d2999f293e8f3fae1f7073a4695897893" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2025-08-21T14:01:12.551Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller", + "signature": "0x9409ba94d604242b0f1ab16c2ecf312008b94f52b684278d1d6f6a27d36f80aa55d9c7e6276f99079c09b0362fb95e9bd5238087b406a79511179a90287479451b" + } + ], + "privacy": { + "obfuscatedData": [ + "a79b805960f32ef91adc7a52ff136abcddd7456bb6634699858c3299b15ea30c", + "7240630fe266fc58ba65931aa51241baa064dd99682e59e9e83b1861698d8fee", + "1b05f8501849bf165f5fb0f3758396af7a725e9b83dc4d78db3e346fb24bd0f6", + "276ec228bb7a335e42e59400eb42b2ca0797edb8d806bf11958d6aa711c87a4c", + "0203fe0ac0e82456b788534dc60ef000eda6f443ebfe5a1e3446c2d0e4ce6974", + "7325565592fc1dd9d93b32d013ba8693775f91ae1250d42f436d269e8df46a99", + "0b2bfb0500e3a6107758e3ee7b24a01afb00bef55b431568051223695bc17a7e", + "2d0c0a0133755697748ab43e6c8225f6ac8fb318479e9d236eb62480d24537af", + "fb97b1d28cdee06f54437a1a8ddc7739d16b5e79be9bbb7900b71c3eaa7b0920", + "17a2f0e5c8673d889a70662fe5fa4684a9743c834160f7764325249693ceb27c", + "6212c08e33f1ec2defc7745a044ec1decca341e4635025a5c8741593aa46d6e4", + "00e32dacbce6a3e45de1c4ac19b6c869d4274771f35722dcab7d899dd1610efd", + "11306bddcf18edc4a38823ec0229042030ba9c3ce89de87c552047bd2d911c4b", + "99eace676b398bb6dd0ab447e6781d3411e811f04badf90754b1edf3c1a07d0e", + "c8985c36f8325a396d97a6751e6919c46499ea2fb2661bd40e8c7c8f8c0dff1b", + "8a5658ec4f6bea95d977503aa52998f1dddd8fde1825f0b17287eb57b4394500", + "e0180a7438fef488c73308dd7243c3233ea1728b46e0fd65970383550d773843", + "01d079a4c49409e90ac19e24834632e041b9d1a6a711ad990d7b8c80179a18ab" + ] + } +} \ No newline at end of file diff --git a/tests/fixtures/oa/certificate-of-origin-revoked.json b/tests/fixtures/oa/certificate-of-origin-revoked.json new file mode 100644 index 0000000..705e149 --- /dev/null +++ b/tests/fixtures/oa/certificate-of-origin-revoked.json @@ -0,0 +1,168 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "issuers": [ + { + "id": "100dca19-5874-4ed6-9fd2-956ec2d999ab:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", + "name": "24d24ff6-d149-41b1-abd2-abfadee5960c:string:DEMO STORE", + "revocation": { + "type": "1a7472a4-cb2d-4b95-b59b-afda8e7cc06f:string:REVOCATION_STORE", + "location": "ae8f0765-509c-406e-9777-2391e4f3c1e8:string:0x5596c0fC931cfA779B2C4e27D1F54b12DdaeCecd" + }, + "identityProof": { + "type": "281b81a0-5a99-40fe-99cb-44cc499d561d:string:DID", + "key": "88554ba3-111e-4c72-9e95-6aef22c53da9:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller" + } + } + ], + "network": { + "chain": "e16efdf2-ddf5-446e-bb12-537974796a3c:string:FREE", + "chainId": "3f398602-7c90-45d1-91fb-c717c27a937f:string:101010" + }, + "$template": { + "type": "a3101b10-a4e8-45fe-b4c0-f8f1ab245db2:string:EMBEDDED_RENDERER", + "name": "895c18f4-58e8-4b07-b9d6-6ae655ce1423:string:CHAFTA_COO", + "url": "fb5d4683-a108-4ae5-9cba-4d649e2e0456:string:https://generic-templates.tradetrust.io" + }, + "firstSignatoryAuthentication": { + "signature": "a76ff99c-0413-49ca-b6bb-54f82b16a314:string:data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=" + }, + "supplyChainConsignment": { + "exportCountry": { + "code": "be26c8f8-ec45-4c73-b914-5a8f0e0a31e8:string:IN" + }, + "exporter": { + "postalAddress": { + "line1": "00b8417c-14b4-4006-bb89-09ba69b7b66c:string:Plot 123, Industrial Estate", + "line2": "8da84cc0-d902-478f-87c4-0f08aebdc546:string:Sector 5, Tech Park", + "cityName": "a4375e99-9ba4-427c-99b5-b9687fdb09b7:string:Mumbai", + "postcode": "bc885b43-80c4-47e1-a042-9fcd5b93ecd8:string:400001", + "countrySubDivisionName": "6a603971-8c9e-4c58-8768-8b53b1a1f98e:string:Maharashtra", + "countryCode": "34cef0ca-c89c-4e4c-8c31-56dbc6743a42:string:In" + }, + "iD": "9a67f79d-f1c6-47d1-a10f-c82974e0f093:string:EXP-IN-XYZ-0001", + "name": "1f2b5c61-59bf-4340-a816-40dfce32448c:string:XYZ Exports Pvt. Ltd." + }, + "importCountry": { + "code": "77f85aea-9e56-4c79-84b3-565dfd9e6074:string:GB" + }, + "importer": { + "postalAddress": { + "line1": "0a3248fe-7665-4c70-af47-d9631e7b35f4:string:Unit 88, Commercial Docks", + "line2": "f9123a30-ecf7-43a5-a1bc-f2373730e7d1:string:Trade Zone West", + "cityName": "199280ee-658c-426d-8ccf-8e1eb0c70e42:string:London", + "postcode": "b60d20ee-347d-41de-9cd1-ec835bc5fdc2:string:E16 4HQ", + "countrySubDivisionName": "0cb5c2fa-73f5-420c-afd6-d83aaa567793:string:Greater London", + "countryCode": "b3bb6470-f21e-4701-8cdb-0860fc830a12:string:GB" + }, + "iD": "6061d041-631b-4f38-a4b2-aaa7635cae52:string:IMP-UK-XYZ-9999", + "name": "d9f3e8a3-3a33-43d8-8105-6ad7d5fcfd86:string:XYZ Foods Ltd." + }, + "includedConsignmentItems": [ + { + "crossBorderRegulatoryProcedure": { + "originCriteriaText": "bb29a359-a51f-4d25-ae68-ec803fec6172:string:Gross Volume: 2.5 CBM" + }, + "manufacturer": { + "postalAddress": { + "line1": "be943918-c98b-4613-9c68-882f83ea513a:string:Plot 45, Agro Park", + "line2": "af343afe-1ed8-47ea-a541-5633b5629c6a:string:Phase II", + "cityName": "37693c8d-cb3b-45e2-8134-33f87a130ff2:string:Karnal", + "postcode": "bc3555c3-7daf-4ea3-a00e-4cbe93418763:string:132001", + "countrySubDivisionName": "e29be0cb-0b79-4b70-9e3e-900dd08c40d7:string:Haryana", + "countryCode": "4a29ce43-bce5-4e29-9a0d-8d903d57f18a:string:in" + }, + "iD": "ef4e9c23-b3f8-456e-bdbc-a5a9c313b77b:string:MFG-IN-XYZ-001", + "name": "eb51d865-8600-4457-9efe-431e0a0ecbef:string:XYZ Agro Industries" + }, + "tradeLineItems": [ + { + "invoiceReference": { + "attachedBinaryFile": { + "uRI": "3f09aa08-754e-41fb-babb-098770cad98e:string:https://docs.tweglobal.com/8c624a35-9497-41fb-a548-cb5cf43bac21.pdf" + }, + "iD": "7b53d5ff-1822-4c47-8bbe-2c734dfc90ec:string: INV-XYZ-0001", + "formattedIssueDateTime": "e519c226-4769-4069-9f5c-c0d6a61b5ff3:string:2025-06-10T10:09:00.000Z" + }, + "tradeProduct": { + "harmonisedTariffCode": { + "classCode": "a9b936d3-2f5c-4707-8eed-2de753edc391:string:10063090", + "className": "a7dabebf-b0be-4ebd-bd9b-d75ebae5ddf1:string:Semi-milled or wholly milled rice, whether or not polished or glazed" + }, + "originCountry": { + "code": "5e0ea5a6-a654-463b-8ca8-7ae56087fe51:string:IN" + }, + "iD": "437df983-1e83-4407-b4ef-26cfb1c0b18b:string:TP-XYZ-1001", + "description": "bcff1d34-3c4f-44e7-b5b1-960240dc6aa8:string:XYZ Premium Basmati Rice, 25kg Bag" + }, + "transportPackages": [ + { + "iD": "a0095884-926f-43d0-a5c6-0fd52705bb2e:string:PKG-XYZ-0001", + "grossVolume": "38c5f9c9-a80e-4bf0-815c-1a510195e0ac:string:3.0 CBM", + "grossWeight": "0797c20c-aae6-4aab-8d81-403775c403ba:string:1000 kg" + } + ], + "sequenceNumber": "01371490-dc13-4923-9b2d-75b333b0f43d:number:1" + } + ], + "iD": "47b116bb-a0b2-4610-823d-1327123c92e2:string:10063090", + "information": "2a4ccb54-edcb-408e-8e5b-c18cd138f9d8:string:Sample Rice Product, 25kg Bag" + } + ], + "loadingBaseportLocation": { + "iD": "269c3e2f-f1ae-4872-8fe9-4f901d2ef488:string:PORT-IN-XYZ", + "name": "69725902-9d73-4ec1-86b9-e66a147024c3:string:Nhava Sheva (JNPT), India" + }, + "mainCarriageTransportMovement": { + "usedTransportMeans": { + "name": "df3eca48-e1c6-452c-b101-ecf99bb6de69:string:Vessel – XYZ CARRIER", + "iD": "f11caec7-95b8-4ca7-b12b-31541ab45762:string:VSL-XYZ-0001" + }, + "departureEvent": { + "departureDateTime": "b11dcd37-e8a5-4346-941f-5b37a9c50ef7:string:2025-06-18T10:17:00.000Z" + }, + "iD": "e214784b-6fab-4a70-888a-ea6065bfb331:string:MCTM-XYZ-1234", + "information": "e318a4f7-92c0-404b-b8cf-f27ffb3e607b:string:Ocean Freight via XYZ Shipping Lines" + }, + "unloadingBaseportLocation": { + "iD": "2bb378ef-a7b8-4e19-a032-be680dbc29f6:string:PORT-UK-XYZ", + "name": "a929d4eb-8f6b-4a07-9948-21112bf028f8:string:Port of Felixstowe, United Kingdom" + }, + "iD": "c1d3c033-a9cf-483f-b744-d3422f987292:string:CONS-FAKE-12345" + }, + "iD": "9fcb1d5b-1d58-44f8-9c57-f9705c3226f3:string:COO-FAKE-0001", + "issueDateTime": "6014857f-1e55-49ae-a4ff-a7d589b845ce:string:2025-06-18T10:09:00.000Z", + "attachments": [ + { + "data": "65d184b3-304c-4633-9a93-392073b45e80:string:JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==", + "filename": "a80e2596-8f09-4efe-9b87-077fc438b308:string:sample.pdf", + "type": "0e399631-dd0b-4aa5-adb1-2136366b64db:string:application/pdf" + }, + { + "data": "73dda102-7c9f-402c-bcab-4632160450f2:string:JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", + "filename": "af677ffe-0996-4e5c-8292-a028d2872726:string:veryverylongfilenameoverhereveryverylongfilenameoverhere.pdf", + "type": "6630be9a-2737-49c4-93ff-ae5eef489d50:string:application/pdf" + } + ], + "links": { + "self": { + "href": "4b6dfd8b-be55-48c1-b5e3-684587a23158:string:https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2FOA%2Fcertificate-of-origin-revoked.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + } + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "9b93e47b73d68437d4156c79018caaf3c7f3bb7de9ae58ca83fcde4e7211aa54", + "proof": [], + "merkleRoot": "9b93e47b73d68437d4156c79018caaf3c7f3bb7de9ae58ca83fcde4e7211aa54" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2025-08-21T14:01:52.688Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller", + "signature": "0x664cfc5eeae6db079296ef39e1c544bcdb778560c7482a18e877cc33d47e82c0485d84757a92b54fd3e3adb315f367e2e25ed54c5850565004715c447b0f5a651c" + } + ] +} \ No newline at end of file diff --git a/tests/fixtures/w3c/certificate-of-origin-default.json b/tests/fixtures/w3c/certificate-of-origin-default.json new file mode 100644 index 0000000..4c59821 --- /dev/null +++ b/tests/fixtures/w3c/certificate-of-origin-default.json @@ -0,0 +1,101 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json", + "https://trustvc.io/context/attachments-context.json", + "https://trustvc.io/context/qrcode-context.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": ["Coo"], + "signature": "data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=", + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterLine2": "Near MIDC, Vashi", + "exporterCityName": "Navi Mumbai", + "exporterPostcode": "400703", + "exporterCountrySubDivisionName": "Maharashtra", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerId": "IMP-UK-88456", + "importerName": "XYZ Foods Ltd.", + "importerLine1": "Unit 17, Royal Wharf", + "importerLine2": "Docklands Industrial Area", + "importerCityName": "London", + "importerPostcode": "E16 2AA", + "importerCountrySubDivisionName": "Greater London", + "importerCountryCode": "GB", + "includedConsignmentItems": [ + { + "manufacturerId": "MFG-IN-3211", + "manufacturerName": "LMN Grains Co.", + "manufacturerLine1": "Plot 7, Grain Belt Estate", + "manufacturerLine2": "Sector 9", + "manufacturerCityName": "Karnal", + "manufacturerPostcode": "132001", + "manufacturerCountrySubDivisionName": "Haryana", + "manufacturerCountryCode": "IN", + "tradeLineItems": [ + { + "invoiceReferenceId": "INV-904/UK", + "formattedIssueDateTime": "2025-06-06T09:15:00.000Z", + "originCountryCode": "IN", + "tradeProductId": "TP-98121", + "tradeProductDescription": "Basmati Rice, Organic, 20kg Pack", + "harmonisedTariffclassCode": "10063010", + "harmonisedTariffclassName": "Semi-milled or wholly milled rice, whether or not polished or glazed", + "transportPackages": [ + { + "transportPackagesId": "PKG-0101", + "transportPackagesGrossVolume": "3.2", + "transportPackagesGrossWeight": "2050" + } + ], + "sequenceNumber": -4 + } + ], + "includedConsignmentItemsId": "ITEM001", + "includedConsignmentItemsInformation": "Organic Basmati Rice – 20kg vacuum packs", + "originCriteriaText": "Wholly Obtained in India" + } + ], + "loadingBaseportLocationId": "PORT-IN-MUM", + "loadingBaseportLocationName": "Nhava Sheva (JNPT), India", + "mainCarriageTransportMovementId": "MCTM-8458", + "mainCarriageTransportMovementInformation": "Ocean freight via ABC Shipping", + "usedTransportMeansName": "Vessel – XYZ VESSEL 001", + "usedTransportMeansId": "VSL-77381-AZ", + "departureDateTime": "2025-06-05T09:15:00.000Z", + "unloadingBaseportLocationId": "PORT-UK-FEL", + "unloadingBaseportLocationName": "Port of Felixstowe, United Kingdom", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": ["VerifiableCredential"], + "qrCode": { + "type": "TrustVCQRCode", + "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Fw3c%2Fv2_0%2Fcertificate-of-origin-default.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:01992e71-8f2b-7000-aa91-4e2970c8bf4b", + "proof": { + "type": "DataIntegrityProof", + "created": "2025-09-09T12:26:58Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAN0HNoehLZWCVx43aBosJW3XeHtsL7S-C3PvE8tt5qb_mXfBOD5Wgsza84uGljsaqjRG9svPnQbiJTuCsDGXmW1gjgCQDK674hOYZJLdhCH8Vxiir0VYTPbMDx8zSjZo7OAjRcdhYIIFAEQgGCGbGJjfPUROKRgEnjyBP_YzvtAr-xCfkgjZkgIZnL2lzc3VlcmovdmFsaWRGcm9tci9jcmVkZW50aWFsU3ViamVjdG0vcmVuZGVyTWV0aG9kZy9xckNvZGVlL3R5cGU" + } +} \ No newline at end of file diff --git a/tests/fixtures/w3c/certificate-of-origin-expired.json b/tests/fixtures/w3c/certificate-of-origin-expired.json new file mode 100644 index 0000000..1910f6e --- /dev/null +++ b/tests/fixtures/w3c/certificate-of-origin-expired.json @@ -0,0 +1,102 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json", + "https://trustvc.io/context/attachments-context.json", + "https://trustvc.io/context/qrcode-context.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": ["Coo"], + "signature": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABCwAAAG6CAYAAADDFddpAAAAAXNSR0IArs4c6QAAIABJREFUeF7t3QHWoziWJtDoleX0ymJ6ZTO5splUVdDtcAASIKEn6f7n5MnqTgzSfcI2n4X4jx/+CBAgQIAAAQIECBAgQIAAAQLBBP4jWHs0hwABAgQIECBAgAABAgQIECDwQ2BhEBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAgTYC/+vHjx/pn//76582R7FXAgQIECBAgMCkAgKLSQurW90EPi9Q0v/+391a4sAECPQU+D+/worPNvyX94SeJXFsAgQIECBAYDQBgcVoFdPeyAJ7FyipvekiJf0JLyJXT9sI1BP4fye7SrMt/vZ+UA/bnggQIECAAIF5BQQW89ZWz94TSDMpfu78mrrXAr+wvlcXRyLQQyC9H6TwMvf3n24TyRH57wQIECBAgMDqAgKL1UeA/tcQOPs19Wj/KbhwX3sNffsgEEsgzaRKAWbJnwCzRMk2BAgQIECAwLICAotlS6/jlQSuXJzsHdLtIpUKYTcEgggc3Rp2Fl66XSxI8TSDAAECBAgQiCUgsIhVD60ZT+DO7Iq9XrqvfbzaazGBPYG9EDOd3+lWEaGFMUOAAAECBAgQuCAgsLiAZVMCXwJnsytyFyhnmO5tN9QIjCtw9HSQ1KOzW0XcHjJuzbWcAAECBAgQaCQgsGgEa7dLCJwFFtu5tU31Lr2nfYNz8bLEENLJCQX2AosthMwtyOm8n3BA6BIBAgQIECBwX0Bgcd/OKwkc3aueZlekC5TvvxRe/FX4NBHBhfFFYEyBs8Ai9SgXWphhNWbdtZoAAQIECBBoICCwaIBql8sIHK1fcRRYbDBXZ1341XWZIaWjEwjkAovUxdxivUKLCQaCLhAgQIAAAQLPBQQWzw3tYV2Bs6cBlFxwpF9a0z+lt4sILtYda3o+jkBJYFESWvh8HqfmWkqAAAECBAg0EvCFqBGs3S4hcBZY5GZZfAPlfnHdthdaLDG0dHJggb2ZV0cBZu4RqCXB58BUmk6AAAECBAgQOBcQWBghBO4L5C42roYLpWtcXN3v/R56JQECVwX23hfOPmvPHo18Nfi82lbbEyBAgAABAgRCCwgsQpdH44IL5BbPS82/Ey6UzLZIFzJp3+nf/ggQiCNwZYZFanXufL/zHhJHQ0sIECBAgAABAg8EBBYP8LyUwD/rT5z9OroB3Z3WnZvBkfZ/d9+KR4BAG4GrMyxSK3LnuvO8Ta3slQABAgQIEAguILAIXiDNCy+Qu9B4Glrkfn0VWoQfIhq4mMDVGRaJJzdby60hiw0i3SVAgAABAgT+LSCwMBIIPBPIXWhse39ywVESWpg2/qyOXk2glsCdGRbp2Lnw0zleq0L2Q4AAAQIECAwjILAYplQaGligJFBIzX8SWrigCTwANI3Ah0DpY02/0UrCT5/ZhhoBAgQIECCwlIAvP0uVW2cbCrwVWuSO41fYhkW2awIFAncDi7Rr53cBsE0IECBAgACBdQQEFuvUWk/bC+QuNrYWPA0Vcsd5uv/2Uo5AYF6BJ4FFUsndGmIBznnHjp4RIECAAAECXwICC0OCQF2B3MXGW6GFi5q6dbU3AqUCTwOL3K0hT28tK+2H7QgQIECAAAEC3QUEFt1LoAETCkQJLcy0mHBw6VJ4gaeBRepg7j3EuR1+GGggAQIECBAgUENAYFFD0T4I/Cmw92jDPaenFx6520PMtDA6CbwrsHdOXj3PS2ZZpH2m2Rb+CBAgQIAAAQLTCggspi2tjnUWyF1wfDbvaaiQCy2uXix1pnN4AkML7J37d87B3Hnt1pChh4nGEyBAgAABAiUCAosSJdsQuCcQKbR4GorcE/AqAusJ1Aosklxuppbzer3xpccECBAgQGApAYHFUuXW2Q4CuV9JtyalX0ufTvHOHevOr7wdyBySwNACe4HF3dkQudDz7n6HBtZ4AgQIECBAYB0BgcU6tdbTfgK5IOEztEi/mD75yx3LL7JPdL2WQF6gZmCRjpZbgNM5na+JLQgQIECAAIFBBQQWgxZOs4cTyAUJnx16el7mjmWmxXDDR4MHE9i7lePueW2WxWDF11wCBAgQIECgnsDdL1D1WmBPBNYRyAUJm8Qbt4c499cZd3r6vsDerIgn55xZFu/X0BEJECBAgACBAAJPvkAFaL4mEBhOIHfh8RlauD1kuPJqMIF/Ceyd509v3cgtwOnz3OAjQIAAAQIEphPwBWe6kurQAAKRQgvvAQMMGE0cTqBFYJGboeVWr+GGiQYTIECAAAECOQEXKzkh/51AfYF0T/rPHz9+pH/n/mo8BSB3ofP0l99cH/x3AqsJ1Hy06afd2SyLGu8Vq9VJfwkQIECAAIHgAgKL4AXSvKkFclO8Pzv/9Fw9Cy1c6Ew9zHSug0DtJ4VsXRA+diimQxIgQIAAAQL9BJ5eBPVruSMTmEPgyu0hacp3Chfu/uWOZabFXVmvI/C7QKvAIh3FLAujjQABAgQIEFhGQGCxTKl1NKjA1dtDnoYWfqENOhA0azqBmo82/cRxDk83VHSIAAECBAgQOBIQWBgbBPoL7P0ae9QqjzztXy8tIFAi0GLhze24ZlmUVMA2BAgQIECAwPACAovhS6gDkwhcCS1Sl58+EcDtIZMMHN0IK7A3E6LWbVfO37Bl17CFBbYZk3//MkjvAf4IECBA4KGAwOIhoJcTqCyQuxD5PNzT0CK3EOfT208q09gdgaEEWq5jkSDMshhqOGjspALpPE///LXz5C8LWk9adN0iQOBdAYHFu96ORqBE4M3QInesWr8Il/TbNgRmEmgdWDh3Zxot+jKaQOn6U09/WBjNRXsJECBQXUBgUZ3UDglUEchdjHwe5OkXIov4VSmZnRD4Q6DVwpvpQLnbyJ6+LygnAQJ/CpQGFdsrzbIwiggQIPBQQGDxENDLCTQUyAUJNUOLXEBipkXDQtv1tAJ751XNz92z89aF0rTDSsc6CFwNKj6bWPOc79B1hyRAgEBfAW+iff0dnUBOQGiRE/LfCcQVaLnwZup1bpaFoDHu2NCyMQS2NSp+3myumU434byMAAECm4DAwlggEF/gSmjx9FfV3LFcAMUfL1oYR2AvUKh9Dll8M069tWQugdznYUlva5/vJce0DQECBKYSEFhMVU6dmVjgyhcnocXEA0HXhhJovfBmwsi9N/icH2rIaGwAgdw5VdLE9DnsSVslUrYhQIBARsAXGUOEwDgCV79EPfllx5oW44wLLY0t8D0D4mmguNfbs1kWT94HYstqHYF6AtsaFWmP6X/f/dtCinSe+yNAgACBCgICiwqIdkHgRYHcPevfTXlysZJb0M+vRy8W3qGGFWi98GaCyZ2r6X3AHwECfwo8WUxz25vZFEYWAQIEGgoILBri2jWBhgK5GRCfh36y6JcLoYZFtOslBFovvJkQc0Hmk+ByiSLp5HICNYIKsymWGzY6TIBADwGBRQ91xyRQR+DKLSJPQouz47SY3l5Hx14IxBDYCxOenI9HvRIuxqi3VsQWqBFU+NyLXWOtI0BgMgGBxWQF1Z3lBN4KLVwMLTe0dLiSwBsLb+ZmWbjAqlRMuxlWQFAxbOk0nACB1QUEFquPAP2fQSA3Hfyzj09+2T0LLZ7sd4Ya6AOBM4G9RTFbfP5afNM4JPC7QI2gwuebUUWAAIGOAi2+MHXsjkMTWFqgdF2LJ7+2Ci2WHmI6f1Ng77xpsa6EmVA3C+Rl0wkIKqYrqQ4RILCqgMBi1crr96wCV24RuXv+n/2K65eoWUeWfj0ReGPhzdS+3GyrFiHJExevJVBbIJ0Dn48ovbN/T/24o+Y1BAgQaCRw94KlUXPslgCBCgJXQos7FzAuiioUyS6WEnhr4c2EahbUUkNLZz8Ernz27cE9mX2oEAQIECDQSEBg0QjWbgl0Fij94nb3l6Tc/r23dB4ADh9O4HtmUquLo7NAsdUxw2Fr0DICtW79SOdG+scfAQIECAQTcFERrCCaQ6CyQOm6FndmWnjcaeVi2d3UAm8FFgnx7Ly/c65PXRidG1KgVlCRPsf8ESBAgEBgAYFF4OJoGoFKArnZENth7qw/Yfp5pSLZzfQCb61jkSCFidMPp2U7WCOoMNNo2eGj4wQIjCggsBixatpM4LpAr9DCr7nXa+UVcwrshXstP4M94nTOcbRqrwQVq1ZevwkQWF6g5Zel5XEBEAgmkFss8+5MC/fMByu05oQU2DtPWv7Sa/ZTyGGgURcFngYV27oUKTz3R4AAAQIDCggsBiyaJhN4KFCyrsXV20POZnBc3dfD7nk5gZACbz4pJAHkAkqf/yGHiUb9EngaVKTd+OwxnAgQIDCBgC8sExRRFwjcECi5ReTql72zIMR7zY0iecl0At/nSMsZFgnP4pvTDaHpOySomL7EOkiAAIFrAi4irnnZmsBMArVDC7eGzDQ69KWFwNvrWDgnW1TRPlsI1AoqPJ60RXXskwABAh0FBBYd8R2aQACB3LTx1MQrMy3O9mcBzgAF14SuAm8+KWTrqMU3u5bcwU8EtpAibZL+992/9BklqLir53UECBAILiCwCF4gzSPwkkBuXYsrU9eP9nVlHy9122EIvCrw9joW24VgOif3/pyTr5bfwX4J1JhNkXYlqDCkCBAgsICAwGKBIusigUKB3C0ipTMtzmZZlO6jsMk2IzCUQI/AIgGZZTHUMJm2sYKKaUurYwQIEGgnILBoZ2vPBEYUyIUWpb/ImmUxYvW1+Q2BtxfeTH06O69Lz+k3bBxjPoHtVo+fD2/7SDJprG6zKuaT0iMCBAgQ2BUQWBgYBAh8C+RCi9JZEkehRenrVYbAjAJvL7y5GQoRZxxNcftUazZF6qFbP+LWWcsIECDQXEBg0ZzYAQgMKZALLUp+lT3aR8lrh0TTaAIFAnvnxRufxWfr1AgRCwpnkyKBWkFF+pz4+58jpvPFHwECBAgsLPDGl6SFeXWdwPACTy9yzLIYfgjoQGWBXutYpG6YZVG5mHb33wKCCoOBAAECBJoICCyasNopgakEntz/bpbFVENBZyoI9Awszs5lsywqFHexXdQKKRKb9SkWGzy6S4AAgVIBgUWplO0IrC3wZKbF0RMK/vPXl9S1ZfV+RYEeC28m57Mn+KT/7jvBiqPxWp/TGNqCimuv3N9aUFFD0T4IECAwsYAvJxMXV9cIVBbIrWtxFEAcXSRZy6JygexuGIG9EO+tz+Oz83jFEHF7isX2779+rZ2wDab0PpX+WfnvM6DYnJ56mNHzVNDrCRAgsIjAW1+QFuHUTQLTC5z9Qnu2SJpZFtMPDR28INDrSSGpiblzOIUWs//dvQDfgou0GOTn3/b/nynYuGuUGzuCipyQ/06AAAECvwkILAwIAgSuCqRfaNOvkEe/tO39SmuWxVVl288ssHc+vDm74ewWrzfb8WaNa663UNLu73BjhJkarYzc9lEyYmxDgAABArsCAgsDgwCBOwK5e+H3fkUzy+KOtNfMKNBz4c3kudIsi1zA+vb42maipeP2CjE+w+afvwBq3erx6SmoeHt0OR4BAgQmFBBYTFhUXSLwkkDu17jvX2o9MeSlwjhMeIHegUUCmnmWRe69KeoA+Q4zUj++bzPJ3XbyHTyk/zvNiNuCqjf6ngLrXmHMG/1zDAIECBB4UUBg8SK2QxGYVOBo5kTq7vdMC7MsJh0EunVZoNeTQraGns2yGHWdgVGDisuDJ+ALzKYIWBRNIkCAwAwCAosZqqgPBPoLnD154PPixyyL/rXSghgCPRfe3ATOwsaR1rIQVPQZ01tIkY6em/nRp4WOSoAAAQLDCwgshi+hDhAII3A2xfzzEaZ7F0kecRqmjBryksB3eNfjHJhhlkXuccsvlXOZw5hJsUypdZQAAQIxBAQWMeqgFQRmESiZaXEUbIw6DX2W2unHuwK9nxRSMssi+neEp2FFyQyBVKfPdSHeXg/i3VG5fzQhRYQqaAMBAgQWFYj+ZWTRsug2gaEFzi4itl+RzbIYusQaX0EgwsKbqRtn52vk20LuhhXbwpa1F4XcQo3vcKPF0zcqDL/sLoQUWSIbECBAgMAbAgKLN5Qdg8B6ArnHnh6JRL5AWq+Ketxa4Du46zH+c+dqxO8Jd8KKnk+u+JylkWZoRAsxtvUn/vZ0j9anvP0TIECAwFWBiF9ErvbB9gQIxBS4c1HR4z7+mHpatYLAd2DRa/yP9ojTs8VCP8dN9FkC37ebpLanQCMFBz9/hQc1wo1tVknadwpuPh+XarHMFd5p9JEAAQIDCwgsBi6ephMYQCD36+1eF7wvDVBYTawisHfh3WP8n52nvUKUI+CSIDR6UHF38HzedpL6uP3f2//+Dh+EEXelvY4AAQIEwgj0+GIUpvMaQoDAawKlv4imBkW7QHoNyYGWE9i7+O71uTzCLIuSsMLivcudRjpMgAABAjML9PpiNLOpvhEg8KfA1ZkW3puMohUE9i7Ae6xjkaxHmGWRCz6FFSucNfpIgAABAksJuChYqtw6S6C7QO6CY2tgr4u27kAasJTAXmDR86L7bJZF7+8LudkVPd2WGrQ6S4AAAQIE3hTo/QXkzb46FgECMQTOLoq2FrotJEattKK9QJSFN1NPo94WUjJDS8jZfqw6AgECBAgQeF1AYPE6uQMSIPCPQO7X0oTk/clQWUEgysKbm/XRLKieIWLu/cLsihXOFH0kQIAAgSUFXBAsWXadJhBCIHcR0vMCKQSQRiwhEGmGRcRZFrnZFd4nljhNdJIAAQIEVhUQWKxaef0mEEMgF1r45TRGnbSinUCkhTdTL6Mtvuk9ot3Ys2cCBAgQIBBeQGARvkQaSGB6gdwvqEKL6YfA0h3cWzei95iPtJbF2UK9vZ2WHrg6T4AAAQIE3hAQWLyh7BgECOQEhBY5If99VoG9sd/7QvxsVsObbTO7YtZRr18ECBAgQKBQQGBRCGUzAgSaC+QeeZruVU8XS+nf/gjMIrAXWPRelyHKbSFn7wm9jWYZf/pBgAABAgRCCwgsQpdH4wgsJZD7NXXDePMX3qUKoLNdBCIGFgmi920hufcD7wNdhquDEiBAgACBdwUEFu96OxoBAscCudtCPl/pYsVImklgbybBf3aeTdR7lkUusPD9ZaYzQF8IECBAgMCBgA98Q4MAgUgCZ7/qfrdTaBGpctryRGBv3PcOLFJ/zm7JaP39we0gT0aU1xIgQIAAgUkEWn/hmIRJNwgQeEngyiyL1CShxUuFcZimAnuBRYQ1Gs7Ox9bnnqeDNB1ydk6AAAECBMYQEFiMUSetJLCKwNXAQmixysiYu597tz+0DgRKRHPnY6vvELnbQSLMPinxsw0BAgQIECDwUKDVl42HzfJyAgQWFji6LST94pwuoPb+PEFk4QEzQdejLryZaHssvpkLLHx3mWDQ6wIBAgQIECgR8KFfomQbAgTeFDj6VTeFEn//c1/9z5PGRPhV+k0rx5pD4GjMR/iM7rH45llIEuFWmTlGnV4QIECAAIEBBCJ8GRqASRMJEHhZ4Oj+9fSelfv1VWjxcrEcropAxCeFbB17e5aFwKLKkLITAgQIECAwvoDAYvwa6gGBGQWOLli2e9dz99YLLWYcFXP3aW/MRxnHb8+yOAssopjMPRr1jgABAgQIBBEQWAQphGYQIPCbwNEsis/p4EILg2YmgahPCtmMz57aUXsRTE8ImWlk6wsBAgQIEHggILB4gOelBAg0EzgLI77ft85uEfFrbLMS2XFlgb1xHGm9hrPzrHY7BRaVB5fdESBAgACBUQUEFqNWTrsJzC9wdNGy92vumxdT88vf7+H3U1zShay/MoHIC29uPXhrloXAomzM2IoAAQIECEwvILCYvsQ6SGBYgaP72I9mTQgt3i91ushO//x18sjZ1CozXfK1OQosat9ukW/J8RZvnWMCiydV8loCBAgQIDCRgMBiomLqCoHJBM4eb5ou4vb+ck8Q8Z5XZ5BsQcXZI2b3jiS4OPeP/KSQreVvzLIQWNQ5T+2FAAECBAgML+DL+/Al1AECUwucPd70qOO5xTgj/WI9YvFyoVCuT+k2kb//2Sjtx9/vApGfFLK1tPUTPJy/zgoCBAgQIEDgvwUEFgYDAQKRBXKPNxVavFu93MXkldaYbfGnVvQnhWwtPpsB8fR7RW6MCRyvnGW2JUCAAAECgws8/WIxePc1nwCB4AJ3A4u3fg0Ozle1eU9nVuw1Rmjxu8qRcbTP6pZP5smNs2gWVU8yOyNAgAABAgR+F/DBb0QQIBBZ4M46Ft/9aT2FPbJfzbad/ar+5Di1H4n5pC29XzvCwpvJKDcL4sl3C4FF71Ho+AQIECBAIJDAky8VgbqhKQQITCpQI7BINC1/EZ6U/rdu5S4inxqYafFvwVECi9w59SSEyo0131uenm1eT4AAAQIEBhLwwT9QsTSVwKICdxbe3KMSWtwfQK1mV3y26MlF7v2exXvlnnVEm1azLM5mREV0iDeCtIgAAQIECEwkILCYqJi6QmBSgaOL5TuL7wktrg+S3C/e36FDegJI+vvr14yBK0c00+LHj1EW3kx1PRsbd8MFt3BdOWNsS4AAAQIEJhcQWExeYN0jMIHA04U3vwmEFtcGRUlgcRQ0lLz2uzV3L3Sv9Sru1qMsvJkEW8yyOJvNI9CKO261jAABAgQINBEQWDRhtVMCBCoKHAUWTy5ezi60nuy3YrfD7Cp3O0hJwHA1uFi5BiOtY5EGac1ZFrkA5M6sqjAnkoYQIECAAAEC1wUEFtfNvIIAgXcFji6IalzUtghD3tVpe7TcBWQ6emkdzqb67/WiJAhp2/s+ex8tsEhKZ6HW1ZCh5r76VNBRCRAgQIAAgWoCAotqlHZEgEAjgVpPCtlrXtr3z4O1FkovxBt1O8RuS2ZGXPkcKdnfZ8dXDS1GWXhzq9VZsHWlhjVna4Q4gTSCAAECBAgQeCZw5YvmsyN5NQECBO4JtAwsthYd/aq7emiRmxVx5WJ0s74aWqxYg5EW3tzqejZWSmdZ5MaG7yz33kO9igABAgQIDCvgw3/Y0mk4gaUE3vjF2e0hfw6p3PoVd8OE3IXpd0vuHmfUk+RoLEb+zK4xy8IMi1FHrHYTIECAAIFGApG//DTqst0SIDCgwBuBRWJpuV7GaOwl61eU/nK+13ehxfGIGHEdi9Sbs1kWJbNxnr5+tHNMewkQIECAAIGMgMDCECFAYASBo1/6W7yHmWnx7xFREig89S85xuf4XGWmxVFgEb3/T2dZCCxGeDfWRgIECBAg8KLA0y+bLzbVoQgQWFjgzcDi7GL9yYyC0cqXW7+i1sXz1dBilRq8Nauo9rh8EjqcvbbWeKvdX/sjQIAAAQIEGgoILBri2jUBAtUE3g4szkKLVS6c3goszqz3BlDJrQXVBl7HHY24jkXiyt1KdBY4PQk7OpbKoQkQIECAAIFWAgKLVrL2S4BATYGjC5nWv7Yf/frf+rg17e7uK7fgZm2DXEDy2Y8VQoteY/7uePl83d1bQ8ywqKFvHwQIECBAYCIBgcVExdQVAhML9Py1edWFOHOBRYvPjyuhxewzXUYPy87Gz1HYZYbFxG/iukaAAAECBO4ItPjCeacdXkOAAIEzgd6/No9+8XhndOUCi9ozLFIb0y/zP3/9u6TNLdpQctw3thl14c3N5s6tIQKLN0aWYxAgQIAAgYEEBBYDFUtTCSws0DuwSPSrzbTIzXZoFRbkLnQ/T4PZbw0ZdeHNrUZXA4ir2y/8lqjrBAgQIEBgDQGBxRp11ksCowtECCzOQotWF+8969YrsEh9vhJazHxrSM9boWqMvVwdvwMngUUNdfsgQIAAAQITCQgsJiqmrhCYWCBKYLFdTO/dtjDbhXPPwOIsHNob5rN+lkUa93ffXnKhxed5c3Yb0mzn111PryNAgAABAksJzPolb6ki6iyBBQSiXbitsKZF78AiDetcG7ahP+utIUcX+6PN6MnVMdVvCwOP3s4EFgu80esiAQIECBD4FhBYGBMECIwgEC2w2C6uZp5pkbvIfOvzI7f45zZ+R7uILznvjgKLEQOa3HjKeQgsckL+OwECBAgQmFDgrS+cE9LpEgECLwpEDCxS92eeaZELCt76/MjdUrANwxEv4ktOodEX3tz6WFrHI5O3xltJTWxDgAABAgQIvCTgC8BL0A5DgMAjgcjBwNGjOEf+RfjI+7OIb35+lLQntW1k86MTZPSFNz/7VVrHb4sZ6/roDdGLCRAgQIDAKgJvfuFcxVQ/CRCoLxB1hsXW01nWGtj6k7uw7HEBWXJLwYyzLKKP/atne25s7e1vxtt9rrrZngABAgQILCkgsFiy7DpNYDiByDMsPi/y//r1SM5P4B4X908LnLuo7NGn0lsKerTtqffZ60cY+1f7nxtfo58/Vz1sT4AAAQIECBwICCwMDQIERhAY5VfmWWZa5Nav6PWLd8ksizSee7Wvxbk008Kbnz6pX9vtVEdus4VPLcaHfRIgQIAAgakFBBZTl1fnCEwjMNKvzKmto8+0OAssel9E5sKUNOhnuzVkloU3996Q0vmS/tLeknM5AAAgAElEQVQTd7bapX+ncbY97nSaNzIdIUCAAAECBK4JCCyuedmaAIE+AiMFFkno6Ffx3hf7JdXL3XrRuw+59m19nGmWxUwLb5aMQdsQIECAAAECBP4lILAwEAgQGEFglFtCPi1HfXpIbn2BCJ8bJbeGzDTLYsTxP8L7ijYSIECAAAECwQUifPEMTqR5BAj8EkgX4Okv/Tvd8vD3r3/ngNJ233/pYvLKdO/RZlhs/R1xpkXk20E+XdMtBNuYPBqDs8yyGHX8594b/HcCBAgQIECAwKmAwMIAIUDgSOBzQbzcheFTxXSbwfa33dP+uc+jX5h7355Q2u+99kecAZCbXRHJO9fWrTYzfM7NuvBm6fljOwIECBAgQGBRgRm+yC1aOt0m0ETg6DaGJgfL7HQLMdKF/dHTBEb5Bf1spsXV2SatalESAET7zFjl1hCBRatRb78ECBAgQIBAaIFoXz5DY2kcgYkFSi5WI3Z/lMBis4s406I0pIo0u2LzLF2Ac4bPOgtvRnwH0iYCBAgQIECgqcAMX+KaAtk5gckFRg0qPsuyrYWR1srY/veV9THeLnGU9QhKg4rNJ+rnRckYjnj7zdVxJ7C4KmZ7AgQIECBAYHiBqF9Ah4fVAQIDCJRc6A3QjWwTvwONdKHeO9jouSbH1aAiAUecXfFZ+JJbQ0abjfM9sD0pJHuq24AAAQIECBCYTUBgMVtF9YdAmcAqYUWJxrZGRvr35xNN9hb/LNlf6TZHNWgZDpRc2H+3v2V7Sq1y261wa8hRH0cPYnK19d8JECBAgACBhQUEFgsXX9eXFrgaWBzdYvH5aNPtf3//O0G3fspIy2J+ztDYjlNrocw3Qos7Myq2fo4QVmxtLRnTo98asvfI2dH71PLctW8CBAgQIEBgcAGBxeAF1HwCNwVyv7Rvsw1azTJIF9GfIcZfA4ca3zMzrt5uUjO02EzTv5+YpqCiVihzc4heflnpLIuRZyQILC4PCy8gQIAAAQIERhYQWIxcPW0ncF/gLLDo/YvtTGHGd4U+Z2ukQGGbjXI0AyUFB5/bfe5vW4uj5uyV1kHV/RFb9srZZ1lYeLNsHNiKAAECBAgQmERAYDFJIXWDwEWBkgu7SL9EH7X381aVmhfuFzmH3zw5brMqRu9MbvZQ6l+ksX3F28KbV7RsS4AAAQIECAwvILAYvoQ6QOC2QMmFXZQ1DO7cNvF5e8SGlGYrpD/hxv88KWWWoGKrcemtISN+/kV5JO7tNx0vJECAAAECBAhcERjxC9uV/tmWAIFjgdILuwihxZ3AorT23+s+fF74lu5jpO1mmk1x5D5SGHdl7Byds71v47rSB9sSIECAAAECBIoFBBbFVDYkMK3ACBd3PX9Z/lx49MlClj0H0BZSpDYcPfGlZ/tqH7s0jBvx1hALb9YeLfZHgAABAgQIhBUQWIQtjYYReFWgZE2L1KBesy1azrC4C/19y8l2u0na31u3nKTwYVt887MfaTHPq08ruesQ9XUlY3rEmQkCi6gjTrsIECBAgACB6gICi+qkdkhgWIGSC7xeoUXEwOJqoXNP9djCh8/9pv/f0QyYXuHR1X733L5k9tBosywsvNlzRDk2AQIECBAg8KqAwOJVbgcjEF6gNLR4O7joeUtIhKLNENj0cCy5NWS0WRYebdpjJDkmAQIECBAg0EVAYNGF3UEJhBZIF3k/L9zW8MYv/S7Yf/xgcO+0KZll8cYYvtf6P191FMKM1IdaFvZDgAABAgQITC4gsJi8wLpH4IHAldkW6VfqtG7C5wKVDw79x0tdrP+bZPWZJnfG1GyzLAQWd0aB1xAgQIAAAQJDCggshiybRhN4TaDkYu+zMa2Ci6ML9dGm89conPDmuuJssywsvHl9DHgFAQIECBAgMKCAwGLAomkygQ4CV2ZbbM2rOUXdwpO/F11ocf0k2LvI/97LKAtwHvXFZ/r1ceEVBAgQIECAQGABX24CF0fTCAQU6BVcmGHx52AQWlw7QUrG7igzdiy8ea32tiZAgAABAgQGFRBYDFo4zSbQUSBd+P11YVHOzxkX6YIw/XP17+gCbZQLzKv9Ld3emhalUv/ebpZZFup+re62JkCAAAECBAYVEFgMWjjNJhBA4G5wcWedC7MJjgvu4rX8ZChZk2WEEMzCm+U1tyUBAgQIECAwsIDAYuDiaTqBIAIlU+2PmprWuSiZdWGGxXmx93xGuPDuMYRLFuCMvpbFUWCh5j1GlGMSIECAAAECzQQEFs1o7ZjAcgJ3Z1wkqBRcpL+jx6JadDM/nPaMai58mm/BGFvMMsvCk0LGGG9aSYAAAQIECDwQEFg8wPNSAgR2BbbQ4edNn71ZF2ZY5DHThXgyT//+/Is+WyDfs/pbzDDLwqya+uPCHgkQIECAAIFgAgKLYAXRHAKTCTy9XSRxpH2YYVE2MI5mDwgtfvebYZaFtUvKzglbESBAgAABAgMLCCwGLp6mExhI4ElwcdZNtzz8qbNnbW2DP51Gn2UhsBjoDVBTCRAgQIAAgXsCAot7bl5FgMB9gZrhhcBivw7Ws8iPz9FnWZhNk6+xLQgQIECAAIHBBQQWgxdQ8wkMLPB0rYvUdYHF8QDYCy3cGvK71+izLCy8OfAboKYTIECAAAECeQGBRd7IFgQItBV4GlyUPhq1bS/i7X3vF3i3hvxep9FnWQgs4p13WkSAAAECBAhUFBBYVMS0KwIEHgs8CS/Sxfjf/7Tg6NGojxs34A7cGpIv2sizLDwpJF9fWxAgQIAAAQIDCwgsBi6ephOYWCD98r09pvNON90q8j9qe7/Ce+//H5+RZ1lYePPOu4PXECBAgAABAsMI+NI6TKk0lMCyAiW/gB/huF3k3zNOfn4BCXR+BykZYxHX/zhqt8/2Zd8udZwAAQIECMwl4EvNXPXUGwIzCtR4qsjqt4uYZZE/M/aMPl8Vcf0PTwrJ19UWBAgQIECAwMACAouBi6fpBBYRKPn1+wrFirML9i5sV3Q4Gycl4yzaZ+ZRYBExXLlyjtqWAAECBAgQIPAvgWhfvpSFAAEC3wJnv3yni+6/fq13cVVutQv27wtyF7W/j5gR17I4avNqY/vquW97AgQIECBAYBABgcUghdJMAgsLHAUWnxfcTxbpXOXibu/WmojrMvQc6iPOsrCORc8R49gECBAgQIBAUwGBRVNeOydA4KHA2a/eR0HD3TUvVljn4jv8McvizwGaW8siWsB1FFgIox6++Xg5AQIECBAg0F9AYNG/BlpAgMCxwFn4kLtwTK91u8jvtnsXty5sfzfKBV7RQh6BhXdQAgQIECBAYFoBgcW0pdUxAlMInF08ll5oPw0uEmTaxwx/Ft/MV7FkLYvSsZc/2vMtLLz53NAeCBAgQIAAgaACAoughdEsAgT+JXA2Pf/q+9cWOvy8YTvT7SJuC8kPgNxaFpFmWRyFepHamBe3BQECBAgQIEBgR+DqF36IBAgQeEvg7JfuJxdjT4KL1Pd0K0r6G3XWhdtC8iN4pFkWZljk62kLAgQIECBAYFABgcWghdNsAgsIPFm/ooTnyZNFtv2PGF7sXeBGusWhpHZvbDPSLIujmUjq+sZIcQwCBAgQIECgmYDAohmtHRMg8FCgdWDx2bzcQoulXdkCjDQDJP0T9c9tIWWVyT0xJEogcNTO3MK0ZQq2IkCAAAECBAh0EhBYdIJ3WAIEsgI116/IHuzXBrWCi+1429oXW3gRJcT4tnVhuz9CcuPhya1JpWOyZLuj2SBR2lfSB9sQIECAAAECBP4QEFgYFAQIRBXoEVhsFk+eLFLiuc3ESNu+ORsj3Q6SFh1N//78E1jsV22UtSzOghWf8yVnpG0IECBAgACBkAK+yIQsi0YRWF7gzdtBzrBrrHNRWsxt9sXfHy+otbDnUVCxHcpnwXGVRphlUePxv6Xj1HYECBAgQIAAgdcEfEl9jdqBCBC4IBAlsPhs8tOni1zo/u6me4FG+v+lMCK1bQtXtv/fX7/28j2b4nvnZlecV2aEWRZnbYyyzsbT8e/1BAgQIECAwIICAosFi67LBAYQ6Hk7SAnPFg6kUCAXCJTsr9c2wooy+eizLM4CCzUuq7GtCBAgQIAAgYACAouARdEkAosLnF0cRl1EcJt9MVKA4UL22okW/YkhFt68Vk9bEyBAgAABAgMICCwGKJImElhMIOLtIFdLsM3ASK9Li1xG+kuhTworojyxJJLNWVtyt4b0DtOOAovUJ5/1o4wy7SRAgAABAgR+E/AlxoAgQCCawNkv2aPfj/+5iOZbszG2YEJI8Xykn4UCae89x+dZ23q267m6PRAgQIAAAQLLCggsli29jhMIKZD7FXvm96zvJ4KkQCM9MWRbPPOzYMkpBRGf/33739tTRragwkyKekM9Nz57zrKYYWZSvUrZEwECBAgQIDCFwMxf/qcokE4QWEzARddiBR+wu7lZFr0+V8/ClJ5ByoAl1mQCBAgQIEAgikCvL1ZR+q8dBAjEEji7GLRIZKxardqayLMsoj9dZ9Uxo98ECBAgQIDATQGBxU04LyNAoImAC64mrHZaWeAsWOs5m2Hm9V8ql9DuCBAgQIAAgREEBBYjVEkbCawh4HaQNeo8Sy/PwoFes4EsvDnL6NIPAgQIECBA4F8CAgsDgQCBKAICiyiV0I4SgYhrWUSd+VHiaRsCBAgQIECAwB8CAguDggCBKAJuB4lSCe0oFYi25oqFN0srZzsCBAgQIEBgCAGBxRBl0kgCSwgcBRY91wRYAl4nbwuczQpKO/3PX4+fvX2Aiy/MLQj6dnsuNt/mBAgQIECAAIHfBQQWRgQBAhEE3A4SoQracEcg2iwLC2/eqaLXECBAgAABAiEFBBYhy6JRBJYTsFjgciWfpsPRZjVYx2KaoaUjBAgQIECAgMDCGCBAIIKA9SsiVEEb7gpEmmUhsLhbRa8jQIAAAQIEwgkILMKVRIMILCfgdpDlSj5lh6PcipGb8eFzf8rhp1MECBAgQGBOAV9c5qyrXhEYSeAssLBI4EiVXLutUWY25AIL59Ta41TvCRAgQIDAUAICi6HKpbEEphRwO8iUZV2uU7mg4M3P27Nz6r/+qUwKCf0RIECAAAECBMILvPkFKjyGBhIg8LqA20FeJ3fAhgJRZllEaUdDarsmQIAAAQIEVhAQWKxQZX0kEFdAYBG3Nlp2XSA3y+Kt2zHOAovUK5/912vrFQQIECBAgEAHAV9aOqA7JAEC/y3gdhCDYTaBsxDu//748SOFFq3/ztqQjv1WcNK6n/ZPgAABAgQITC4gsJi8wLpHILDA2a/Rb13YBebRtEEFIsyyiNCGQcun2QQIECBAgEAkAYFFpGpoC4G1BCL8Er2WuN6+JRDhVqez2UsCwbdGguMQIECAAAECjwQEFo/4vJjAY4H0S+jPf6Zo//1rTyut3u9JBo+Hjx0EFYgww0FgEXRwaBYBAgQIECBQLiCwKLeyJYHaAnu/wq7yyMEIF3S162l/BD4Fes8gsvCm8UiAAAECBAgMLyCwGL6EOjCwwN4voKtM1c4tCui9aeCBren/EugdyuXOMQtvGqgECBAgQIBAeAEXBeFLpIETCxxN2V7hQuLs199VZplMPLR17ZdAz3HeOzAxCAgQIECAAAECjwUEFo8J7YDAbYGji5nZZ1nkLqQEFreHlBcGE8iN9ZbhZO7Ys7/PBBsKmkOAAAECBAjcERBY3FHzGgL1BI5Ci5YXMvVaf29Puanq3pfuuXpVTIGesywsvBlzTGgVAQIECBAgUCjgwqAQymYEGgkcXczMPMtAYNFoMNltSIHcTIeWn8MW3gw5JDSKAAECBAgQKBVo+UWptA22I7CywNnFzKznp8eZrjzi1+z7WXDQcjZVLrBoeew1K63XBAgQIECAQFWBWS+IqiLZGYHGAivNssjNrph5ZknjYWT3gQXOgsmWa0nkzjeBReBBo2kECBAgQIDAjx8CC6OAQH+Bs4uK2c5Rv/j2H29a0EegxyyL3O0oAsI+Y8FRCRAgQIAAgUKB2S6GCrttMwLhBFZZfPPsdpBUFO9J4YamBlUSOAsmW82yyAUWrY5bicxuCBAgQIAAgdUFXBysPgL0P4rACo84zU1P92tvlNGoHa0EzgK7VrdneFJIq2raLwECBAgQINBcQGDRnNgBCBQJnP0S2upCpqhhFTfK3Q4isKiIbVchBc5Cu1bj36ymkENBowgQIECAAIESAYFFiZJtCLwjMPssi9yF0yzBzDujxVFGFOix+GYuKPQ9YMSRpM0ECBAgQGARAV9UFim0bg4hMPMjTnO3g7iXfoghqpEVBN5efDMXWAgKKxTVLggQIECAAIE2AgKLNq72SuCuwNEshNEvKnKzK1pNh79bB68j0Erg7VkWubBw9PeWVnWyXwIECBAgQCCAgMAiQBE0gcCHwIy3heSeVJC676LJabCSwJuLb+YCC2HhSiNPXwkQIECAwGACAovBCqa50wvMuPhm7oIpFdV70fRDWwc/BN6cZZELDAUWhiYBAgQIECAQVsBFQtjSaNjCArPNsnA7yMKDWdcPBd6aZZELLKwfY5ASIECAAAECYQUEFmFLo2ELC5wtkjfaOVsyu8LtIAsP9oW7fnZu1AwRBBYLDzJdJ0CAAAECowuMdvEzurf2EygReHO6eEl7nmyTm12R9u196Imw144s8MYsC4HFyCNE2wkQIECAwOICLhQWHwC6H1bg7UcftoAomV3h/vkW8vY5isBbsyzOgpGaszlGcddOAgQIECBAYBABgcUghdLM5QTOLmRGucg3u2K5YavDFwVysx9qneu5c9F3gYuFszkBAgQIECDwjoAvKe84OwqBqwK5C5no6z6YXXG14rZfVSB3rtT4nD6bsZXcaxxj1frpNwECBAgQINBQwJeUhrh2TeChwNlFRvRp3LlfdBNN9NDlYfm8nECxQOtzXWBRXAobEiBAgAABApEEBBaRqqEtBH4XGHWWRe4X49TLWlPdjRkCMwi0PtcFFjOMEn0gQIAAAQILCggsFiy6Lg8lMOKFRsnsCoHFUMNQY18QaDnLYsT3kRfIHYIAAQIECBCILiCwiF4h7VtdIDdbIdqFf669qZ7Rb2dZfczpfx+B3CyLJ+d6LrBwe1afmjsqAQIECBAgkBEQWBgiBOIL5GYsRLnYKAkrkvaTC6/41dJCAvcFcufQ3XM9F1j4LnC/Zl5JgAABAgQINBTwJaUhrl0TqCSQu9iIMmMhF6wIKyoNCLuZWqDFrSG595C7QcjUhdA5AgQIECBAoL+AwKJ/DbSAQIlALgzofcGR+2V466P3nJJq22ZlgdytIXcCylxg4bxcecTpOwECBAgQCCzgS0rg4mgagQ+B3AVH2rRXaFEaVrgVxJAmUCaQO6eunuu191fWC1sRIECAAAECBB4KCCweAno5gZcEcr+6pmbc+eW1RvNzsz+2Y3i/qaFtH6sI5ELKK6FFzX2t4q+fBAgQIECAQAABFxABiqAJBAoFchcdaTdXLmIKD3u6We6X2+3FZlfU0LaP1QTOwsArAWXuPPVdYLWRpb8ECBAgQGAQAV9SBimUZhL4ZwZFySyLBPXWeZ27CBJWGLYEngnkzrHS0CIXdr4ddD5T8WoCBAgQIEBgGYG3LmyWAdVRAo0Fchce6fClFzFPm+pWkKeCXk8gL5ALLUrChtz7hu8C+TrYggABAgQIEOgg4EtKB3SHJPBAIMosi9xF1NZFt4I8KLaXEvglkAsccqHF09crBAECBAgQIECgi4DAogu7gxJ4JFASFrScZVFy/NRBYcWjMnsxgd8EcutZpPMtnfd7f7nAwncBg40AAQIECBAIKeBLSsiyaBSBU4GesyxKj5064P3FQCZQT6AkKDyaaZG7fcu5Wq9O9kSAAAECBAhUFPAlpSKmXRF4UaDk4qXFLIvcL7UbgdkVLw4Gh1pGoOS83zv3cuet7wLLDCEdJUCAAAECYwn4kjJWvbSWwKdA7lfTtG3u3vYroiUXS2l/woorqrYlcE0gFz58hoYptEz/5G4nSe8T/ggQIECAAAEC4QQEFuFKokEEigVKAoRasyxKjrU13PtKcQltSOCWwJXzseQAztkSJdsQIECAAAECrwv4kvI6uQMSqCrwxiyLKxdH3lOqltfOCBwKlM60yBHWCjVzx/HfCRAgQIAAAQKXBVxcXCbzAgKhBErDhLu3hpTuP6G4FSTU0NCYBQSunJ9HHM7bBQaKLhIgQIAAgVEFBBajVk67CfyPQMksizuBwpWLIRc9RiSBPgJXztO9Fvoe0KdujkqAAAECBAgUCPiiUoBkEwLBBa48anQLLrbF+L67lvaV/vl5sc/eSy6C2ZxAZYE7wYWgsXIR7I4AAQIECBCoK+Aio66nvRHoJfDkfvYUXqSQ4s5fem266En/9keAQH+BFFykv7PQ0Xnbv05aQIAAAQIECBQICCwKkGxCYACBq7MsanXp7toYtY5vPwQI7AtsIWT691+/Nvn7V7goYDRqCBAgQIAAgSEEBBZDlEkjCRQJvB1aCCuKymIjAgQIECBAgAABAgTuCAgs7qh5DYG4AnfuY7/TG/e+31HzGgIECBAgQIAAAQIEigUEFsVUNiQwjEDL0MK978MMAw0lQIAAAQIECBAgMLaAwGLs+mk9gTOB2sGFWRXGGwECBAgQIECAAAECrwkILF6jdiACXQTuPqb0s7FmVXQpnYMSIECAAAECBAgQWFtAYLF2/fV+LYGSxx1uIimkSE8U2F6zlpTeEiBAgAABAgQIECDQXUBg0b0EGkCgm8DnYw8/H3PokYfdSuLABAgQIECAAAECBAhsAgILY4EAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=", + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterLine2": "Near MIDC, Vashi", + "exporterCityName": "Navi Mumbai", + "exporterPostcode": "400703", + "exporterCountrySubDivisionName": "Maharashtra", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerId": "IMP-UK-88456", + "importerName": "XYZ Foods Ltd.", + "importerLine1": "Unit 17, Royal Wharf", + "importerLine2": "Docklands Industrial Area", + "importerCityName": "London", + "importerPostcode": "E16 2AA", + "importerCountrySubDivisionName": "Greater London", + "importerCountryCode": "GB", + "includedConsignmentItems": [ + { + "manufacturerId": "MFG-IN-3211", + "manufacturerName": "LMN Grains Co.", + "manufacturerLine1": "Plot 7, Grain Belt Estate", + "manufacturerLine2": "Sector 9", + "manufacturerCityName": "Karnal", + "manufacturerPostcode": "132001", + "manufacturerCountrySubDivisionName": "Haryana", + "manufacturerCountryCode": "IN", + "tradeLineItems": [ + { + "invoiceReferenceId": "INV-904/UK", + "formattedIssueDateTime": "2025-06-06T09:15:00.000Z", + "originCountryCode": "IN", + "tradeProductId": "TP-98121", + "tradeProductDescription": "Basmati Rice, Organic, 20kg Pack", + "harmonisedTariffclassCode": "10063010", + "harmonisedTariffclassName": "Semi-milled or wholly milled rice, whether or not polished or glazed", + "transportPackages": [ + { + "transportPackagesId": "PKG-0101", + "transportPackagesGrossVolume": "3.2", + "transportPackagesGrossWeight": "2050" + } + ], + "sequenceNumber": -4 + } + ], + "includedConsignmentItemsId": "ITEM001", + "includedConsignmentItemsInformation": "Organic Basmati Rice – 20kg vacuum packs", + "originCriteriaText": "Wholly Obtained in India" + } + ], + "loadingBaseportLocationId": "PORT-IN-MUM", + "loadingBaseportLocationName": "Nhava Sheva (JNPT), India", + "mainCarriageTransportMovementId": "MCTM-8458", + "mainCarriageTransportMovementInformation": "Ocean freight via ABC Shipping", + "usedTransportMeansName": "Vessel – XYZ VESSEL 001", + "usedTransportMeansId": "VSL-77381-AZ", + "departureDateTime": "2025-06-05T09:15:00.000Z", + "unloadingBaseportLocationId": "PORT-UK-FEL", + "unloadingBaseportLocationName": "Port of Felixstowe, United Kingdom", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": ["VerifiableCredential"], + "qrCode": { + "type": "TrustVCQRCode", + "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Fw3c%2Fv2_0%2Fcertificate-of-origin-expired.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "validUntil": "2024-12-03T12:19:52Z", + "id": "urn:uuid:01992e72-bf2b-7ccd-8dc6-59bb098c5fe2", + "proof": { + "type": "DataIntegrityProof", + "created": "2025-09-09T12:28:16Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAQ-f-rwpGy3ezlby2hGJ5xMyBRtrmi-DnjQZvaUaRs5rsaIgWI9n9educHaCiGIH-_IeQq2e9AbWVvfDTBaaUoFgjgCQCbfvsvR0OlwHjDfCMB1_D5O-aBMCi3HpWLentPuj57EVYIO7xXUieSWT9FPEKI5ydp3R0o1e3Ji6qkweq6WPwomexgIdnL2lzc3VlcmovdmFsaWRGcm9tci9jcmVkZW50aWFsU3ViamVjdG0vcmVuZGVyTWV0aG9kay92YWxpZFVudGlsZy9xckNvZGVlL3R5cGU" + } +} \ No newline at end of file diff --git a/tests/fixtures/w3c/certificate-of-origin-redacted.json b/tests/fixtures/w3c/certificate-of-origin-redacted.json new file mode 100644 index 0000000..a983e61 --- /dev/null +++ b/tests/fixtures/w3c/certificate-of-origin-redacted.json @@ -0,0 +1,43 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json", + "https://trustvc.io/context/attachments-context.json", + "https://trustvc.io/context/qrcode-context.json" + ], + "id": "urn:uuid:01992e77-e339-7224-8a52-aeb5664df355", + "type": ["VerifiableCredential"], + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "qrCode": { + "type": "TrustVCQRCode", + "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Fw3c%2Fv2_0%2Fcertificate-of-origin-redacted.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + }, + "credentialSubject": { + "type": ["Coo"], + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterId": "EXP-IN-00987", + "exporterLine1": "12/F, Industrial Plaza", + "exporterLine2": "Near MIDC, Vashi", + "exporterCityName": "Navi Mumbai" + }, + "proof": { + "type": "DataIntegrityProof", + "created": "2025-09-09T12:33:52Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0BhVhAQ78n2FyQU5qhdqiflQoP6AKhdJTBnndg4CiSY7py8bgu-u0r5Hd4KxvrDjZ6H2I75KlBbRGCBVorowH5CdmBhlgjgCQDj-5QDs0gOcyG9BAxkyqpcv0TvXa70ru4gTCnbSxqN6iJWECCSWRzIGhFDdHajY3BbKTAwS4s0V990uYtNLx6aGjCVK4sLHDgh3YpmStVno1Y0DxRNkIq7sKatf5tC5C4HWUFWEBE9fMBIrJZsLiBnsKZypOIn0A99Vc6PaL3TWVs9MaIaSw2afVLh3rDkZoDRyaP2ftE6bcyZOjQI3LfiWjr_lqcWEACtVzPJiFRqMkED-G-Yh97NXeX-JAv9JsbXQJxLKWI8HvUx-a20hWMkR47usKbhl4jxVL_toRJUhXK7Z0kwgx6WEDHL6XLVt4MfN27USPNqV242M2dRNGtDfpLLoPkhDHGbOBAAm-N62cswRdGHpw_tvXvH7Y8qhhHmSKs5NQ5aGSvWECsfEty60iYAU0gksaVplZnawcSX7KWfpKtJsX-P1ZqDxwufaghHGZL9L9KZEDEprI_E0sL8poFpW_o2Xnk3OkZWEDqcnyyUq-hpBm3td7SfNaPtmSAXYsZ0KystHhjhQv4f81lkRjNUY8d6uapw0Nzt8NnMQXJL7aXWrtRTHsLByo4WEBJoFCVq-unpUFP3th8mPvNWUKmcrkqkQh5y0atldieIW3dnsS1P5uTWX9JIHxz3hTFXjPoeyRlcisHt19KT7YCWEDXoOx72Ni51tLWo2VlRsap8x8XT-IWxBYPMIMS7oGVX9b6W-qRp0aJw7Gg3-NvKT2Nk8LLgee7nnx8M9bgR9oXWEDIiDb7wwIwbtSDakbOvi-CCbhtNOW2iLdJBDVCOq7g4oSAlPZ5GMwdTa4PLJKsIO6llPr7rZpDeMRp7zwlNgagogBYIMbbYKGMwe5W0P6grgY1BSPdCGvDE9sjXRFdp7jdzYdVAVggYOVNBet2j7hleFp_I2So2enZhCReBjAQU6aFxpuB3HCJAAECAwUGBwgJ" + } +} \ No newline at end of file diff --git a/tests/fixtures/w3c/certificate-of-origin-revoked.json b/tests/fixtures/w3c/certificate-of-origin-revoked.json new file mode 100644 index 0000000..8321c5c --- /dev/null +++ b/tests/fixtures/w3c/certificate-of-origin-revoked.json @@ -0,0 +1,111 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/coo.json", + "https://trustvc.io/context/attachments-context.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://trustvc.io/context/qrcode-context.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "CHAFTA_COO", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialStatus": [ + { + "id": "https://trustvc.github.io/did/credentials/statuslist/2#5", + "statusListCredential": "https://trustvc.github.io/did/credentials/statuslist/2", + "statusListIndex": "5", + "statusPurpose": "revocation", + "type": "BitstringStatusListEntry" + } + ], + "credentialSubject": { + "type": ["Coo"], + "signature": "data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=", + "supplyChainConsignmentId": "CONS-EX456789", + "exportCountryCode": "IN", + "exporterId": "EXP-IN-00987", + "exporterName": "ABC Exports Pvt. Ltd.", + "exporterLine1": "12/F, Industrial Plaza", + "exporterLine2": "Near MIDC, Vashi", + "exporterCityName": "Navi Mumbai", + "exporterPostcode": "400703", + "exporterCountrySubDivisionName": "Maharashtra", + "exporterCountryCode": "IN", + "importCountryCode": "GB", + "importerId": "IMP-UK-88456", + "importerName": "XYZ Foods Ltd.", + "importerLine1": "Unit 17, Royal Wharf", + "importerLine2": "Docklands Industrial Area", + "importerCityName": "London", + "importerPostcode": "E16 2AA", + "importerCountrySubDivisionName": "Greater London", + "importerCountryCode": "GB", + "includedConsignmentItems": [ + { + "manufacturerId": "MFG-IN-3211", + "manufacturerName": "LMN Grains Co.", + "manufacturerLine1": "Plot 7, Grain Belt Estate", + "manufacturerLine2": "Sector 9", + "manufacturerCityName": "Karnal", + "manufacturerPostcode": "132001", + "manufacturerCountrySubDivisionName": "Haryana", + "manufacturerCountryCode": "IN", + "tradeLineItems": [ + { + "invoiceReferenceId": "INV-904/UK", + "formattedIssueDateTime": "2025-06-06T09:15:00.000Z", + "originCountryCode": "IN", + "tradeProductId": "TP-98121", + "tradeProductDescription": "Basmati Rice, Organic, 20kg Pack", + "harmonisedTariffclassCode": "10063010", + "harmonisedTariffclassName": "Semi-milled or wholly milled rice, whether or not polished or glazed", + "transportPackages": [ + { + "transportPackagesId": "PKG-0101", + "transportPackagesGrossVolume": "3.2", + "transportPackagesGrossWeight": "2050" + } + ], + "sequenceNumber": -4 + } + ], + "includedConsignmentItemsId": "ITEM001", + "includedConsignmentItemsInformation": "Organic Basmati Rice – 20kg vacuum packs", + "originCriteriaText": "Wholly Obtained in India" + } + ], + "loadingBaseportLocationId": "PORT-IN-MUM", + "loadingBaseportLocationName": "Nhava Sheva (JNPT), India", + "mainCarriageTransportMovementId": "MCTM-8458", + "mainCarriageTransportMovementInformation": "Ocean freight via ABC Shipping", + "usedTransportMeansName": "Vessel – XYZ VESSEL 001", + "usedTransportMeansId": "VSL-77381-AZ", + "departureDateTime": "2025-06-05T09:15:00.000Z", + "unloadingBaseportLocationId": "PORT-UK-FEL", + "unloadingBaseportLocationName": "Port of Felixstowe, United Kingdom", + "cooId": "COO-20250604-00", + "issueDateTime": "2025-06-05T21:15:00.000Z" + }, + "type": ["VerifiableCredential"], + "qrCode": { + "type": "TrustVCQRCode", + "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Fw3c%2Fv2_0%2Fcertificate-of-origin-revoked.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:019931dd-aa7f-7332-90f2-fec5f71c70bd", + "proof": { + "type": "DataIntegrityProof", + "created": "2025-09-10T04:23:54Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhA4rzd6CfB4kgKNCBy1K4D5sSjFBpTaVDGk5EtbjVPhTyyrlvAu_CofcRzjMElTccJ4RLX4Ms2f-uUyHYY4wCC4lgjgCQCsbptCV2AXhOhbd0YsBYNq6SQYnflgVe0D2ESzJQVKOtYIA594JgRPtr7FqHl45HltcfVfLNBsoddi-tvDFa3e_G-mD9YQOWoLoFb1wRH4Z8F0fO3jp-RXxSMvVqsSsvt1l-52SsAKskpTa7kKj6zytamFWqWKKe9wrF58lYp_K1Pp7y0TOFYQORBAlSjIi6oJv3E7RtBSRwVuiQLOFxWiWkIabzCpqCfuUJcV8DHJojhURBeT_3B2XbYTB-hs2zRtzMsoGcIdS5YQGxjmhsMGUYmNIZO-ChiiWsOP4TEQBv7h-R59mJTzsklLsCobT7LWl4DYKSv3FGLCMmnOCY5uZyV3k70o1y_rP1YQOa6nJga6wmoYaIi1oFdBYwRjq9u-lU_MTmMysCIjKYqC7u2z-g2ZzaEa997AjcFZelKUQnQOgDtVdmBy8APXRFYQPgzdJrh4m-CsxR7Ndtr0MT_5ys9CQpMrwWcs0VH1snMBZlj9w1DpVtsObRw26Sh2n-FASK8sPlgKqp6Kfa7y2lYQGFed9t9Lt6b33VYGJ8ydwTd_PExvFBZjQoP1iXokfiBhtfgiV4jIEIJpLTXJnRmzLLtC8nsX3i-6CFV3wgxv4hYQCs1_ygs_xkSAWZ_e76d2BWaNxujCpVVo7dyXZ56iECL4xeJG2WMKKw3waPF7qp3--RxOvothE9GR9siAx8ZOupYQCVKS4W_veN56a7tbz79ZEOLLmcxc9dLrMbbWb4BVHlBlcyw950p-gk7GgpvasPzX0lyo0MloZXQ7RSRUvWGhzxYQMgB4qnHTDn51R39L0ZMUS53cGF0gr0YwatsnGhuO2cAp-2XGS5Xm0ixVG5kpxgWfkIILIOjB5BVVQuyIe8HYQ5YQAJ_Xd2Rp-46jh3oN3gKCZc3Mj8WQnBJmuapdBAB0qR28pz1_FcyzyX_foByr3b6Kgjy7pvGWOLkGFsT1GL51YlYQPi2zRoXId7YH2LlJ2E9c_tBGmHaPnTcHVnPySfW06ujRrKcOIwp6qWmiaqEqNnODVDyE539XIDbYWu_fPPMbGVYQK0InDsdhHjrNwjiGysxmy5MLEg8pChPae8or-XZxS7q6jbpXnWp4WDYk2WxK-55Pimj4XuzsFpW5_uTN63eQLVYQLLMt-u_bHqAP3wjxkgcanSKOZiVonDVH8zjQJUT0tyJiD4Q7iqh4_Sr1xAtcYuzrMs1bjnezX4h4aDiZmvX3tFYQN79yVs-5HM_n7OSxPzEETwP9POJyl07znv-D93VcbBSLIFX8zIGoxRDeuDtHn1tWxs3Z5tdbF6D670uGJKy54lYQIKAoYknXbC6zYOL1B92VuQ9Za1bZUQdP0StW8KR0-5aF1Cqj2o7w-ZbennRjqgtas0o0LagStPTc75bAgfCkuFYQHrHL1Fh4zZi0tfKZXFTAFeb0DadNGvr04ZE5XotnrmAS8xAolDiIcV42Xrmb1OdEhRkg7e9Z1ZfKhqd_Q0DM4RYQF5lqmFP7lXibH6vUteQS_vjwMmL_1RA4EM6vzouZpfA4QtgClE4V77Vjm_Fg5OT77htF-V9sJCv1hU_T2jwOLlYQIjwjOOTuZ-sV_1shi-C_Az0fFs7_qqCvBcydAAkFprmorS2LSIoBn0AO9nyWBSiT3CrvdMDoLCZ22cPuNBhOp9YQJMDuEz2REma6yrEW3_GrvN9EegoZ6ZTsGM-7A6RslxvHloeT74y-fLaOOuWxEFuXj88oEh8u1Xj9k0ebL66uh5YQKQcixpC6tmOLQ8mvAIvXLWEYgbUTiON3ARucclSG6uew5Li-iQGOM97qwBVoA93Xb9-mpbqKl5tHPzfOWq_EuZYQLryDbvBJkz3guWMUg_8S0gfA05eQ6gBOKboMvWvjT2tK-MR7yVWegjpVQ4EGK8YzD3KxgjxCH6I8GZuySmWwyBYQBo0HuMYfT2Vqua8OsYwuo8N8kf-4iGcenZjsXFL-v9J6HKXLpspqAOjWUNaW9YbxExcQzmRwzg-RUsgTKeasdJYQDeh8UsbvzmSUSMi8rzr0NaFEqvTkqErvzilxcA-S3yLrifHthNkTp5iYqZ4P2wRrU3gzA9B6o1vtF7ERoZbfVxYQL70TvImGyi8xC6Azm0ZVaMSOnWcYHFK9nZV_pOtheNHQ1Ttd0e7jKWQvWEqr1TdVOTUMoUfcjrW3F0MSgO_-Q5YQACQbkBrQHzh2ikhOym0V3sYi4O2QgMVtCVvKUIbEhNTarR0u-VoM3x7J6LFlbvfEqcqVIRYCeK7hwj1EPc_8j9YQNA-AMmVydwqWgiuhgELKwsV_jdXjKdHyOm2wZs2lF7Yv7t5mDiCQqSKLNzUuEWfL0OW4_cOto9MYfLtw8rKMP5YQBuGcQt7qeItJxJMQh7KE2DDXrvXaA9qZigGex2r9ztw3-pBzI_3HjgESp-u1m1CkkX-OV4o06WRv5qXtQjdHpBYQI-4dUBQjihgtel6M8I8PJ2MGvbEvncNbBk_evRPbSh0pPudvzLVbrxeCJ1QGB12pjFj61WVSq0NJrdTQdr_X0RYQApb-Ls0n2E89lGMTPXNrLWNVKbmS1I7hLT2TMSb7UifflPVIc9fy-QCgYZrCvR0RAslA_hYIwPsDU53AFN5RJJYQC1F4Wb6-Pv_JD4PSyVlSgMUf1ZUxGwc72oZ1BUUfYLez3nwTvh7BW0ZRSetGPvoIN8KC1WXuOmzvlL20SElw-JYQLEwKqdyXX2OXEvMIahZdwY-Qv1hjd9ctBGXfhxvsmacNEDhPsI3feXQC545F5DhbPEpD5l70G_ErSJDoww3IAZYQAKMrq46ttODJpABrF2WwDdKnc4fj_ZCSspkBvtLK-sRhUb0nVuPtfRVYoR21MtKAWR9xmpfmg6kTMphfFQhW69YQB19sS6tL7LBc-gZCIteAZDl-isqycxJS9gCVeURVF3uY6A_H5q_uG946zpCU5zaGYLtoU-fzPT3rYMPMoBIecVYQDlfvIExL3tihkC7FeYtSQi7bKSQzMzsu-Q25lfLErqakfR1u7OknWcIQqC1FMh0_7Bz4vmYvn_NOdyoKLaNGo5YQGa7SWUauUn5DRNqO2fE8nLaNfL2CEunJL9DiTwdlF6TOsf4NGzzZ7yTkp1OGYh-u-Qe86Rd23YDvlk2hUftt8xYQH9uAb8r7JwTYwC0aG3PxUHAgLWuGStqaEjd7eIaQ7gPLFWh0HdDByBjhY8JbPva1Bizx-5-C5MYrcIetyWlTAdYQCu3IngY1cEDKaHdu9Bml0xv0v3-VC8GgNehc37p1EO1L6xKYn5TwXE2PW-U1-TGOO1KzCgOD5IIkMM1lzXDBEBYQCeL8KHWRYpzMykUmsy2HdZT8p7B1-yiLTd2enWSYHuSD5BJiTkVyLiYNPj7EXrmP43KuegFeYXS_gEte7zQz2RYQGv82dZLL4RemXQTwb5ESh30bn-rEZWxnt7pdNNNv3fY-gW2rzLv5-_nWFrYG1TIBidATPBbfdm3wODAOHT2wrdYQA-Qq18hMN49Ra3B_MPJbWcoRfrLkYNHVOzRKHOyPId0JAYWJ8tSvnHU6XLKb7dK_yd9ELxu_8V3zApfTg4J1_FYQHM3ExIrZlD8yglDCwEej-IuzWt93iSMCG9J9-m-xEjvek_IyhQC7SEslNGbip3QT3XyVIfKy_UhqtisWgjMRcFYQHqsZkgnQBe8JtzAdWKRPrCs2Fd1rs7uUStKXACvZI6Nqkj4RvC57XR4S3nKUEBZKB88frnsTXhJWTrHOPvwXgBYQCoEA1d_wrXETW8xi0E1oIOXSSdJ_Xe7WVQo8tZA8uvWRovw7b3T5711cYzGzX456wI6fW-MPcPj0OH5CueAjg5YQK5NTp2gKWuCjxCoWs4kFTcTJK-fgLlYiJJ8euEVG46omSxoIpJfcqqOxTOX6S--P4IMB0L2z1oaFvcQHcyYkRRYQDC8rM4D-vJ4kzu3e7Oa4VCm3sHk_dz_lseN2fcH_xzfGOf4_jqcsSuauGQgAqcxtXoZa-4LJ83hbjfRJJ3gYg9YQLqbZvIloGyjfHVQZxJ3Zo5NFhNhHAeinoCT6Ri_yTbmhQN0vXio3D0xFyE-LBBWdQzJSH0myNvZL3X-UWwDVT5YQHsA1BAT7_XHFUkjCKfjtkJNROLcPbQat6LMdOnGaZLME6UEukT4jBYbAkY8U8YasiZ2CuNzme1I0j7NkLbX-UlYQGrFw4lltp0AXAojHoB7uiAODh_7LBd2mj6s0LQXKj3Wu3WvCXYj-IJ4JEe6xb-ymNaIfwK4Y9vh3KdcifRlQ0hYQMqGRncvYPXYuS8OZeAl3DfBgxypi0xy9-a5LTZhTzF7JuZLEC8uzMxcuJMDcxoJR_bWRX2fHevITTaAoQ7EejlYQBnmuXaBgNhyj5XVOAxfRdmMZAAsJYQhzbc-S13zWSABQjit7s-vX8uDEEubJ9MXO2IwdldI_mLyuKwpNpkR4PxYQMzVku9QmDeOL0BeakFhGECvN_ZDBxMxwMdEfNwApAn7rIx8bsMUqlRyqMHSkbjXpsdWsqV1vbZOmqb56nIIQANYQLrGyizb1STbisWhqKi9MxBH6Z0Lwg6DOO4TkhD4BtmxvF7wwQ7i8wl62tuKj-Hxk-JMPKpFob7egBnBWyDlLaZYQCEJEa5b0pmieUkIzLej5ih5tcw3ECSSgZ2GLp7hR-KyGoq7uqZi-VG7FYt74chDat8fXQftAhzNBQO0-Q1fAylYQJw-BTnlX2JKIKbT2JhVd_bux_kgkccGbHTNQ24tWApWiYSKyG5gLvleDGtZA_z7aYNTO3gRwuE_QU3MfwXCOV1YQIhMBVgWSOJSQO2FiYjd9nRabUaY6dawGxFNcjHatmr08431Wa8EH7ikhCn2wawq7R0fB2EPeRQ32HVLStie2XxYQFTtE_dsdtjD_lxAyKIToaktfNByV61bu8UjuRw6MsFcIcDNXMfyzSQUAjsyBKoF0EynACu4dHuss35TXBx1RCRYQM4CN9Y-S5aYQjHf_ecRro82MbVVtlUDPM-wYWfmKF50ZGLqBbtSMz9CbhX9kipIpiDUdiRimoacC7ztrkX0rlpYQODnhdoGymFLCgVD0lXRi4TuN0SvakcuVZuMaBVI5MVQwb1oiXUPOdHSFZ6oiSif0g8QvGfLQOJk65t9OvE5NgxYQFPfsPGn9xL3JqhctBtWfWsckMtz37YxCt532I4TblQtKhrFNBBTgeJCNmHK0hqM40YhzBUTyPxsfEKxe0__x1NYQIKqKPImunUPV7b4gmQAt4GyQ5H8Jg7u20xiC_VigVQzjyxVSC7YVJiXflTO-Nso3Dn0CSVNVAvON-pbGkh8OjVYQDKkDn3lo0KZJefd90I8w4PPkvbvML9psiGQS-66Sms-c2miSA9ln0G0J_qrHSXecRwb3qbA88AnuO2iLmYHg4FYQGn1ggwlLvpsHG1ggjoa4yqW2XFaeE9mV2_XNZSDsZabKMCT_kss1-G0-a6aZnrYzR-HY2_3TMCgk41-5nHag-9YQCzSF5ycyigd_axNlz0GT7HzLloBUT0uFAoOceytXWveCEo1aUoeGSKGDUKvggpcAAWWX1BjMSu-h6uX5Jo8hu2FZy9pc3N1ZXJqL3ZhbGlkRnJvbW0vcmVuZGVyTWV0aG9kZy9xckNvZGVlL3R5cGU" + } +} \ No newline at end of file From 856705bf2b4fba2d1767a530a84b153a4a302b89 Mon Sep 17 00:00:00 2001 From: pennhan-dex Date: Wed, 14 Jan 2026 18:04:38 +0800 Subject: [PATCH 04/18] update unit tests --- tests/commands/verify.test.ts | 2 +- tests/main.test.ts | 55 +++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/tests/commands/verify.test.ts b/tests/commands/verify.test.ts index b244dc6..b9e4854 100644 --- a/tests/commands/verify.test.ts +++ b/tests/commands/verify.test.ts @@ -57,8 +57,8 @@ vi.mock('signale', () => ({ describe('verify', () => { beforeEach(() => { - vi.restoreAllMocks(); vi.clearAllMocks(); + vi.resetAllMocks(); }); describe('helper functions', () => { diff --git a/tests/main.test.ts b/tests/main.test.ts index c8a34d0..1a61c32 100644 --- a/tests/main.test.ts +++ b/tests/main.test.ts @@ -4,6 +4,7 @@ import { beforeEach, describe, it, MockedFunction, vi } from 'vitest'; import { handler as didHandler } from '../src/commands/w3c/did'; import { handler as keyPairHandler } from '../src/commands/w3c/key-pair'; import { handler as signHandler } from '../src/commands/w3c/sign'; +import { handler as verifyHandler } from '../src/commands/verify'; import * as utils from '../src/utils'; vi.mock('signale', () => ({ @@ -530,4 +531,58 @@ describe('trustvc-cli', () => { expect(signaleErrorSpy).toHaveBeenCalledWith('Unable to write file to ./signed_vc.json'); }); }); + + describe('trustvc verify command', () => { + let signalWarnSpy: MockedFunction; + let signaleSuccessSpy: MockedFunction; + let readJsonFileMock: MockedFunction; + let withAsyncCaptureConsoleWarnMock: MockedFunction; + + const W3C_SIGNED_VC_DEFAULT_FIXTURE_PATH = './tests/fixtures/w3c/certificate-of-origin-default.json'; + const OA_SIGNED_VC_REVOKED_FIXTURE_PATH = './tests/fixtures/oa/certificate-of-origin-revoked.json'; + + beforeEach(async () => { + vi.resetAllMocks(); + + signalWarnSpy = signale.warn as MockedFunction; + signaleSuccessSpy = signale.success as MockedFunction; + + const actualUtils = await vi.importActual('../src/utils'); + readJsonFileMock = utils.readJsonFile as MockedFunction; + readJsonFileMock.mockImplementation(((filePath: string, fileType: string) => { + return (actualUtils.readJsonFile as any)(filePath, fileType); + }) as any); + + withAsyncCaptureConsoleWarnMock = utils.withAsyncCaptureConsoleWarn as MockedFunction; + withAsyncCaptureConsoleWarnMock.mockImplementation(((fn: any) => { + return (actualUtils.withAsyncCaptureConsoleWarn as any)(fn); + }) as any); + }); + + it( + 'should verify a w3c credential through a given path', + async ({ expect }) => { + (prompts.input as any).mockResolvedValueOnce(W3C_SIGNED_VC_DEFAULT_FIXTURE_PATH); + + await verifyHandler(); + + expect(signaleSuccessSpy).toHaveBeenCalledWith('DOCUMENT_INTEGRITY: VALID'); + expect(signaleSuccessSpy).toHaveBeenCalledWith('DOCUMENT_STATUS: VALID'); + expect(signaleSuccessSpy).toHaveBeenCalledWith('ISSUER_IDENTITY: VALID'); + }, + ); + + it( + 'should verify an openattestation credential through a given path', + async ({ expect }) => { + (prompts.input as any).mockResolvedValueOnce(OA_SIGNED_VC_REVOKED_FIXTURE_PATH); + + await verifyHandler(); + + expect(signaleSuccessSpy).toHaveBeenCalledWith('DOCUMENT_INTEGRITY: VALID'); + expect(signaleSuccessSpy).toHaveBeenCalledWith('ISSUER_IDENTITY: VALID'); + expect(signalWarnSpy).toHaveBeenCalledWith(expect.stringContaining('DOCUMENT_STATUS: ERROR')); + }, + ); + }); }); From bc678a930d9dda833d3be60dfdc4f586078395fc Mon Sep 17 00:00:00 2001 From: pennhan-dex Date: Thu, 15 Jan 2026 22:38:15 +0800 Subject: [PATCH 05/18] add network derivation to oa verification --- .gitignore | 1 + src/commands/verify.ts | 36 +++++++++++++++++++++++++++++++----- src/utils/networks.ts | 18 +++++++++--------- 3 files changed, 41 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 1926801..40d25f6 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ didKeyPairs.json wellknown.json credentialStatus.json signed_vc.json +raw_vc.json # Dependencies node_modules/ diff --git a/src/commands/verify.ts b/src/commands/verify.ts index b2004b8..ede5bae 100644 --- a/src/commands/verify.ts +++ b/src/commands/verify.ts @@ -1,7 +1,8 @@ import { input } from '@inquirer/prompts'; -import { readJsonFile, withAsyncCaptureConsoleWarn } from '../utils'; -import { SignedVerifiableCredential, VerificationFragment, VerificationFragmentWithData, verifyDocument } from '@trustvc/trustvc'; +import { getSupportedNetwork, getSupportedNetworkNameFromId, readJsonFile, withAsyncCaptureConsoleWarn } from '../utils'; +import { getChainId, getDocumentData, isWrappedV2Document, isWrappedV3Document, SignedVerifiableCredential, VerificationFragment, VerificationFragmentWithData, verifyDocument } from '@trustvc/trustvc'; import signale from 'signale'; +import { getDefaultProvider } from 'ethers'; export const command = 'verify'; export const describe = 'Verify a document signed using w3c or OpenAttestation'; @@ -36,8 +37,33 @@ export const promptQuestions = async (): Promise => } export const verify = async (signedVC: SignedVerifiableCredential) => { - const { result, warnings } = await withAsyncCaptureConsoleWarn(() => verifyDocument(signedVC)); - handleExpiredCredentialWarning(warnings); + const isOpenAttestationV2 = isWrappedV2Document(signedVC); + const isOpenAttestationV3 = isWrappedV3Document(signedVC); + const isW3C = !isOpenAttestationV2 && !isOpenAttestationV3; + + let result: VerificationFragment[]; + let warnings: unknown[][]; + + if (isW3C) { + signale.info('Verifying W3C document...'); + ({ result, warnings } = await withAsyncCaptureConsoleWarn(() => verifyDocument(signedVC))); + handleExpiredCredentialWarning(warnings); + } else { + signale.info('Verifying OpenAttestation document...'); + const documentData = getDocumentData(signedVC); + + if (documentData.expirationDate && documentData.expirationDate < new Date().toISOString()) { + signale.warn(`The Verifiable Credential has expired.`); + } + + const chainId = Number(documentData.network?.chainId); + const chainName = getSupportedNetworkNameFromId(chainId); + if (chainId) { + result = await verifyDocument(signedVC, { provider: getSupportedNetwork(chainName).provider() }); + } else { + result = await verifyDocument(signedVC); + } + } logResultStatus(getResultFromFragment('DOCUMENT_INTEGRITY', result)); logResultStatus(getResultFromFragment('DOCUMENT_STATUS', result)); @@ -67,6 +93,6 @@ export const handleExpiredCredentialWarning = (warnings: unknown[][]) => { const expiredWarning = warnings.find((warning) => warning[0] === 'Credential has expired.'); // currently not logging to align output for w3c (reports expiration) and openattestation (does not report expiration) if (expiredWarning) { - // signale.warn(`The Verifiable Credential has expired.`); + signale.warn(`The Verifiable Credential has expired.`); } } diff --git a/src/utils/networks.ts b/src/utils/networks.ts index 5071ded..b6cff42 100644 --- a/src/utils/networks.ts +++ b/src/utils/networks.ts @@ -1,4 +1,4 @@ -import { Provider, JsonRpcProvider, InfuraProvider } from 'ethers'; +import { ethers } from 'ethers'; import type { GasStationFunction } from './gas-station'; import { gasStation } from './gas-station'; @@ -6,7 +6,7 @@ export type networkCurrency = 'ETH' | 'MATIC' | 'XDC' | 'FREE' | 'ASTRON'; type SupportedNetwork = { explorer: string; - provider: () => Provider; + provider: () => ethers.providers.Provider; networkId: number; networkName: (typeof NetworkCmdName)[keyof typeof NetworkCmdName]; currency: networkCurrency; @@ -28,14 +28,14 @@ export enum NetworkCmdName { } const defaultInfuraProvider = - (networkName: string): (() => Provider) => + (networkName: string): (() => ethers.providers.Provider) => () => - new InfuraProvider(networkName); + new ethers.providers.InfuraProvider(networkName); const jsonRpcProvider = - (url: string): (() => Provider) => + (url: string): (() => ethers.providers.Provider) => () => - new JsonRpcProvider(url); + new ethers.providers.JsonRpcProvider(url); /** * Creates a provider that checks for an environment variable override @@ -46,14 +46,14 @@ const jsonRpcProvider = const getProviderWithEnvOverride = ( networkName: NetworkCmdName, - defaultProvider: () => Provider, - ): (() => Provider) => + defaultProvider: () => ethers.providers.Provider, + ): (() => ethers.providers.Provider) => () => { const envVarName = `${networkName.toUpperCase()}_RPC`; const customRpcUrl = process.env[envVarName]; if (customRpcUrl) { - return new JsonRpcProvider(customRpcUrl); + return new ethers.providers.JsonRpcProvider(customRpcUrl); } return defaultProvider(); From 760730f32afa31dad30d92d2a811a4d4504a5c28 Mon Sep 17 00:00:00 2001 From: pennhan-dex Date: Fri, 16 Jan 2026 14:22:35 +0800 Subject: [PATCH 06/18] implement w3c transferrable doc verification & update unit tests --- package-lock.json | 47 ++--- src/commands/verify.ts | 115 ++++++++---- src/utils/networks.ts | 18 +- tests/commands/verify.test.ts | 123 +++++++------ .../fixtures/oa/bill-of-lading-operative.json | 115 ++++++++++++ .../oa/certificate-of-origin-expired.json | 168 ------------------ .../oa/certificate-of-origin-revoked.json | 168 ------------------ ...lectronic-promissory-note-inoperative.json | 71 ++++++++ tests/fixtures/oa/invoice-expired.json | 88 +++++++++ tests/fixtures/oa/invoice-revoked.json | 88 +++++++++ .../w3c/bill-of-lading-operative.json | 97 ++++++++++ .../w3c/certificate-of-origin-expired.json | 102 ----------- .../w3c/certificate-of-origin-revoked.json | 111 ------------ ...lectronic-promissory-note-inoperative.json | 60 +++++++ tests/fixtures/w3c/invoice-expired.json | 70 ++++++++ tests/fixtures/w3c/invoice-revoked.json | 79 ++++++++ tests/main.test.ts | 17 +- 17 files changed, 859 insertions(+), 678 deletions(-) create mode 100644 tests/fixtures/oa/bill-of-lading-operative.json delete mode 100644 tests/fixtures/oa/certificate-of-origin-expired.json delete mode 100644 tests/fixtures/oa/certificate-of-origin-revoked.json create mode 100644 tests/fixtures/oa/electronic-promissory-note-inoperative.json create mode 100644 tests/fixtures/oa/invoice-expired.json create mode 100644 tests/fixtures/oa/invoice-revoked.json create mode 100644 tests/fixtures/w3c/bill-of-lading-operative.json delete mode 100644 tests/fixtures/w3c/certificate-of-origin-expired.json delete mode 100644 tests/fixtures/w3c/certificate-of-origin-revoked.json create mode 100644 tests/fixtures/w3c/electronic-promissory-note-inoperative.json create mode 100644 tests/fixtures/w3c/invoice-expired.json create mode 100644 tests/fixtures/w3c/invoice-revoked.json diff --git a/package-lock.json b/package-lock.json index 4dc87cd..c0675ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1367,6 +1367,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "peer": true, "dependencies": { "@ethersproject/address": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", @@ -1766,6 +1767,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "peer": true, "dependencies": { "@ethersproject/abstract-provider": "^5.8.0", "@ethersproject/abstract-signer": "^5.8.0", @@ -4426,22 +4428,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/@typechain/ethers-v5": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz", - "integrity": "sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A==", - "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.0.0", - "@ethersproject/providers": "^5.0.0", - "ethers": "^5.1.3", - "typechain": "^8.1.1", - "typescript": ">=4.3.0" - } - }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -4467,8 +4453,7 @@ "node_modules/@types/prettier": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "peer": true + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==" }, "node_modules/@types/signale": { "version": "1.4.7", @@ -4530,6 +4515,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.52.0.tgz", "integrity": "sha512-iIACsx8pxRnguSYhHiMn2PvhvfpopO9FXHyn1mG5txZIsAaB6F0KwbFnUQN3KCiG3Jcuad/Cao2FAs1Wp7vAyg==", "dev": true, + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.52.0", "@typescript-eslint/types": "8.52.0", @@ -4855,6 +4841,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -6147,6 +6134,7 @@ "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", "dev": true, "hasInstallScript": true, + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -6208,6 +6196,7 @@ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -6449,6 +6438,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "peer": true, "dependencies": { "@adraffy/ens-normalize": "1.10.1", "@noble/curves": "1.2.0", @@ -6965,7 +6955,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "peer": true, "dependencies": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", @@ -8462,7 +8451,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "peer": true, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -8651,6 +8639,7 @@ "version": "0.33.3", "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", + "peer": true, "engines": { "node": ">=14.16" }, @@ -9550,6 +9539,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, + "peer": true, "engines": { "node": ">=12" }, @@ -9677,6 +9667,7 @@ "url": "https://github.com/sponsors/ai" } ], + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -10687,8 +10678,7 @@ "node_modules/string-format": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "peer": true + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==" }, "node_modules/string-width": { "version": "4.2.3", @@ -11061,7 +11051,6 @@ "version": "2.5.1", "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", - "peer": true, "dependencies": { "chalk": "^4.1.0", "command-line-args": "^5.1.1", @@ -11172,6 +11161,7 @@ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", "dev": true, + "peer": true, "dependencies": { "esbuild": "~0.27.0", "get-tsconfig": "^4.7.5" @@ -11238,7 +11228,6 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", - "peer": true, "dependencies": { "@types/prettier": "^2.1.1", "debug": "^4.3.1", @@ -11262,7 +11251,6 @@ "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "peer": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -11273,7 +11261,6 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "deprecated": "Glob versions prior to v9 are no longer supported", - "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -11292,14 +11279,12 @@ "node_modules/typechain/node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "peer": true + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" }, "node_modules/typechain/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "peer": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -11312,7 +11297,6 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "license": "MIT", - "peer": true, "bin": { "prettier": "bin-prettier.js" }, @@ -11397,6 +11381,7 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -11468,7 +11453,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "peer": true, "engines": { "node": ">= 4.0.0" } @@ -12121,6 +12105,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "peer": true, "engines": { "node": ">= 8" } diff --git a/src/commands/verify.ts b/src/commands/verify.ts index ede5bae..10212cf 100644 --- a/src/commands/verify.ts +++ b/src/commands/verify.ts @@ -1,31 +1,46 @@ import { input } from '@inquirer/prompts'; -import { getSupportedNetwork, getSupportedNetworkNameFromId, readJsonFile, withAsyncCaptureConsoleWarn } from '../utils'; -import { getChainId, getDocumentData, isWrappedV2Document, isWrappedV3Document, SignedVerifiableCredential, VerificationFragment, VerificationFragmentWithData, verifyDocument } from '@trustvc/trustvc'; +import { + getSupportedNetwork, + getSupportedNetworkNameFromId, + readJsonFile, + withAsyncCaptureConsoleWarn +} from '../utils'; +import { + getDocumentData, + getTransferableRecordsCredentialStatus, + isTransferableRecord, + isWrappedV2Document, + isWrappedV3Document, + SignedVerifiableCredential, + VerificationFragment, + VerificationFragmentWithData, + verifyDocument, + WrappedOrSignedOpenAttestationDocument +} from '@trustvc/trustvc'; import signale from 'signale'; -import { getDefaultProvider } from 'ethers'; +import type { Provider as V5Provider } from '@ethersproject/providers'; export const command = 'verify'; export const describe = 'Verify a document signed using w3c or OpenAttestation'; export const handler = async () => { try { - const answers = await promptQuestions(); - if (!answers) return; - - await verify(answers); + const signedVC = await promptQuestions(); + if (!signedVC) return; + await verify(signedVC); } catch (err: unknown) { signale.error(err instanceof Error ? err.message : String(err)); } -} +}; export const promptQuestions = async (): Promise => { const pathToSignedVC = await input({ - message: "Please enter the path to your signed Verifiable Credential file:", + message: "Please enter the path to your document:", required: true, validate: (value: string) => { if (!value || value.trim() === '') { - return 'signed Verifiable Credential file path is required'; + return 'Document file path is required'; } return true; }, @@ -34,7 +49,7 @@ export const promptQuestions = async (): Promise => const signedVC: SignedVerifiableCredential = readJsonFile(pathToSignedVC, 'document'); return signedVC; -} +}; export const verify = async (signedVC: SignedVerifiableCredential) => { const isOpenAttestationV2 = isWrappedV2Document(signedVC); @@ -42,38 +57,72 @@ export const verify = async (signedVC: SignedVerifiableCredential) => { const isW3C = !isOpenAttestationV2 && !isOpenAttestationV3; let result: VerificationFragment[]; - let warnings: unknown[][]; + let warnings: unknown[][] | undefined; if (isW3C) { - signale.info('Verifying W3C document...'); - ({ result, warnings } = await withAsyncCaptureConsoleWarn(() => verifyDocument(signedVC))); - handleExpiredCredentialWarning(warnings); + ({ result, warnings } = await verifyW3CDocument(signedVC)); } else { - signale.info('Verifying OpenAttestation document...'); - const documentData = getDocumentData(signedVC); - - if (documentData.expirationDate && documentData.expirationDate < new Date().toISOString()) { - signale.warn(`The Verifiable Credential has expired.`); - } - - const chainId = Number(documentData.network?.chainId); - const chainName = getSupportedNetworkNameFromId(chainId); - if (chainId) { - result = await verifyDocument(signedVC, { provider: getSupportedNetwork(chainName).provider() }); - } else { - result = await verifyDocument(signedVC); - } + result = await verifyOpenAttestationDocument(signedVC); + } + + if (warnings) { + handleExpiredCredentialWarning(warnings); } logResultStatus(getResultFromFragment('DOCUMENT_INTEGRITY', result)); logResultStatus(getResultFromFragment('DOCUMENT_STATUS', result)); logResultStatus(getResultFromFragment('ISSUER_IDENTITY', result)); -} +}; // ==== Helper Functions ==== +type FragmentType = 'DOCUMENT_INTEGRITY' | 'DOCUMENT_STATUS' | 'ISSUER_IDENTITY'; + +const resolveProviderForChainId = (chainId: number): V5Provider => { + const chainName = getSupportedNetworkNameFromId(chainId); + const provider = getSupportedNetwork(chainName).provider(); + return provider as unknown as V5Provider; +}; + +const verifyW3CDocument = async ( + signedVC: SignedVerifiableCredential +): Promise<{ result: VerificationFragment[]; warnings: unknown[][] }> => { + signale.info('Verifying W3C document...'); + + if (isTransferableRecord(signedVC)) { + const credentialStatus = getTransferableRecordsCredentialStatus(signedVC); + const chainId = Number(credentialStatus.tokenNetwork.chainId); + const providerForTrustVC = resolveProviderForChainId(chainId); + return await withAsyncCaptureConsoleWarn(() => verifyDocument(signedVC, { provider: providerForTrustVC })); + } else { + return await withAsyncCaptureConsoleWarn(() => verifyDocument(signedVC)); + } +}; + +const verifyOpenAttestationDocument = async ( + signedVC: WrappedOrSignedOpenAttestationDocument +): Promise => { + signale.info('Verifying OpenAttestation document...'); + const documentData = getDocumentData(signedVC); + + if (documentData.expirationDate && documentData.expirationDate < new Date().toISOString()) { + signale.warn(`The document credential has expired.`); + } + + const chainId = Number(documentData.network?.chainId); + + if (chainId) { + const providerForTrustVC = resolveProviderForChainId(chainId); + return await verifyDocument(signedVC, { provider: providerForTrustVC }); + } else { + signale.error('Could not find blockchain information'); + throw new Error('Could not find blockchain information'); + } + +}; + -export const getResultFromFragment = (fragmentType: string, resultFragments: VerificationFragment[]): VerificationFragmentWithData => { +export const getResultFromFragment = (fragmentType: FragmentType, resultFragments: VerificationFragment[]): VerificationFragmentWithData => { const fragment = resultFragments.find((fragment: VerificationFragment) => fragment.type === fragmentType && fragment.status !== 'SKIPPED'); if (!fragment) { throw new Error(`${fragmentType} could not be verified.`); @@ -89,10 +138,10 @@ export const logResultStatus = (fragment: VerificationFragmentWithData): void => } } +// Temporary function to handle expired credential console.log from trustvc function for w2c verification export const handleExpiredCredentialWarning = (warnings: unknown[][]) => { const expiredWarning = warnings.find((warning) => warning[0] === 'Credential has expired.'); - // currently not logging to align output for w3c (reports expiration) and openattestation (does not report expiration) if (expiredWarning) { - signale.warn(`The Verifiable Credential has expired.`); + signale.warn(`The document credential has expired.`); } } diff --git a/src/utils/networks.ts b/src/utils/networks.ts index b6cff42..d19b321 100644 --- a/src/utils/networks.ts +++ b/src/utils/networks.ts @@ -1,4 +1,4 @@ -import { ethers } from 'ethers'; +import { InfuraProvider, JsonRpcProvider, Provider } from 'ethers'; import type { GasStationFunction } from './gas-station'; import { gasStation } from './gas-station'; @@ -6,7 +6,7 @@ export type networkCurrency = 'ETH' | 'MATIC' | 'XDC' | 'FREE' | 'ASTRON'; type SupportedNetwork = { explorer: string; - provider: () => ethers.providers.Provider; + provider: () => Provider; networkId: number; networkName: (typeof NetworkCmdName)[keyof typeof NetworkCmdName]; currency: networkCurrency; @@ -28,14 +28,14 @@ export enum NetworkCmdName { } const defaultInfuraProvider = - (networkName: string): (() => ethers.providers.Provider) => + (networkName: string): (() => Provider) => () => - new ethers.providers.InfuraProvider(networkName); + new InfuraProvider(networkName); const jsonRpcProvider = - (url: string): (() => ethers.providers.Provider) => + (url: string): (() => Provider) => () => - new ethers.providers.JsonRpcProvider(url); + new JsonRpcProvider(url); /** * Creates a provider that checks for an environment variable override @@ -46,14 +46,14 @@ const jsonRpcProvider = const getProviderWithEnvOverride = ( networkName: NetworkCmdName, - defaultProvider: () => ethers.providers.Provider, - ): (() => ethers.providers.Provider) => + defaultProvider: () => Provider, + ): (() => Provider) => () => { const envVarName = `${networkName.toUpperCase()}_RPC`; const customRpcUrl = process.env[envVarName]; if (customRpcUrl) { - return new ethers.providers.JsonRpcProvider(customRpcUrl); + return new JsonRpcProvider(customRpcUrl); } return defaultProvider(); diff --git a/tests/commands/verify.test.ts b/tests/commands/verify.test.ts index b9e4854..983bf9d 100644 --- a/tests/commands/verify.test.ts +++ b/tests/commands/verify.test.ts @@ -5,38 +5,40 @@ import { promptQuestions, verify } from '../../src/commands/verify'; import { SignedVerifiableCredential } from '@trustvc/trustvc'; import { getResultFromFragment, handleExpiredCredentialWarning, logResultStatus } from '../../src/commands/verify'; - -const W3C_SIGNED_VC_DEFAULT_FIXTURE_PATH = path.resolve( +// Different types of Credentials for W3C (Non-Transferable Records and Transferable Records) +const W3C_SIGNED_VC_BILL_OF_LADING_OPERATIVE_FIXTURE_PATH = path.resolve( process.cwd(), - 'tests/fixtures/w3c/certificate-of-origin-default.json', + 'tests/fixtures/w3c/bill-of-lading-operative.json', ); -const W3C_SIGNED_VC_EXPIRED_FIXTURE_PATH = path.resolve( +const W3C_SIGNED_VC_INVOICE_EXPIRED_FIXTURE_PATH = path.resolve( process.cwd(), - 'tests/fixtures/w3c/certificate-of-origin-expired.json', -); -const W3C_SIGNED_VC_REDACTED_FIXTURE_PATH = path.resolve( + 'tests/fixtures/w3c/invoice-expired.json', +); +const W3C_SIGNED_VC_INVOICE_REVOKED_FIXTURE_PATH = path.resolve( process.cwd(), - 'tests/fixtures/w3c/certificate-of-origin-redacted.json', + 'tests/fixtures/w3c/invoice-revoked.json', ); -const W3C_SIGNED_VC_REVOKED_FIXTURE_PATH = path.resolve( +const W3C_SIGNED_VC_ELECTRONIC_PROMISSORY_NOTE_INOPERATIVE_FIXTURE_PATH = path.resolve( process.cwd(), - 'tests/fixtures/w3c/certificate-of-origin-revoked.json', + 'tests/fixtures/w3c/electronic-promissory-note-inoperative.json', ); -const OA_SIGNED_VC_DEFAULT_FIXTURE_PATH = path.resolve( + +// Different types of Credentials for OA (Non-Transferable Records and Transferable Records) +const OA_SIGNED_VC_BILL_OF_LADING_OPERATIVE_FIXTURE_PATH = path.resolve( process.cwd(), - 'tests/fixtures/oa/certificate-of-origin-default.json', + 'tests/fixtures/oa/bill-of-lading-operative.json', ); -const OA_SIGNED_VC_EXPIRED_FIXTURE_PATH = path.resolve( +const OA_SIGNED_VC_INVOICE_EXPIRED_FIXTURE_PATH = path.resolve( process.cwd(), - 'tests/fixtures/oa/certificate-of-origin-expired.json', + 'tests/fixtures/oa/invoice-expired.json', ); -const OA_SIGNED_VC_REDACTED_FIXTURE_PATH = path.resolve( +const OA_SIGNED_VC_INVOICE_REVOKED_FIXTURE_PATH = path.resolve( process.cwd(), - 'tests/fixtures/oa/certificate-of-origin-redacted.json', + 'tests/fixtures/oa/invoice-revoked.json', ); -const OA_SIGNED_VC_REVOKED_FIXTURE_PATH = path.resolve( +const OA_SIGNED_VC_ELECTRONIC_PROMISSORY_NOTE_INOPERATIVE_FIXTURE_PATH = path.resolve( process.cwd(), - 'tests/fixtures/oa/certificate-of-origin-revoked.json', + 'tests/fixtures/oa/electronic-promissory-note-inoperative.json', ); @@ -113,9 +115,9 @@ describe('verify', () => { }); describe('handleExpiredCredentialWarning', () => { - it('should not log when expiration warning is present (currently intentionally silent)', () => { + it('should log when expiration warning is present', () => { handleExpiredCredentialWarning([['Credential has expired.']]); - expect(signaleWarnMock).not.toHaveBeenCalled(); + expect(signaleWarnMock).toHaveBeenCalledWith('The document credential has expired.'); }); it('should not log when there is no expiration warning', () => { @@ -123,11 +125,15 @@ describe('verify', () => { expect(signaleWarnMock).not.toHaveBeenCalled(); }); }); + + }); describe('promptQuestions', () => { it('should return parsed signed VC from readJsonFile', async () => { - (prompts.input as any).mockResolvedValueOnce(W3C_SIGNED_VC_DEFAULT_FIXTURE_PATH); + (prompts.input as any).mockResolvedValueOnce( + W3C_SIGNED_VC_BILL_OF_LADING_OPERATIVE_FIXTURE_PATH, + ); const result = await promptQuestions(); @@ -135,15 +141,17 @@ describe('verify', () => { }); it('should abide by validation rules for path input', async () => { - (prompts.input as any).mockResolvedValueOnce(W3C_SIGNED_VC_DEFAULT_FIXTURE_PATH); + (prompts.input as any).mockResolvedValueOnce( + W3C_SIGNED_VC_BILL_OF_LADING_OPERATIVE_FIXTURE_PATH, + ); await promptQuestions(); const inputArgs = (prompts.input as any).mock.calls[0][0]; expect(inputArgs.required).toBe(true); - expect(inputArgs.validate('')).toBe('signed Verifiable Credential file path is required'); - expect(inputArgs.validate(' ')).toBe('signed Verifiable Credential file path is required'); + expect(inputArgs.validate('')).toBe('Document file path is required'); + expect(inputArgs.validate(' ')).toBe('Document file path is required'); expect(inputArgs.validate('./signed_vc.json')).toBe(true); }); @@ -158,7 +166,7 @@ describe('verify', () => { }); }); - describe.sequential('verify', () => { + describe('verify', () => { let signaleSuccessMock: MockedFunction; let signaleWarnMock: MockedFunction; @@ -170,50 +178,50 @@ describe('verify', () => { const testCases = [ { - name: 'default w3c', - filePath: W3C_SIGNED_VC_DEFAULT_FIXTURE_PATH, - expectWarn: false, + name: 'bill-of-lading operative w3c', + filePath: W3C_SIGNED_VC_BILL_OF_LADING_OPERATIVE_FIXTURE_PATH, + expectedWarning: 'none', }, { - name: 'expired w3c', - filePath: W3C_SIGNED_VC_EXPIRED_FIXTURE_PATH, - expectWarn: false, + name: 'invoice expired w3c', + filePath: W3C_SIGNED_VC_INVOICE_EXPIRED_FIXTURE_PATH, + expectedWarning: 'expired', }, { - name: 'redacted w3c', - filePath: W3C_SIGNED_VC_REDACTED_FIXTURE_PATH, - expectWarn: false, + name: 'invoice revoked w3c', + filePath: W3C_SIGNED_VC_INVOICE_REVOKED_FIXTURE_PATH, + expectedWarning: 'revoked', }, { - name: 'revoked w3c', - filePath: W3C_SIGNED_VC_REVOKED_FIXTURE_PATH, - expectWarn: true, + name: 'electronic-promissory-note inoperative w3c', + filePath: W3C_SIGNED_VC_ELECTRONIC_PROMISSORY_NOTE_INOPERATIVE_FIXTURE_PATH, + expectedWarning: 'none', }, { - name: 'default oa', - filePath: OA_SIGNED_VC_DEFAULT_FIXTURE_PATH, - expectWarn: false, + name: 'bill-of-lading operative oa', + filePath: OA_SIGNED_VC_BILL_OF_LADING_OPERATIVE_FIXTURE_PATH, + expectedWarning: 'none', }, { - name: 'expired oa', - filePath: OA_SIGNED_VC_EXPIRED_FIXTURE_PATH, - expectWarn: false, + name: 'invoice expired oa', + filePath: OA_SIGNED_VC_INVOICE_EXPIRED_FIXTURE_PATH, + expectedWarning: 'expired', }, { - name: 'redacted oa', - filePath: OA_SIGNED_VC_REDACTED_FIXTURE_PATH, - expectWarn: false, + name: 'invoice revoked oa', + filePath: OA_SIGNED_VC_INVOICE_REVOKED_FIXTURE_PATH, + expectedWarning: 'revoked', }, { - name: 'revoked oa', - filePath: OA_SIGNED_VC_REVOKED_FIXTURE_PATH, - expectWarn: true, + name: 'electronic-promissory-note inoperative oa', + filePath: OA_SIGNED_VC_ELECTRONIC_PROMISSORY_NOTE_INOPERATIVE_FIXTURE_PATH, + expectedWarning: 'none', }, ]; it.each(testCases)( 'should verify real signed VC fixture: $name', - async ({ filePath, expectWarn }) => { + async ({ filePath, expectedWarning }) => { const utils = await import('../../src/utils'); const signedVC = utils.readJsonFile(filePath, 'document'); @@ -227,14 +235,21 @@ describe('verify', () => { const combinedMessages = [...successMessages, ...warnMessages]; - expect(successMessages.join('\n')).toContain('DOCUMENT_INTEGRITY:'); - expect(successMessages.join('\n')).toContain('ISSUER_IDENTITY:'); + expect(combinedMessages.join('\n')).toContain('DOCUMENT_INTEGRITY:'); + expect(combinedMessages.join('\n')).toContain('ISSUER_IDENTITY:'); expect(combinedMessages.join('\n')).toContain('DOCUMENT_STATUS:'); - if (expectWarn) { + if (expectedWarning === 'revoked') { expect(warnMessages.length).toBeGreaterThan(0); expect(warnMessages.join('\n')).toContain('DOCUMENT_STATUS:'); - } else { + } + + if (expectedWarning === 'expired') { + expect(warnMessages.length).toBeGreaterThan(0); + expect(warnMessages.join('\n')).toContain('The document credential has expired.'); + } + + if (expectedWarning === 'none') { expect(warnMessages.length).toBe(0); expect(successMessages).toEqual( expect.arrayContaining([ diff --git a/tests/fixtures/oa/bill-of-lading-operative.json b/tests/fixtures/oa/bill-of-lading-operative.json new file mode 100644 index 0000000..6149f37 --- /dev/null +++ b/tests/fixtures/oa/bill-of-lading-operative.json @@ -0,0 +1,115 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "issuers": [ + { + "id": "fa6f4e9c-1ab2-4b2a-bb50-77eed13b9bfb:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", + "name": "8ed0fb05-f097-4aae-a0a1-784d38a743d9:string:DEMO", + "revocation": { + "type": "ca5f9bf4-46df-4fb9-873c-47ceed337f6d:string:NONE" + }, + "tokenRegistry": "01792f66-39b2-49fc-9126-b9e8d9e4a157:string:0x7202363bBDb126036F7C3243Ebac310d9d145040", + "identityProof": { + "type": "f9952f4c-7d4a-4295-be3a-67cb365bac35:string:DID", + "key": "68fa777b-9d42-44c0-9601-7b4e9ba49571:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller" + } + } + ], + "network": { + "chain": "28660310-1ca6-4bbe-9cb3-2f76277a9aae:string:FREE", + "chainId": "f72d372c-cf27-4dab-a940-099d72e14af1:string:101010" + }, + "$template": { + "type": "e23b623b-e112-4c36-8ea5-b29bc8ac65c3:string:EMBEDDED_RENDERER", + "name": "249dc4a2-c351-4525-9cd7-74669a73f8c5:string:BILL_OF_LADING_CARRIER", + "url": "0ad9e7e9-269c-4717-9092-cbb637ec96be:string:https://generic-templates.tradetrust.io" + }, + "links": { + "self": { + "href": "7676f1b5-94a6-4148-87f3-27fd2d71d713:string:https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2FOA%2Fbill-of-lading-operative.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + } + }, + "shipper": { + "name": "a731ee52-45b8-4e44-b6c3-5325cf589aed:string:MAERSK Co.", + "address": { + "street": "6cce8eb7-d31e-4d45-a33e-40701bb3b09f:string:101 ORCHARD ROAD", + "country": "d23436a2-cf57-40b3-83fc-25e18c7567bd:string:Singapore" + } + }, + "consignee": { + "toOrderOfText": "4cb008da-42bf-47df-b997-e425188fd4ab:string:TO ORDER", + "name": "2e8a756f-b781-474b-a8c4-a2e4d075acb2:string:xyz Natural Foods Inc." + }, + "notifyParty": { + "name": "5a0db497-23a1-4f31-a63a-54131092a6e8:string:ABC – Import Manager, xyz Natural Foods" + }, + "packages": [ + { + "packagesDescription": "7a1ff50d-b012-45f0-8e07-9ae1acf1373f:string:Organic Cashew Kernels (25kg bags)", + "packagesMeasurement": "4bb01ed3-269c-4d5b-8a4b-7fa00a2850bf:string:100 Bags", + "packagesWeight": "87d39d01-9f08-4ba5-be93-dba2a4735eb0:string:2.65 MT" + }, + { + "packagesDescription": "f5271232-650e-42fd-af3f-a6e3aba07f99:string:Roasted Chickpeas (20kg packs)", + "packagesMeasurement": "397d0424-f2db-4ff7-8721-85018bb5d101:string:60 Bundles", + "packagesWeight": "43a52be1-3f89-4908-98ff-dad47bbc41f8:string:\t1.3" + } + ], + "blNumber": "cbc1ef82-2681-47ad-a4a2-c62cd6a1c8ea:string:SGCNM21566325", + "scac": "5b5b7140-e7b0-443b-bda9-8585c7fd9a18:string:SGPU", + "carrierName": "512ab0f1-1129-4d1d-9f5c-252a8a36fb51:string:Vikram Rao", + "logo": "841a64b1-ea46-49b5-9ad0-9d8417b3d326:string:data:image/png;base64,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", + "onwardInlandRouting": "4b5b6b02-f2e1-43e4-ac79-e904d7152319:string:Rail to Johor Port → Trucking to final inland delivery point (Long Beach, USA)", + "vessel": "a4424c01-ceb9-461c-a4cd-4fa4f02dd5de:string:MAERSK NATALIA", + "voyageNo": "4dab22b5-d56f-4a4f-b2d9-d88761d7301d:string:7831W", + "portOfLoading": "c1a02569-d88b-4f47-9cbf-3e3aed816198:string:Singapore", + "portOfDischarge": "7f7cde04-613b-4d6c-ae71-7b759ac6beed:string:LOS ANGELES, CA", + "placeOfReceipt": "ae4363de-f061-458e-abb9-7ce4a3c110ca:string:JURONG PORT, SINGAPORE", + "placeOfDelivery": "9e5a6fdc-8c82-4b93-b9b0-8c4cd2ae6b66:string:Long Beach Distribution Center, CA", + "placeOfIssueBL": "37e5f1bf-9646-4491-8ca6-155a384d5b26:string:Singapore", + "numberOfOriginalBL": "041bbd52-3d08-478d-8d71-9e325ad80250:string:3", + "dateOfIssueBL": "ea6688b9-43da-4865-9a04-a35cbe0ca808:string:2025-06-05", + "shippedOnBoardDate": "10ab5046-a48a-43d7-8dca-8645ec265fc5:string:2025-06-05", + "signForTermsAndCondition": "f6a95cc5-1383-4eef-99d9-3e6e697ba6ac:string:The carrier accepts the goods as described in good order and condition for carriage under the terms stated herein and subject to the Carrier's standard Bill of Lading Terms and Conditions.", + "signedForCarrierText": "7d43161b-eae5-43e1-8839-50af6d23d606:string:John Doe", + "carrierSignature": "96c5401d-4ae2-484c-bb8e-d1e3c4f1a38c:string:data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=", + "termsOfCarriage": "b2d948c8-90e1-4a70-9a1c-42341598d70a:string:All shipments are subject to the Hague-Visby Rules. The carrier assumes liability only for loss or damage due to its own negligence. Responsibility ceases at the time goods are delivered to the consignee or their agent. Claims must be submitted within 7 working days of delivery.", + "attachments": [ + { + "data": "a423225f-b1a4-48fb-8752-aee3d4acd2ad:string:JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", + "filename": "cb7f0e3e-9844-4351-a624-26453e9c0722:string:blank.pdf", + "type": "c775181f-486e-48d6-b9f8-ac513fbb4e22:string:application/pdf" + }, + { + "data": "82655730-5bbf-4e0a-91c9-f5261fe30232:string:e30=", + "filename": "16bf3666-73e6-48c5-ad6a-fd8fc1d20d29:string:empty.json", + "type": "fedd2c06-10a2-4d3e-ac37-5509709b30c7:string:application/json" + }, + { + "data": "69eb1548-60d3-43f7-8848-c7a30085ab59:string:JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==", + "filename": "b0830aac-50c4-43b5-b50a-088591881ce4:string:sample.pdf", + "type": "a721afdb-b6d6-4283-94a6-694b837ee9df:string:application/pdf" + }, + { + "data": "edb4e1ac-4a16-43e9-9ee6-94c1a073fc17:string:JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", + "filename": "052fb3bd-1ff0-485c-8db0-bce4dc5d2fc0:string:veryverylongfilenameoverhereveryverylongfilenameoverhere.pdf", + "type": "912a08da-7801-4c2b-a856-9d8beebca47d:string:application/pdf" + } + ] + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "b7f09dfa7d4781ea4374e82c5327b3e8e6ca4d37aeb4745a68998b620d17ec4b", + "proof": [], + "merkleRoot": "b7f09dfa7d4781ea4374e82c5327b3e8e6ca4d37aeb4745a68998b620d17ec4b" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2025-08-21T13:53:08.223Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller", + "signature": "0x8ff0e4e118335965061ea8d9eeb696abf4c0e75d75a68aa12069f259d5f959481432a7d66559306e1a7f523eee0c11e3680b9b7b5dd5801f2c943bdcc475a7e31b" + } + ] +} \ No newline at end of file diff --git a/tests/fixtures/oa/certificate-of-origin-expired.json b/tests/fixtures/oa/certificate-of-origin-expired.json deleted file mode 100644 index b9721b5..0000000 --- a/tests/fixtures/oa/certificate-of-origin-expired.json +++ /dev/null @@ -1,168 +0,0 @@ -{ - "version": "https://schema.openattestation.com/2.0/schema.json", - "data": { - "issuers": [ - { - "id": "6747b6c5-4b59-423a-a911-8b1a634b80d1:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", - "name": "db896058-bbaa-4ce2-8324-070a80fd5d27:string:DEMO STORE", - "revocation": { - "type": "f4db51cc-4300-4a07-b5a3-46e71c4b0fee:string:NONE" - }, - "identityProof": { - "type": "506e8ee2-69b6-4b0c-8610-96bf47083133:string:DID", - "key": "d35fa642-e368-4351-a2ca-69683ad3ad7a:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller" - } - } - ], - "network": { - "chain": "68ba05b3-9895-4cf4-9a01-07242409b218:string:FREE", - "chainId": "5473ad3d-9a0f-47ba-95c8-7768d69a8adc:string:101010" - }, - "$template": { - "type": "f29329cd-5d28-4c5f-aa3a-ef09dbf9d27a:string:EMBEDDED_RENDERER", - "name": "a645f7a8-124a-4e1d-b21c-24c818cbd734:string:CHAFTA_COO", - "url": "89fbe50d-9af7-49f6-9445-d652ba79788b:string:https://generic-templates.tradetrust.io" - }, - "firstSignatoryAuthentication": { - "signature": "31b8ade6-aa20-4c39-9880-b1b06c7bd0ad:string:data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=" - }, - "supplyChainConsignment": { - "exportCountry": { - "code": "fa6cfc33-44c4-4e49-a9fe-562aa94daf41:string:IN" - }, - "exporter": { - "postalAddress": { - "line1": "79ec83f5-5b9a-4761-a447-dd7591f58363:string:Plot 123, Industrial Estate", - "line2": "a85b9cd4-8eb4-451f-9a9e-f4420d6ca4c1:string:Sector 5, Tech Park", - "cityName": "400ff27d-d7e2-4ac2-b0de-91c98ad978b3:string:Mumbai", - "postcode": "5b1dd8a5-8ffa-4cf8-8f0f-1c5fc6e73cd1:string:400001", - "countrySubDivisionName": "cd3907f5-46a6-4b27-a25c-9f227648668c:string:Maharashtra", - "countryCode": "552c6f04-a89d-458f-b9f9-49c4e8e979cc:string:In" - }, - "iD": "e1fd9de3-2fb1-4a96-8b93-53e7350bec17:string:EXP-IN-XYZ-0001", - "name": "b3c35c45-5392-4d13-9761-1dc28ee80260:string:XYZ Exports Pvt. Ltd." - }, - "importCountry": { - "code": "b042bf95-f31c-4e50-b759-8b7b7e534cb1:string:GB" - }, - "importer": { - "postalAddress": { - "line1": "418e14f9-d0fc-4418-8c88-8844085e0a2f:string:Unit 88, Commercial Docks", - "line2": "bfc8969e-59a0-40b2-b239-57a71177baf8:string:Trade Zone West", - "cityName": "f27eae79-e670-46bd-9bc6-7fe7abc5645a:string:London", - "postcode": "4a73955f-8f31-4fb5-9d76-4fac491431ff:string:E16 4HQ", - "countrySubDivisionName": "1f3a197b-d44d-43f0-b9bd-cb642f6bd216:string:Greater London", - "countryCode": "ee751102-e9e1-46b9-9e7a-2218352ff9a4:string:GB" - }, - "iD": "399cd239-13f2-45ec-9827-4527f298f07b:string:IMP-UK-XYZ-9999", - "name": "5344f286-44fd-46be-a1df-870c9c6ba933:string:XYZ Foods Ltd." - }, - "includedConsignmentItems": [ - { - "crossBorderRegulatoryProcedure": { - "originCriteriaText": "0aedd1df-1429-4611-acac-fdffcbb2ff4e:string:Gross Volume: 2.5 CBM" - }, - "manufacturer": { - "postalAddress": { - "line1": "95cb6ecd-5eff-4726-9b81-abd05543ed57:string:Plot 45, Agro Park", - "line2": "994bb72b-9b14-4543-b8fd-bd777feb1852:string:Phase II", - "cityName": "2685ec39-1bfe-47e3-8c9b-0b9ba20cdb83:string:Karnal", - "postcode": "f344e926-8460-49e8-96a3-6a1fa86aa904:string:132001", - "countrySubDivisionName": "5f8a38ef-9da4-4e18-bb75-a05633c03f04:string:Haryana", - "countryCode": "a1b17ff5-89da-4cda-b114-e3ada18cc302:string:in" - }, - "iD": "7b3514bf-c3df-4d39-9388-1a58f6782585:string:MFG-IN-XYZ-001", - "name": "ce305fba-7e4e-4914-bce5-1bb5d274b30c:string:XYZ Agro Industries" - }, - "tradeLineItems": [ - { - "invoiceReference": { - "attachedBinaryFile": { - "uRI": "49d3ccb4-eabb-463e-855e-36172a2b01e9:string:https://docs.tweglobal.com/8c624a35-9497-41fb-a548-cb5cf43bac21.pdf" - }, - "iD": "8bd77660-6084-459d-9723-163be4408ce6:string: INV-XYZ-0001", - "formattedIssueDateTime": "d92e4c92-2002-481b-ba9d-6f7e503c9c34:string:2025-06-10T10:09:00.000Z" - }, - "tradeProduct": { - "harmonisedTariffCode": { - "classCode": "4622c771-43bc-4ffa-b948-c284530d388c:string:10063090", - "className": "46ed95e6-e517-4669-9ebe-cb79b21c8043:string:Semi-milled or wholly milled rice, whether or not polished or glazed" - }, - "originCountry": { - "code": "29c3c86e-d4e7-4aba-b2b6-555eceaaa304:string:IN" - }, - "iD": "59c7776c-f4e5-4a7b-8430-6e5902304798:string:TP-XYZ-1001", - "description": "1c6565ac-74e6-42fa-a4a9-f69c2cb89d91:string:XYZ Premium Basmati Rice, 25kg Bag" - }, - "transportPackages": [ - { - "iD": "8a72d825-336e-437d-b9e5-0d87513b72b9:string:PKG-XYZ-0001", - "grossVolume": "e8644dfe-1d38-48ea-a147-94001c1c6547:string:3.0 CBM", - "grossWeight": "36eeadba-72b8-4e1d-8b32-bf9100fc8630:string:1000 kg" - } - ], - "sequenceNumber": "f812bbba-f2d4-4436-b66a-4ca520ce934c:number:1" - } - ], - "iD": "7c082f4a-4ed8-48c8-8853-0a50931328fb:string:10063090", - "information": "da97f454-5025-40e1-94c2-690ba00382ae:string:Sample Rice Product, 25kg Bag" - } - ], - "loadingBaseportLocation": { - "iD": "bd348aa1-c4fc-4b08-bba8-dd0889ff00a3:string:PORT-IN-XYZ", - "name": "273a7de1-1f13-4b7d-94d5-cf45937f330a:string:Nhava Sheva (JNPT), India" - }, - "mainCarriageTransportMovement": { - "usedTransportMeans": { - "name": "cda08412-7d44-460b-a7f6-deea26a404b1:string:Vessel – XYZ CARRIER", - "iD": "3d18c84c-5c9c-4814-b656-6d79988c697e:string:VSL-XYZ-0001" - }, - "departureEvent": { - "departureDateTime": "18d561c1-5fa8-4865-8c94-b306e8b00d13:string:2025-06-18T10:17:00.000Z" - }, - "iD": "7fc1c9a0-b1c6-49be-bed0-b16f5874c3ab:string:MCTM-XYZ-1234", - "information": "90060c91-fd06-41bc-b522-0532ecb2526b:string:Ocean Freight via XYZ Shipping Lines" - }, - "unloadingBaseportLocation": { - "iD": "11ad7398-a932-47bf-bb79-f78d49b7aafa:string:PORT-UK-XYZ", - "name": "fffa049e-540a-46b0-a1bc-1db4f015ba6d:string:Port of Felixstowe, United Kingdom" - }, - "iD": "046cb142-eb7e-4241-9e21-70254e53f218:string:CONS-FAKE-12345" - }, - "iD": "4f28cb85-ca45-4639-89e8-d8547ff5e65a:string:COO-FAKE-0001", - "issueDateTime": "12da194c-9d7e-4f3a-bc2e-039867adc304:string:2025-06-18T10:09:00.000Z", - "attachments": [ - { - "data": "1463645f-dc76-4fd1-bef3-f5fd945ed4c6:string:JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==", - "filename": "00abe2b0-0267-4f7e-96d7-a15e67d769c3:string:sample.pdf", - "type": "36cfc8d1-8d84-46de-8e26-945cc6a42665:string:application/pdf" - }, - { - "data": "8585522b-7c04-4496-a7f9-ec09e40a0c58:string:JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", - "filename": "f3d24afe-a438-4031-a17c-2df33adab185:string:veryverylongfilenameoverhereveryverylongfilenameoverhere.pdf", - "type": "0d5a5a3c-af2e-44a9-a28e-9cdee38aa6d6:string:application/pdf" - } - ], - "expirationDate": "d06ac3e9-707f-413d-9bb5-6beb761da33c:string:2024-12-03T12:19:52Z", - "links": { - "self": { - "href": "6c4b0e7c-8983-42d8-a3bb-672f0262ee22:string:https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2FOA%2Fcertificate-of-origin-expired.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" - } - } - }, - "signature": { - "type": "SHA3MerkleProof", - "targetHash": "1b8c82c0d684838c10bd17ce7b3ebbce284cc183cc99a5eca0c08781f5d54312", - "proof": [], - "merkleRoot": "1b8c82c0d684838c10bd17ce7b3ebbce284cc183cc99a5eca0c08781f5d54312" - }, - "proof": [ - { - "type": "OpenAttestationSignature2018", - "created": "2025-08-21T14:01:01.127Z", - "proofPurpose": "assertionMethod", - "verificationMethod": "did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller", - "signature": "0xafd9e67ddb8580a272cf0358087b8e06f5595de803fc863590d0e8ddd17296ea5d4b213d13bee3bb5171bad43a7d681566c1af6386758fc2caa8dbecd93009031b" - } - ] -} \ No newline at end of file diff --git a/tests/fixtures/oa/certificate-of-origin-revoked.json b/tests/fixtures/oa/certificate-of-origin-revoked.json deleted file mode 100644 index 705e149..0000000 --- a/tests/fixtures/oa/certificate-of-origin-revoked.json +++ /dev/null @@ -1,168 +0,0 @@ -{ - "version": "https://schema.openattestation.com/2.0/schema.json", - "data": { - "issuers": [ - { - "id": "100dca19-5874-4ed6-9fd2-956ec2d999ab:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", - "name": "24d24ff6-d149-41b1-abd2-abfadee5960c:string:DEMO STORE", - "revocation": { - "type": "1a7472a4-cb2d-4b95-b59b-afda8e7cc06f:string:REVOCATION_STORE", - "location": "ae8f0765-509c-406e-9777-2391e4f3c1e8:string:0x5596c0fC931cfA779B2C4e27D1F54b12DdaeCecd" - }, - "identityProof": { - "type": "281b81a0-5a99-40fe-99cb-44cc499d561d:string:DID", - "key": "88554ba3-111e-4c72-9e95-6aef22c53da9:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller" - } - } - ], - "network": { - "chain": "e16efdf2-ddf5-446e-bb12-537974796a3c:string:FREE", - "chainId": "3f398602-7c90-45d1-91fb-c717c27a937f:string:101010" - }, - "$template": { - "type": "a3101b10-a4e8-45fe-b4c0-f8f1ab245db2:string:EMBEDDED_RENDERER", - "name": "895c18f4-58e8-4b07-b9d6-6ae655ce1423:string:CHAFTA_COO", - "url": "fb5d4683-a108-4ae5-9cba-4d649e2e0456:string:https://generic-templates.tradetrust.io" - }, - "firstSignatoryAuthentication": { - "signature": "a76ff99c-0413-49ca-b6bb-54f82b16a314:string:data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=" - }, - "supplyChainConsignment": { - "exportCountry": { - "code": "be26c8f8-ec45-4c73-b914-5a8f0e0a31e8:string:IN" - }, - "exporter": { - "postalAddress": { - "line1": "00b8417c-14b4-4006-bb89-09ba69b7b66c:string:Plot 123, Industrial Estate", - "line2": "8da84cc0-d902-478f-87c4-0f08aebdc546:string:Sector 5, Tech Park", - "cityName": "a4375e99-9ba4-427c-99b5-b9687fdb09b7:string:Mumbai", - "postcode": "bc885b43-80c4-47e1-a042-9fcd5b93ecd8:string:400001", - "countrySubDivisionName": "6a603971-8c9e-4c58-8768-8b53b1a1f98e:string:Maharashtra", - "countryCode": "34cef0ca-c89c-4e4c-8c31-56dbc6743a42:string:In" - }, - "iD": "9a67f79d-f1c6-47d1-a10f-c82974e0f093:string:EXP-IN-XYZ-0001", - "name": "1f2b5c61-59bf-4340-a816-40dfce32448c:string:XYZ Exports Pvt. Ltd." - }, - "importCountry": { - "code": "77f85aea-9e56-4c79-84b3-565dfd9e6074:string:GB" - }, - "importer": { - "postalAddress": { - "line1": "0a3248fe-7665-4c70-af47-d9631e7b35f4:string:Unit 88, Commercial Docks", - "line2": "f9123a30-ecf7-43a5-a1bc-f2373730e7d1:string:Trade Zone West", - "cityName": "199280ee-658c-426d-8ccf-8e1eb0c70e42:string:London", - "postcode": "b60d20ee-347d-41de-9cd1-ec835bc5fdc2:string:E16 4HQ", - "countrySubDivisionName": "0cb5c2fa-73f5-420c-afd6-d83aaa567793:string:Greater London", - "countryCode": "b3bb6470-f21e-4701-8cdb-0860fc830a12:string:GB" - }, - "iD": "6061d041-631b-4f38-a4b2-aaa7635cae52:string:IMP-UK-XYZ-9999", - "name": "d9f3e8a3-3a33-43d8-8105-6ad7d5fcfd86:string:XYZ Foods Ltd." - }, - "includedConsignmentItems": [ - { - "crossBorderRegulatoryProcedure": { - "originCriteriaText": "bb29a359-a51f-4d25-ae68-ec803fec6172:string:Gross Volume: 2.5 CBM" - }, - "manufacturer": { - "postalAddress": { - "line1": "be943918-c98b-4613-9c68-882f83ea513a:string:Plot 45, Agro Park", - "line2": "af343afe-1ed8-47ea-a541-5633b5629c6a:string:Phase II", - "cityName": "37693c8d-cb3b-45e2-8134-33f87a130ff2:string:Karnal", - "postcode": "bc3555c3-7daf-4ea3-a00e-4cbe93418763:string:132001", - "countrySubDivisionName": "e29be0cb-0b79-4b70-9e3e-900dd08c40d7:string:Haryana", - "countryCode": "4a29ce43-bce5-4e29-9a0d-8d903d57f18a:string:in" - }, - "iD": "ef4e9c23-b3f8-456e-bdbc-a5a9c313b77b:string:MFG-IN-XYZ-001", - "name": "eb51d865-8600-4457-9efe-431e0a0ecbef:string:XYZ Agro Industries" - }, - "tradeLineItems": [ - { - "invoiceReference": { - "attachedBinaryFile": { - "uRI": "3f09aa08-754e-41fb-babb-098770cad98e:string:https://docs.tweglobal.com/8c624a35-9497-41fb-a548-cb5cf43bac21.pdf" - }, - "iD": "7b53d5ff-1822-4c47-8bbe-2c734dfc90ec:string: INV-XYZ-0001", - "formattedIssueDateTime": "e519c226-4769-4069-9f5c-c0d6a61b5ff3:string:2025-06-10T10:09:00.000Z" - }, - "tradeProduct": { - "harmonisedTariffCode": { - "classCode": "a9b936d3-2f5c-4707-8eed-2de753edc391:string:10063090", - "className": "a7dabebf-b0be-4ebd-bd9b-d75ebae5ddf1:string:Semi-milled or wholly milled rice, whether or not polished or glazed" - }, - "originCountry": { - "code": "5e0ea5a6-a654-463b-8ca8-7ae56087fe51:string:IN" - }, - "iD": "437df983-1e83-4407-b4ef-26cfb1c0b18b:string:TP-XYZ-1001", - "description": "bcff1d34-3c4f-44e7-b5b1-960240dc6aa8:string:XYZ Premium Basmati Rice, 25kg Bag" - }, - "transportPackages": [ - { - "iD": "a0095884-926f-43d0-a5c6-0fd52705bb2e:string:PKG-XYZ-0001", - "grossVolume": "38c5f9c9-a80e-4bf0-815c-1a510195e0ac:string:3.0 CBM", - "grossWeight": "0797c20c-aae6-4aab-8d81-403775c403ba:string:1000 kg" - } - ], - "sequenceNumber": "01371490-dc13-4923-9b2d-75b333b0f43d:number:1" - } - ], - "iD": "47b116bb-a0b2-4610-823d-1327123c92e2:string:10063090", - "information": "2a4ccb54-edcb-408e-8e5b-c18cd138f9d8:string:Sample Rice Product, 25kg Bag" - } - ], - "loadingBaseportLocation": { - "iD": "269c3e2f-f1ae-4872-8fe9-4f901d2ef488:string:PORT-IN-XYZ", - "name": "69725902-9d73-4ec1-86b9-e66a147024c3:string:Nhava Sheva (JNPT), India" - }, - "mainCarriageTransportMovement": { - "usedTransportMeans": { - "name": "df3eca48-e1c6-452c-b101-ecf99bb6de69:string:Vessel – XYZ CARRIER", - "iD": "f11caec7-95b8-4ca7-b12b-31541ab45762:string:VSL-XYZ-0001" - }, - "departureEvent": { - "departureDateTime": "b11dcd37-e8a5-4346-941f-5b37a9c50ef7:string:2025-06-18T10:17:00.000Z" - }, - "iD": "e214784b-6fab-4a70-888a-ea6065bfb331:string:MCTM-XYZ-1234", - "information": "e318a4f7-92c0-404b-b8cf-f27ffb3e607b:string:Ocean Freight via XYZ Shipping Lines" - }, - "unloadingBaseportLocation": { - "iD": "2bb378ef-a7b8-4e19-a032-be680dbc29f6:string:PORT-UK-XYZ", - "name": "a929d4eb-8f6b-4a07-9948-21112bf028f8:string:Port of Felixstowe, United Kingdom" - }, - "iD": "c1d3c033-a9cf-483f-b744-d3422f987292:string:CONS-FAKE-12345" - }, - "iD": "9fcb1d5b-1d58-44f8-9c57-f9705c3226f3:string:COO-FAKE-0001", - "issueDateTime": "6014857f-1e55-49ae-a4ff-a7d589b845ce:string:2025-06-18T10:09:00.000Z", - "attachments": [ - { - "data": "65d184b3-304c-4633-9a93-392073b45e80:string:JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==", - "filename": "a80e2596-8f09-4efe-9b87-077fc438b308:string:sample.pdf", - "type": "0e399631-dd0b-4aa5-adb1-2136366b64db:string:application/pdf" - }, - { - "data": "73dda102-7c9f-402c-bcab-4632160450f2:string:JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", - "filename": "af677ffe-0996-4e5c-8292-a028d2872726:string:veryverylongfilenameoverhereveryverylongfilenameoverhere.pdf", - "type": "6630be9a-2737-49c4-93ff-ae5eef489d50:string:application/pdf" - } - ], - "links": { - "self": { - "href": "4b6dfd8b-be55-48c1-b5e3-684587a23158:string:https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2FOA%2Fcertificate-of-origin-revoked.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" - } - } - }, - "signature": { - "type": "SHA3MerkleProof", - "targetHash": "9b93e47b73d68437d4156c79018caaf3c7f3bb7de9ae58ca83fcde4e7211aa54", - "proof": [], - "merkleRoot": "9b93e47b73d68437d4156c79018caaf3c7f3bb7de9ae58ca83fcde4e7211aa54" - }, - "proof": [ - { - "type": "OpenAttestationSignature2018", - "created": "2025-08-21T14:01:52.688Z", - "proofPurpose": "assertionMethod", - "verificationMethod": "did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller", - "signature": "0x664cfc5eeae6db079296ef39e1c544bcdb778560c7482a18e877cc33d47e82c0485d84757a92b54fd3e3adb315f367e2e25ed54c5850565004715c447b0f5a651c" - } - ] -} \ No newline at end of file diff --git a/tests/fixtures/oa/electronic-promissory-note-inoperative.json b/tests/fixtures/oa/electronic-promissory-note-inoperative.json new file mode 100644 index 0000000..6a40a44 --- /dev/null +++ b/tests/fixtures/oa/electronic-promissory-note-inoperative.json @@ -0,0 +1,71 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "issuers": [ + { + "id": "89e619e8-a715-4297-898f-c9147c936a13:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", + "name": "bfcc1275-369d-4d94-8b9f-4f4b9c6244dc:string:DEMO STORE", + "revocation": { + "type": "73afa4c5-3aa6-4689-82c0-bfc5100e0e10:string:NONE" + }, + "tokenRegistry": "cee96408-6a9c-4db2-99ad-3cf67101f64c:string:0x7202363bBDb126036F7C3243Ebac310d9d145040", + "identityProof": { + "type": "2491effe-65a9-4ccc-a391-8175610b5383:string:DID", + "key": "854d99cb-b2c8-4df6-b033-684a7b49a3a8:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller" + } + } + ], + "network": { + "chain": "0f33eb03-7b51-4792-9f68-43ef0634756c:string:FREE", + "chainId": "dd81db90-bf81-4be6-9c41-9af23743b763:string:101010" + }, + "$template": { + "type": "8d476854-2e22-429b-ad95-32cda496bbb1:string:EMBEDDED_RENDERER", + "name": "f3453160-9ba1-437f-bbe4-192b3186d9e9:string:PROMISSORY_NOTE", + "url": "e44c4b39-6b3c-4340-b069-3441cea46d4c:string:https://generic-templates.tradetrust.io" + }, + "links": { + "self": { + "href": "45dea79e-d378-417d-b0af-8d529106432e:string:https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2FOA%2Felectronic-promissory-note-inoperative.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + } + }, + "type": ["6246c6f3-802d-4877-bc48-37a6db4cefce:string:PromissoryNote"], + "drawerCompanyName": "6ba57d43-3b76-48ae-a9c7-8caf12b37ad4:string:XYZ Exports Pvt. Ltd.", + "drawerCompanyNo": "daac2130-b0a3-4a78-8b85-e3d21dabe752:string:CIN-XYZ1234567", + "drawerJurisdiction": "ce2399ee-e52b-4825-b8b1-6d3cbc210e6c:string:India", + "drawerEmail": "5c440e61-6aa1-4cc2-9470-0d6d357d7664:string:accounts@xyzexports.com", + "drawerWalletAddress": "8559cc37-367e-4211-bb2d-f1485472fdb4:string:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", + "drawerPlaceOfIssue": "9e833d79-6f32-4382-bccd-11c86400e220:string:Mumbai, India", + "draweeCompanyName": "26fe49d5-dbf3-44ad-a8bc-ccd2a68a6ebf:string:XYZ Imports Ltd.", + "draweeCompanyNo": "310d5978-0a2d-4560-9dcd-c8eaa5311e69:string:REG-XYZ9876543", + "draweeJurisdiction": "dd17b411-500c-4453-90bf-49c33ff2d916:string:United Kingdom", + "draweeEmail": "210a2df3-ba9f-42e1-814d-5033b2c193f3:string:finance@xyzimports.co.uk", + "draweeWalletAddress": "e14d6999-537e-4dd6-b87d-84f9c3ab2940:string:0xca93690bb57eeab273c796a9309246bc0fb93649", + "dueDate": "9e57d162-2919-4177-96b5-7cc4084161b2:string:2025-06-19", + "currency": "a6eb075b-2044-429e-a911-c4fd72c853bf:string:USD", + "amount": "62f93c17-c597-492c-be55-b3fb382cc240:string:50,000.00", + "clause": "f19c1d55-6ab9-435b-a889-b6194d5fad88:string:Payment to be made in full without set-off or counterclaim, subject to terms agreed between Drawer and Drawee.", + "signerName": "9c6300b3-7334-44f6-a97e-31d5df7bdf80:string:John Doe", + "signerPosition": "a8a62f86-19a2-44aa-aa57-3d0eb9a171d1:string:Chief Financial Officer", + "signerEmail": "6186d335-7520-4a3a-bbe8-76b8eb4682d8:string:j.doe@xyzexports.com", + "signerTimeStamp": "dc5c3742-1359-4ead-8869-bd3555065692:string:2025-06-19", + "logo": "d3173012-4152-4d8d-99ba-cdc8b0bce30d:string:data:image/png;base64,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", + "pNoteId": "0b45657b-d094-4537-92d1-33e9905e5239:string:PN-9081-2231-SGP", + "commitmentDate": "043c9541-fcfb-435a-b66b-ae85253b11da:string:2025-06-19" + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "6f968142ce6e5de930ca759b7fec8764d989e195f99245aabc493615825dee69", + "proof": [], + "merkleRoot": "6f968142ce6e5de930ca759b7fec8764d989e195f99245aabc493615825dee69" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2025-08-22T02:19:11.283Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller", + "signature": "0xf5f60011568e131ad4eeb024a8cd7669d8f53123ebbd2da4a1a24b53505ed07c0d9a40d472702b1eec45d364bdb3258c2724ded0b9feb37b5153e2389161c3571c" + } + ] +} \ No newline at end of file diff --git a/tests/fixtures/oa/invoice-expired.json b/tests/fixtures/oa/invoice-expired.json new file mode 100644 index 0000000..c15d3a9 --- /dev/null +++ b/tests/fixtures/oa/invoice-expired.json @@ -0,0 +1,88 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "issuers": [ + { + "id": "5cde34fc-8c2f-4e5a-8517-3c12ebfd62d5:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", + "name": "fd051ec0-1f58-40c2-9d49-651a59b0674a:string:DEMO STORE", + "revocation": { + "type": "bc8e5fe3-2272-4c5a-a2e7-dc4eff50b224:string:NONE" + }, + "identityProof": { + "type": "d99a6fcc-6312-4a28-b97e-f9e31e1f28df:string:DID", + "key": "80e1a125-b31c-4791-954d-caf9f2db6b07:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller" + } + } + ], + "billFrom": { + "name": "87e4e4b7-eb67-4330-8f46-435dc298c4ed:string:ABC Exports Pvt. Ltd.", + "streetAddress": "4544ba4e-20ff-4d70-b97a-9bf490a57a89:string:Plot 123, Industrial Area", + "city": "d02fc5af-b400-4f20-a558-8c6430e59092:string:Metropolis", + "postalCode": "6630c113-9726-4f1f-aecc-72f70138507c:string:123456", + "phoneNumber": "017bcc98-6f14-4c46-b046-2e910314b9c1:string:+91-11-2222-3333" + }, + "billTo": { + "company": { + "name": "36e6d841-7556-4c24-ba8b-63a6320d33a2:string:XYZ Foods Ltd.", + "streetAddress": "fb804c7e-3c65-469b-9d0d-a80f075a2816:string:Suite 45, Business Bay", + "city": "8a849edc-21b0-411a-9992-7542a4ccb973:string:Gotham", + "postalCode": "69f255d6-1daa-45b1-a1ed-d4d33852560c:string:987654", + "phoneNumber": "990aa092-8d8b-4aa8-a7ac-3d661022aced:string:+44-20-1111-2222" + }, + "name": "72828352-03bd-4020-8e89-ff72a02fc2b1:string:John Doe", + "email": "8e006220-05a5-44e5-8ae4-03683b34c8e0:string:john.doe@xyzfoods.com" + }, + "billableItems": [ + { + "description": "075b633a-46ce-4326-91ab-42eb8ceda2f9:string:Sample Product A (10kg Packs)", + "quantity": "6f1955c2-76b3-4393-bd16-568e38778d50:string:50", + "unitPrice": "e493b503-9f32-4514-b7e5-05a1900da803:string:15.00", + "amount": "fc042545-7242-46ee-8d16-22cc56fb84a1:string:750.00" + }, + { + "description": "bb9d52cd-cda4-4e27-8639-4852fa8d0245:string:Shipping Charges", + "quantity": "2192922b-38e6-4db4-80a6-f039a3f8147c:string:1", + "unitPrice": "b6bdd500-e725-4f27-9d7b-5ddf0a74660d:string:100", + "amount": "611e7783-4c01-468b-acca-776e47b82aaa:string:100" + } + ], + "$template": { + "type": "209e57fd-7ad1-466f-9e16-53df2726adaa:string:EMBEDDED_RENDERER", + "name": "5c000807-0f26-41f5-bb20-3924f99c24ce:string:INVOICE", + "url": "80ee5742-2e00-426c-9c95-f6d3ad23a99f:string:https://generic-templates.tradetrust.io" + }, + "network": { + "chain": "55ad7033-4b5c-453f-9085-98cb2277a630:string:FREE", + "chainId": "289e1750-9fd4-4da7-98e3-d5c443b0ffb6:string:101010" + }, + "id": "946ed010-3797-41b4-879e-4b68d60724f3:string:INV-FAKE-0001", + "date": "7f748d2c-1e73-4eff-8233-4d80439581cd:string:2025-06-18", + "customerId": "79ad01dc-ff11-439c-bf8f-f06ed53f32c8:string:CUST-XYZ-0001", + "terms": "358c0024-3e7f-43e3-bb5d-069815ea042a:string:Net 15 Days", + "subtotal": "aaf8ab59-49dd-4ece-b00f-d3107092e265:string:$850.00", + "tax": "4e2d0726-a76a-41c6-af12-f09d9c1273b8:string:10", + "taxTotal": "59eb3fc4-6bb8-4dfb-9245-457347c53fac:string:85.00", + "total": "1864dc62-3a7b-4b51-bc7f-00d623132c10:string:935.00", + "expirationDate": "3edb07e7-bf46-4a5a-835c-58e499a08d3d:string:2024-12-03T12:19:52Z", + "links": { + "self": { + "href": "19723194-b3e8-431c-9b6c-4fdf7fbe99cf:string:https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2FOA%2Finvoice-expired.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + } + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "8ed8b05cf44bfc3d83ce1bf692b1c6be3aef79dcd7ea9c40a59a0bc295308284", + "proof": [], + "merkleRoot": "8ed8b05cf44bfc3d83ce1bf692b1c6be3aef79dcd7ea9c40a59a0bc295308284" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2025-08-22T05:35:46.722Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller", + "signature": "0xd3ab3261f29665a8ee76ad2692b721ae6fc1b6456a0c854e8489523b915b6dd5039b04b72df2f5c30f68b46fca39e7f1d17a2bb9e707e38d80a65e5e50bf19161b" + } + ] +} \ No newline at end of file diff --git a/tests/fixtures/oa/invoice-revoked.json b/tests/fixtures/oa/invoice-revoked.json new file mode 100644 index 0000000..b56c1d4 --- /dev/null +++ b/tests/fixtures/oa/invoice-revoked.json @@ -0,0 +1,88 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "issuers": [ + { + "id": "ab2940ae-4457-4507-88d8-13cc3c67d89f:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", + "name": "9831dee4-211c-4258-8dec-025f2ff6c12f:string:DEMO STORE", + "revocation": { + "type": "105232a3-902e-4ec6-b557-41072b285476:string:REVOCATION_STORE", + "location": "70a0b696-0541-4075-af28-fbea9e16bc43:string:0x5596c0fC931cfA779B2C4e27D1F54b12DdaeCecd" + }, + "identityProof": { + "type": "adc5d245-acdb-4fbb-96e8-5f859d89a56c:string:DID", + "key": "0f1b3167-af3c-4406-b670-ffe46b01679f:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller" + } + } + ], + "billFrom": { + "name": "cd69c5ed-88e2-4838-a936-4d5bcf3c3edb:string:ABC Exports Pvt. Ltd.", + "streetAddress": "34e01d29-7260-4c44-926c-0d680b971917:string:Plot 123, Industrial Area", + "city": "fbf7c1fe-1fc2-4c42-9d18-1b87131a7420:string:Metropolis", + "postalCode": "9f19f581-54ff-4434-bf8b-3399bca383dd:string:123456", + "phoneNumber": "d0a687f3-d336-4953-819b-ea45a59180a5:string:+91-11-2222-3333" + }, + "billTo": { + "company": { + "name": "0bb13312-3bca-4160-ac1c-7cf6114d85de:string:XYZ Foods Ltd.", + "streetAddress": "5433fc05-a5d9-42d8-9fa0-a8d40b01884b:string:Suite 45, Business Bay", + "city": "574e298b-25c5-454b-9b31-f2822818e3ec:string:Gotham", + "postalCode": "a7b859bc-6001-4ed3-9ef1-bb89cf7943b3:string:987654", + "phoneNumber": "15a08dbe-93d0-4979-be8f-aa645d4fddf1:string:+44-20-1111-2222" + }, + "name": "856f8643-9189-417b-9336-ea8cce076553:string:John Doe", + "email": "04ef8776-0d05-48a2-877c-c9539cf99b43:string:john.doe@xyzfoods.com" + }, + "billableItems": [ + { + "description": "59f0e042-e555-410b-8c25-c39ef08db512:string:Sample Product A (10kg Packs)", + "quantity": "01e14b06-7bb7-4fbe-a742-68cb224c601e:string:50", + "unitPrice": "415c51da-7de5-4b56-adff-f20eeeb542e8:string:15.00", + "amount": "8cb874db-38e8-47ca-9b82-038646603913:string:750.00" + }, + { + "description": "76a52d38-4677-40db-bd71-85a5975d395d:string:Shipping Charges", + "quantity": "b2e73757-9ba9-4430-bd91-4134d312da67:string:1", + "unitPrice": "f864070c-bfff-460a-9be8-d24c9007bd0d:string:100", + "amount": "e9aa4952-77ee-4fbe-a7d9-d10730a30287:string:100" + } + ], + "$template": { + "type": "175b26c7-17fb-4f17-9b5a-b68579fd324a:string:EMBEDDED_RENDERER", + "name": "12351bb6-449f-4732-b6f3-0cb3f921a532:string:INVOICE", + "url": "902fb500-7002-4116-a7a9-dafdc0782d12:string:https://generic-templates.tradetrust.io" + }, + "network": { + "chain": "5938a2d8-6e04-461d-a829-5ae3bf42ac9e:string:FREE", + "chainId": "fc352110-da1e-48a4-af8e-1c35bc4dec8b:string:101010" + }, + "id": "6fb64f27-c35b-44e9-84a7-34c8af276c2c:string:INV-FAKE-0001", + "date": "88a05a8e-845d-40d5-bf05-423dbd22c313:string:2025-06-18", + "customerId": "febf85a0-9c08-4d98-af17-b73407060d58:string:CUST-XYZ-0001", + "terms": "9982f07d-2ac5-42f3-bb41-3441301b21a6:string:Net 15 Days", + "subtotal": "99ecbed8-c403-429c-8083-29524031f085:string:$850.00", + "tax": "9d4e590f-9568-4cc9-b18a-975050c022e4:string:10", + "taxTotal": "36179c99-6552-4edb-a841-d4df562ed1e8:string:85.00", + "total": "e425198c-f325-498d-8d29-0d8ca28a2de9:string:935.00", + "links": { + "self": { + "href": "a1b8d3c1-ecda-4226-9143-022fe2a1b2fe:string:https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2FOA%2Finvoice-revoked.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + } + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "1606dd49177f6fc6d30bfb7a5e132543abb675fbd75db805bc5f14930541d9b7", + "proof": [], + "merkleRoot": "1606dd49177f6fc6d30bfb7a5e132543abb675fbd75db805bc5f14930541d9b7" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2025-08-22T05:34:56.043Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller", + "signature": "0x458517f070af0d7b3d629615507435776aeeef1c0762cc22dac383f164e7fdb95ca8a560277b518d5c4aa7b21f49b067d0dd53a135a3f99c77fa03ab4899b8bf1c" + } + ] +} \ No newline at end of file diff --git a/tests/fixtures/w3c/bill-of-lading-operative.json b/tests/fixtures/w3c/bill-of-lading-operative.json new file mode 100644 index 0000000..453f9da --- /dev/null +++ b/tests/fixtures/w3c/bill-of-lading-operative.json @@ -0,0 +1,97 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://trustvc.io/context/bill-of-lading-carrier.json", + "https://trustvc.io/context/attachments-context.json", + "https://trustvc.io/context/render-method-context.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://trustvc.io/context/qrcode-context.json", + "https://w3id.org/security/bbs/v1" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "BILL_OF_LADING_CARRIER", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": ["BillOfLadingCarrier"], + "shipperName": "MAERSK Co.", + "shipperAddressStreet": "101 ORCHARD ROAD", + "shipperAddressCountry": "Singapore", + "toOrderOfText": "TO ORDER", + "consigneeName": "ABC Natural Foods Inc.", + "notifyPartyName": "Amanda Green – Import Manager, ABC Natural Foods", + "packages": [ + { + "packagesDescription": "Organic Cashew Kernels (25kg bags)", + "packagesMeasurement": "100 Bags", + "packagesWeight": "2.65 MT" + }, + { + "packagesDescription": "Roasted Chickpeas (20kg packs)", + "packagesMeasurement": "60 Bundles", + "packagesWeight": "\t1.3" + } + ], + "blNumber": "SGCNM21566325", + "scac": "SGPU", + "carrierName": "Vikram Rao", + "logo": "data:image/png;base64,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", + "onwardInlandRouting": "Rail to Johor Port → Trucking to final inland delivery point (Long Beach, USA)", + "vessel": "MAERSK NATALIA", + "voyageNo": "7831W", + "portOfLoading": "Singapore", + "portOfDischarge": "LOS ANGELES, CA", + "placeOfReceipt": "JURONG PORT, SINGAPORE", + "placeOfDelivery": "Long Beach Distribution Center, CA", + "placeOfIssueBL": "Singapore", + "numberOfOriginalBL": "3", + "dateOfIssueBL": "2025-06-05", + "shippedOnBoardDate": "2025-06-05", + "signForTermsAndCondition": "The carrier accepts the goods as described in good order and condition for carriage under the terms stated herein and subject to the Carrier's standard Bill of Lading Terms and Conditions.", + "signedForCarrierText": "John Doe", + "carrierSignature": "data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=", + "termsOfCarriage": "All shipments are subject to the Hague-Visby Rules. The carrier assumes liability only for loss or damage due to its own negligence. Responsibility ceases at the time goods are delivered to the consignee or their agent. Claims must be submitted within 7 working days of delivery.", + "attachments": [ + { + "data": "JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", + "filename": "blank.pdf", + "mimeType": "application/pdf" + }, + { "data": "e30=", "filename": "empty.json", "mimeType": "application/json" }, + { + "data": "JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==", + "filename": "sample.pdf", + "mimeType": "application/pdf" + }, + { + "data": "JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", + "filename": "veryverylongfilenameoverhereveryverylongfilenameoverhere.pdf", + "mimeType": "application/pdf" + } + ] + }, + "type": ["VerifiableCredential"], + "qrCode": { + "type": "TrustVCQRCode", + "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Fbill-of-lading-operative.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + }, + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { "chain": "FREE", "chainId": 101010 }, + "tokenRegistry": "0x7202363bBDb126036F7C3243Ebac310d9d145040", + "tokenId": "9cb05e6ca63093f2a5d5ee3965fc63653442ed542c41c27a7e4dbb1d4521f93c" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "issuanceDate": "2025-06-05T11:29:32.860Z", + "id": "urn:bnid:_:0198cc65-36f5-7cca-a034-7a141d772a7d", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2025-08-21T11:30:42Z", + "proofPurpose": "assertionMethod", + "proofValue": "i41csJtnGrZYhTJi/6Oe+i1CFev2jroBD1r9CE7Yc9MMEUPag8SUFEccvzdG+oxkTVi6gpUcPkkCBODbBNb7En+DKJjVkRzj29k3yt6vrb5lYE1Nq8yRJAwmWHqlhogOAAgXSIC4aZn5QKHAt0E4Hw==", + "verificationMethod": "did:web:trustvc.github.io:did:1#keys-1" + } +} \ No newline at end of file diff --git a/tests/fixtures/w3c/certificate-of-origin-expired.json b/tests/fixtures/w3c/certificate-of-origin-expired.json deleted file mode 100644 index 1910f6e..0000000 --- a/tests/fixtures/w3c/certificate-of-origin-expired.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "@context": [ - "https://www.w3.org/ns/credentials/v2", - "https://w3id.org/security/data-integrity/v2", - "https://trustvc.io/context/render-method-context-v2.json", - "https://trustvc.io/context/coo.json", - "https://trustvc.io/context/attachments-context.json", - "https://trustvc.io/context/qrcode-context.json" - ], - "renderMethod": [ - { - "type": "EMBEDDED_RENDERER", - "templateName": "CHAFTA_COO", - "id": "https://generic-templates.tradetrust.io" - } - ], - "credentialSubject": { - "type": ["Coo"], - "signature": "data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=", - "supplyChainConsignmentId": "CONS-EX456789", - "exportCountryCode": "IN", - "exporterId": "EXP-IN-00987", - "exporterName": "ABC Exports Pvt. Ltd.", - "exporterLine1": "12/F, Industrial Plaza", - "exporterLine2": "Near MIDC, Vashi", - "exporterCityName": "Navi Mumbai", - "exporterPostcode": "400703", - "exporterCountrySubDivisionName": "Maharashtra", - "exporterCountryCode": "IN", - "importCountryCode": "GB", - "importerId": "IMP-UK-88456", - "importerName": "XYZ Foods Ltd.", - "importerLine1": "Unit 17, Royal Wharf", - "importerLine2": "Docklands Industrial Area", - "importerCityName": "London", - "importerPostcode": "E16 2AA", - "importerCountrySubDivisionName": "Greater London", - "importerCountryCode": "GB", - "includedConsignmentItems": [ - { - "manufacturerId": "MFG-IN-3211", - "manufacturerName": "LMN Grains Co.", - "manufacturerLine1": "Plot 7, Grain Belt Estate", - "manufacturerLine2": "Sector 9", - "manufacturerCityName": "Karnal", - "manufacturerPostcode": "132001", - "manufacturerCountrySubDivisionName": "Haryana", - "manufacturerCountryCode": "IN", - "tradeLineItems": [ - { - "invoiceReferenceId": "INV-904/UK", - "formattedIssueDateTime": "2025-06-06T09:15:00.000Z", - "originCountryCode": "IN", - "tradeProductId": "TP-98121", - "tradeProductDescription": "Basmati Rice, Organic, 20kg Pack", - "harmonisedTariffclassCode": "10063010", - "harmonisedTariffclassName": "Semi-milled or wholly milled rice, whether or not polished or glazed", - "transportPackages": [ - { - "transportPackagesId": "PKG-0101", - "transportPackagesGrossVolume": "3.2", - "transportPackagesGrossWeight": "2050" - } - ], - "sequenceNumber": -4 - } - ], - "includedConsignmentItemsId": "ITEM001", - "includedConsignmentItemsInformation": "Organic Basmati Rice – 20kg vacuum packs", - "originCriteriaText": "Wholly Obtained in India" - } - ], - "loadingBaseportLocationId": "PORT-IN-MUM", - "loadingBaseportLocationName": "Nhava Sheva (JNPT), India", - "mainCarriageTransportMovementId": "MCTM-8458", - "mainCarriageTransportMovementInformation": "Ocean freight via ABC Shipping", - "usedTransportMeansName": "Vessel – XYZ VESSEL 001", - "usedTransportMeansId": "VSL-77381-AZ", - "departureDateTime": "2025-06-05T09:15:00.000Z", - "unloadingBaseportLocationId": "PORT-UK-FEL", - "unloadingBaseportLocationName": "Port of Felixstowe, United Kingdom", - "cooId": "COO-20250604-00", - "issueDateTime": "2025-06-05T21:15:00.000Z" - }, - "type": ["VerifiableCredential"], - "qrCode": { - "type": "TrustVCQRCode", - "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Fw3c%2Fv2_0%2Fcertificate-of-origin-expired.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" - }, - "issuer": "did:web:trustvc.github.io:did:1", - "validFrom": "2024-04-01T12:19:52Z", - "validUntil": "2024-12-03T12:19:52Z", - "id": "urn:uuid:01992e72-bf2b-7ccd-8dc6-59bb098c5fe2", - "proof": { - "type": "DataIntegrityProof", - "created": "2025-09-09T12:28:16Z", - "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", - "cryptosuite": "ecdsa-sd-2023", - "proofPurpose": "assertionMethod", - "proofValue": "u2V0AhVhAQ-f-rwpGy3ezlby2hGJ5xMyBRtrmi-DnjQZvaUaRs5rsaIgWI9n9educHaCiGIH-_IeQq2e9AbWVvfDTBaaUoFgjgCQCbfvsvR0OlwHjDfCMB1_D5O-aBMCi3HpWLentPuj57EVYIO7xXUieSWT9FPEKI5ydp3R0o1e3Ji6qkweq6WPwomexgIdnL2lzc3VlcmovdmFsaWRGcm9tci9jcmVkZW50aWFsU3ViamVjdG0vcmVuZGVyTWV0aG9kay92YWxpZFVudGlsZy9xckNvZGVlL3R5cGU" - } -} \ No newline at end of file diff --git a/tests/fixtures/w3c/certificate-of-origin-revoked.json b/tests/fixtures/w3c/certificate-of-origin-revoked.json deleted file mode 100644 index 8321c5c..0000000 --- a/tests/fixtures/w3c/certificate-of-origin-revoked.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "@context": [ - "https://www.w3.org/ns/credentials/v2", - "https://w3id.org/security/data-integrity/v2", - "https://trustvc.io/context/render-method-context-v2.json", - "https://trustvc.io/context/coo.json", - "https://trustvc.io/context/attachments-context.json", - "https://trustvc.io/context/transferable-records-context.json", - "https://trustvc.io/context/qrcode-context.json" - ], - "renderMethod": [ - { - "type": "EMBEDDED_RENDERER", - "templateName": "CHAFTA_COO", - "id": "https://generic-templates.tradetrust.io" - } - ], - "credentialStatus": [ - { - "id": "https://trustvc.github.io/did/credentials/statuslist/2#5", - "statusListCredential": "https://trustvc.github.io/did/credentials/statuslist/2", - "statusListIndex": "5", - "statusPurpose": "revocation", - "type": "BitstringStatusListEntry" - } - ], - "credentialSubject": { - "type": ["Coo"], - "signature": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABCwAAAG6CAYAAADDFddpAAAAAXNSR0IArs4c6QAAIABJREFUeF7t3QHWoziWJtDoleX0ymJ6ZTO5splUVdDtcAASIKEn6f7n5MnqTgzSfcI2n4X4jx/+CBAgQIAAAQIECBAgQIAAAQLBBP4jWHs0hwABAgQIECBAgAABAgQIECDwQ2BhEBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAgTYC/+vHjx/pn//76582R7FXAgQIECBAgMCkAgKLSQurW90EPi9Q0v/+391a4sAECPQU+D+/worPNvyX94SeJXFsAgQIECBAYDQBgcVoFdPeyAJ7FyipvekiJf0JLyJXT9sI1BP4fye7SrMt/vZ+UA/bnggQIECAAIF5BQQW89ZWz94TSDMpfu78mrrXAr+wvlcXRyLQQyC9H6TwMvf3n24TyRH57wQIECBAgMDqAgKL1UeA/tcQOPs19Wj/KbhwX3sNffsgEEsgzaRKAWbJnwCzRMk2BAgQIECAwLICAotlS6/jlQSuXJzsHdLtIpUKYTcEgggc3Rp2Fl66XSxI8TSDAAECBAgQiCUgsIhVD60ZT+DO7Iq9XrqvfbzaazGBPYG9EDOd3+lWEaGFMUOAAAECBAgQuCAgsLiAZVMCXwJnsytyFyhnmO5tN9QIjCtw9HSQ1KOzW0XcHjJuzbWcAAECBAgQaCQgsGgEa7dLCJwFFtu5tU31Lr2nfYNz8bLEENLJCQX2AosthMwtyOm8n3BA6BIBAgQIECBwX0Bgcd/OKwkc3aueZlekC5TvvxRe/FX4NBHBhfFFYEyBs8Ai9SgXWphhNWbdtZoAAQIECBBoICCwaIBql8sIHK1fcRRYbDBXZ1341XWZIaWjEwjkAovUxdxivUKLCQaCLhAgQIAAAQLPBQQWzw3tYV2Bs6cBlFxwpF9a0z+lt4sILtYda3o+jkBJYFESWvh8HqfmWkqAAAECBAg0EvCFqBGs3S4hcBZY5GZZfAPlfnHdthdaLDG0dHJggb2ZV0cBZu4RqCXB58BUmk6AAAECBAgQOBcQWBghBO4L5C42roYLpWtcXN3v/R56JQECVwX23hfOPmvPHo18Nfi82lbbEyBAgAABAgRCCwgsQpdH44IL5BbPS82/Ey6UzLZIFzJp3+nf/ggQiCNwZYZFanXufL/zHhJHQ0sIECBAgAABAg8EBBYP8LyUwD/rT5z9OroB3Z3WnZvBkfZ/d9+KR4BAG4GrMyxSK3LnuvO8Ta3slQABAgQIEAguILAIXiDNCy+Qu9B4Glrkfn0VWoQfIhq4mMDVGRaJJzdby60hiw0i3SVAgAABAgT+LSCwMBIIPBPIXWhse39ywVESWpg2/qyOXk2glsCdGRbp2Lnw0zleq0L2Q4AAAQIECAwjILAYplQaGligJFBIzX8SWrigCTwANI3Ah0DpY02/0UrCT5/ZhhoBAgQIECCwlIAvP0uVW2cbCrwVWuSO41fYhkW2awIFAncDi7Rr53cBsE0IECBAgACBdQQEFuvUWk/bC+QuNrYWPA0Vcsd5uv/2Uo5AYF6BJ4FFUsndGmIBznnHjp4RIECAAAECXwICC0OCQF2B3MXGW6GFi5q6dbU3AqUCTwOL3K0hT28tK+2H7QgQIECAAAEC3QUEFt1LoAETCkQJLcy0mHBw6VJ4gaeBRepg7j3EuR1+GGggAQIECBAgUENAYFFD0T4I/Cmw92jDPaenFx6520PMtDA6CbwrsHdOXj3PS2ZZpH2m2Rb+CBAgQIAAAQLTCggspi2tjnUWyF1wfDbvaaiQCy2uXix1pnN4AkML7J37d87B3Hnt1pChh4nGEyBAgAABAiUCAosSJdsQuCcQKbR4GorcE/AqAusJ1Aosklxuppbzer3xpccECBAgQGApAYHFUuXW2Q4CuV9JtyalX0ufTvHOHevOr7wdyBySwNACe4HF3dkQudDz7n6HBtZ4AgQIECBAYB0BgcU6tdbTfgK5IOEztEi/mD75yx3LL7JPdL2WQF6gZmCRjpZbgNM5na+JLQgQIECAAIFBBQQWgxZOs4cTyAUJnx16el7mjmWmxXDDR4MHE9i7lePueW2WxWDF11wCBAgQIECgnsDdL1D1WmBPBNYRyAUJm8Qbt4c499cZd3r6vsDerIgn55xZFu/X0BEJECBAgACBAAJPvkAFaL4mEBhOIHfh8RlauD1kuPJqMIF/Ceyd509v3cgtwOnz3OAjQIAAAQIEphPwBWe6kurQAAKRQgvvAQMMGE0cTqBFYJGboeVWr+GGiQYTIECAAAECOQEXKzkh/51AfYF0T/rPHz9+pH/n/mo8BSB3ofP0l99cH/x3AqsJ1Hy06afd2SyLGu8Vq9VJfwkQIECAAIHgAgKL4AXSvKkFclO8Pzv/9Fw9Cy1c6Ew9zHSug0DtJ4VsXRA+diimQxIgQIAAAQL9BJ5eBPVruSMTmEPgyu0hacp3Chfu/uWOZabFXVmvI/C7QKvAIh3FLAujjQABAgQIEFhGQGCxTKl1NKjA1dtDnoYWfqENOhA0azqBmo82/cRxDk83VHSIAAECBAgQOBIQWBgbBPoL7P0ae9QqjzztXy8tIFAi0GLhze24ZlmUVMA2BAgQIECAwPACAovhS6gDkwhcCS1Sl58+EcDtIZMMHN0IK7A3E6LWbVfO37Bl17CFBbYZk3//MkjvAf4IECBA4KGAwOIhoJcTqCyQuxD5PNzT0CK3EOfT208q09gdgaEEWq5jkSDMshhqOGjspALpPE///LXz5C8LWk9adN0iQOBdAYHFu96ORqBE4M3QInesWr8Il/TbNgRmEmgdWDh3Zxot+jKaQOn6U09/WBjNRXsJECBQXUBgUZ3UDglUEchdjHwe5OkXIov4VSmZnRD4Q6DVwpvpQLnbyJ6+LygnAQJ/CpQGFdsrzbIwiggQIPBQQGDxENDLCTQUyAUJNUOLXEBipkXDQtv1tAJ751XNz92z89aF0rTDSsc6CFwNKj6bWPOc79B1hyRAgEBfAW+iff0dnUBOQGiRE/LfCcQVaLnwZup1bpaFoDHu2NCyMQS2NSp+3myumU434byMAAECm4DAwlggEF/gSmjx9FfV3LFcAMUfL1oYR2AvUKh9Dll8M069tWQugdznYUlva5/vJce0DQECBKYSEFhMVU6dmVjgyhcnocXEA0HXhhJovfBmwsi9N/icH2rIaGwAgdw5VdLE9DnsSVslUrYhQIBARsAXGUOEwDgCV79EPfllx5oW44wLLY0t8D0D4mmguNfbs1kWT94HYstqHYF6AtsaFWmP6X/f/dtCinSe+yNAgACBCgICiwqIdkHgRYHcPevfTXlysZJb0M+vRy8W3qGGFWi98GaCyZ2r6X3AHwECfwo8WUxz25vZFEYWAQIEGgoILBri2jWBhgK5GRCfh36y6JcLoYZFtOslBFovvJkQc0Hmk+ByiSLp5HICNYIKsymWGzY6TIBADwGBRQ91xyRQR+DKLSJPQouz47SY3l5Hx14IxBDYCxOenI9HvRIuxqi3VsQWqBFU+NyLXWOtI0BgMgGBxWQF1Z3lBN4KLVwMLTe0dLiSwBsLb+ZmWbjAqlRMuxlWQFAxbOk0nACB1QUEFquPAP2fQSA3Hfyzj09+2T0LLZ7sd4Ya6AOBM4G9RTFbfP5afNM4JPC7QI2gwuebUUWAAIGOAi2+MHXsjkMTWFqgdF2LJ7+2Ci2WHmI6f1Ng77xpsa6EmVA3C+Rl0wkIKqYrqQ4RILCqgMBi1crr96wCV24RuXv+n/2K65eoWUeWfj0ReGPhzdS+3GyrFiHJExevJVBbIJ0Dn48ovbN/T/24o+Y1BAgQaCRw94KlUXPslgCBCgJXQos7FzAuiioUyS6WEnhr4c2EahbUUkNLZz8Ernz27cE9mX2oEAQIECDQSEBg0QjWbgl0Fij94nb3l6Tc/r23dB4ADh9O4HtmUquLo7NAsdUxw2Fr0DICtW79SOdG+scfAQIECAQTcFERrCCaQ6CyQOm6FndmWnjcaeVi2d3UAm8FFgnx7Ly/c65PXRidG1KgVlCRPsf8ESBAgEBgAYFF4OJoGoFKArnZENth7qw/Yfp5pSLZzfQCb61jkSCFidMPp2U7WCOoMNNo2eGj4wQIjCggsBixatpM4LpAr9DCr7nXa+UVcwrshXstP4M94nTOcbRqrwQVq1ZevwkQWF6g5Zel5XEBEAgmkFss8+5MC/fMByu05oQU2DtPWv7Sa/ZTyGGgURcFngYV27oUKTz3R4AAAQIDCggsBiyaJhN4KFCyrsXV20POZnBc3dfD7nk5gZACbz4pJAHkAkqf/yGHiUb9EngaVKTd+OwxnAgQIDCBgC8sExRRFwjcECi5ReTql72zIMR7zY0iecl0At/nSMsZFgnP4pvTDaHpOySomL7EOkiAAIFrAi4irnnZmsBMArVDC7eGzDQ69KWFwNvrWDgnW1TRPlsI1AoqPJ60RXXskwABAh0FBBYd8R2aQACB3LTx1MQrMy3O9mcBzgAF14SuAm8+KWTrqMU3u5bcwU8EtpAibZL+992/9BklqLir53UECBAILiCwCF4gzSPwkkBuXYsrU9eP9nVlHy9122EIvCrw9joW24VgOif3/pyTr5bfwX4J1JhNkXYlqDCkCBAgsICAwGKBIusigUKB3C0ipTMtzmZZlO6jsMk2IzCUQI/AIgGZZTHUMJm2sYKKaUurYwQIEGgnILBoZ2vPBEYUyIUWpb/ImmUxYvW1+Q2BtxfeTH06O69Lz+k3bBxjPoHtVo+fD2/7SDJprG6zKuaT0iMCBAgQ2BUQWBgYBAh8C+RCi9JZEkehRenrVYbAjAJvL7y5GQoRZxxNcftUazZF6qFbP+LWWcsIECDQXEBg0ZzYAQgMKZALLUp+lT3aR8lrh0TTaAIFAnvnxRufxWfr1AgRCwpnkyKBWkFF+pz4+58jpvPFHwECBAgsLPDGl6SFeXWdwPACTy9yzLIYfgjoQGWBXutYpG6YZVG5mHb33wKCCoOBAAECBJoICCyasNopgakEntz/bpbFVENBZyoI9Awszs5lsywqFHexXdQKKRKb9SkWGzy6S4AAgVIBgUWplO0IrC3wZKbF0RMK/vPXl9S1ZfV+RYEeC28m57Mn+KT/7jvBiqPxWp/TGNqCimuv3N9aUFFD0T4IECAwsYAvJxMXV9cIVBbIrWtxFEAcXSRZy6JygexuGIG9EO+tz+Oz83jFEHF7isX2779+rZ2wDab0PpX+WfnvM6DYnJ56mNHzVNDrCRAgsIjAW1+QFuHUTQLTC5z9Qnu2SJpZFtMPDR28INDrSSGpiblzOIUWs//dvQDfgou0GOTn3/b/nynYuGuUGzuCipyQ/06AAAECvwkILAwIAgSuCqRfaNOvkEe/tO39SmuWxVVl288ssHc+vDm74ewWrzfb8WaNa663UNLu73BjhJkarYzc9lEyYmxDgAABArsCAgsDgwCBOwK5e+H3fkUzy+KOtNfMKNBz4c3kudIsi1zA+vb42maipeP2CjE+w+afvwBq3erx6SmoeHt0OR4BAgQmFBBYTFhUXSLwkkDu17jvX2o9MeSlwjhMeIHegUUCmnmWRe69KeoA+Q4zUj++bzPJ3XbyHTyk/zvNiNuCqjf6ngLrXmHMG/1zDAIECBB4UUBg8SK2QxGYVOBo5kTq7vdMC7MsJh0EunVZoNeTQraGns2yGHWdgVGDisuDJ+ALzKYIWBRNIkCAwAwCAosZqqgPBPoLnD154PPixyyL/rXSghgCPRfe3ATOwsaR1rIQVPQZ01tIkY6em/nRp4WOSoAAAQLDCwgshi+hDhAII3A2xfzzEaZ7F0kecRqmjBryksB3eNfjHJhhlkXuccsvlXOZw5hJsUypdZQAAQIxBAQWMeqgFQRmESiZaXEUbIw6DX2W2unHuwK9nxRSMssi+neEp2FFyQyBVKfPdSHeXg/i3VG5fzQhRYQqaAMBAgQWFYj+ZWTRsug2gaEFzi4itl+RzbIYusQaX0EgwsKbqRtn52vk20LuhhXbwpa1F4XcQo3vcKPF0zcqDL/sLoQUWSIbECBAgMAbAgKLN5Qdg8B6ArnHnh6JRL5AWq+Ketxa4Du46zH+c+dqxO8Jd8KKnk+u+JylkWZoRAsxtvUn/vZ0j9anvP0TIECAwFWBiF9ErvbB9gQIxBS4c1HR4z7+mHpatYLAd2DRa/yP9ojTs8VCP8dN9FkC37ebpLanQCMFBz9/hQc1wo1tVknadwpuPh+XarHMFd5p9JEAAQIDCwgsBi6ephMYQCD36+1eF7wvDVBYTawisHfh3WP8n52nvUKUI+CSIDR6UHF38HzedpL6uP3f2//+Dh+EEXelvY4AAQIEwgj0+GIUpvMaQoDAawKlv4imBkW7QHoNyYGWE9i7+O71uTzCLIuSsMLivcudRjpMgAABAjML9PpiNLOpvhEg8KfA1ZkW3puMohUE9i7Ae6xjkaxHmGWRCz6FFSucNfpIgAABAksJuChYqtw6S6C7QO6CY2tgr4u27kAasJTAXmDR86L7bJZF7+8LudkVPd2WGrQ6S4AAAQIE3hTo/QXkzb46FgECMQTOLoq2FrotJEattKK9QJSFN1NPo94WUjJDS8jZfqw6AgECBAgQeF1AYPE6uQMSIPCPQO7X0oTk/clQWUEgysKbm/XRLKieIWLu/cLsihXOFH0kQIAAgSUFXBAsWXadJhBCIHcR0vMCKQSQRiwhEGmGRcRZFrnZFd4nljhNdJIAAQIEVhUQWKxaef0mEEMgF1r45TRGnbSinUCkhTdTL6Mtvuk9ot3Ys2cCBAgQIBBeQGARvkQaSGB6gdwvqEKL6YfA0h3cWzei95iPtJbF2UK9vZ2WHrg6T4AAAQIE3hAQWLyh7BgECOQEhBY5If99VoG9sd/7QvxsVsObbTO7YtZRr18ECBAgQKBQQGBRCGUzAgSaC+QeeZruVU8XS+nf/gjMIrAXWPRelyHKbSFn7wm9jWYZf/pBgAABAgRCCwgsQpdH4wgsJZD7NXXDePMX3qUKoLNdBCIGFgmi920hufcD7wNdhquDEiBAgACBdwUEFu96OxoBAscCudtCPl/pYsVImklgbybBf3aeTdR7lkUusPD9ZaYzQF8IECBAgMCBgA98Q4MAgUgCZ7/qfrdTaBGpctryRGBv3PcOLFJ/zm7JaP39we0gT0aU1xIgQIAAgUkEWn/hmIRJNwgQeEngyiyL1CShxUuFcZimAnuBRYQ1Gs7Ox9bnnqeDNB1ydk6AAAECBMYQEFiMUSetJLCKwNXAQmixysiYu597tz+0DgRKRHPnY6vvELnbQSLMPinxsw0BAgQIECDwUKDVl42HzfJyAgQWFji6LST94pwuoPb+PEFk4QEzQdejLryZaHssvpkLLHx3mWDQ6wIBAgQIECgR8KFfomQbAgTeFDj6VTeFEn//c1/9z5PGRPhV+k0rx5pD4GjMR/iM7rH45llIEuFWmTlGnV4QIECAAIEBBCJ8GRqASRMJEHhZ4Oj+9fSelfv1VWjxcrEcropAxCeFbB17e5aFwKLKkLITAgQIECAwvoDAYvwa6gGBGQWOLli2e9dz99YLLWYcFXP3aW/MRxnHb8+yOAssopjMPRr1jgABAgQIBBEQWAQphGYQIPCbwNEsis/p4EILg2YmgahPCtmMz57aUXsRTE8ImWlk6wsBAgQIEHggILB4gOelBAg0EzgLI77ft85uEfFrbLMS2XFlgb1xHGm9hrPzrHY7BRaVB5fdESBAgACBUQUEFqNWTrsJzC9wdNGy92vumxdT88vf7+H3U1zShay/MoHIC29uPXhrloXAomzM2IoAAQIECEwvILCYvsQ6SGBYgaP72I9mTQgt3i91ushO//x18sjZ1CozXfK1OQosat9ukW/J8RZvnWMCiydV8loCBAgQIDCRgMBiomLqCoHJBM4eb5ou4vb+ck8Q8Z5XZ5BsQcXZI2b3jiS4OPeP/KSQreVvzLIQWNQ5T+2FAAECBAgML+DL+/Al1AECUwucPd70qOO5xTgj/WI9YvFyoVCuT+k2kb//2Sjtx9/vApGfFLK1tPUTPJy/zgoCBAgQIEDgvwUEFgYDAQKRBXKPNxVavFu93MXkldaYbfGnVvQnhWwtPpsB8fR7RW6MCRyvnGW2JUCAAAECgws8/WIxePc1nwCB4AJ3A4u3fg0Ozle1eU9nVuw1Rmjxu8qRcbTP6pZP5smNs2gWVU8yOyNAgAABAgR+F/DBb0QQIBBZ4M46Ft/9aT2FPbJfzbad/ar+5Di1H4n5pC29XzvCwpvJKDcL4sl3C4FF71Ho+AQIECBAIJDAky8VgbqhKQQITCpQI7BINC1/EZ6U/rdu5S4inxqYafFvwVECi9w59SSEyo0131uenm1eT4AAAQIEBhLwwT9QsTSVwKICdxbe3KMSWtwfQK1mV3y26MlF7v2exXvlnnVEm1azLM5mREV0iDeCtIgAAQIECEwkILCYqJi6QmBSgaOL5TuL7wktrg+S3C/e36FDegJI+vvr14yBK0c00+LHj1EW3kx1PRsbd8MFt3BdOWNsS4AAAQIEJhcQWExeYN0jMIHA04U3vwmEFtcGRUlgcRQ0lLz2uzV3L3Sv9Sru1qMsvJkEW8yyOJvNI9CKO261jAABAgQINBEQWDRhtVMCBCoKHAUWTy5ezi60nuy3YrfD7Cp3O0hJwHA1uFi5BiOtY5EGac1ZFrkA5M6sqjAnkoYQIECAAAEC1wUEFtfNvIIAgXcFji6IalzUtghD3tVpe7TcBWQ6emkdzqb67/WiJAhp2/s+ex8tsEhKZ6HW1ZCh5r76VNBRCRAgQIAAgWoCAotqlHZEgEAjgVpPCtlrXtr3z4O1FkovxBt1O8RuS2ZGXPkcKdnfZ8dXDS1GWXhzq9VZsHWlhjVna4Q4gTSCAAECBAgQeCZw5YvmsyN5NQECBO4JtAwsthYd/aq7emiRmxVx5WJ0s74aWqxYg5EW3tzqejZWSmdZ5MaG7yz33kO9igABAgQIDCvgw3/Y0mk4gaUE3vjF2e0hfw6p3PoVd8OE3IXpd0vuHmfUk+RoLEb+zK4xy8IMi1FHrHYTIECAAIFGApG//DTqst0SIDCgwBuBRWJpuV7GaOwl61eU/nK+13ehxfGIGHEdi9Sbs1kWJbNxnr5+tHNMewkQIECAAIGMgMDCECFAYASBo1/6W7yHmWnx7xFREig89S85xuf4XGWmxVFgEb3/T2dZCCxGeDfWRgIECBAg8KLA0y+bLzbVoQgQWFjgzcDi7GL9yYyC0cqXW7+i1sXz1dBilRq8Nauo9rh8EjqcvbbWeKvdX/sjQIAAAQIEGgoILBri2jUBAtUE3g4szkKLVS6c3goszqz3BlDJrQXVBl7HHY24jkXiyt1KdBY4PQk7OpbKoQkQIECAAIFWAgKLVrL2S4BATYGjC5nWv7Yf/frf+rg17e7uK7fgZm2DXEDy2Y8VQoteY/7uePl83d1bQ8ywqKFvHwQIECBAYCIBgcVExdQVAhML9Py1edWFOHOBRYvPjyuhxewzXUYPy87Gz1HYZYbFxG/iukaAAAECBO4ItPjCeacdXkOAAIEzgd6/No9+8XhndOUCi9ozLFIb0y/zP3/9u6TNLdpQctw3thl14c3N5s6tIQKLN0aWYxAgQIAAgYEEBBYDFUtTCSws0DuwSPSrzbTIzXZoFRbkLnQ/T4PZbw0ZdeHNrUZXA4ir2y/8lqjrBAgQIEBgDQGBxRp11ksCowtECCzOQotWF+8969YrsEh9vhJazHxrSM9boWqMvVwdvwMngUUNdfsgQIAAAQITCQgsJiqmrhCYWCBKYLFdTO/dtjDbhXPPwOIsHNob5rN+lkUa93ffXnKhxed5c3Yb0mzn111PryNAgAABAksJzPolb6ki6iyBBQSiXbitsKZF78AiDetcG7ahP+utIUcX+6PN6MnVMdVvCwOP3s4EFgu80esiAQIECBD4FhBYGBMECIwgEC2w2C6uZp5pkbvIfOvzI7f45zZ+R7uILznvjgKLEQOa3HjKeQgsckL+OwECBAgQmFDgrS+cE9LpEgECLwpEDCxS92eeaZELCt76/MjdUrANwxEv4ktOodEX3tz6WFrHI5O3xltJTWxDgAABAgQIvCTgC8BL0A5DgMAjgcjBwNGjOEf+RfjI+7OIb35+lLQntW1k86MTZPSFNz/7VVrHb4sZ6/roDdGLCRAgQIDAKgJvfuFcxVQ/CRCoLxB1hsXW01nWGtj6k7uw7HEBWXJLwYyzLKKP/atne25s7e1vxtt9rrrZngABAgQILCkgsFiy7DpNYDiByDMsPi/y//r1SM5P4B4X908LnLuo7NGn0lsKerTtqffZ60cY+1f7nxtfo58/Vz1sT4AAAQIECBwICCwMDQIERhAY5VfmWWZa5Nav6PWLd8ksizSee7Wvxbk008Kbnz6pX9vtVEdus4VPLcaHfRIgQIAAgakFBBZTl1fnCEwjMNKvzKmto8+0OAssel9E5sKUNOhnuzVkloU3996Q0vmS/tLeknM5AAAgAElEQVQTd7bapX+ncbY97nSaNzIdIUCAAAECBK4JCCyuedmaAIE+AiMFFkno6Ffx3hf7JdXL3XrRuw+59m19nGmWxUwLb5aMQdsQIECAAAECBP4lILAwEAgQGEFglFtCPi1HfXpIbn2BCJ8bJbeGzDTLYsTxP8L7ijYSIECAAAECwQUifPEMTqR5BAj8EkgX4Okv/Tvd8vD3r3/ngNJ233/pYvLKdO/RZlhs/R1xpkXk20E+XdMtBNuYPBqDs8yyGHX8594b/HcCBAgQIECAwKmAwMIAIUDgSOBzQbzcheFTxXSbwfa33dP+uc+jX5h7355Q2u+99kecAZCbXRHJO9fWrTYzfM7NuvBm6fljOwIECBAgQGBRgRm+yC1aOt0m0ETg6DaGJgfL7HQLMdKF/dHTBEb5Bf1spsXV2SatalESAET7zFjl1hCBRatRb78ECBAgQIBAaIFoXz5DY2kcgYkFSi5WI3Z/lMBis4s406I0pIo0u2LzLF2Ac4bPOgtvRnwH0iYCBAgQIECgqcAMX+KaAtk5gckFRg0qPsuyrYWR1srY/veV9THeLnGU9QhKg4rNJ+rnRckYjnj7zdVxJ7C4KmZ7AgQIECBAYHiBqF9Ah4fVAQIDCJRc6A3QjWwTvwONdKHeO9jouSbH1aAiAUecXfFZ+JJbQ0abjfM9sD0pJHuq24AAAQIECBCYTUBgMVtF9YdAmcAqYUWJxrZGRvr35xNN9hb/LNlf6TZHNWgZDpRc2H+3v2V7Sq1y261wa8hRH0cPYnK19d8JECBAgACBhQUEFgsXX9eXFrgaWBzdYvH5aNPtf3//O0G3fspIy2J+ztDYjlNrocw3Qos7Myq2fo4QVmxtLRnTo98asvfI2dH71PLctW8CBAgQIEBgcAGBxeAF1HwCNwVyv7Rvsw1azTJIF9GfIcZfA4ca3zMzrt5uUjO02EzTv5+YpqCiVihzc4heflnpLIuRZyQILC4PCy8gQIAAAQIERhYQWIxcPW0ncF/gLLDo/YvtTGHGd4U+Z2ukQGGbjXI0AyUFB5/bfe5vW4uj5uyV1kHV/RFb9srZZ1lYeLNsHNiKAAECBAgQmERAYDFJIXWDwEWBkgu7SL9EH7X381aVmhfuFzmH3zw5brMqRu9MbvZQ6l+ksX3F28KbV7RsS4AAAQIECAwvILAYvoQ6QOC2QMmFXZQ1DO7cNvF5e8SGlGYrpD/hxv88KWWWoGKrcemtISN+/kV5JO7tNx0vJECAAAECBAhcERjxC9uV/tmWAIFjgdILuwihxZ3AorT23+s+fF74lu5jpO1mmk1x5D5SGHdl7Byds71v47rSB9sSIECAAAECBIoFBBbFVDYkMK3ACBd3PX9Z/lx49MlClj0H0BZSpDYcPfGlZ/tqH7s0jBvx1hALb9YeLfZHgAABAgQIhBUQWIQtjYYReFWgZE2L1KBesy1azrC4C/19y8l2u0na31u3nKTwYVt887MfaTHPq08ruesQ9XUlY3rEmQkCi6gjTrsIECBAgACB6gICi+qkdkhgWIGSC7xeoUXEwOJqoXNP9djCh8/9pv/f0QyYXuHR1X733L5k9tBosywsvNlzRDk2AQIECBAg8KqAwOJVbgcjEF6gNLR4O7joeUtIhKLNENj0cCy5NWS0WRYebdpjJDkmAQIECBAg0EVAYNGF3UEJhBZIF3k/L9zW8MYv/S7Yf/xgcO+0KZll8cYYvtf6P191FMKM1IdaFvZDgAABAgQITC4gsJi8wLpH4IHAldkW6VfqtG7C5wKVDw79x0tdrP+bZPWZJnfG1GyzLAQWd0aB1xAgQIAAAQJDCggshiybRhN4TaDkYu+zMa2Ci6ML9dGm89conPDmuuJssywsvHl9DHgFAQIECBAgMKCAwGLAomkygQ4CV2ZbbM2rOUXdwpO/F11ocf0k2LvI/97LKAtwHvXFZ/r1ceEVBAgQIECAQGABX24CF0fTCAQU6BVcmGHx52AQWlw7QUrG7igzdiy8ea32tiZAgAABAgQGFRBYDFo4zSbQUSBd+P11YVHOzxkX6YIw/XP17+gCbZQLzKv9Ld3emhalUv/ebpZZFup+re62JkCAAAECBAYVEFgMWjjNJhBA4G5wcWedC7MJjgvu4rX8ZChZk2WEEMzCm+U1tyUBAgQIECAwsIDAYuDiaTqBIAIlU+2PmprWuSiZdWGGxXmx93xGuPDuMYRLFuCMvpbFUWCh5j1GlGMSIECAAAECzQQEFs1o7ZjAcgJ3Z1wkqBRcpL+jx6JadDM/nPaMai58mm/BGFvMMsvCk0LGGG9aSYAAAQIECDwQEFg8wPNSAgR2BbbQ4edNn71ZF2ZY5DHThXgyT//+/Is+WyDfs/pbzDDLwqya+uPCHgkQIECAAIFgAgKLYAXRHAKTCTy9XSRxpH2YYVE2MI5mDwgtfvebYZaFtUvKzglbESBAgAABAgMLCCwGLp6mExhI4ElwcdZNtzz8qbNnbW2DP51Gn2UhsBjoDVBTCRAgQIAAgXsCAot7bl5FgMB9gZrhhcBivw7Ws8iPz9FnWZhNk6+xLQgQIECAAIHBBQQWgxdQ8wkMLPB0rYvUdYHF8QDYCy3cGvK71+izLCy8OfAboKYTIECAAAECeQGBRd7IFgQItBV4GlyUPhq1bS/i7X3vF3i3hvxep9FnWQgs4p13WkSAAAECBAhUFBBYVMS0KwIEHgs8CS/Sxfjf/7Tg6NGojxs34A7cGpIv2sizLDwpJF9fWxAgQIAAAQIDCwgsBi6ephOYWCD98r09pvNON90q8j9qe7/Ce+//H5+RZ1lYePPOu4PXECBAgAABAsMI+NI6TKk0lMCyAiW/gB/huF3k3zNOfn4BCXR+BykZYxHX/zhqt8/2Zd8udZwAAQIECMwl4EvNXPXUGwIzCtR4qsjqt4uYZZE/M/aMPl8Vcf0PTwrJ19UWBAgQIECAwMACAouBi6fpBBYRKPn1+wrFirML9i5sV3Q4Gycl4yzaZ+ZRYBExXLlyjtqWAAECBAgQIPAvgWhfvpSFAAEC3wJnv3yni+6/fq13cVVutQv27wtyF7W/j5gR17I4avNqY/vquW97AgQIECBAYBABgcUghdJMAgsLHAUWnxfcTxbpXOXibu/WmojrMvQc6iPOsrCORc8R49gECBAgQIBAUwGBRVNeOydA4KHA2a/eR0HD3TUvVljn4jv8McvizwGaW8siWsB1FFgIox6++Xg5AQIECBAg0F9AYNG/BlpAgMCxwFn4kLtwTK91u8jvtnsXty5sfzfKBV7RQh6BhXdQAgQIECBAYFoBgcW0pdUxAlMInF08ll5oPw0uEmTaxwx/Ft/MV7FkLYvSsZc/2vMtLLz53NAeCBAgQIAAgaACAoughdEsAgT+JXA2Pf/q+9cWOvy8YTvT7SJuC8kPgNxaFpFmWRyFepHamBe3BQECBAgQIEBgR+DqF36IBAgQeEvg7JfuJxdjT4KL1Pd0K0r6G3XWhdtC8iN4pFkWZljk62kLAgQIECBAYFABgcWghdNsAgsIPFm/ooTnyZNFtv2PGF7sXeBGusWhpHZvbDPSLIujmUjq+sZIcQwCBAgQIECgmYDAohmtHRMg8FCgdWDx2bzcQoulXdkCjDQDJP0T9c9tIWWVyT0xJEogcNTO3MK0ZQq2IkCAAAECBAh0EhBYdIJ3WAIEsgI116/IHuzXBrWCi+1429oXW3gRJcT4tnVhuz9CcuPhya1JpWOyZLuj2SBR2lfSB9sQIECAAAECBP4QEFgYFAQIRBXoEVhsFk+eLFLiuc3ESNu+ORsj3Q6SFh1N//78E1jsV22UtSzOghWf8yVnpG0IECBAgACBkAK+yIQsi0YRWF7gzdtBzrBrrHNRWsxt9sXfHy+otbDnUVCxHcpnwXGVRphlUePxv6Xj1HYECBAgQIAAgdcEfEl9jdqBCBC4IBAlsPhs8tOni1zo/u6me4FG+v+lMCK1bQtXtv/fX7/28j2b4nvnZlecV2aEWRZnbYyyzsbT8e/1BAgQIECAwIICAosFi67LBAYQ6Hk7SAnPFg6kUCAXCJTsr9c2wooy+eizLM4CCzUuq7GtCBAgQIAAgYACAouARdEkAosLnF0cRl1EcJt9MVKA4UL22okW/YkhFt68Vk9bEyBAgAABAgMICCwGKJImElhMIOLtIFdLsM3ASK9Li1xG+kuhTworojyxJJLNWVtyt4b0DtOOAovUJ5/1o4wy7SRAgAABAgR+E/AlxoAgQCCawNkv2aPfj/+5iOZbszG2YEJI8Xykn4UCae89x+dZ23q267m6PRAgQIAAAQLLCggsli29jhMIKZD7FXvm96zvJ4KkQCM9MWRbPPOzYMkpBRGf/33739tTRragwkyKekM9Nz57zrKYYWZSvUrZEwECBAgQIDCFwMxf/qcokE4QWEzARddiBR+wu7lZFr0+V8/ClJ5ByoAl1mQCBAgQIEAgikCvL1ZR+q8dBAjEEji7GLRIZKxardqayLMsoj9dZ9Uxo98ECBAgQIDATQGBxU04LyNAoImAC64mrHZaWeAsWOs5m2Hm9V8ql9DuCBAgQIAAgREEBBYjVEkbCawh4HaQNeo8Sy/PwoFes4EsvDnL6NIPAgQIECBA4F8CAgsDgQCBKAICiyiV0I4SgYhrWUSd+VHiaRsCBAgQIECAwB8CAguDggCBKAJuB4lSCe0oFYi25oqFN0srZzsCBAgQIEBgCAGBxRBl0kgCSwgcBRY91wRYAl4nbwuczQpKO/3PX4+fvX2Aiy/MLQj6dnsuNt/mBAgQIECAAIHfBQQWRgQBAhEE3A4SoQracEcg2iwLC2/eqaLXECBAgAABAiEFBBYhy6JRBJYTsFjgciWfpsPRZjVYx2KaoaUjBAgQIECAgMDCGCBAIIKA9SsiVEEb7gpEmmUhsLhbRa8jQIAAAQIEwgkILMKVRIMILCfgdpDlSj5lh6PcipGb8eFzf8rhp1MECBAgQGBOAV9c5qyrXhEYSeAssLBI4EiVXLutUWY25AIL59Ta41TvCRAgQIDAUAICi6HKpbEEphRwO8iUZV2uU7mg4M3P27Nz6r/+qUwKCf0RIECAAAECBMILvPkFKjyGBhIg8LqA20FeJ3fAhgJRZllEaUdDarsmQIAAAQIEVhAQWKxQZX0kEFdAYBG3Nlp2XSA3y+Kt2zHOAovUK5/912vrFQQIECBAgEAHAV9aOqA7JAEC/y3gdhCDYTaBsxDu//748SOFFq3/ztqQjv1WcNK6n/ZPgAABAgQITC4gsJi8wLpHILDA2a/Rb13YBebRtEEFIsyyiNCGQcun2QQIECBAgEAkAYFFpGpoC4G1BCL8Er2WuN6+JRDhVqez2UsCwbdGguMQIECAAAECjwQEFo/4vJjAY4H0S+jPf6Zo//1rTyut3u9JBo+Hjx0EFYgww0FgEXRwaBYBAgQIECBQLiCwKLeyJYHaAnu/wq7yyMEIF3S162l/BD4Fes8gsvCm8UiAAAECBAgMLyCwGL6EOjCwwN4voKtM1c4tCui9aeCBren/EugdyuXOMQtvGqgECBAgQIBAeAEXBeFLpIETCxxN2V7hQuLs199VZplMPLR17ZdAz3HeOzAxCAgQIECAAAECjwUEFo8J7YDAbYGji5nZZ1nkLqQEFreHlBcGE8iN9ZbhZO7Ys7/PBBsKmkOAAAECBAjcERBY3FHzGgL1BI5Ci5YXMvVaf29Puanq3pfuuXpVTIGesywsvBlzTGgVAQIECBAgUCjgwqAQymYEGgkcXczMPMtAYNFoMNltSIHcTIeWn8MW3gw5JDSKAAECBAgQKBVo+UWptA22I7CywNnFzKznp8eZrjzi1+z7WXDQcjZVLrBoeew1K63XBAgQIECAQFWBWS+IqiLZGYHGAivNssjNrph5ZknjYWT3gQXOgsmWa0nkzjeBReBBo2kECBAgQIDAjx8CC6OAQH+Bs4uK2c5Rv/j2H29a0EegxyyL3O0oAsI+Y8FRCRAgQIAAgUKB2S6GCrttMwLhBFZZfPPsdpBUFO9J4YamBlUSOAsmW82yyAUWrY5bicxuCBAgQIAAgdUFXBysPgL0P4rACo84zU1P92tvlNGoHa0EzgK7VrdneFJIq2raLwECBAgQINBcQGDRnNgBCBQJnP0S2upCpqhhFTfK3Q4isKiIbVchBc5Cu1bj36ymkENBowgQIECAAIESAYFFiZJtCLwjMPssi9yF0yzBzDujxVFGFOix+GYuKPQ9YMSRpM0ECBAgQGARAV9UFim0bg4hMPMjTnO3g7iXfoghqpEVBN5efDMXWAgKKxTVLggQIECAAIE2AgKLNq72SuCuwNEshNEvKnKzK1pNh79bB68j0Erg7VkWubBw9PeWVnWyXwIECBAgQCCAgMAiQBE0gcCHwIy3heSeVJC676LJabCSwJuLb+YCC2HhSiNPXwkQIECAwGACAovBCqa50wvMuPhm7oIpFdV70fRDWwc/BN6cZZELDAUWhiYBAgQIECAQVsBFQtjSaNjCArPNsnA7yMKDWdcPBd6aZZELLKwfY5ASIECAAAECYQUEFmFLo2ELC5wtkjfaOVsyu8LtIAsP9oW7fnZu1AwRBBYLDzJdJ0CAAAECowuMdvEzurf2EygReHO6eEl7nmyTm12R9u196Imw144s8MYsC4HFyCNE2wkQIECAwOICLhQWHwC6H1bg7UcftoAomV3h/vkW8vY5isBbsyzOgpGaszlGcddOAgQIECBAYBABgcUghdLM5QTOLmRGucg3u2K5YavDFwVysx9qneu5c9F3gYuFszkBAgQIECDwjoAvKe84OwqBqwK5C5no6z6YXXG14rZfVSB3rtT4nD6bsZXcaxxj1frpNwECBAgQINBQwJeUhrh2TeChwNlFRvRp3LlfdBNN9NDlYfm8nECxQOtzXWBRXAobEiBAgAABApEEBBaRqqEtBH4XGHWWRe4X49TLWlPdjRkCMwi0PtcFFjOMEn0gQIAAAQILCggsFiy6Lg8lMOKFRsnsCoHFUMNQY18QaDnLYsT3kRfIHYIAAQIECBCILiCwiF4h7VtdIDdbIdqFf669qZ7Rb2dZfczpfx+B3CyLJ+d6LrBwe1afmjsqAQIECBAgkBEQWBgiBOIL5GYsRLnYKAkrkvaTC6/41dJCAvcFcufQ3XM9F1j4LnC/Zl5JgAABAgQINBTwJaUhrl0TqCSQu9iIMmMhF6wIKyoNCLuZWqDFrSG595C7QcjUhdA5AgQIECBAoL+AwKJ/DbSAQIlALgzofcGR+2V466P3nJJq22ZlgdytIXcCylxg4bxcecTpOwECBAgQCCzgS0rg4mgagQ+B3AVH2rRXaFEaVrgVxJAmUCaQO6eunuu191fWC1sRIECAAAECBB4KCCweAno5gZcEcr+6pmbc+eW1RvNzsz+2Y3i/qaFtH6sI5ELKK6FFzX2t4q+fBAgQIECAQAABFxABiqAJBAoFchcdaTdXLmIKD3u6We6X2+3FZlfU0LaP1QTOwsArAWXuPPVdYLWRpb8ECBAgQGAQAV9SBimUZhL4ZwZFySyLBPXWeZ27CBJWGLYEngnkzrHS0CIXdr4ddD5T8WoCBAgQIEBgGYG3LmyWAdVRAo0Fchce6fClFzFPm+pWkKeCXk8gL5ALLUrChtz7hu8C+TrYggABAgQIEOgg4EtKB3SHJPBAIMosi9xF1NZFt4I8KLaXEvglkAsccqHF09crBAECBAgQIECgi4DAogu7gxJ4JFASFrScZVFy/NRBYcWjMnsxgd8EcutZpPMtnfd7f7nAwncBg40AAQIECBAIKeBLSsiyaBSBU4GesyxKj5064P3FQCZQT6AkKDyaaZG7fcu5Wq9O9kSAAAECBAhUFPAlpSKmXRF4UaDk4qXFLIvcL7UbgdkVLw4Gh1pGoOS83zv3cuet7wLLDCEdJUCAAAECYwn4kjJWvbSWwKdA7lfTtG3u3vYroiUXS2l/woorqrYlcE0gFz58hoYptEz/5G4nSe8T/ggQIECAAAEC4QQEFuFKokEEigVKAoRasyxKjrU13PtKcQltSOCWwJXzseQAztkSJdsQIECAAAECrwv4kvI6uQMSqCrwxiyLKxdH3lOqltfOCBwKlM60yBHWCjVzx/HfCRAgQIAAAQKXBVxcXCbzAgKhBErDhLu3hpTuP6G4FSTU0NCYBQSunJ9HHM7bBQaKLhIgQIAAgVEFBBajVk67CfyPQMksizuBwpWLIRc9RiSBPgJXztO9Fvoe0KdujkqAAAECBAgUCPiiUoBkEwLBBa48anQLLrbF+L67lvaV/vl5sc/eSy6C2ZxAZYE7wYWgsXIR7I4AAQIECBCoK+Aio66nvRHoJfDkfvYUXqSQ4s5fem266En/9keAQH+BFFykv7PQ0Xnbv05aQIAAAQIECBQICCwKkGxCYACBq7MsanXp7toYtY5vPwQI7AtsIWT691+/Nvn7V7goYDRqCBAgQIAAgSEEBBZDlEkjCRQJvB1aCCuKymIjAgQIECBAgAABAgTuCAgs7qh5DYG4AnfuY7/TG/e+31HzGgIECBAgQIAAAQIEigUEFsVUNiQwjEDL0MK978MMAw0lQIAAAQIECBAgMLaAwGLs+mk9gTOB2sGFWRXGGwECBAgQIECAAAECrwkILF6jdiACXQTuPqb0s7FmVXQpnYMSIECAAAECBAgQWFtAYLF2/fV+LYGSxx1uIimkSE8U2F6zlpTeEiBAgAABAgQIECDQXUBg0b0EGkCgm8DnYw8/H3PokYfdSuLABAgQIECAAAECBAhsAgILY4EAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=", - "supplyChainConsignmentId": "CONS-EX456789", - "exportCountryCode": "IN", - "exporterId": "EXP-IN-00987", - "exporterName": "ABC Exports Pvt. Ltd.", - "exporterLine1": "12/F, Industrial Plaza", - "exporterLine2": "Near MIDC, Vashi", - "exporterCityName": "Navi Mumbai", - "exporterPostcode": "400703", - "exporterCountrySubDivisionName": "Maharashtra", - "exporterCountryCode": "IN", - "importCountryCode": "GB", - "importerId": "IMP-UK-88456", - "importerName": "XYZ Foods Ltd.", - "importerLine1": "Unit 17, Royal Wharf", - "importerLine2": "Docklands Industrial Area", - "importerCityName": "London", - "importerPostcode": "E16 2AA", - "importerCountrySubDivisionName": "Greater London", - "importerCountryCode": "GB", - "includedConsignmentItems": [ - { - "manufacturerId": "MFG-IN-3211", - "manufacturerName": "LMN Grains Co.", - "manufacturerLine1": "Plot 7, Grain Belt Estate", - "manufacturerLine2": "Sector 9", - "manufacturerCityName": "Karnal", - "manufacturerPostcode": "132001", - "manufacturerCountrySubDivisionName": "Haryana", - "manufacturerCountryCode": "IN", - "tradeLineItems": [ - { - "invoiceReferenceId": "INV-904/UK", - "formattedIssueDateTime": "2025-06-06T09:15:00.000Z", - "originCountryCode": "IN", - "tradeProductId": "TP-98121", - "tradeProductDescription": "Basmati Rice, Organic, 20kg Pack", - "harmonisedTariffclassCode": "10063010", - "harmonisedTariffclassName": "Semi-milled or wholly milled rice, whether or not polished or glazed", - "transportPackages": [ - { - "transportPackagesId": "PKG-0101", - "transportPackagesGrossVolume": "3.2", - "transportPackagesGrossWeight": "2050" - } - ], - "sequenceNumber": -4 - } - ], - "includedConsignmentItemsId": "ITEM001", - "includedConsignmentItemsInformation": "Organic Basmati Rice – 20kg vacuum packs", - "originCriteriaText": "Wholly Obtained in India" - } - ], - "loadingBaseportLocationId": "PORT-IN-MUM", - "loadingBaseportLocationName": "Nhava Sheva (JNPT), India", - "mainCarriageTransportMovementId": "MCTM-8458", - "mainCarriageTransportMovementInformation": "Ocean freight via ABC Shipping", - "usedTransportMeansName": "Vessel – XYZ VESSEL 001", - "usedTransportMeansId": "VSL-77381-AZ", - "departureDateTime": "2025-06-05T09:15:00.000Z", - "unloadingBaseportLocationId": "PORT-UK-FEL", - "unloadingBaseportLocationName": "Port of Felixstowe, United Kingdom", - "cooId": "COO-20250604-00", - "issueDateTime": "2025-06-05T21:15:00.000Z" - }, - "type": ["VerifiableCredential"], - "qrCode": { - "type": "TrustVCQRCode", - "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Fw3c%2Fv2_0%2Fcertificate-of-origin-revoked.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" - }, - "issuer": "did:web:trustvc.github.io:did:1", - "validFrom": "2024-04-01T12:19:52Z", - "id": "urn:uuid:019931dd-aa7f-7332-90f2-fec5f71c70bd", - "proof": { - "type": "DataIntegrityProof", - "created": "2025-09-10T04:23:54Z", - "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", - "cryptosuite": "ecdsa-sd-2023", - "proofPurpose": "assertionMethod", - "proofValue": "u2V0AhVhA4rzd6CfB4kgKNCBy1K4D5sSjFBpTaVDGk5EtbjVPhTyyrlvAu_CofcRzjMElTccJ4RLX4Ms2f-uUyHYY4wCC4lgjgCQCsbptCV2AXhOhbd0YsBYNq6SQYnflgVe0D2ESzJQVKOtYIA594JgRPtr7FqHl45HltcfVfLNBsoddi-tvDFa3e_G-mD9YQOWoLoFb1wRH4Z8F0fO3jp-RXxSMvVqsSsvt1l-52SsAKskpTa7kKj6zytamFWqWKKe9wrF58lYp_K1Pp7y0TOFYQORBAlSjIi6oJv3E7RtBSRwVuiQLOFxWiWkIabzCpqCfuUJcV8DHJojhURBeT_3B2XbYTB-hs2zRtzMsoGcIdS5YQGxjmhsMGUYmNIZO-ChiiWsOP4TEQBv7h-R59mJTzsklLsCobT7LWl4DYKSv3FGLCMmnOCY5uZyV3k70o1y_rP1YQOa6nJga6wmoYaIi1oFdBYwRjq9u-lU_MTmMysCIjKYqC7u2z-g2ZzaEa997AjcFZelKUQnQOgDtVdmBy8APXRFYQPgzdJrh4m-CsxR7Ndtr0MT_5ys9CQpMrwWcs0VH1snMBZlj9w1DpVtsObRw26Sh2n-FASK8sPlgKqp6Kfa7y2lYQGFed9t9Lt6b33VYGJ8ydwTd_PExvFBZjQoP1iXokfiBhtfgiV4jIEIJpLTXJnRmzLLtC8nsX3i-6CFV3wgxv4hYQCs1_ygs_xkSAWZ_e76d2BWaNxujCpVVo7dyXZ56iECL4xeJG2WMKKw3waPF7qp3--RxOvothE9GR9siAx8ZOupYQCVKS4W_veN56a7tbz79ZEOLLmcxc9dLrMbbWb4BVHlBlcyw950p-gk7GgpvasPzX0lyo0MloZXQ7RSRUvWGhzxYQMgB4qnHTDn51R39L0ZMUS53cGF0gr0YwatsnGhuO2cAp-2XGS5Xm0ixVG5kpxgWfkIILIOjB5BVVQuyIe8HYQ5YQAJ_Xd2Rp-46jh3oN3gKCZc3Mj8WQnBJmuapdBAB0qR28pz1_FcyzyX_foByr3b6Kgjy7pvGWOLkGFsT1GL51YlYQPi2zRoXId7YH2LlJ2E9c_tBGmHaPnTcHVnPySfW06ujRrKcOIwp6qWmiaqEqNnODVDyE539XIDbYWu_fPPMbGVYQK0InDsdhHjrNwjiGysxmy5MLEg8pChPae8or-XZxS7q6jbpXnWp4WDYk2WxK-55Pimj4XuzsFpW5_uTN63eQLVYQLLMt-u_bHqAP3wjxkgcanSKOZiVonDVH8zjQJUT0tyJiD4Q7iqh4_Sr1xAtcYuzrMs1bjnezX4h4aDiZmvX3tFYQN79yVs-5HM_n7OSxPzEETwP9POJyl07znv-D93VcbBSLIFX8zIGoxRDeuDtHn1tWxs3Z5tdbF6D670uGJKy54lYQIKAoYknXbC6zYOL1B92VuQ9Za1bZUQdP0StW8KR0-5aF1Cqj2o7w-ZbennRjqgtas0o0LagStPTc75bAgfCkuFYQHrHL1Fh4zZi0tfKZXFTAFeb0DadNGvr04ZE5XotnrmAS8xAolDiIcV42Xrmb1OdEhRkg7e9Z1ZfKhqd_Q0DM4RYQF5lqmFP7lXibH6vUteQS_vjwMmL_1RA4EM6vzouZpfA4QtgClE4V77Vjm_Fg5OT77htF-V9sJCv1hU_T2jwOLlYQIjwjOOTuZ-sV_1shi-C_Az0fFs7_qqCvBcydAAkFprmorS2LSIoBn0AO9nyWBSiT3CrvdMDoLCZ22cPuNBhOp9YQJMDuEz2REma6yrEW3_GrvN9EegoZ6ZTsGM-7A6RslxvHloeT74y-fLaOOuWxEFuXj88oEh8u1Xj9k0ebL66uh5YQKQcixpC6tmOLQ8mvAIvXLWEYgbUTiON3ARucclSG6uew5Li-iQGOM97qwBVoA93Xb9-mpbqKl5tHPzfOWq_EuZYQLryDbvBJkz3guWMUg_8S0gfA05eQ6gBOKboMvWvjT2tK-MR7yVWegjpVQ4EGK8YzD3KxgjxCH6I8GZuySmWwyBYQBo0HuMYfT2Vqua8OsYwuo8N8kf-4iGcenZjsXFL-v9J6HKXLpspqAOjWUNaW9YbxExcQzmRwzg-RUsgTKeasdJYQDeh8UsbvzmSUSMi8rzr0NaFEqvTkqErvzilxcA-S3yLrifHthNkTp5iYqZ4P2wRrU3gzA9B6o1vtF7ERoZbfVxYQL70TvImGyi8xC6Azm0ZVaMSOnWcYHFK9nZV_pOtheNHQ1Ttd0e7jKWQvWEqr1TdVOTUMoUfcjrW3F0MSgO_-Q5YQACQbkBrQHzh2ikhOym0V3sYi4O2QgMVtCVvKUIbEhNTarR0u-VoM3x7J6LFlbvfEqcqVIRYCeK7hwj1EPc_8j9YQNA-AMmVydwqWgiuhgELKwsV_jdXjKdHyOm2wZs2lF7Yv7t5mDiCQqSKLNzUuEWfL0OW4_cOto9MYfLtw8rKMP5YQBuGcQt7qeItJxJMQh7KE2DDXrvXaA9qZigGex2r9ztw3-pBzI_3HjgESp-u1m1CkkX-OV4o06WRv5qXtQjdHpBYQI-4dUBQjihgtel6M8I8PJ2MGvbEvncNbBk_evRPbSh0pPudvzLVbrxeCJ1QGB12pjFj61WVSq0NJrdTQdr_X0RYQApb-Ls0n2E89lGMTPXNrLWNVKbmS1I7hLT2TMSb7UifflPVIc9fy-QCgYZrCvR0RAslA_hYIwPsDU53AFN5RJJYQC1F4Wb6-Pv_JD4PSyVlSgMUf1ZUxGwc72oZ1BUUfYLez3nwTvh7BW0ZRSetGPvoIN8KC1WXuOmzvlL20SElw-JYQLEwKqdyXX2OXEvMIahZdwY-Qv1hjd9ctBGXfhxvsmacNEDhPsI3feXQC545F5DhbPEpD5l70G_ErSJDoww3IAZYQAKMrq46ttODJpABrF2WwDdKnc4fj_ZCSspkBvtLK-sRhUb0nVuPtfRVYoR21MtKAWR9xmpfmg6kTMphfFQhW69YQB19sS6tL7LBc-gZCIteAZDl-isqycxJS9gCVeURVF3uY6A_H5q_uG946zpCU5zaGYLtoU-fzPT3rYMPMoBIecVYQDlfvIExL3tihkC7FeYtSQi7bKSQzMzsu-Q25lfLErqakfR1u7OknWcIQqC1FMh0_7Bz4vmYvn_NOdyoKLaNGo5YQGa7SWUauUn5DRNqO2fE8nLaNfL2CEunJL9DiTwdlF6TOsf4NGzzZ7yTkp1OGYh-u-Qe86Rd23YDvlk2hUftt8xYQH9uAb8r7JwTYwC0aG3PxUHAgLWuGStqaEjd7eIaQ7gPLFWh0HdDByBjhY8JbPva1Bizx-5-C5MYrcIetyWlTAdYQCu3IngY1cEDKaHdu9Bml0xv0v3-VC8GgNehc37p1EO1L6xKYn5TwXE2PW-U1-TGOO1KzCgOD5IIkMM1lzXDBEBYQCeL8KHWRYpzMykUmsy2HdZT8p7B1-yiLTd2enWSYHuSD5BJiTkVyLiYNPj7EXrmP43KuegFeYXS_gEte7zQz2RYQGv82dZLL4RemXQTwb5ESh30bn-rEZWxnt7pdNNNv3fY-gW2rzLv5-_nWFrYG1TIBidATPBbfdm3wODAOHT2wrdYQA-Qq18hMN49Ra3B_MPJbWcoRfrLkYNHVOzRKHOyPId0JAYWJ8tSvnHU6XLKb7dK_yd9ELxu_8V3zApfTg4J1_FYQHM3ExIrZlD8yglDCwEej-IuzWt93iSMCG9J9-m-xEjvek_IyhQC7SEslNGbip3QT3XyVIfKy_UhqtisWgjMRcFYQHqsZkgnQBe8JtzAdWKRPrCs2Fd1rs7uUStKXACvZI6Nqkj4RvC57XR4S3nKUEBZKB88frnsTXhJWTrHOPvwXgBYQCoEA1d_wrXETW8xi0E1oIOXSSdJ_Xe7WVQo8tZA8uvWRovw7b3T5711cYzGzX456wI6fW-MPcPj0OH5CueAjg5YQK5NTp2gKWuCjxCoWs4kFTcTJK-fgLlYiJJ8euEVG46omSxoIpJfcqqOxTOX6S--P4IMB0L2z1oaFvcQHcyYkRRYQDC8rM4D-vJ4kzu3e7Oa4VCm3sHk_dz_lseN2fcH_xzfGOf4_jqcsSuauGQgAqcxtXoZa-4LJ83hbjfRJJ3gYg9YQLqbZvIloGyjfHVQZxJ3Zo5NFhNhHAeinoCT6Ri_yTbmhQN0vXio3D0xFyE-LBBWdQzJSH0myNvZL3X-UWwDVT5YQHsA1BAT7_XHFUkjCKfjtkJNROLcPbQat6LMdOnGaZLME6UEukT4jBYbAkY8U8YasiZ2CuNzme1I0j7NkLbX-UlYQGrFw4lltp0AXAojHoB7uiAODh_7LBd2mj6s0LQXKj3Wu3WvCXYj-IJ4JEe6xb-ymNaIfwK4Y9vh3KdcifRlQ0hYQMqGRncvYPXYuS8OZeAl3DfBgxypi0xy9-a5LTZhTzF7JuZLEC8uzMxcuJMDcxoJR_bWRX2fHevITTaAoQ7EejlYQBnmuXaBgNhyj5XVOAxfRdmMZAAsJYQhzbc-S13zWSABQjit7s-vX8uDEEubJ9MXO2IwdldI_mLyuKwpNpkR4PxYQMzVku9QmDeOL0BeakFhGECvN_ZDBxMxwMdEfNwApAn7rIx8bsMUqlRyqMHSkbjXpsdWsqV1vbZOmqb56nIIQANYQLrGyizb1STbisWhqKi9MxBH6Z0Lwg6DOO4TkhD4BtmxvF7wwQ7i8wl62tuKj-Hxk-JMPKpFob7egBnBWyDlLaZYQCEJEa5b0pmieUkIzLej5ih5tcw3ECSSgZ2GLp7hR-KyGoq7uqZi-VG7FYt74chDat8fXQftAhzNBQO0-Q1fAylYQJw-BTnlX2JKIKbT2JhVd_bux_kgkccGbHTNQ24tWApWiYSKyG5gLvleDGtZA_z7aYNTO3gRwuE_QU3MfwXCOV1YQIhMBVgWSOJSQO2FiYjd9nRabUaY6dawGxFNcjHatmr08431Wa8EH7ikhCn2wawq7R0fB2EPeRQ32HVLStie2XxYQFTtE_dsdtjD_lxAyKIToaktfNByV61bu8UjuRw6MsFcIcDNXMfyzSQUAjsyBKoF0EynACu4dHuss35TXBx1RCRYQM4CN9Y-S5aYQjHf_ecRro82MbVVtlUDPM-wYWfmKF50ZGLqBbtSMz9CbhX9kipIpiDUdiRimoacC7ztrkX0rlpYQODnhdoGymFLCgVD0lXRi4TuN0SvakcuVZuMaBVI5MVQwb1oiXUPOdHSFZ6oiSif0g8QvGfLQOJk65t9OvE5NgxYQFPfsPGn9xL3JqhctBtWfWsckMtz37YxCt532I4TblQtKhrFNBBTgeJCNmHK0hqM40YhzBUTyPxsfEKxe0__x1NYQIKqKPImunUPV7b4gmQAt4GyQ5H8Jg7u20xiC_VigVQzjyxVSC7YVJiXflTO-Nso3Dn0CSVNVAvON-pbGkh8OjVYQDKkDn3lo0KZJefd90I8w4PPkvbvML9psiGQS-66Sms-c2miSA9ln0G0J_qrHSXecRwb3qbA88AnuO2iLmYHg4FYQGn1ggwlLvpsHG1ggjoa4yqW2XFaeE9mV2_XNZSDsZabKMCT_kss1-G0-a6aZnrYzR-HY2_3TMCgk41-5nHag-9YQCzSF5ycyigd_axNlz0GT7HzLloBUT0uFAoOceytXWveCEo1aUoeGSKGDUKvggpcAAWWX1BjMSu-h6uX5Jo8hu2FZy9pc3N1ZXJqL3ZhbGlkRnJvbW0vcmVuZGVyTWV0aG9kZy9xckNvZGVlL3R5cGU" - } -} \ No newline at end of file diff --git a/tests/fixtures/w3c/electronic-promissory-note-inoperative.json b/tests/fixtures/w3c/electronic-promissory-note-inoperative.json new file mode 100644 index 0000000..30b62a9 --- /dev/null +++ b/tests/fixtures/w3c/electronic-promissory-note-inoperative.json @@ -0,0 +1,60 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://trustvc.io/context/promissory-note.json", + "https://trustvc.io/context/render-method-context.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://trustvc.io/context/qrcode-context.json", + "https://w3id.org/security/bbs/v1" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "PROMISSORY_NOTE", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": ["PromissoryNote"], + "drawerCompanyName": "XYZ Exports Pvt. Ltd.", + "drawerCompanyNo": "CIN-XYZ1234567", + "drawerJurisdiction": "India", + "drawerWalletAddress": "0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", + "drawerPlaceOfIssue": "Mumbai, India", + "draweeCompanyName": "XYZ Imports Ltd.", + "draweeCompanyNo": "REG-XYZ9876543", + "draweeJurisdiction": "California, United States", + "draweeWalletAddress": "0xca93690bb57eeab273c796a9309246bc0fb93649", + "dueDate": "2025-06-19", + "currency": "USD", + "amount": "50,000.00", + "clause": "Payment to be made in full without set-off or counterclaim, subject to terms agreed between Drawer and Drawee.", + "signerName": "John Doe", + "signerPosition": "Chief Financial Officer", + "signerTimeStamp": "2025-06-10", + "logo": "data:image/png;base64,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", + "pNoteId": "PN-9081-2231-SGP", + "commitmentDate": "2025-12-10" + }, + "type": ["VerifiableCredential"], + "qrCode": { + "type": "TrustVCQRCode", + "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Felectronic-promissory-note-inoperative.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + }, + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { "chain": "FREE", "chainId": 101010 }, + "tokenRegistry": "0x7202363bBDb126036F7C3243Ebac310d9d145040", + "tokenId": "690426cb927b40d5d372a9d1204b26b4a965d0a56a74d467317cbc4d9a9148a2" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "issuanceDate": "2025-06-19T02:41:46.742Z", + "id": "urn:bnid:_:0198d015-d559-7777-8027-68d33915df40", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2025-08-22T04:42:28Z", + "proofPurpose": "assertionMethod", + "proofValue": "gcVZ4odizDVQO9xSiYMxKQfPIkxIYVUWV/sco4j70EGLskHGCD/zgcyaNj9d5UeQK9mWxvZYKgbQV0KZEVk43KuhJBP+WM1twNGKzzIPjVgVKOrL0czA62mRo609je3NM5x/iF1YTpwvxJMSOOneJg==", + "verificationMethod": "did:web:trustvc.github.io:did:1#keys-1" + } +} \ No newline at end of file diff --git a/tests/fixtures/w3c/invoice-expired.json b/tests/fixtures/w3c/invoice-expired.json new file mode 100644 index 0000000..09ee1ab --- /dev/null +++ b/tests/fixtures/w3c/invoice-expired.json @@ -0,0 +1,70 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://trustvc.io/context/invoice.json", + "https://trustvc.io/context/render-method-context.json", + "https://trustvc.io/context/qrcode-context.json", + "https://w3id.org/security/bbs/v1" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "INVOICE", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": ["Invoice"], + "billFromName": "ABC Exports Pvt. Ltd.", + "billFromStreetAddress": "12/F, Industrial Plaza, Near MIDC", + "billFromCity": "Navi Mumbai", + "billFromPostalCode": "400703", + "billFromPhoneNumber": "+91-22-4455-9988", + "billToName": "David Thomson", + "billToEmail": "david.thomson@example.co.uk", + "billToCompanyName": "XYZ Foods Ltd.", + "billToCompanyStreetAddress": "Unit 17, Royal Wharf, Docklands Industrial Area", + "billToCompanyCity": "London", + "billToCompanyPostalCode": "E16 2AA", + "billToCompanyPhoneNumber": "+44-20-8899-4455", + "billableItems": [ + { + "billableItemsDescription": "Organic Basmati Rice (20kg Bags)", + "billableItemsQuantity": "100", + "billableItemsUnitPrice": "125", + "billableItemsAmount": "12500" + }, + { + "billableItemsDescription": "Vacuum-Packed Almonds (10kg)", + "billableItemsQuantity": "50", + "billableItemsUnitPrice": "80", + "billableItemsAmount": "4000" + } + ], + "invoiceId": "INV-20250604-001", + "invoiceName": "Export of Organic Basmati Rice", + "date": "2025-06-04", + "customerId": "CUST-UK-55678", + "terms": "Net 30 Days", + "subtotal": "$16,500.00", + "tax": "5%", + "taxTotal": "$825.00", + "total": "$17,325.00" + }, + "type": ["VerifiableCredential"], + "qrCode": { + "type": "TrustVCQRCode", + "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Finvoice-expired.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "issuanceDate": "2025-06-09T09:36:15.971Z", + "expirationDate": "2025-06-09T11:56:12Z", + "id": "urn:bnid:_:0198d013-0fcf-7dde-a0ad-8b5ea02c7af3", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2025-08-22T04:39:26Z", + "proofPurpose": "assertionMethod", + "proofValue": "k8QwxKBS7BXAWfs1xNv8GuGrEO3FB8/pDIOyWNqI2d2wGYp/tQixwqU0M9GAHV8VNef4c84qgcFZsLSBSM2An8tsYuBoKA8SFJ/lDWfG1KE8rVGAm30irXwSs/afEDzoT2K1T+FA8pEMxuqc1YXdyg==", + "verificationMethod": "did:web:trustvc.github.io:did:1#keys-1" + } +} \ No newline at end of file diff --git a/tests/fixtures/w3c/invoice-revoked.json b/tests/fixtures/w3c/invoice-revoked.json new file mode 100644 index 0000000..3093934 --- /dev/null +++ b/tests/fixtures/w3c/invoice-revoked.json @@ -0,0 +1,79 @@ +{ + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://trustvc.io/context/invoice.json", + "https://trustvc.io/context/render-method-context.json", + "https://trustvc.io/context/qrcode-context.json", + "https://w3id.org/security/bbs/v1", + "https://w3id.org/vc/status-list/2021/v1" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "INVOICE", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialStatus": [ + { + "id": "https://trustvc.github.io/did/credentials/statuslist/sample#2", + "statusListCredential": "https://trustvc.github.io/did/credentials/statuslist/sample", + "statusListIndex": "2", + "statusPurpose": "revocation", + "type": "StatusList2021Entry" + } + ], + "credentialSubject": { + "type": ["Invoice"], + "billFromName": "ABC Exports Pvt. Ltd.", + "billFromStreetAddress": "12/F, Industrial Plaza, Near MIDC", + "billFromCity": "Navi Mumbai", + "billFromPostalCode": "400703", + "billFromPhoneNumber": "+91-22-4455-9988", + "billToName": "David Thomson", + "billToEmail": "david.thomson@example.co.uk", + "billToCompanyName": "XYZ Foods Ltd.", + "billToCompanyStreetAddress": "Unit 17, Royal Wharf, Docklands Industrial Area", + "billToCompanyCity": "London", + "billToCompanyPostalCode": "E16 2AA", + "billToCompanyPhoneNumber": "+44-20-8899-4455", + "billableItems": [ + { + "billableItemsDescription": "Organic Basmati Rice (20kg Bags)", + "billableItemsQuantity": "100", + "billableItemsUnitPrice": "125", + "billableItemsAmount": "12500" + }, + { + "billableItemsDescription": "Vacuum-Packed Almonds (10kg)", + "billableItemsQuantity": "50", + "billableItemsUnitPrice": "80", + "billableItemsAmount": "4000" + } + ], + "invoiceId": "INV-20250604-001", + "invoiceName": "Export of Organic Basmati Rice", + "date": "2025-06-04", + "customerId": "CUST-UK-55678", + "terms": "Net 30 Days", + "subtotal": "$16,500.00", + "tax": "5%", + "taxTotal": "$825.00", + "total": "$17,325.00" + }, + "type": ["VerifiableCredential"], + "qrCode": { + "type": "TrustVCQRCode", + "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Finvoice-revoked.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "issuanceDate": "2025-06-09T09:36:15.971Z", + "id": "urn:bnid:_:0198cc98-e733-7889-a56a-6586989b658e", + "proof": { + "type": "BbsBlsSignature2020", + "created": "2025-08-21T12:27:10Z", + "proofPurpose": "assertionMethod", + "proofValue": "t6MiyaBT0FkPkM2/vP8NdIvocdjx+09fYMFtIJxc2+xKzA0d8P7srdEaAu1xpYHUclQLD8rTJuP6ihzlME4rh1mbz/6PepuxJy7uSbc+gxBaa7IPiDOkLYL+OjOQdh/JzEPUpryTHlswSDz1qLmDug==", + "verificationMethod": "did:web:trustvc.github.io:did:1#keys-2" + } +} \ No newline at end of file diff --git a/tests/main.test.ts b/tests/main.test.ts index 1a61c32..9bf7c84 100644 --- a/tests/main.test.ts +++ b/tests/main.test.ts @@ -537,9 +537,11 @@ describe('trustvc-cli', () => { let signaleSuccessSpy: MockedFunction; let readJsonFileMock: MockedFunction; let withAsyncCaptureConsoleWarnMock: MockedFunction; + let getSupportedNetworkMock: MockedFunction; + let getSupportedNetworkNameFromIdMock: MockedFunction; const W3C_SIGNED_VC_DEFAULT_FIXTURE_PATH = './tests/fixtures/w3c/certificate-of-origin-default.json'; - const OA_SIGNED_VC_REVOKED_FIXTURE_PATH = './tests/fixtures/oa/certificate-of-origin-revoked.json'; + const OA_SIGNED_VC_REVOKED_FIXTURE_PATH = './tests/fixtures/oa/invoice-revoked.json'; beforeEach(async () => { vi.resetAllMocks(); @@ -557,6 +559,17 @@ describe('trustvc-cli', () => { withAsyncCaptureConsoleWarnMock.mockImplementation(((fn: any) => { return (actualUtils.withAsyncCaptureConsoleWarn as any)(fn); }) as any); + + getSupportedNetworkMock = utils.getSupportedNetwork as MockedFunction; + getSupportedNetworkMock.mockImplementation(((networkCmdName: string) => { + return (actualUtils.getSupportedNetwork as any)(networkCmdName); + }) as any); + + getSupportedNetworkNameFromIdMock = + utils.getSupportedNetworkNameFromId as MockedFunction; + getSupportedNetworkNameFromIdMock.mockImplementation(((networkId: number) => { + return (actualUtils.getSupportedNetworkNameFromId as any)(networkId); + }) as any); }); it( @@ -581,7 +594,7 @@ describe('trustvc-cli', () => { expect(signaleSuccessSpy).toHaveBeenCalledWith('DOCUMENT_INTEGRITY: VALID'); expect(signaleSuccessSpy).toHaveBeenCalledWith('ISSUER_IDENTITY: VALID'); - expect(signalWarnSpy).toHaveBeenCalledWith(expect.stringContaining('DOCUMENT_STATUS: ERROR')); + expect(signalWarnSpy).toHaveBeenCalledWith(expect.stringContaining('DOCUMENT_STATUS: INVALID')); }, ); }); From baad489e83ca0ba54678a086754cde6b68d7e8d1 Mon Sep 17 00:00:00 2001 From: pennhan-dex Date: Fri, 16 Jan 2026 14:39:12 +0800 Subject: [PATCH 07/18] update Readme --- README.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/README.md b/README.md index ce87216..91b32a8 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ A command-line interface tool for working with Decentralized Identifiers (DIDs), - ✅ **Key Pair Generation**: Generate cryptographic key pairs with Multikey format - ✅ **DID Management**: Create and manage did:web identifiers - ✅ **Sign Verifiable Credentials**: Sign verifiable credentials +- ✅ **Verify Documents**: Verify documents - ✅ **Token Registry**: Mint tokens to blockchain-based token registries - ✅ **Credential Status**: Create and update W3C credential status lists - ✅ **W3C Standards**: Compliant with latest W3C DID and Verifiable Credentials specifications @@ -28,6 +29,7 @@ This CLI leverages the TrustVC package: - [`trustvc key-pair-generation`](#trustvc-key-pair-generation) - [`trustvc did-web`](#trustvc-did-web) - [`trustvc w3c-sign`](#trustvc-w3c-sign) + - [`trustvc verify`](#trustvc-verify) - [`trustvc credential-status-create`](#trustvc-credential-status-create) - [`trustvc credential-status-update`](#trustvc-credential-status-update) - [`trustvc mint`](#trustvc-mint) @@ -61,6 +63,9 @@ trustvc did-web # Sign a verifiable credential trustvc w3c-sign +# Verify a document +trustvc verify + # Create a credential status list trustvc credential-status-create @@ -79,6 +84,8 @@ trustvc mint - **Sign Verifiable Credentials**: The CLI uses the `w3cSign` function from `@trustvc/trustvc` to sign verifiable credentials with the provided did:web identifier. +- **Verify Documents**: The CLI uses the `verifyDocument` function from `@trustvc/trustvc` to verify documents. This supports both W3C and OA standards. For W3C documents, both transferable and non-transferable documents are also supported. + - **Credential Status Management**: The CLI provides commands to create and update W3C credential status lists for managing the revocation status of verifiable credentials. - **Token Registry Minting**: The CLI uses the `mint` function from `@trustvc/trustvc` to mint document hashes to blockchain-based token registries, supporting multiple networks including Ethereum, Polygon, XDC, Stability, and Astron. @@ -141,6 +148,28 @@ Signs a verifiable credential using a did:web identifier. trustvc w3c-sign ``` +### `trustvc verify` + +Verifies a verifiable credential document and shows expiration warning if the document is expired. This supports both W3C (transferable and non-transferable documents) and OA standards. + +**Interactive prompts:** +- Path to verifiable credential document + +**Output:** Results are directly displayed in the CLI +``` +// Example +info: Verifying W3C document... +warning: The document credential has expired. +success: DOCUMENT_INTEGRITY: VALID +success: DOCUMENT_STATUS: INVALID [Document has been revoked.] +success: ISSUER_IDENTITY: VALID +``` + +**Example:** +```sh +trustvc verify +``` + ### `trustvc credential-status-create` Creates a new W3C credential status list for managing the revocation status of verifiable credentials. @@ -283,6 +312,7 @@ npm test │ │ └── credentialStatus/ │ │ ├── create.ts # Create credential status │ │ └── update.ts # Update credential status +│ │ └── verify.ts # Verify document │ ├── utils/ │ │ ├── wallet.ts # Wallet and signer utilities │ │ ├── networks.ts # Network configurations @@ -301,6 +331,7 @@ npm test │ │ └── credentialStatus/ │ │ ├── create.test.ts │ │ └── update.test.ts +│ │ └── verify.test.ts │ └── main.test.ts ├── package.json └── README.md From a899d460d3d53529077f2e97340c66adb817cb15 Mon Sep 17 00:00:00 2001 From: pennhan-dex Date: Fri, 16 Jan 2026 14:54:54 +0800 Subject: [PATCH 08/18] resolve conditional bug on value 0 --- src/commands/verify.ts | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/commands/verify.ts b/src/commands/verify.ts index 10212cf..11e80e0 100644 --- a/src/commands/verify.ts +++ b/src/commands/verify.ts @@ -88,12 +88,17 @@ const verifyW3CDocument = async ( signedVC: SignedVerifiableCredential ): Promise<{ result: VerificationFragment[]; warnings: unknown[][] }> => { signale.info('Verifying W3C document...'); - if (isTransferableRecord(signedVC)) { - const credentialStatus = getTransferableRecordsCredentialStatus(signedVC); - const chainId = Number(credentialStatus.tokenNetwork.chainId); - const providerForTrustVC = resolveProviderForChainId(chainId); - return await withAsyncCaptureConsoleWarn(() => verifyDocument(signedVC, { provider: providerForTrustVC })); + const credentialStatus = getTransferableRecordsCredentialStatus(signedVC); + + if (credentialStatus.tokenNetwork.chainId != null) { + const chainId = Number(credentialStatus.tokenNetwork.chainId); + const providerForTrustVC = resolveProviderForChainId(chainId); + return await withAsyncCaptureConsoleWarn(() => verifyDocument(signedVC, { provider: providerForTrustVC })); + } else { + signale.error('Could not find blockchain information'); + throw new Error('Could not find blockchain information'); + } } else { return await withAsyncCaptureConsoleWarn(() => verifyDocument(signedVC)); } @@ -109,9 +114,8 @@ const verifyOpenAttestationDocument = async ( signale.warn(`The document credential has expired.`); } - const chainId = Number(documentData.network?.chainId); - - if (chainId) { + if (documentData.network?.chainId != null) { + const chainId = Number(documentData.network?.chainId); const providerForTrustVC = resolveProviderForChainId(chainId); return await verifyDocument(signedVC, { provider: providerForTrustVC }); } else { From abdcea4901af15916bdbd94c3a963de00aa8ab66 Mon Sep 17 00:00:00 2001 From: pennhan-dex Date: Fri, 16 Jan 2026 15:03:19 +0800 Subject: [PATCH 09/18] clean up tests --- tests/main.test.ts | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/tests/main.test.ts b/tests/main.test.ts index 9bf7c84..1351472 100644 --- a/tests/main.test.ts +++ b/tests/main.test.ts @@ -536,7 +536,7 @@ describe('trustvc-cli', () => { let signalWarnSpy: MockedFunction; let signaleSuccessSpy: MockedFunction; let readJsonFileMock: MockedFunction; - let withAsyncCaptureConsoleWarnMock: MockedFunction; + let withAsyncCaptureConsoleWarnMock: MockedFunction; let getSupportedNetworkMock: MockedFunction; let getSupportedNetworkNameFromIdMock: MockedFunction; @@ -550,26 +550,18 @@ describe('trustvc-cli', () => { signaleSuccessSpy = signale.success as MockedFunction; const actualUtils = await vi.importActual('../src/utils'); - readJsonFileMock = utils.readJsonFile as MockedFunction; - readJsonFileMock.mockImplementation(((filePath: string, fileType: string) => { - return (actualUtils.readJsonFile as any)(filePath, fileType); - }) as any); - withAsyncCaptureConsoleWarnMock = utils.withAsyncCaptureConsoleWarn as MockedFunction; - withAsyncCaptureConsoleWarnMock.mockImplementation(((fn: any) => { - return (actualUtils.withAsyncCaptureConsoleWarn as any)(fn); - }) as any); + readJsonFileMock = utils.readJsonFile as MockedFunction; + readJsonFileMock.mockImplementation(actualUtils.readJsonFile); getSupportedNetworkMock = utils.getSupportedNetwork as MockedFunction; - getSupportedNetworkMock.mockImplementation(((networkCmdName: string) => { - return (actualUtils.getSupportedNetwork as any)(networkCmdName); - }) as any); - - getSupportedNetworkNameFromIdMock = - utils.getSupportedNetworkNameFromId as MockedFunction; - getSupportedNetworkNameFromIdMock.mockImplementation(((networkId: number) => { - return (actualUtils.getSupportedNetworkNameFromId as any)(networkId); - }) as any); + getSupportedNetworkMock.mockImplementation(actualUtils.getSupportedNetwork); + + getSupportedNetworkNameFromIdMock = utils.getSupportedNetworkNameFromId as MockedFunction; + getSupportedNetworkNameFromIdMock.mockImplementation(actualUtils.getSupportedNetworkNameFromId); + + withAsyncCaptureConsoleWarnMock = utils.withAsyncCaptureConsoleWarn as MockedFunction; + withAsyncCaptureConsoleWarnMock.mockImplementation((fn: any) => actualUtils.withAsyncCaptureConsoleWarn(fn)); }); it( From 4fcddd7733697aa7693f5bce2dc76fc3867569f1 Mon Sep 17 00:00:00 2001 From: pennhan-dex Date: Mon, 19 Jan 2026 22:25:19 +0800 Subject: [PATCH 10/18] update unit tests with OA v3 fixtures --- src/commands/verify.ts | 69 ++++++++------- src/types.ts | 8 +- tests/commands/verify.test.ts | 49 ++++++++--- .../oa/bill-of-lading-OA-DNS-DID-V3.json | 75 ++++++++++++++++ .../oa/bill-of-lading-OA-DNS-TXT-V3.json | 86 +++++++++++++++++++ 5 files changed, 243 insertions(+), 44 deletions(-) create mode 100644 tests/fixtures/oa/bill-of-lading-OA-DNS-DID-V3.json create mode 100644 tests/fixtures/oa/bill-of-lading-OA-DNS-TXT-V3.json diff --git a/src/commands/verify.ts b/src/commands/verify.ts index 11e80e0..638599e 100644 --- a/src/commands/verify.ts +++ b/src/commands/verify.ts @@ -19,6 +19,7 @@ import { } from '@trustvc/trustvc'; import signale from 'signale'; import type { Provider as V5Provider } from '@ethersproject/providers'; +import { FragmentType } from '../types'; export const command = 'verify'; export const describe = 'Verify a document signed using w3c or OpenAttestation'; @@ -52,44 +53,29 @@ export const promptQuestions = async (): Promise => }; export const verify = async (signedVC: SignedVerifiableCredential) => { - const isOpenAttestationV2 = isWrappedV2Document(signedVC); - const isOpenAttestationV3 = isWrappedV3Document(signedVC); - const isW3C = !isOpenAttestationV2 && !isOpenAttestationV3; + const isOpenAttestation = isWrappedV2Document(signedVC) || isWrappedV3Document(signedVC); - let result: VerificationFragment[]; - let warnings: unknown[][] | undefined; - - if (isW3C) { - ({ result, warnings } = await verifyW3CDocument(signedVC)); - } else { - result = await verifyOpenAttestationDocument(signedVC); - } + const { result, warnings } = isOpenAttestation + ? { result: await verifyOpenAttestationDocument(signedVC), warnings: undefined } + : await verifyW3CDocument(signedVC); if (warnings) { handleExpiredCredentialWarning(warnings); } - logResultStatus(getResultFromFragment('DOCUMENT_INTEGRITY', result)); - logResultStatus(getResultFromFragment('DOCUMENT_STATUS', result)); - logResultStatus(getResultFromFragment('ISSUER_IDENTITY', result)); + logResultStatus(getResultFromFragment(FragmentType.DOCUMENT_INTEGRITY, result)); + logResultStatus(getResultFromFragment(FragmentType.DOCUMENT_STATUS, result)); + logResultStatus(getResultFromFragment(FragmentType.ISSUER_IDENTITY, result)); }; // ==== Helper Functions ==== -type FragmentType = 'DOCUMENT_INTEGRITY' | 'DOCUMENT_STATUS' | 'ISSUER_IDENTITY'; - -const resolveProviderForChainId = (chainId: number): V5Provider => { - const chainName = getSupportedNetworkNameFromId(chainId); - const provider = getSupportedNetwork(chainName).provider(); - return provider as unknown as V5Provider; -}; - const verifyW3CDocument = async ( signedVC: SignedVerifiableCredential ): Promise<{ result: VerificationFragment[]; warnings: unknown[][] }> => { signale.info('Verifying W3C document...'); if (isTransferableRecord(signedVC)) { - const credentialStatus = getTransferableRecordsCredentialStatus(signedVC); + const credentialStatus = getTransferableRecordsCredentialStatus(signedVC); if (credentialStatus.tokenNetwork.chainId != null) { const chainId = Number(credentialStatus.tokenNetwork.chainId); @@ -109,22 +95,43 @@ const verifyOpenAttestationDocument = async ( ): Promise => { signale.info('Verifying OpenAttestation document...'); const documentData = getDocumentData(signedVC); + checkExpiration(signedVC); + if (isWrappedV2Document(signedVC)) { + const chainId = Number(documentData.network?.chainId); + return await verifyWithProvider(signedVC, chainId); + } - if (documentData.expirationDate && documentData.expirationDate < new Date().toISOString()) { - signale.warn(`The document credential has expired.`); + if (isWrappedV3Document(signedVC)) { + if (isTransferableRecord(signedVC)) { + const chainId = Number(documentData.network?.chainId); + return await verifyWithProvider(signedVC, chainId); + } + return await verifyDocument(signedVC); } - if (documentData.network?.chainId != null) { - const chainId = Number(documentData.network?.chainId); - const providerForTrustVC = resolveProviderForChainId(chainId); - return await verifyDocument(signedVC, { provider: providerForTrustVC }); - } else { - signale.error('Could not find blockchain information'); + throw new Error("Document is not a valid OpenAttestation document"); +}; + +const resolveProviderForChainId = (chainId: number): V5Provider => { + const chainName = getSupportedNetworkNameFromId(chainId); + return getSupportedNetwork(chainName).provider() as unknown as V5Provider; +}; + +const verifyWithProvider = async (signedVC: any, chainId: number | undefined) => { + if (chainId == null) { throw new Error('Could not find blockchain information'); } + const provider = resolveProviderForChainId(Number(chainId)); + return await verifyDocument(signedVC, { provider }); }; +const checkExpiration = (signedVC: WrappedOrSignedOpenAttestationDocument) => { + const documentData = getDocumentData(signedVC); + if (documentData.expirationDate && documentData.expirationDate < new Date().toISOString()) { + signale.warn('The document credential has expired.'); + } +}; export const getResultFromFragment = (fragmentType: FragmentType, resultFragments: VerificationFragment[]): VerificationFragmentWithData => { const fragment = resultFragments.find((fragment: VerificationFragment) => fragment.type === fragmentType && fragment.status !== 'SKIPPED'); diff --git a/src/types.ts b/src/types.ts index 1986c47..ce5d754 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,5 +1,5 @@ import { credentialStatus, issuer, RawVerifiableCredential } from '@trustvc/trustvc'; -import { GasOption, NetworkOption, RpcUrlOption, WalletOrSignerOption } from './utils'; +import { GasOption, NetworkAndWalletSignerOption, NetworkOption, RpcUrlOption, WalletOrSignerOption } from './utils'; export type SignInput = { credential: RawVerifiableCredential; @@ -13,6 +13,12 @@ export type DidInput = { outputPath: string; }; +export enum FragmentType { + DOCUMENT_INTEGRITY = 'DOCUMENT_INTEGRITY', + DOCUMENT_STATUS = 'DOCUMENT_STATUS', + ISSUER_IDENTITY = 'ISSUER_IDENTITY' +} + export type KeyPairGenerateInput = { encAlgo: typeof issuer.VerificationType; seedBase58: string; diff --git a/tests/commands/verify.test.ts b/tests/commands/verify.test.ts index 983bf9d..107f8ec 100644 --- a/tests/commands/verify.test.ts +++ b/tests/commands/verify.test.ts @@ -4,6 +4,7 @@ import { beforeEach, describe, expect, it, MockedFunction, vi } from 'vitest'; import { promptQuestions, verify } from '../../src/commands/verify'; import { SignedVerifiableCredential } from '@trustvc/trustvc'; import { getResultFromFragment, handleExpiredCredentialWarning, logResultStatus } from '../../src/commands/verify'; +import { FragmentType } from '../../src/types'; // Different types of Credentials for W3C (Non-Transferable Records and Transferable Records) const W3C_SIGNED_VC_BILL_OF_LADING_OPERATIVE_FIXTURE_PATH = path.resolve( @@ -41,6 +42,15 @@ const OA_SIGNED_VC_ELECTRONIC_PROMISSORY_NOTE_INOPERATIVE_FIXTURE_PATH = path.re 'tests/fixtures/oa/electronic-promissory-note-inoperative.json', ); +const OA_SIGNED_VC_BILL_OF_LADING_DNS_DID_V3_FIXTURE_PATH = path.resolve( + process.cwd(), + 'tests/fixtures/oa/bill-of-lading-OA-DNS-DID-V3.json', +); + +const OA_SIGNED_VC_BILL_OF_LADING_DNS_TXT_V3_FIXTURE_PATH = path.resolve( + process.cwd(), + 'tests/fixtures/oa/bill-of-lading-OA-DNS-TXT-V3.json', +); vi.mock('@inquirer/prompts'); @@ -76,21 +86,21 @@ describe('verify', () => { describe('getResultFromFragment', () => { it('should return the first non-SKIPPED fragment with matching type', () => { const fragments: any[] = [ - { type: 'DOCUMENT_STATUS', status: 'SKIPPED' }, - { type: 'DOCUMENT_STATUS', status: 'VALID', data: { ok: true } }, + { type: FragmentType.DOCUMENT_STATUS, status: 'SKIPPED' }, + { type: FragmentType.DOCUMENT_STATUS, status: 'VALID', data: { ok: true } }, ]; - const fragment = getResultFromFragment('DOCUMENT_STATUS', fragments as any); - expect(fragment).toMatchObject({ type: 'DOCUMENT_STATUS', status: 'VALID' }); + const fragment = getResultFromFragment(FragmentType.DOCUMENT_STATUS, fragments as any); + expect(fragment).toMatchObject({ type: FragmentType.DOCUMENT_STATUS, status: 'VALID' }); }); it('should throw when no matching non-SKIPPED fragment exists', () => { const fragments: any[] = [ - { type: 'DOCUMENT_STATUS', status: 'SKIPPED' }, - { type: 'DOCUMENT_INTEGRITY', status: 'VALID' }, + { type: FragmentType.DOCUMENT_STATUS, status: 'SKIPPED' }, + { type: FragmentType.DOCUMENT_INTEGRITY, status: 'VALID' }, ]; - expect(() => getResultFromFragment('ISSUER_IDENTITY', fragments as any)).toThrow( + expect(() => getResultFromFragment(FragmentType.ISSUER_IDENTITY, fragments as any)).toThrow( 'ISSUER_IDENTITY could not be verified.', ); }); @@ -98,7 +108,7 @@ describe('verify', () => { describe('logResultStatus', () => { it('should log success when fragment status is VALID', () => { - logResultStatus({ type: 'DOCUMENT_INTEGRITY', status: 'VALID' } as any); + logResultStatus({ type: FragmentType.DOCUMENT_INTEGRITY, status: 'VALID' } as any); expect(signaleSuccessMock).toHaveBeenCalledWith('DOCUMENT_INTEGRITY: VALID'); expect(signaleWarnMock).not.toHaveBeenCalled(); }); @@ -198,25 +208,35 @@ describe('verify', () => { expectedWarning: 'none', }, { - name: 'bill-of-lading operative oa', + name: 'bill-of-lading operative V2 oa', filePath: OA_SIGNED_VC_BILL_OF_LADING_OPERATIVE_FIXTURE_PATH, expectedWarning: 'none', }, { - name: 'invoice expired oa', + name: 'invoice expired V2 oa', filePath: OA_SIGNED_VC_INVOICE_EXPIRED_FIXTURE_PATH, expectedWarning: 'expired', }, { - name: 'invoice revoked oa', + name: 'invoice revoked V2 oa', filePath: OA_SIGNED_VC_INVOICE_REVOKED_FIXTURE_PATH, expectedWarning: 'revoked', }, { - name: 'electronic-promissory-note inoperative oa', + name: 'electronic-promissory-note inoperative V2 oa', filePath: OA_SIGNED_VC_ELECTRONIC_PROMISSORY_NOTE_INOPERATIVE_FIXTURE_PATH, expectedWarning: 'none', }, + { + name: 'bill-of-lading operative V3 oa DNS TXT', + filePath: OA_SIGNED_VC_BILL_OF_LADING_DNS_TXT_V3_FIXTURE_PATH, + expectedWarning: 'none', + }, + { + name: 'bill-of-lading operative V3 oa DNS DID', + filePath: OA_SIGNED_VC_BILL_OF_LADING_DNS_DID_V3_FIXTURE_PATH, + expectedWarning: 'tampered', + } ]; it.each(testCases)( @@ -249,6 +269,11 @@ describe('verify', () => { expect(warnMessages.join('\n')).toContain('The document credential has expired.'); } + if (expectedWarning === 'tampered') { + expect(warnMessages.length).toBeGreaterThan(0); + expect(warnMessages.join('\n')).toContain('Document has been tampered with'); + } + if (expectedWarning === 'none') { expect(warnMessages.length).toBe(0); expect(successMessages).toEqual( diff --git a/tests/fixtures/oa/bill-of-lading-OA-DNS-DID-V3.json b/tests/fixtures/oa/bill-of-lading-OA-DNS-DID-V3.json new file mode 100644 index 0000000..81312bc --- /dev/null +++ b/tests/fixtures/oa/bill-of-lading-OA-DNS-DID-V3.json @@ -0,0 +1,75 @@ +{ + "version": "https://schema.openattestation.com/3.0/schema.json", + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", + "https://schemata.openattestation.com/io/tradetrust/bill-of-lading/1.0/bill-of-lading-context.json" + ], + "credentialSubject": { + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "shipper": { + "address": { + "street": "456 Orchard Road", + "country": "SG" + } + }, + "consignee": { + "name": "TradeTrust" + }, + "notifyParty": { + "name": "TrustVC" + }, + "packages": [ + { + "description": "1 Pallet", + "weight": "1", + "measurement": "KG" + } + ], + "blNumber": "20240315", + "scac": "20240315" + }, + "openAttestationMetadata": { + "template": { + "type": "EMBEDDED_RENDERER", + "name": "BILL_OF_LADING", + "url": "https://generic-templates.tradetrust.io" + }, + "proof": { + "type": "OpenAttestationProofMethod", + "method": "DID", + "value": "did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90#controller", + "revocation": { + "type": "NONE" + } + }, + "identityProof": { + "type": "DNS-DID", + "identifier": "example.tradetrust.io" + } + }, + "issuanceDate": "2021-12-03T12:19:52Z", + "expirationDate": "2029-12-03T12:19:52Z", + "issuer": { + "id": "https://example.tradetrust.io", + "name": "DEMO TOKEN REGISTRY", + "type": "OpenAttestationIssuer" + }, + "type": [ + "VerifiableCredential", + "OpenAttestationCredential" + ], + "proof": { + "type": "OpenAttestationMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "8f832ec1d27e09b2530cd051c9acea960971c238a3627369f33cdc58af9548cd", + "proofs": [], + "merkleRoot": "8f832ec1d27e09b2530cd051c9acea960971c238a3627369f33cdc58af9548cd", + "salts": "W3sidmFsdWUiOiI2MmZjMzg5NWVmZjg1ODI5Mjc1YmY5MzQxMzI4N2QwY2NjNDliYTcyY2VhOWM1NTA2NjFjYzk4YTA1YTczNjU0IiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiYzI1NWZhZmFkNWQ2YmFlODE3YWJmNDExOGVmZDMwODRiNDMwOTIyZjE4MDU2OGE2NmY4ZDFjZWUxMTFjZDA3NyIsInBhdGgiOiJAY29udGV4dFswXSJ9XQ==", + "privacy": { + "obfuscated": [] + }, + "key": "did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90#controller", + "signature": "0x836a2547654da43f01641b3a0efff6797adc7e8b806d65cb9c67e25b119c70c34aa4c73a14d8138f52c05f6f7e1048ead225c85eb981fac8c2207895e48f14a91c" + } +} diff --git a/tests/fixtures/oa/bill-of-lading-OA-DNS-TXT-V3.json b/tests/fixtures/oa/bill-of-lading-OA-DNS-TXT-V3.json new file mode 100644 index 0000000..7f59bcd --- /dev/null +++ b/tests/fixtures/oa/bill-of-lading-OA-DNS-TXT-V3.json @@ -0,0 +1,86 @@ +{ + "version": "https://schema.openattestation.com/3.0/schema.json", + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", + "https://schemata.tradetrust.io/io/tradetrust/bill-of-lading/1.0/bill-of-lading-context.json" + ], + "type": [ + "VerifiableCredential", + "OpenAttestationCredential" + ], + "issuer": { + "id": "https://example.com", + "name": "Demo token registry", + "type": "OpenAttestationIssuer" + }, + "issuanceDate": "2010-01-01T19:23:24Z", + "openAttestationMetadata": { + "template": { + "type": "EMBEDDED_RENDERER", + "name": "BILL_OF_LADING", + "url": "https://generic-templates.tradetrust.io" + }, + "proof": { + "type": "OpenAttestationProofMethod", + "method": "TOKEN_REGISTRY", + "value": "0x71D28767662cB233F887aD2Bb65d048d760bA694" + }, + "identityProof": { + "type": "DNS-TXT", + "identifier": "example.tradetrust.io" + } + }, + "credentialSubject": { + "name": "TradeTrust Bill of Lading v3", + "blNumber": "123", + "scac": "DEMO", + "carrierName": "Demo Carrier", + "shipper": { + "name": "Demo Shipper", + "address": { + "street": "One North", + "country": "Singapore" + } + }, + "consignee": { + "name": "Demo Consignee" + }, + "notifyParty": { + "name": "Demo Notify" + }, + "vessel": "1", + "voyageNo": "100", + "portOfLoading": "Singapore Port", + "portOfDischarge": "China Port", + "placeOfReceipt": "Beijing", + "placeOfDelivery": "Singapore", + "packages": [ + { + "description": "Green Apples", + "weight": "20", + "measurement": "100" + } + ], + "links": { + "self": { + "href": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.openattestation.com%2Fstatic%2Fdocuments%2Ftradetrust%2Fv3%2Febl-stability.json%22%2C%22permittedActions%22%3A%5B%22VIEW%22%5D%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%22%2C%20%22chainId%22%3A%20%22101010%22%7D%7D" + } + } + }, + "network": { + "chain": "FREE", + "chainId": "101010" + }, + "proof": { + "type": "OpenAttestationMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "3569b4d361b452af81fcff075f6df202ed6ffa3e58223f3bb43cc55a54968505", + "proofs": [], + "merkleRoot": "3569b4d361b452af81fcff075f6df202ed6ffa3e58223f3bb43cc55a54968505", + "salts": "W3sidmFsdWUiOiI5MWQxYmMwNzc4NjhmODEyMTYwMGRlMjFjMDEzYWIwNTA0YWM5NGM5MmQ4OTQ0YThmN2ViYzcxNTYyMjkwZGRhIiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiM2U1ODUyMzQ0NDA4YWVhYTE1MmI5Y2I2NjA3YmRjNDFhN2YzNDk4NTI5MDQ3YzA5MmI1ZDZlZDQwMzUxZmQyNyIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiJiNjA3MWFhYjM1ZTMxZTBjMmI2ZjM1ODI5ZWMyMDBhNzVlYjc4ZDdiNDlmMjQ5YzAyMDIyM2VlODIxN2VhOWUzIiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6ImVkNTlkMTNiOTdhZWJiNTViNGRkY2YxNDM2ZGU3MjIwNGU3ZGE4NjdjY2NmZDgxYmIwMjgyODZhYWNhMmI0ZDkiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiNWUzNzVjMzhkNmI3ZDhhNGI2NmM3ZDAzNGJhMjM4Y2U1ODBjZTA2MzZmMWJiNmVlMWRiNDkyNTMyODNjNDQwNyIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6IjFkN2MxMTMyZDE5YTViZTFhMGQ4MDU1M2U5NDA1YzNmZWQ3YWZkMjkzM2Y0NjI5OGJmNDJmODgwYzgyMjg4NTEiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiJiMmMxOTFlNDFiMzNlMDViM2FmMTU0N2JkODZhYTlmNGFlZGI3NjViMjk2YWVlZDZmY2I5ZTBlNzhmY2JmYmMwIiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiJjYmM0YmEwYWYwYzMyYmJmNzdiNzJjN2Y1Njc3NTBhZTYxOWJhZjRlY2I5ZTZlYzE0ZTkwYTFhYTIxZmIxMmY4IiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6ImJkMzZkNDc0OGM3MTRiNWNlOWZkOTllMzgyNTljMWIyZDI3YWMxNjg2YmM5YTQxNGNhYWE5YTRhMDE4OGUyYWYiLCJwYXRoIjoiaXNzdWVyLnR5cGUifSx7InZhbHVlIjoiN2M4OWVlOTJhYmYyNzEyOWE4MmY2ZTU3NDczYTU1YWI5MjAwOWQ4YzM2NmM2NTQ1NjU5ZWNjODBmMGMxMDQ4NSIsInBhdGgiOiJpc3N1YW5jZURhdGUifSx7InZhbHVlIjoiYWY4ZGQ1YWY1MTEzMDg3YzgzNzMyZDNkMTliYjIxYzJjYjdkMTQ5M2Q0MjRjYjBmOGE3ZDhmODAyOGE3MWE4OCIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS50eXBlIn0seyJ2YWx1ZSI6IjJmOTRlMjBkMDExNmNmMDUxOWM4YjM1OWYzYTYxYzAzOWMwNzc1ZWMwNzdhZTE2NGUzNWRlOTY2MTAzYTA4MGMiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiJjYjliYzQxYzI4NDM1ZTU0ZWZlMzRiNjIzODRhNzkzMGU0ZGJhNThjMTYwNmU3MWFhM2QxYzUzODIzZjU0NWNhIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnVybCJ9LHsidmFsdWUiOiJhNzc0MDg2YjAyMWMyYTk1Mzc3NDg5ZmQxYjhkMjc4ZmE5NWRmNDc4ODM1OTY4ODVkYzhmYWI4MzA4YmQ4ZGNmIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnByb29mLnR5cGUifSx7InZhbHVlIjoiNTVlYThlZDI1MDg5N2E3MDRjYzMyZTk2N2MwMTZiZjE0M2ZmYWNiYjUwOWRiOTQzMWRiNTQxYWYyMDk4ZTFhMyIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi5tZXRob2QifSx7InZhbHVlIjoiOWYyMjZiNjhlZTMwNjc5ODU0YjU0OWVkZTFlMTFjMzE1OGUzNDljOWE5YTlkZTJmZDhkZTAwZWQ4ZGEyY2ZkZSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi52YWx1ZSJ9LHsidmFsdWUiOiJmMzhkZTI1MzFkMDhhNDA5MDEyYzU3ZDUwMDc0NWNkNTQwNmU5YjY4MDg4ZTQwZmY3MDIyZTc0NWUzOTc2MWJiIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLmlkZW50aXR5UHJvb2YudHlwZSJ9LHsidmFsdWUiOiJiM2Y5NjE4NGYyNTFmNzg2Y2Q5OTNlOGYwNzZiZWY2NWI5OTQxODlmNmJmNWYwZTdkNWZhZTA1ODM3NGUyZjk4IiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLmlkZW50aXR5UHJvb2YuaWRlbnRpZmllciJ9LHsidmFsdWUiOiI5MDI0MDFjM2IyNTgwZjRhYzhkYTc0MTdkNGY5YmU4MTUyZjZjMGM3OGIzNjU4NjU1YjFjYTFhNGNiODZhOGRkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0Lm5hbWUifSx7InZhbHVlIjoiMzIwMzQzMjE5Yzk5ODg2NWQ4MjA2MjI2MTE4MWQ0ODE3ZDk3M2NlNmZlZDNhMzE2NGNjOWYxYTQwY2MyZTljOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5ibE51bWJlciJ9LHsidmFsdWUiOiI1NzU4MTZjMDlhOWE3NzJiNjMyZjJiMDU1MmYyYjc0NmFmYmJkY2JhZDQ1ZmRhNjY2YjMxMjQzYzBlYjY2YjgyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnNjYWMifSx7InZhbHVlIjoiYWVjMDg0Mjc2MmRkZGQ0OThjMDAxN2ViYWE2NmQ2N2VlNDY2Y2Y5OTZlZTI4YTkwZDE5NmNlMGYwM2NiOGQyNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jYXJyaWVyTmFtZSJ9LHsidmFsdWUiOiJjNTQ3MzE2M2JjM2I5NWUxM2NkMGY2MzdmNGNjN2U2ZmY3YTY5M2NkOGE5ZGRlMDlhYzI0MTljODJiYTk1YmZhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnNoaXBwZXIubmFtZSJ9LHsidmFsdWUiOiIwZWQ0NjJjZDBkMDM2YWVhZjk3N2Q1ZTRlMWViZDM0ZGIzYjdjYTE0YzU0MWE5ODMxOTYwNGMxMWI0MzYwNTgxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnNoaXBwZXIuYWRkcmVzcy5zdHJlZXQifSx7InZhbHVlIjoiODU5ZDYyYzdkNDU4NzA3MGFhYzIwYjA4NDBhMzczZmQxOTRmODdmNmM5M2I5NmQ1OGY0M2E2Nzg5N2U3NGVlMiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5zaGlwcGVyLmFkZHJlc3MuY291bnRyeSJ9LHsidmFsdWUiOiI0MTZiOWRlM2E0M2Y4YTEzMjEwYjJlNDMzYjMwOTRjODIyMTcwYmNmNzZiMzg5NzRhMTE2YjJkYmNkNDM2ZDg1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmNvbnNpZ25lZS5uYW1lIn0seyJ2YWx1ZSI6ImE2Y2UxZGZkZmNlNmNmZjExNzc2ZjYyMzcyZTJlYzA2NWJkM2YxZTIyNjJkMTFlYTQ4NDFkMjY2YWZiNTI5MTMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Qubm90aWZ5UGFydHkubmFtZSJ9LHsidmFsdWUiOiI3YjI5MjE0ODczMzA2NzZiNzk2ZmRmYWE2Y2UwY2EyMThmNjI0YzAwNmI0OTMwZjIyYzIxOWNhMDBlM2Q2OTc4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnZlc3NlbCJ9LHsidmFsdWUiOiI5MDg5NjY2OTMxZGJhZjE3MzAxYjg1MGUzM2I5YTEwODViYzk5MzY5MzJiN2IxMzQ0OGFiYzc3YTU3N2VlM2RmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnZveWFnZU5vIn0seyJ2YWx1ZSI6IjE2ZDhhNjA4ZDNjZTA2YzcyZmJmMWYxNWJkNTRiODhhZjk5ZjY0N2M3MTkxMGE0NzgxZWRkZjc2M2ExZDRlNzgiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QucG9ydE9mTG9hZGluZyJ9LHsidmFsdWUiOiIzZjM4OGI3NmNkNTFhNGJhMTA2MGVlZGQyZDM0N2I5YWQ5YWFkY2E4YTUxMDA4NDMzNzhiNDc5MjhlYjc4MmMxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnBvcnRPZkRpc2NoYXJnZSJ9LHsidmFsdWUiOiJiODcwNjFmY2M1MTQ0NmM3OWE2MzFjOTU5YjQzZWM1ZTM4MjMyNTcxYjRmZTVhOWJlNzRkNzZkZGZiM2M3NGVkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnBsYWNlT2ZSZWNlaXB0In0seyJ2YWx1ZSI6IjZkMWRkYTExOGExNWI4ZWM0OWRkMTYxZmFiNzZjMzFhZWExYTQ1YzFkMjg0Mzc1MDU5ZWE1NTQzYWQ4MzEzZmMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QucGxhY2VPZkRlbGl2ZXJ5In0seyJ2YWx1ZSI6IjEyM2Y0ZGJjZmNiNGY5ZTYzNjg2Nzk5NWNiNWM1NzNhNWI4NTE3ZGVkOGFkZmM0OTliMzMwNTg3MGJhMTc2OGIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QucGFja2FnZXNbMF0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiMjllMDVlZDQ1ZjdiMjQ3YTQzYjE2NjU0MTcxM2JiMjVkYWQ1Y2UwNDA2Yjk3MzliYWEyYmQyM2I4MjRlNGMzYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5wYWNrYWdlc1swXS53ZWlnaHQifSx7InZhbHVlIjoiMzM3OGM0NmRjMjUyZWZhNDhlN2EyYzg1NzI0NWY1Mzk5MTcwZTIyNWIzNThlMjJjZWM5ODJmZjNkOWVjNTA3ZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5wYWNrYWdlc1swXS5tZWFzdXJlbWVudCJ9LHsidmFsdWUiOiIzNTViNjU2NTEwMzc5NTA4ZWU3ZjFhZDllNzc0M2Q1Nzg1NDcyYWEyZWNhZDkyMzYwYzQ2MzU5YTgxNjJkODZhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmxpbmtzLnNlbGYuaHJlZiJ9LHsidmFsdWUiOiIxMDM3NjM0NGJiMWM4YmVlNWRmMzQ2NzU1YmVkYjMyMjMwZDdiZGNmYmE3YzM2Zjc0OGI2ODgwYzJjZjMwNjUyIiwicGF0aCI6Im5ldHdvcmsuY2hhaW4ifSx7InZhbHVlIjoiMjM5ZjJkZWMwODkxMzczOTUyNzYzMjYzOWNkYjk5NzE2ZGRkYzg0ODRmYWNmYTdhMDYwODY3MzE5MGMyMWIxNyIsInBhdGgiOiJuZXR3b3JrLmNoYWluSWQifV0=", + "privacy": { + "obfuscated": [] + } + } +} \ No newline at end of file From 952916958f8e43bf489e0bc933f426a02a914b92 Mon Sep 17 00:00:00 2001 From: pennhan-dex Date: Tue, 20 Jan 2026 18:30:17 +0800 Subject: [PATCH 11/18] update unit tests with relevant fixtures --- src/commands/verify.ts | 81 +++++----- src/utils/formatting.ts | 2 +- src/utils/networks.ts | 24 +-- tests/commands/verify.test.ts | 149 +++++------------- .../oa/2.0/signed_wrapped_oa_dns_did_v2.json | 60 +++++++ .../oa/3.0/signed_wrapped_oa_dns_did_v3.json | 72 +++++++++ ..._wrapped_oa_dns_txt_token_registry_v3.json | 86 ++++++++++ ...bbs2020_w3c_transferable_record_v1_1.json} | 0 ...bbs2020_w3c_verifiable_document_v1_1.json} | 22 +-- .../bbs2023_w3c_verifiable_document_v2_0.json | 36 +++++ .../ecdsa_w3c_transferable_document_v2_0.json | 105 ++++++++++++ .../ecdsa_w3c_verifiable_document_v2_0.json} | 0 ...bbs2020_w3c_verifiable_document_v1_1.json} | 0 ...ed_ecdsa_w3c_verifiable_document_v2_0.json | 79 ++++++++++ .../w3c/certificate-of-origin-redacted.json | 43 ----- ...lectronic-promissory-note-inoperative.json | 60 ------- tests/main.test.ts | 19 ++- 17 files changed, 547 insertions(+), 291 deletions(-) create mode 100644 tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_did_v2.json create mode 100644 tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_did_v3.json create mode 100644 tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_txt_token_registry_v3.json rename tests/fixtures/{w3c/bill-of-lading-operative.json => verify/w3c/bbs2020_w3c_transferable_record_v1_1.json} (100%) rename tests/fixtures/{w3c/invoice-revoked.json => verify/w3c/bbs2020_w3c_verifiable_document_v1_1.json} (75%) create mode 100644 tests/fixtures/verify/w3c/bbs2023_w3c_verifiable_document_v2_0.json create mode 100644 tests/fixtures/verify/w3c/ecdsa_w3c_transferable_document_v2_0.json rename tests/fixtures/{w3c/certificate-of-origin-default.json => verify/w3c/ecdsa_w3c_verifiable_document_v2_0.json} (100%) rename tests/fixtures/{w3c/invoice-expired.json => verify/w3c/expired_bbs2020_w3c_verifiable_document_v1_1.json} (100%) create mode 100644 tests/fixtures/verify/w3c/revoked_ecdsa_w3c_verifiable_document_v2_0.json delete mode 100644 tests/fixtures/w3c/certificate-of-origin-redacted.json delete mode 100644 tests/fixtures/w3c/electronic-promissory-note-inoperative.json diff --git a/src/commands/verify.ts b/src/commands/verify.ts index 638599e..dda341c 100644 --- a/src/commands/verify.ts +++ b/src/commands/verify.ts @@ -3,9 +3,11 @@ import { getSupportedNetwork, getSupportedNetworkNameFromId, readJsonFile, - withAsyncCaptureConsoleWarn + CaptureConsoleWarnAsync, + NetworkCmdName } from '../utils'; import { + getChainId, getDocumentData, getTransferableRecordsCredentialStatus, isTransferableRecord, @@ -56,7 +58,7 @@ export const verify = async (signedVC: SignedVerifiableCredential) => { const isOpenAttestation = isWrappedV2Document(signedVC) || isWrappedV3Document(signedVC); const { result, warnings } = isOpenAttestation - ? { result: await verifyOpenAttestationDocument(signedVC), warnings: undefined } + ? { result: await verifyOpenAttestationDocument(signedVC), warnings: null } : await verifyW3CDocument(signedVC); if (warnings) { @@ -74,56 +76,53 @@ const verifyW3CDocument = async ( signedVC: SignedVerifiableCredential ): Promise<{ result: VerificationFragment[]; warnings: unknown[][] }> => { signale.info('Verifying W3C document...'); - if (isTransferableRecord(signedVC)) { - const credentialStatus = getTransferableRecordsCredentialStatus(signedVC); - - if (credentialStatus.tokenNetwork.chainId != null) { - const chainId = Number(credentialStatus.tokenNetwork.chainId); - const providerForTrustVC = resolveProviderForChainId(chainId); - return await withAsyncCaptureConsoleWarn(() => verifyDocument(signedVC, { provider: providerForTrustVC })); - } else { - signale.error('Could not find blockchain information'); - throw new Error('Could not find blockchain information'); + + // Non-transferable record: verify directly + if (!isTransferableRecord(signedVC)) { + return await CaptureConsoleWarnAsync(() => verifyDocument(signedVC)); + } + + const credentialStatus = getTransferableRecordsCredentialStatus(signedVC); + const chainId = credentialStatus.tokenNetwork.chainId; + + if (chainId == null) { + signale.error('Could not find blockchain information'); + throw new Error('Could not find blockchain information'); + } + + try { + const chainName = getSupportedNetworkNameFromId(Number(chainId)); + const network = getSupportedNetwork(chainName); + const provider = network.provider() as unknown as V5Provider; + if (provider) { + return await CaptureConsoleWarnAsync(() => verifyDocument(signedVC, { provider })); } - } else { - return await withAsyncCaptureConsoleWarn(() => verifyDocument(signedVC)); + } catch (err: unknown) { + signale.warn(`${err instanceof Error ? err.message : String(err)}`); } + // Fallback: Verify without provider + return await CaptureConsoleWarnAsync(() => verifyDocument(signedVC)); }; const verifyOpenAttestationDocument = async ( signedVC: WrappedOrSignedOpenAttestationDocument ): Promise => { signale.info('Verifying OpenAttestation document...'); - const documentData = getDocumentData(signedVC); + // if chainId is defined, it is a TXT document, else DID document. checkExpiration(signedVC); - if (isWrappedV2Document(signedVC)) { - const chainId = Number(documentData.network?.chainId); - return await verifyWithProvider(signedVC, chainId); - } - - if (isWrappedV3Document(signedVC)) { - if (isTransferableRecord(signedVC)) { - const chainId = Number(documentData.network?.chainId); - return await verifyWithProvider(signedVC, chainId); + try { + const chainId = getChainId(signedVC); + const chainName = getSupportedNetworkNameFromId(Number(chainId)); + const network = getSupportedNetwork(chainName); + const provider = network.provider() as unknown as V5Provider; + if (provider) { + return await verifyDocument(signedVC, { provider }); } - return await verifyDocument(signedVC); - } - - throw new Error("Document is not a valid OpenAttestation document"); -}; - -const resolveProviderForChainId = (chainId: number): V5Provider => { - const chainName = getSupportedNetworkNameFromId(chainId); - return getSupportedNetwork(chainName).provider() as unknown as V5Provider; -}; - -const verifyWithProvider = async (signedVC: any, chainId: number | undefined) => { - if (chainId == null) { - throw new Error('Could not find blockchain information'); + } catch (err: unknown) { + signale.warn(`${err instanceof Error ? err.message : String(err)}`); } - - const provider = resolveProviderForChainId(Number(chainId)); - return await verifyDocument(signedVC, { provider }); + // Fallback: Verify without provider + return await verifyDocument(signedVC); }; const checkExpiration = (signedVC: WrappedOrSignedOpenAttestationDocument) => { diff --git a/src/utils/formatting.ts b/src/utils/formatting.ts index 3e8a6ca..f6813d4 100644 --- a/src/utils/formatting.ts +++ b/src/utils/formatting.ts @@ -41,7 +41,7 @@ export const getErrorMessage = function (error: unknown): string { }; // Captures console.warn for an async function to handle expected console.warn. Restores original console.warn functionality after the function is executed. -export const withAsyncCaptureConsoleWarn = async (fn: () => Promise): Promise<{ result: T; warnings: unknown[][] }> => { +export const CaptureConsoleWarnAsync = async (fn: () => Promise): Promise<{ result: T; warnings: unknown[][] }> => { const originalWarn = console.warn; const warnings: unknown[][] = []; diff --git a/src/utils/networks.ts b/src/utils/networks.ts index d19b321..65ee067 100644 --- a/src/utils/networks.ts +++ b/src/utils/networks.ts @@ -29,13 +29,13 @@ export enum NetworkCmdName { const defaultInfuraProvider = (networkName: string): (() => Provider) => - () => - new InfuraProvider(networkName); + () => + new InfuraProvider(networkName); const jsonRpcProvider = (url: string): (() => Provider) => - () => - new JsonRpcProvider(url); + () => + new JsonRpcProvider(url); /** * Creates a provider that checks for an environment variable override @@ -48,16 +48,16 @@ const getProviderWithEnvOverride = networkName: NetworkCmdName, defaultProvider: () => Provider, ): (() => Provider) => - () => { - const envVarName = `${networkName.toUpperCase()}_RPC`; - const customRpcUrl = process.env[envVarName]; + () => { + const envVarName = `${networkName.toUpperCase()}_RPC`; + const customRpcUrl = process.env[envVarName]; - if (customRpcUrl) { - return new JsonRpcProvider(customRpcUrl); - } + if (customRpcUrl) { + return new JsonRpcProvider(customRpcUrl); + } - return defaultProvider(); - }; + return defaultProvider(); + }; export const supportedNetwork: { [key in NetworkCmdName]: SupportedNetwork; diff --git a/tests/commands/verify.test.ts b/tests/commands/verify.test.ts index 107f8ec..9399cd7 100644 --- a/tests/commands/verify.test.ts +++ b/tests/commands/verify.test.ts @@ -1,4 +1,5 @@ import * as prompts from '@inquirer/prompts'; +import fs from 'node:fs'; import path from 'node:path'; import { beforeEach, describe, expect, it, MockedFunction, vi } from 'vitest'; import { promptQuestions, verify } from '../../src/commands/verify'; @@ -6,50 +7,10 @@ import { SignedVerifiableCredential } from '@trustvc/trustvc'; import { getResultFromFragment, handleExpiredCredentialWarning, logResultStatus } from '../../src/commands/verify'; import { FragmentType } from '../../src/types'; -// Different types of Credentials for W3C (Non-Transferable Records and Transferable Records) -const W3C_SIGNED_VC_BILL_OF_LADING_OPERATIVE_FIXTURE_PATH = path.resolve( +const VERIFY_FIXTURES_DIR = path.resolve(process.cwd(), 'tests/fixtures/verify'); +const PROMPT_QUESTIONS_FIXTURE_PATH = path.resolve( process.cwd(), - 'tests/fixtures/w3c/bill-of-lading-operative.json', -); -const W3C_SIGNED_VC_INVOICE_EXPIRED_FIXTURE_PATH = path.resolve( - process.cwd(), - 'tests/fixtures/w3c/invoice-expired.json', -); -const W3C_SIGNED_VC_INVOICE_REVOKED_FIXTURE_PATH = path.resolve( - process.cwd(), - 'tests/fixtures/w3c/invoice-revoked.json', -); -const W3C_SIGNED_VC_ELECTRONIC_PROMISSORY_NOTE_INOPERATIVE_FIXTURE_PATH = path.resolve( - process.cwd(), - 'tests/fixtures/w3c/electronic-promissory-note-inoperative.json', -); - -// Different types of Credentials for OA (Non-Transferable Records and Transferable Records) -const OA_SIGNED_VC_BILL_OF_LADING_OPERATIVE_FIXTURE_PATH = path.resolve( - process.cwd(), - 'tests/fixtures/oa/bill-of-lading-operative.json', -); -const OA_SIGNED_VC_INVOICE_EXPIRED_FIXTURE_PATH = path.resolve( - process.cwd(), - 'tests/fixtures/oa/invoice-expired.json', -); -const OA_SIGNED_VC_INVOICE_REVOKED_FIXTURE_PATH = path.resolve( - process.cwd(), - 'tests/fixtures/oa/invoice-revoked.json', -); -const OA_SIGNED_VC_ELECTRONIC_PROMISSORY_NOTE_INOPERATIVE_FIXTURE_PATH = path.resolve( - process.cwd(), - 'tests/fixtures/oa/electronic-promissory-note-inoperative.json', -); - -const OA_SIGNED_VC_BILL_OF_LADING_DNS_DID_V3_FIXTURE_PATH = path.resolve( - process.cwd(), - 'tests/fixtures/oa/bill-of-lading-OA-DNS-DID-V3.json', -); - -const OA_SIGNED_VC_BILL_OF_LADING_DNS_TXT_V3_FIXTURE_PATH = path.resolve( - process.cwd(), - 'tests/fixtures/oa/bill-of-lading-OA-DNS-TXT-V3.json', + 'tests/fixtures/verify/w3c/bbs2020_w3c_verifiable_document_v1_1.json', ); vi.mock('@inquirer/prompts'); @@ -135,14 +96,12 @@ describe('verify', () => { expect(signaleWarnMock).not.toHaveBeenCalled(); }); }); - - }); describe('promptQuestions', () => { it('should return parsed signed VC from readJsonFile', async () => { (prompts.input as any).mockResolvedValueOnce( - W3C_SIGNED_VC_BILL_OF_LADING_OPERATIVE_FIXTURE_PATH, + PROMPT_QUESTIONS_FIXTURE_PATH, ); const result = await promptQuestions(); @@ -152,7 +111,7 @@ describe('verify', () => { it('should abide by validation rules for path input', async () => { (prompts.input as any).mockResolvedValueOnce( - W3C_SIGNED_VC_BILL_OF_LADING_OPERATIVE_FIXTURE_PATH, + PROMPT_QUESTIONS_FIXTURE_PATH, ); await promptQuestions(); @@ -180,68 +139,48 @@ describe('verify', () => { let signaleSuccessMock: MockedFunction; let signaleWarnMock: MockedFunction; + const listVerifyFixturePathsRecursively = (dir: string): string[] => { + const entries = fs.readdirSync(dir, { withFileTypes: true }); + return entries.flatMap((entry) => { + const absolutePath = path.join(dir, entry.name); + if (entry.isDirectory()) return listVerifyFixturePathsRecursively(absolutePath); + if (entry.isFile() && entry.name.toLowerCase().endsWith('.json')) return [absolutePath]; + return []; + }); + }; + + + const verifyFixturePaths: string[] = listVerifyFixturePathsRecursively(VERIFY_FIXTURES_DIR).sort(); + + const inferExpectedWarning = (filePath: string) => { + const fileName = path.basename(filePath).toLowerCase(); + if (fileName.includes('revoked')) return 'revoked'; + if (fileName.includes('expired')) return 'expired'; + return 'none'; + }; + beforeEach(async () => { const signale = await import('signale'); signaleSuccessMock = (signale.default as any).success; signaleWarnMock = (signale.default as any).warn; }); - const testCases = [ - { - name: 'bill-of-lading operative w3c', - filePath: W3C_SIGNED_VC_BILL_OF_LADING_OPERATIVE_FIXTURE_PATH, - expectedWarning: 'none', - }, - { - name: 'invoice expired w3c', - filePath: W3C_SIGNED_VC_INVOICE_EXPIRED_FIXTURE_PATH, - expectedWarning: 'expired', - }, - { - name: 'invoice revoked w3c', - filePath: W3C_SIGNED_VC_INVOICE_REVOKED_FIXTURE_PATH, - expectedWarning: 'revoked', - }, - { - name: 'electronic-promissory-note inoperative w3c', - filePath: W3C_SIGNED_VC_ELECTRONIC_PROMISSORY_NOTE_INOPERATIVE_FIXTURE_PATH, - expectedWarning: 'none', - }, - { - name: 'bill-of-lading operative V2 oa', - filePath: OA_SIGNED_VC_BILL_OF_LADING_OPERATIVE_FIXTURE_PATH, - expectedWarning: 'none', - }, - { - name: 'invoice expired V2 oa', - filePath: OA_SIGNED_VC_INVOICE_EXPIRED_FIXTURE_PATH, - expectedWarning: 'expired', - }, - { - name: 'invoice revoked V2 oa', - filePath: OA_SIGNED_VC_INVOICE_REVOKED_FIXTURE_PATH, - expectedWarning: 'revoked', - }, - { - name: 'electronic-promissory-note inoperative V2 oa', - filePath: OA_SIGNED_VC_ELECTRONIC_PROMISSORY_NOTE_INOPERATIVE_FIXTURE_PATH, - expectedWarning: 'none', - }, - { - name: 'bill-of-lading operative V3 oa DNS TXT', - filePath: OA_SIGNED_VC_BILL_OF_LADING_DNS_TXT_V3_FIXTURE_PATH, - expectedWarning: 'none', - }, - { - name: 'bill-of-lading operative V3 oa DNS DID', - filePath: OA_SIGNED_VC_BILL_OF_LADING_DNS_DID_V3_FIXTURE_PATH, - expectedWarning: 'tampered', - } - ]; + type TestCase = { + name: string; + filePath: string; + expectedWarning: string; + }; + + const testCases: TestCase[] = verifyFixturePaths.map((filePath) => ({ + name: path.relative(process.cwd(), filePath), + filePath, + expectedWarning: inferExpectedWarning(filePath), + })); it.each(testCases)( 'should verify real signed VC fixture: $name', - async ({ filePath, expectedWarning }) => { + async (testCase) => { + const { filePath, expectedWarning } = testCase; const utils = await import('../../src/utils'); const signedVC = utils.readJsonFile(filePath, 'document'); @@ -261,7 +200,7 @@ describe('verify', () => { if (expectedWarning === 'revoked') { expect(warnMessages.length).toBeGreaterThan(0); - expect(warnMessages.join('\n')).toContain('DOCUMENT_STATUS:'); + expect(warnMessages.join('\n')).toContain('DOCUMENT_STATUS: INVALID [Document has been revoked.]'); } if (expectedWarning === 'expired') { @@ -269,19 +208,13 @@ describe('verify', () => { expect(warnMessages.join('\n')).toContain('The document credential has expired.'); } - if (expectedWarning === 'tampered') { - expect(warnMessages.length).toBeGreaterThan(0); - expect(warnMessages.join('\n')).toContain('Document has been tampered with'); - } - if (expectedWarning === 'none') { - expect(warnMessages.length).toBe(0); expect(successMessages).toEqual( expect.arrayContaining([ 'DOCUMENT_INTEGRITY: VALID', 'DOCUMENT_STATUS: VALID', 'ISSUER_IDENTITY: VALID', - ]) + ]), ); } }, diff --git a/tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_did_v2.json b/tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_did_v2.json new file mode 100644 index 0000000..9704c09 --- /dev/null +++ b/tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_did_v2.json @@ -0,0 +1,60 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "id": "e9d95822-dfd4-4f0a-9b3a-b21de76fb9e9:string:urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "shipper": { + "address": { + "street": "76b35ba3-a12b-4626-9d8e-21cbfee7f082:string:456 Orchard Road", + "country": "89273055-befa-4940-bcbf-6cd531d9b060:string:SG" + } + }, + "consignee": { + "name": "137eb8b9-2da0-4608-8bd3-17e495b332cd:string:TradeTrust" + }, + "notifyParty": { + "name": "bd6b7b59-c3c4-4ab2-8c4a-b68cf9124f02:string:TrustVC" + }, + "packages": [ + { + "description": "6d3367f0-dee3-475a-989d-e62c97b8557e:string:1 Pallet", + "weight": "8e2ea698-df0d-4e6f-9a3c-a7e4472b86c9:string:1", + "measurement": "ed505681-9c14-4bb9-943d-455b4fa6d58c:string:KG" + } + ], + "$template": { + "type": "ac26f70e-2932-46f7-bd9a-1a758538289f:string:EMBEDDED_RENDERER", + "name": "0c05e656-2d52-4b38-945c-d9f085588dd3:string:BILL_OF_LADING", + "url": "55896d86-6099-4470-81c6-79091ee301f0:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "id": "8c61d8e4-5ad3-40bc-975d-babf0a72db7e:string:did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90", + "name": "912d9616-5f69-4296-9b88-1eca73b786df:string:DID_ISSUER", + "identityProof": { + "type": "f9ae9ee8-dcf0-407b-a53f-8f2e1eb3e1b1:string:DID", + "key": "07c2beca-d6e7-4920-9377-e3d100adbec1:string:did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90#controller" + }, + "revocation": { + "type": "0e7f7d52-83e3-4df7-9a82-ff9571b45310:string:NONE" + } + } + ], + "blNumber": "e905d5f9-1562-447a-acab-a747853180fe:string:BL123456", + "scac": "206cf8b4-48fa-4822-8db4-7c9c4c529500:string:OOLU" + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "dabd017ef67a553e467806437473d1707a8079328e4fe9a9471be0be536cab9d", + "proof": [], + "merkleRoot": "dabd017ef67a553e467806437473d1707a8079328e4fe9a9471be0be536cab9d" + }, + "proof": [ + { + "type": "OpenAttestationSignature2018", + "created": "2024-11-08T09:47:52.546Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90#controller", + "signature": "0x6706675e86e388962cc914dda6594850d995088e87f2bb4e6153cd345a3409503a111298efdcf95b9e55416008229e48eeb87f5f6ff3d4058c0681fa3f7d39de1b" + } + ] +} diff --git a/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_did_v3.json b/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_did_v3.json new file mode 100644 index 0000000..4ffa610 --- /dev/null +++ b/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_did_v3.json @@ -0,0 +1,72 @@ +{ + "version": "https://schema.openattestation.com/3.0/schema.json", + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", + "https://schemata.openattestation.com/io/tradetrust/bill-of-lading/1.0/bill-of-lading-context.json" + ], + "credentialSubject": { + "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", + "shipper": { + "address": { + "street": "456 Orchard Road", + "country": "SG" + } + }, + "consignee": { + "name": "TradeTrust" + }, + "notifyParty": { + "name": "TrustVC" + }, + "packages": [ + { + "description": "1 Pallet", + "weight": "1", + "measurement": "KG" + } + ], + "blNumber": "20240315", + "scac": "20240315" + }, + "openAttestationMetadata": { + "template": { + "type": "EMBEDDED_RENDERER", + "name": "BILL_OF_LADING", + "url": "https://generic-templates.tradetrust.io" + }, + "proof": { + "type": "OpenAttestationProofMethod", + "method": "DID", + "value": "did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90#controller", + "revocation": { + "type": "NONE" + } + }, + "identityProof": { + "type": "DNS-DID", + "identifier": "example.tradetrust.io" + } + }, + "issuanceDate": "2021-12-03T12:19:52Z", + "expirationDate": "2029-12-03T12:19:52Z", + "issuer": { + "id": "https://example.tradetrust.io", + "name": "DEMO TOKEN REGISTRY", + "type": "OpenAttestationIssuer" + }, + "type": ["VerifiableCredential", "OpenAttestationCredential"], + "proof": { + "type": "OpenAttestationMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "8f832ec1d27e09b2530cd051c9acea960971c238a3627369f33cdc58af9548cd", + "proofs": [], + "merkleRoot": "8f832ec1d27e09b2530cd051c9acea960971c238a3627369f33cdc58af9548cd", + "salts": "W3sidmFsdWUiOiI2MmZjMzg5NWVmZjg1ODI5Mjc1YmY5MzQxMzI4N2QwY2NjNDliYTcyY2VhOWM1NTA2NjFjYzk4YTA1YTczNjU0IiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiYzI1NWZhZmFkNWQ2YmFlODE3YWJmNDExOGVmZDMwODRiNDMwOTIyZjE4MDU2OGE2NmY4ZDFjZWUxMTFjZDA3NyIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiIwZWZkZDkxOGFjOGZmYWU1ODQ0ZGE4M2U3YTYyNWJhMGYyOGUyYjJlMTVlMWFlNjYzODFmZDAyYmEwZmYwOWQxIiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6ImE4YjY2ZDEzNmRlYzYxOGM3ODI1ZmVjOTg3ZTM2NWUzYzlmZjMwNzg3NmI0MDc2NWUwZGI2MjdmZjA1NTAxNGIiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiMGQyMDkyMDU2MjBmZjg1NGU5MjZhNDI1YTZmYTk3ZDdkZWM0YjNjODE4N2YzNmM5YTZjZGY0OGYxMjMzNzgwNyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiI3MTdmNDg1YjFiMGNjMTFjZjExODNkMzkzYWE1MDc5ZDljNzYzZjY0NmMxNzg1MmJjZTY1OTNmOGJjZGRmM2IyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnNoaXBwZXIuYWRkcmVzcy5zdHJlZXQifSx7InZhbHVlIjoiNzUzM2M0ZDQxZmQ5Yjk2NjlkZmUyOWMxMmUyYTc1MDA1MzEyYjdjNmY0OWEzZDI2Yjk3Yjk3MTY3ODMxYmM4YyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5zaGlwcGVyLmFkZHJlc3MuY291bnRyeSJ9LHsidmFsdWUiOiJkNDc2NTM1NzNlZTAxNzg5ODljZWU1ZmU2NjBiZjA4MzZmZDQzZTU1MmQ0M2JkMTM0MTg2ZGY3MTBmNWFkZTBhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmNvbnNpZ25lZS5uYW1lIn0seyJ2YWx1ZSI6ImFjZGIyY2U5Y2YyMzlmZWYyMjE1MTNiZDRiZTAxNTk0OTc4ZmRlYjQ4ZjQ0NTk1NTkwOGZkYzc1ZTQxYmEzZWEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Qubm90aWZ5UGFydHkubmFtZSJ9LHsidmFsdWUiOiJkYTkxODQzNzIxZjU2MDljOGM3ZTE1MjgzNzBmZDdkMTA0ZGFmZGI3OWEzZDViMjMxZDI0MTM3NTZmMmRjNzZkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnBhY2thZ2VzWzBdLmRlc2NyaXB0aW9uIn0seyJ2YWx1ZSI6IjE4Y2JjNTQxZmM1YzZmZDI5NzFlMjBiNGU5ZmQ1MDdmMDA4MzZhMTRkNWZmYjY3ZGEzNDYwMTFmYzk1MDllMjAiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QucGFja2FnZXNbMF0ud2VpZ2h0In0seyJ2YWx1ZSI6IjJlM2I4YzRiNzI5YjAxMjY2MGNkOTU2MTE1NGFmZGZhOGM0MmRmMDcxZDBlZjBhNjZhZTViZjNkMmZkYmU0YTciLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QucGFja2FnZXNbMF0ubWVhc3VyZW1lbnQifSx7InZhbHVlIjoiMzI1NTVmNjkyNDEyM2JhMDFjOGU2MWFhN2U3MGE1MGY5YWI1NzdlYmY2ODJmYTk3MTVkNWEyZTU5M2FlMWFlMiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5ibE51bWJlciJ9LHsidmFsdWUiOiIxYjhhMTVhYzgzZmQ5MjUxNzVlNTRlODc4MGI2YWQzZjUxYzQwYjlhOGJlYTA3NGQzZGY1Y2U4MDI0MjAyMWNjIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnNjYWMifSx7InZhbHVlIjoiNTVlZGMxNjRiMWE5ODFjYWMzYTBiNGFlNDlmYzg0Y2Q0ZTY3YTBkNjZkODE4YjVhODcwOTUyMDgzMWI3MzA1NiIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS50eXBlIn0seyJ2YWx1ZSI6ImMxYjI4OWZjYjY0OGY4NTU0Zjc4NmIxNTM1MmY3ZGVmYmI4Mzg3ZDBmMWI0NzFmYTM4M2I3YWMzYWQzY2E1OTYiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiI0MDcxMTVmNjI0M2Q5NGJiNmQxYjUwMDU5YWM2MjI2ZGQ4NTQ5NTdlNTRmMzBhODI3ZjA2ZWM1YTFmODA4N2VkIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnVybCJ9LHsidmFsdWUiOiI3YTM3NWY2MDkzMzA2MDFkYTQxODQwNzQ2ZGQyYjQyMTEwMDY3ZTMwOWQxMWY5MGJiODc3MmQ2N2U5NjMyNzdhIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnByb29mLnR5cGUifSx7InZhbHVlIjoiMWU1YzJhYzRmYTNjN2U1NjQxYTJhMGQ3OGU1MTJjOTg1OGMzODI2NGJmMDMxNmI2ZGY2MDRiOTVkYzUyMmUyOSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi5tZXRob2QifSx7InZhbHVlIjoiYzIxNjg5M2JhOWY5MjAzNmMyNGFlMGQ3MTQ4NjlkMzhmZjM3ZjgyZDhkYTc2YjBjZmNjYzRlM2RkZjY1YmQ5MSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi52YWx1ZSJ9LHsidmFsdWUiOiI1ODk2MjA2MGZmZmY4ZDQyMGVjYjA1YjJjYTNiYzc5YWJiNDU4YTRlNzc2OGZkY2ZiYjM2ZmRmOWUyNDJlZDg0IiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnByb29mLnJldm9jYXRpb24udHlwZSJ9LHsidmFsdWUiOiIxYmNmN2M4NWJkODQyNzI1OTEzNzZmMjk1OWUwMjk5MDdmZmM4N2M4MmM2NzE1NGJjMGQ2ZWE2MTAzMmJkZjE2IiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLmlkZW50aXR5UHJvb2YudHlwZSJ9LHsidmFsdWUiOiIzMzVkYjA4MzdlNDFiNDg0YWI1ZjYxYTI4MTA0M2FhODVmMWM5NzMwNTU4YmUwOGZkZTAwNmI3YTIwMjljMjJmIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLmlkZW50aXR5UHJvb2YuaWRlbnRpZmllciJ9LHsidmFsdWUiOiI2OWIxMThkZjM0NjQ3YjA1ODhkOTc1OWYzYzM2MzllZDExZDIzNWJhYWUyMzAwMGRjN2M3Y2ZlYjA5Yjc0YmU2IiwicGF0aCI6Imlzc3VhbmNlRGF0ZSJ9LHsidmFsdWUiOiJjNDc4MDVkMmIwNGEzNGQ3Y2UzOGVjMDAxZDI4Y2MxYjk3MzNmODgzYTRlYTJjNGQzYjBlYTRiMWZhOGFjYjkxIiwicGF0aCI6ImV4cGlyYXRpb25EYXRlIn0seyJ2YWx1ZSI6ImQyYWNiZjYwYzEwNDc2ZmNiOTQ0MDg2YTAwODRkMjIzZWJhMjdhNzQyYzNmN2JhNWU5ZWE1YjQ4MTE0NDljN2IiLCJwYXRoIjoiaXNzdWVyLmlkIn0seyJ2YWx1ZSI6IjBlNWVkOGNiMDFiZTA0ZGY2OTg0MzlhYTMyNjZjNTY0MGMxNjRlN2VmMTBjYTJjNGNmNWRiZmQzMWQzYjAxZTEiLCJwYXRoIjoiaXNzdWVyLm5hbWUifSx7InZhbHVlIjoiZTgyMTFhZTc2ZjYyMjI4N2Q2ZWM1MzkyNzg4ZDY1OTk1MGRlZWQ5MTg0MjcxZjRjZTFiZTFmNGU4ZWE0YmJjNCIsInBhdGgiOiJpc3N1ZXIudHlwZSJ9LHsidmFsdWUiOiI0MGE0ZTAwYjY0YjEzMWYwYTM2NTM2MDAyYjNjNjJkY2ZmNTI1ZDUyOGNiZGYzZTAxYTQ5ZDcwMzBhMTQ4MjhlIiwicGF0aCI6InR5cGVbMF0ifSx7InZhbHVlIjoiYWZlOTc0OGZkM2U0MGFmZGQyNWI4NmNlZTA5YTJhNjE3N2MzNDZhMDY4ZjJhNmZkMzk4OTNiN2Q2MTJkZWI0MyIsInBhdGgiOiJ0eXBlWzFdIn1d", + "privacy": { + "obfuscated": [] + }, + "key": "did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90#controller", + "signature": "0x836a2547654da43f01641b3a0efff6797adc7e8b806d65cb9c67e25b119c70c34aa4c73a14d8138f52c05f6f7e1048ead225c85eb981fac8c2207895e48f14a91c" + } +} \ No newline at end of file diff --git a/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_txt_token_registry_v3.json b/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_txt_token_registry_v3.json new file mode 100644 index 0000000..51ebf7b --- /dev/null +++ b/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_txt_token_registry_v3.json @@ -0,0 +1,86 @@ +{ + "version": "https://schema.openattestation.com/3.0/schema.json", + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", + "https://schemata.tradetrust.io/io/tradetrust/bill-of-lading/1.0/bill-of-lading-context.json" + ], + "type": [ + "VerifiableCredential", + "OpenAttestationCredential" + ], + "issuer": { + "id": "https://example.com", + "name": "Demo token registry", + "type": "OpenAttestationIssuer" + }, + "issuanceDate": "2010-01-01T19:23:24Z", + "openAttestationMetadata": { + "template": { + "type": "EMBEDDED_RENDERER", + "name": "BILL_OF_LADING", + "url": "https://generic-templates.tradetrust.io" + }, + "proof": { + "type": "OpenAttestationProofMethod", + "method": "TOKEN_REGISTRY", + "value": "0x71D28767662cB233F887aD2Bb65d048d760bA694" + }, + "identityProof": { + "type": "DNS-TXT", + "identifier": "example.tradetrust.io" + } + }, + "credentialSubject": { + "name": "TradeTrust Bill of Lading v3", + "blNumber": "123", + "scac": "DEMO", + "carrierName": "Demo Carrier", + "shipper": { + "name": "Demo Shipper", + "address": { + "street": "One North", + "country": "Singapore" + } + }, + "consignee": { + "name": "Demo Consignee" + }, + "notifyParty": { + "name": "Demo Notify" + }, + "vessel": "1", + "voyageNo": "100", + "portOfLoading": "Singapore Port", + "portOfDischarge": "China Port", + "placeOfReceipt": "Beijing", + "placeOfDelivery": "Singapore", + "packages": [ + { + "description": "Green Apples", + "weight": "20", + "measurement": "100" + } + ], + "links": { + "self": { + "href": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.openattestation.com%2Fstatic%2Fdocuments%2Ftradetrust%2Fv3%2Febl-stability.json%22%2C%22permittedActions%22%3A%5B%22VIEW%22%5D%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%22%2C%20%22chainId%22%3A%20%22101010%22%7D%7D" + } + } + }, + "network": { + "chain": "FREE", + "chainId": "101010" + }, + "proof": { + "type": "OpenAttestationMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "3569b4d361b452af81fcff075f6df202ed6ffa3e58223f3bb43cc55a54968505", + "proofs": [], + "merkleRoot": "3569b4d361b452af81fcff075f6df202ed6ffa3e58223f3bb43cc55a54968505", + "salts": "W3sidmFsdWUiOiI5MWQxYmMwNzc4NjhmODEyMTYwMGRlMjFjMDEzYWIwNTA0YWM5NGM5MmQ4OTQ0YThmN2ViYzcxNTYyMjkwZGRhIiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiM2U1ODUyMzQ0NDA4YWVhYTE1MmI5Y2I2NjA3YmRjNDFhN2YzNDk4NTI5MDQ3YzA5MmI1ZDZlZDQwMzUxZmQyNyIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiJiNjA3MWFhYjM1ZTMxZTBjMmI2ZjM1ODI5ZWMyMDBhNzVlYjc4ZDdiNDlmMjQ5YzAyMDIyM2VlODIxN2VhOWUzIiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6ImVkNTlkMTNiOTdhZWJiNTViNGRkY2YxNDM2ZGU3MjIwNGU3ZGE4NjdjY2NmZDgxYmIwMjgyODZhYWNhMmI0ZDkiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiNWUzNzVjMzhkNmI3ZDhhNGI2NmM3ZDAzNGJhMjM4Y2U1ODBjZTA2MzZmMWJiNmVlMWRiNDkyNTMyODNjNDQwNyIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6IjFkN2MxMTMyZDE5YTViZTFhMGQ4MDU1M2U5NDA1YzNmZWQ3YWZkMjkzM2Y0NjI5OGJmNDJmODgwYzgyMjg4NTEiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiJiMmMxOTFlNDFiMzNlMDViM2FmMTU0N2JkODZhYTlmNGFlZGI3NjViMjk2YWVlZDZmY2I5ZTBlNzhmY2JmYmMwIiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiJjYmM0YmEwYWYwYzMyYmJmNzdiNzJjN2Y1Njc3NTBhZTYxOWJhZjRlY2I5ZTZlYzE0ZTkwYTFhYTIxZmIxMmY4IiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6ImJkMzZkNDc0OGM3MTRiNWNlOWZkOTllMzgyNTljMWIyZDI3YWMxNjg2YmM5YTQxNGNhYWE5YTRhMDE4OGUyYWYiLCJwYXRoIjoiaXNzdWVyLnR5cGUifSx7InZhbHVlIjoiN2M4OWVlOTJhYmYyNzEyOWE4MmY2ZTU3NDczYTU1YWI5MjAwOWQ4YzM2NmM2NTQ1NjU5ZWNjODBmMGMxMDQ4NSIsInBhdGgiOiJpc3N1YW5jZURhdGUifSx7InZhbHVlIjoiYWY4ZGQ1YWY1MTEzMDg3YzgzNzMyZDNkMTliYjIxYzJjYjdkMTQ5M2Q0MjRjYjBmOGE3ZDhmODAyOGE3MWE4OCIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS50eXBlIn0seyJ2YWx1ZSI6IjJmOTRlMjBkMDExNmNmMDUxOWM4YjM1OWYzYTYxYzAzOWMwNzc1ZWMwNzdhZTE2NGUzNWRlOTY2MTAzYTA4MGMiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiJjYjliYzQxYzI4NDM1ZTU0ZWZlMzRiNjIzODRhNzkzMGU0ZGJhNThjMTYwNmU3MWFhM2QxYzUzODIzZjU0NWNhIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnVybCJ9LHsidmFsdWUiOiJhNzc0MDg2YjAyMWMyYTk1Mzc3NDg5ZmQxYjhkMjc4ZmE5NWRmNDc4ODM1OTY4ODVkYzhmYWI4MzA4YmQ4ZGNmIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnByb29mLnR5cGUifSx7InZhbHVlIjoiNTVlYThlZDI1MDg5N2E3MDRjYzMyZTk2N2MwMTZiZjE0M2ZmYWNiYjUwOWRiOTQzMWRiNTQxYWYyMDk4ZTFhMyIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi5tZXRob2QifSx7InZhbHVlIjoiOWYyMjZiNjhlZTMwNjc5ODU0YjU0OWVkZTFlMTFjMzE1OGUzNDljOWE5YTlkZTJmZDhkZTAwZWQ4ZGEyY2ZkZSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi52YWx1ZSJ9LHsidmFsdWUiOiJmMzhkZTI1MzFkMDhhNDA5MDEyYzU3ZDUwMDc0NWNkNTQwNmU5YjY4MDg4ZTQwZmY3MDIyZTc0NWUzOTc2MWJiIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLmlkZW50aXR5UHJvb2YudHlwZSJ9LHsidmFsdWUiOiJiM2Y5NjE4NGYyNTFmNzg2Y2Q5OTNlOGYwNzZiZWY2NWI5OTQxODlmNmJmNWYwZTdkNWZhZTA1ODM3NGUyZjk4IiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLmlkZW50aXR5UHJvb2YuaWRlbnRpZmllciJ9LHsidmFsdWUiOiI5MDI0MDFjM2IyNTgwZjRhYzhkYTc0MTdkNGY5YmU4MTUyZjZjMGM3OGIzNjU4NjU1YjFjYTFhNGNiODZhOGRkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0Lm5hbWUifSx7InZhbHVlIjoiMzIwMzQzMjE5Yzk5ODg2NWQ4MjA2MjI2MTE4MWQ0ODE3ZDk3M2NlNmZlZDNhMzE2NGNjOWYxYTQwY2MyZTljOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5ibE51bWJlciJ9LHsidmFsdWUiOiI1NzU4MTZjMDlhOWE3NzJiNjMyZjJiMDU1MmYyYjc0NmFmYmJkY2JhZDQ1ZmRhNjY2YjMxMjQzYzBlYjY2YjgyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnNjYWMifSx7InZhbHVlIjoiYWVjMDg0Mjc2MmRkZGQ0OThjMDAxN2ViYWE2NmQ2N2VlNDY2Y2Y5OTZlZTI4YTkwZDE5NmNlMGYwM2NiOGQyNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jYXJyaWVyTmFtZSJ9LHsidmFsdWUiOiJjNTQ3MzE2M2JjM2I5NWUxM2NkMGY2MzdmNGNjN2U2ZmY3YTY5M2NkOGE5ZGRlMDlhYzI0MTljODJiYTk1YmZhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnNoaXBwZXIubmFtZSJ9LHsidmFsdWUiOiIwZWQ0NjJjZDBkMDM2YWVhZjk3N2Q1ZTRlMWViZDM0ZGIzYjdjYTE0YzU0MWE5ODMxOTYwNGMxMWI0MzYwNTgxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnNoaXBwZXIuYWRkcmVzcy5zdHJlZXQifSx7InZhbHVlIjoiODU5ZDYyYzdkNDU4NzA3MGFhYzIwYjA4NDBhMzczZmQxOTRmODdmNmM5M2I5NmQ1OGY0M2E2Nzg5N2U3NGVlMiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5zaGlwcGVyLmFkZHJlc3MuY291bnRyeSJ9LHsidmFsdWUiOiI0MTZiOWRlM2E0M2Y4YTEzMjEwYjJlNDMzYjMwOTRjODIyMTcwYmNmNzZiMzg5NzRhMTE2YjJkYmNkNDM2ZDg1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmNvbnNpZ25lZS5uYW1lIn0seyJ2YWx1ZSI6ImE2Y2UxZGZkZmNlNmNmZjExNzc2ZjYyMzcyZTJlYzA2NWJkM2YxZTIyNjJkMTFlYTQ4NDFkMjY2YWZiNTI5MTMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Qubm90aWZ5UGFydHkubmFtZSJ9LHsidmFsdWUiOiI3YjI5MjE0ODczMzA2NzZiNzk2ZmRmYWE2Y2UwY2EyMThmNjI0YzAwNmI0OTMwZjIyYzIxOWNhMDBlM2Q2OTc4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnZlc3NlbCJ9LHsidmFsdWUiOiI5MDg5NjY2OTMxZGJhZjE3MzAxYjg1MGUzM2I5YTEwODViYzk5MzY5MzJiN2IxMzQ0OGFiYzc3YTU3N2VlM2RmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnZveWFnZU5vIn0seyJ2YWx1ZSI6IjE2ZDhhNjA4ZDNjZTA2YzcyZmJmMWYxNWJkNTRiODhhZjk5ZjY0N2M3MTkxMGE0NzgxZWRkZjc2M2ExZDRlNzgiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QucG9ydE9mTG9hZGluZyJ9LHsidmFsdWUiOiIzZjM4OGI3NmNkNTFhNGJhMTA2MGVlZGQyZDM0N2I5YWQ5YWFkY2E4YTUxMDA4NDMzNzhiNDc5MjhlYjc4MmMxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnBvcnRPZkRpc2NoYXJnZSJ9LHsidmFsdWUiOiJiODcwNjFmY2M1MTQ0NmM3OWE2MzFjOTU5YjQzZWM1ZTM4MjMyNTcxYjRmZTVhOWJlNzRkNzZkZGZiM2M3NGVkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnBsYWNlT2ZSZWNlaXB0In0seyJ2YWx1ZSI6IjZkMWRkYTExOGExNWI4ZWM0OWRkMTYxZmFiNzZjMzFhZWExYTQ1YzFkMjg0Mzc1MDU5ZWE1NTQzYWQ4MzEzZmMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QucGxhY2VPZkRlbGl2ZXJ5In0seyJ2YWx1ZSI6IjEyM2Y0ZGJjZmNiNGY5ZTYzNjg2Nzk5NWNiNWM1NzNhNWI4NTE3ZGVkOGFkZmM0OTliMzMwNTg3MGJhMTc2OGIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QucGFja2FnZXNbMF0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiMjllMDVlZDQ1ZjdiMjQ3YTQzYjE2NjU0MTcxM2JiMjVkYWQ1Y2UwNDA2Yjk3MzliYWEyYmQyM2I4MjRlNGMzYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5wYWNrYWdlc1swXS53ZWlnaHQifSx7InZhbHVlIjoiMzM3OGM0NmRjMjUyZWZhNDhlN2EyYzg1NzI0NWY1Mzk5MTcwZTIyNWIzNThlMjJjZWM5ODJmZjNkOWVjNTA3ZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5wYWNrYWdlc1swXS5tZWFzdXJlbWVudCJ9LHsidmFsdWUiOiIzNTViNjU2NTEwMzc5NTA4ZWU3ZjFhZDllNzc0M2Q1Nzg1NDcyYWEyZWNhZDkyMzYwYzQ2MzU5YTgxNjJkODZhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmxpbmtzLnNlbGYuaHJlZiJ9LHsidmFsdWUiOiIxMDM3NjM0NGJiMWM4YmVlNWRmMzQ2NzU1YmVkYjMyMjMwZDdiZGNmYmE3YzM2Zjc0OGI2ODgwYzJjZjMwNjUyIiwicGF0aCI6Im5ldHdvcmsuY2hhaW4ifSx7InZhbHVlIjoiMjM5ZjJkZWMwODkxMzczOTUyNzYzMjYzOWNkYjk5NzE2ZGRkYzg0ODRmYWNmYTdhMDYwODY3MzE5MGMyMWIxNyIsInBhdGgiOiJuZXR3b3JrLmNoYWluSWQifV0=", + "privacy": { + "obfuscated": [] + } + } +} diff --git a/tests/fixtures/w3c/bill-of-lading-operative.json b/tests/fixtures/verify/w3c/bbs2020_w3c_transferable_record_v1_1.json similarity index 100% rename from tests/fixtures/w3c/bill-of-lading-operative.json rename to tests/fixtures/verify/w3c/bbs2020_w3c_transferable_record_v1_1.json diff --git a/tests/fixtures/w3c/invoice-revoked.json b/tests/fixtures/verify/w3c/bbs2020_w3c_verifiable_document_v1_1.json similarity index 75% rename from tests/fixtures/w3c/invoice-revoked.json rename to tests/fixtures/verify/w3c/bbs2020_w3c_verifiable_document_v1_1.json index 3093934..2e84315 100644 --- a/tests/fixtures/w3c/invoice-revoked.json +++ b/tests/fixtures/verify/w3c/bbs2020_w3c_verifiable_document_v1_1.json @@ -4,8 +4,7 @@ "https://trustvc.io/context/invoice.json", "https://trustvc.io/context/render-method-context.json", "https://trustvc.io/context/qrcode-context.json", - "https://w3id.org/security/bbs/v1", - "https://w3id.org/vc/status-list/2021/v1" + "https://w3id.org/security/bbs/v1" ], "renderMethod": [ { @@ -14,15 +13,6 @@ "id": "https://generic-templates.tradetrust.io" } ], - "credentialStatus": [ - { - "id": "https://trustvc.github.io/did/credentials/statuslist/sample#2", - "statusListCredential": "https://trustvc.github.io/did/credentials/statuslist/sample", - "statusListIndex": "2", - "statusPurpose": "revocation", - "type": "StatusList2021Entry" - } - ], "credentialSubject": { "type": ["Invoice"], "billFromName": "ABC Exports Pvt. Ltd.", @@ -64,16 +54,16 @@ "type": ["VerifiableCredential"], "qrCode": { "type": "TrustVCQRCode", - "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Finvoice-revoked.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Finvoice-default.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" }, "issuer": "did:web:trustvc.github.io:did:1", "issuanceDate": "2025-06-09T09:36:15.971Z", - "id": "urn:bnid:_:0198cc98-e733-7889-a56a-6586989b658e", + "id": "urn:bnid:_:0198d00f-e703-700e-8262-3411f6f1a7b4", "proof": { "type": "BbsBlsSignature2020", - "created": "2025-08-21T12:27:10Z", + "created": "2025-08-22T04:35:59Z", "proofPurpose": "assertionMethod", - "proofValue": "t6MiyaBT0FkPkM2/vP8NdIvocdjx+09fYMFtIJxc2+xKzA0d8P7srdEaAu1xpYHUclQLD8rTJuP6ihzlME4rh1mbz/6PepuxJy7uSbc+gxBaa7IPiDOkLYL+OjOQdh/JzEPUpryTHlswSDz1qLmDug==", - "verificationMethod": "did:web:trustvc.github.io:did:1#keys-2" + "proofValue": "o32r+zLI4dcOeLY1omIXoqQKXwwC6z9ihFkGowUvlpgdk3lBA02NRiOuTNQt8CExDEfRAbq+17MwX8sMkSSN7Drbug0evckYllVnzTy4hzRTItiHNrGr9979b4i486eQCEF3QwrQPSU1k/v3LXx6lQ==", + "verificationMethod": "did:web:trustvc.github.io:did:1#keys-1" } } \ No newline at end of file diff --git a/tests/fixtures/verify/w3c/bbs2023_w3c_verifiable_document_v2_0.json b/tests/fixtures/verify/w3c/bbs2023_w3c_verifiable_document_v2_0.json new file mode 100644 index 0000000..9f03e7e --- /dev/null +++ b/tests/fixtures/verify/w3c/bbs2023_w3c_verifiable_document_v2_0.json @@ -0,0 +1,36 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://w3c-ccg.github.io/citizenship-vocab/contexts/citizenship-v2.jsonld" + ], + "credentialStatus": { + "id": "https://trustvc.github.io/did/credentials/statuslist/1#1", + "type": "BitstringStatusListEntry", + "statusPurpose": "revocation", + "statusListIndex": "10", + "statusListCredential": "https://trustvc.github.io/did/credentials/statuslist/1" + }, + "credentialSubject": { + "name": "TrustVC", + "birthDate": "2024-04-01T12:19:52Z", + "type": [ + "PermanentResident", + "Person" + ] + }, + "validUntil": "2029-12-03T12:19:52Z", + "issuer": "did:web:trustvc.github.io:did:1", + "type": [ + "VerifiableCredential" + ], + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:019bdac4-15af-7ddf-a904-e29e770cb8d0", + "proof": { + "type": "DataIntegrityProof", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-2", + "cryptosuite": "bbs-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0ChVhQl3FQf1iCsd8UOYKoOtE05EwyADb2pFKw3CXYhmAAKstq1lX4o69u58Z67M_2i6RIRZZv-KITPWVH00hkQKuNH3GWNpw9JO1RMQ_iKJm4u-xYQD9WZttHrlLy5Yt4KX5JlbD4AqxyPhcyoKk-Wo6FkAtpZhBXKsdUqNY4_vn1ieMbuZLxuIijh5S1vR5UbeeBlupYYLDx2EM7LXGzSqyTOC8ZKJ9hgD0GHrf59LhRlLV3-pK34L5ohGo8I-g81SD6xVKofBMNiXxFLrp7w56sQlEOkcpISekB2jtn0DeTWzNHrnVwuejhZPM1PPtOuxtkbzj6J1ggQDXmZWDv7Gc0fHBKsyn_bGwKW8HLyTRJZZ-2ielvfxqCZy9pc3N1ZXJqL3ZhbGlkRnJvbQ" + } +} \ No newline at end of file diff --git a/tests/fixtures/verify/w3c/ecdsa_w3c_transferable_document_v2_0.json b/tests/fixtures/verify/w3c/ecdsa_w3c_transferable_document_v2_0.json new file mode 100644 index 0000000..e4ac8c9 --- /dev/null +++ b/tests/fixtures/verify/w3c/ecdsa_w3c_transferable_document_v2_0.json @@ -0,0 +1,105 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/bill-of-lading-carrier.json", + "https://trustvc.io/context/attachments-context.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://trustvc.io/context/qrcode-context.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "BILL_OF_LADING_CARRIER", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": ["BillOfLadingCarrier"], + "shipperName": "MAERSK Co.", + "shipperAddressStreet": "101 ORCHARD ROAD", + "shipperAddressCountry": "Singapore", + "toOrderOfText": "TO ORDER", + "consigneeName": "ABC Natural Foods Inc.", + "notifyPartyName": "Amanda Green – Import Manager, ABC Natural Foods", + "packages": [ + { + "packagesDescription": "Organic Cashew Kernels (25kg bags)", + "packagesMeasurement": "100 Bags", + "packagesWeight": "2.65 MT" + }, + { + "packagesDescription": "Roasted Chickpeas (20kg packs)", + "packagesMeasurement": "60 Bundles", + "packagesWeight": "1.3" + } + ], + "blNumber": "SGCNM21566325", + "scac": "SGPU", + "carrierName": "Vikram Rao", + "logo": "data:image/png;base64,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", + "onwardInlandRouting": "Rail to Johor Port → Trucking to final inland delivery point (Long Beach, USA)", + "vessel": "MAERSK NATALIA", + "voyageNo": "7831W", + "portOfLoading": "Singapore", + "portOfDischarge": "LOS ANGELES, CA", + "placeOfReceipt": "JURONG PORT, SINGAPORE", + "placeOfDelivery": "Long Beach Distribution Center, CA", + "placeOfIssueBL": "Singapore", + "numberOfOriginalBL": "3", + "dateOfIssueBL": "2025-06-05", + "shippedOnBoardDate": "2025-06-05", + "signForTermsAndCondition": "The carrier accepts the goods as described in good order and condition for carriage under the terms stated herein and subject to the Carrier's standard Bill of Lading Terms and Conditions.", + "signedForCarrierText": "John Doe", + "carrierSignature": "data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=", + "termsOfCarriage": "All shipments are subject to the Hague-Visby Rules. The carrier assumes liability only for loss or damage due to its own negligence. Responsibility ceases at the time goods are delivered to the consignee or their agent. Claims must be submitted within 7 working days of delivery.", + "attachments": [ + { + "data": "JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", + "filename": "blank.pdf", + "mimeType": "application/pdf" + }, + { + "data": "e30=", + "filename": "empty.json", + "mimeType": "application/json" + }, + { + "data": "JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==", + "filename": "sample.pdf", + "mimeType": "application/pdf" + }, + { + "data": "JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", + "filename": "veryverylongfilenameoverhereveryverylongfilenameoverhere.pdf", + "mimeType": "application/pdf" + } + ] + }, + "type": ["VerifiableCredential"], + "qrCode": { + "type": "TrustVCQRCode", + "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Fw3c%2Fv2_0%2Fbill-of-lading-operative.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + }, + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "FREE", + "chainId": 101010 + }, + "tokenRegistry": "0x7202363bBDb126036F7C3243Ebac310d9d145040", + "tokenId": "00dc804498ef4be3f85d308f481889862c47427de812ce07fb68451870f568b9" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:01992dfa-c12f-7dde-9b11-39ca137e9302", + "proof": { + "type": "DataIntegrityProof", + "created": "2025-09-09T10:17:12Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAhXO0SlwhidFxMbpIV-KYjjIegFgYCcPGZ6VjO1DsGfW6wug2xWoHGUH0doaCXydbwRi0EtOOoJlfDbn5vYj7uVgjgCQCaSm-p60ackROchjdiT5kjv9sKn_mnlp8JaeWVUMJJVFYIIrSdA2TyIuExK3IoAuJIByBnck7lRfeJu6O9gZNpgVXgIZnL2lzc3VlcmovdmFsaWRGcm9tci9jcmVkZW50aWFsU3ViamVjdG0vcmVuZGVyTWV0aG9kcS9jcmVkZW50aWFsU3RhdHVzZy9xckNvZGU" + } +} \ No newline at end of file diff --git a/tests/fixtures/w3c/certificate-of-origin-default.json b/tests/fixtures/verify/w3c/ecdsa_w3c_verifiable_document_v2_0.json similarity index 100% rename from tests/fixtures/w3c/certificate-of-origin-default.json rename to tests/fixtures/verify/w3c/ecdsa_w3c_verifiable_document_v2_0.json diff --git a/tests/fixtures/w3c/invoice-expired.json b/tests/fixtures/verify/w3c/expired_bbs2020_w3c_verifiable_document_v1_1.json similarity index 100% rename from tests/fixtures/w3c/invoice-expired.json rename to tests/fixtures/verify/w3c/expired_bbs2020_w3c_verifiable_document_v1_1.json diff --git a/tests/fixtures/verify/w3c/revoked_ecdsa_w3c_verifiable_document_v2_0.json b/tests/fixtures/verify/w3c/revoked_ecdsa_w3c_verifiable_document_v2_0.json new file mode 100644 index 0000000..1152d99 --- /dev/null +++ b/tests/fixtures/verify/w3c/revoked_ecdsa_w3c_verifiable_document_v2_0.json @@ -0,0 +1,79 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/invoice.json", + "https://trustvc.io/context/qrcode-context.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "INVOICE", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialStatus": [ + { + "id": "https://trustvc.github.io/did/credentials/statuslist/2#5", + "statusListCredential": "https://trustvc.github.io/did/credentials/statuslist/2", + "statusListIndex": "5", + "statusPurpose": "revocation", + "type": "BitstringStatusListEntry" + } + ], + "credentialSubject": { + "type": ["Invoice"], + "billFromName": "ABC Exports Pvt. Ltd.", + "billFromStreetAddress": "12/F, Industrial Plaza, Near MIDC", + "billFromCity": "Navi Mumbai", + "billFromPostalCode": "400703", + "billFromPhoneNumber": "+91-22-4455-9988", + "billToName": "David Thomson", + "billToEmail": "david.thomson@example.co.uk", + "billToCompanyName": "XYZ Foods Ltd.", + "billToCompanyStreetAddress": "Unit 17, Royal Wharf, Docklands Industrial Area", + "billToCompanyCity": "London", + "billToCompanyPostalCode": "E16 2AA", + "billToCompanyPhoneNumber": "+44-20-8899-4455", + "billableItems": [ + { + "billableItemsDescription": "Organic Basmati Rice (20kg Bags)", + "billableItemsQuantity": "100", + "billableItemsUnitPrice": "125", + "billableItemsAmount": "12500" + }, + { + "billableItemsDescription": "Vacuum-Packed Almonds (10kg)", + "billableItemsQuantity": "50", + "billableItemsUnitPrice": "80", + "billableItemsAmount": "4000" + } + ], + "invoiceId": "INV-20250604-001", + "invoiceName": "Export of Organic Basmati Rice", + "date": "2025-06-04", + "customerId": "CUST-UK-55678", + "terms": "Net 30 Days", + "subtotal": "$16,500.00", + "tax": "5%", + "taxTotal": "$825.00", + "total": "$17,325.00" + }, + "type": ["VerifiableCredential"], + "qrCode": { + "type": "TrustVCQRCode", + "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Fw3c%2Fv2_0%2Finvoice-revoked.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:019931db-b8b0-7ff3-bdbc-f3ac820c7668", + "proof": { + "type": "DataIntegrityProof", + "created": "2025-09-10T04:21:47Z", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", + "cryptosuite": "ecdsa-sd-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0AhVhAJkFjMn4zWrJXhY-EqWhy-NvFRdLm_dF7IIMd4UbLPwjGJyJAnuwqqiM79LZT4bxow0jXYfNF4XWL5bqVFI1MPFgjgCQDuTPhBc6tZKIWyZZZKeARqDErduYv0x3bD7QfG1ke0cNYINX2Sd4geOSiHU73zBQ3d9GTYw79js0OaXhYlf15Z9f4mCZYQCF6ABtuDUFHHkHwG-AsYwmKXytxMMNeSwW2rPP9LHvUt0Ip75uLBjhPONLssKKj_nM7jrRnRAVyNegggCILiZVYQJIxUqZt95fsygUkWlvPkHShl9ZYkf6IZIheKS-uR-SZI7-xcffLx4xZAx1i5dWIJGJC58oBmjlUwsQuM_hKKLlYQFFDtmRXcM1WTY4l3tZdgV1XYPDm8TgvM7m0eguGP1Cwmu2LrGQjFOGLK3PWV89h_GJrRY9zqyDV8019GPztc3FYQABL9bzxVJimp-Zx7rhuN4PsHprgE4jnsk037M3Ge7fcLGXS6j81xtdlCRxMrOOuI4A6VKGufmaTCoyOEbw5KkdYQPXhkK7IO60JL1B8N9VJuZISeF2agzBVLIGZ30XhOc6o6eew9kh9mOtGrJsboEdDL1avqJ5ljs9fRbkGNW4ielFYQGsERhavqeEJAPjw-8Nmqasok0dbtIuwSJK3LuQ-Hw2ac3kkvAC1_qs6wrq2NJZAAPb0osrD4AtRbhadvAih5T5YQIJsg5i4MLmJFmB3Xqh8Fgt-2Bj5yE6k97dWW4z7yAkg9pOBQscRSrooVK5UUhD-pxNaN_pAIJEQSgKp83E_gClYQDAkopPK1GYD_EbAPZtismuEeQ1gyGMPV4-F-Hq25L1XekQrT9xgBtPuq7_YJFErgGGCwq1bdMQNj9WCGRYleIlYQLvmP8E8h9YpwLvTyhQc9U2tS9SNN8ygF4H2671VoL8nnlW57Id8aCdn_tUmjbCQfvCXw3ipHX5umiUEC-OZPU5YQDBDLEuMbQaL4pUjAKr5h3HO_llDwJEHfitVFA21wDkye5kEdAazzA9ar7KgD_p3BwjtBJBsJt4zK5n8A5up9lhYQEj3rJ3XuKwu9PuAsEKJyRk1K5uL7uiLgXZAbZuHVH4cLJSFM3QdwJFz_JiA0IvkrbHReUw5HjLEgFdX1RDE7tpYQGDY7GFYBxlA4ZHTBEQSuGphQ8sCoAU0EufbkdUZDDe8-4BSu9c76qkzyJ4cPygBMgyXVpL4rAoPlQN_zvbTukdYQIhO2jtOfbydRUWukWaAS_Gvc_dWwBRxzKhQ2ESUR2iN_bwIPWlYjQhr2Erhw-ELq1TeMoTMsDInS9zHa6FWD2ZYQC93YRsCDVTFoLdA6MZw1sLafxknnrvX9qJQrYQltDjMGqDCLGXF-LWgWrL2qa2q4mOgho-HiRa8vAhwYkfNSpVYQDL9Xk94G1IH82smnWRuSHcTeLnJjnr6c2SOMz9aP4x13WQOd06R4gEjfgnSJQsUUbL_wrqxmauaVz2jXXfRC_JYQNocs3VegQSfmTkvq1C8Z5dVixoG0KhNxJASSuaAztL5GC_kxxYtjcwwlY2q3MzEBrj2UPXdBJL2fyYi5WqJtZVYQLDjRcAQ0krynJpv-yP3cWqsMhM73dCu59gncXaOw5WJ5UgLnYc2YFa1cd-gTXWHGsW-IWnF6tsi90ZYCerPNXVYQJnoq7XnxXv2LgzJEVAkYUz219wZvMzDokZLa6dM0FaUhE73MOz804icZCqNFInVJfEyaiq1NZMmIucLEmM0vVRYQOJrji5BLxnKLgKT7J8Wry_Zk5jKrS0u1gAyvoT7ncae6-_mvBHqwEBTp3RCJCI57CqW3Q88FlZxWVAlXCnCzKxYQEZoZWUtK3Y7LYaI8M5ZV5VeenK1aRf5KinI0OWBMicpTDUxtsvjHY-3gMUc650S1fDfTQiSENCZwmV9FxjoxbdYQKroB5h1N-9QPPC41dpVws0ugwmtcBUkiM2Nnu34TH65Nd9inaM26RNEQkYopXt9VyuCQDjhkKxHA5W2M7nTYQlYQCL2PoH71g3kID39lWoK2zJRGujHo1FrHkdwulPtPdUgS5SDhjXQfmjVRnStBufeSv6vmWN7csQN6nRbt2YcO4xYQBxYT5jPmvyfYDaZ03w7cWcXDXu5Y4kNYDdyjrIOM_fcpMW-VKTWT6wD8_AJVbHCPO-BSM_pQ0Ov_JrDZssi9UJYQCWuFoWeJslXYK9gYE9m0aF9R9MO--92j4Nrxf4lf4PXP357Jt3LiDd0kKa6LoCHHYd1x1DVoAwQn323oECyrIJYQMm00znThXQHQ1H4cPNXO9JLwmYTrm-vygxgXaAhwU4Jzn2GD-0vcLhINVRYc0d8inTS9skpooOLcvxEwrBqa9NYQPBT4mzzUThagwfa6YImH8JQ501YL_yPXw9ztrfKcbTf6JlseTzW0eTyxcNTrpQv5yUlUTu0OOy9FM2TVKB-_KZYQHrO2SxRwP4t2L_S-hkBBi9F5MxWJNL-udV_e92PhPr176bVyT3MJ-DDKg242iRed_dr3QOpcPHxJMzgqfGhpupYQJE_UDT_FvTy0fz8nuQlvEVr0ToTl7lmiMZMi5WWQgxS0Hl9OHi1agMgGIg3H2qt5Qk_j0YcmbSDyPM52uiufyFYQBgcljiVyU03hcQk-ZjvwuvvtFU9WBqWIsyQv1mot-nIql5N0-0kWmSYRAmGCpICh0wodYp3xewB-0W8qRLVtplYQM9kWzMGkAcFtqyNN64H2GCaKEK9aGZ0RTjYh5HcQZ8FghNcHrJ24lBus3TfQNTHnTYe6o8NfnRaaBFw65g6UjJYQPF_qKw0cjByCfTwO4sqgFtZih3KMwcRYH--L9SVaQaYI3UtmH2IvARu8vaw7S4rRg9KlO2EcNATmLD63ipOghdYQEhgvX1uH4X6uACyOIKWNG6QjQQRVlnxdhi8a1iTBqkpZkqwlP1bWHQUHn7lqJ3whWFJmX5cBxgfwGglIBw5znFYQF1pocG5tSvP_EnYB_uZcK0nkN3-p4T0-PA_c5KO8aq__jgsGmAG0aFl3A_ITN7JQ3UXHhuVDX1ubQdHT2v8wRNYQKqG-6HeI66LRORGVywhlpoOPCrYfUYeBCgtApKHgwn6DWz_VpdKv_01gEuu_FWi_tD8KOdSJbBbvBjpDZA_wOhYQBtBYPPaGwEHANhFjhMMBFgHTuxT1a1f56Ij1IqK8EKeUvZsEN8NX3VVsB2_2w0AC1bw4bABzDoE3Ok4FCn5B_tYQLmyeMXuQCJVXbi91StAwvI-Gp5yLDTOACuxd0Bqj4_N8DtxaFvakp3KoSxySdY2O5fixsfhUf_EX_vBXPdZ3S9YQJNPn48f1iUCkuGI9UInd9g6aYoQ1sDmGMpU_D7irjKe1CWPx_6aRLqeT-SqO3X5DzNm689trKLSRfDgX5ucM_JYQEnc98-_RPkcGVdcfIUEOs-WnbDPgf9zacuIaDH_Nx14RhJt0XTZ4x0YQBOd7a6yKo-P_lLizKva4V-uC4p0q6yFZy9pc3N1ZXJqL3ZhbGlkRnJvbW0vcmVuZGVyTWV0aG9kZy9xckNvZGVlL3R5cGU" + } +} \ No newline at end of file diff --git a/tests/fixtures/w3c/certificate-of-origin-redacted.json b/tests/fixtures/w3c/certificate-of-origin-redacted.json deleted file mode 100644 index a983e61..0000000 --- a/tests/fixtures/w3c/certificate-of-origin-redacted.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "@context": [ - "https://www.w3.org/ns/credentials/v2", - "https://w3id.org/security/data-integrity/v2", - "https://trustvc.io/context/render-method-context-v2.json", - "https://trustvc.io/context/coo.json", - "https://trustvc.io/context/attachments-context.json", - "https://trustvc.io/context/qrcode-context.json" - ], - "id": "urn:uuid:01992e77-e339-7224-8a52-aeb5664df355", - "type": ["VerifiableCredential"], - "issuer": "did:web:trustvc.github.io:did:1", - "validFrom": "2024-04-01T12:19:52Z", - "renderMethod": [ - { - "type": "EMBEDDED_RENDERER", - "templateName": "CHAFTA_COO", - "id": "https://generic-templates.tradetrust.io" - } - ], - "qrCode": { - "type": "TrustVCQRCode", - "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Fw3c%2Fv2_0%2Fcertificate-of-origin-redacted.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" - }, - "credentialSubject": { - "type": ["Coo"], - "supplyChainConsignmentId": "CONS-EX456789", - "exportCountryCode": "IN", - "exporterName": "ABC Exports Pvt. Ltd.", - "exporterId": "EXP-IN-00987", - "exporterLine1": "12/F, Industrial Plaza", - "exporterLine2": "Near MIDC, Vashi", - "exporterCityName": "Navi Mumbai" - }, - "proof": { - "type": "DataIntegrityProof", - "created": "2025-09-09T12:33:52Z", - "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-1", - "cryptosuite": "ecdsa-sd-2023", - "proofPurpose": "assertionMethod", - "proofValue": "u2V0BhVhAQ78n2FyQU5qhdqiflQoP6AKhdJTBnndg4CiSY7py8bgu-u0r5Hd4KxvrDjZ6H2I75KlBbRGCBVorowH5CdmBhlgjgCQDj-5QDs0gOcyG9BAxkyqpcv0TvXa70ru4gTCnbSxqN6iJWECCSWRzIGhFDdHajY3BbKTAwS4s0V990uYtNLx6aGjCVK4sLHDgh3YpmStVno1Y0DxRNkIq7sKatf5tC5C4HWUFWEBE9fMBIrJZsLiBnsKZypOIn0A99Vc6PaL3TWVs9MaIaSw2afVLh3rDkZoDRyaP2ftE6bcyZOjQI3LfiWjr_lqcWEACtVzPJiFRqMkED-G-Yh97NXeX-JAv9JsbXQJxLKWI8HvUx-a20hWMkR47usKbhl4jxVL_toRJUhXK7Z0kwgx6WEDHL6XLVt4MfN27USPNqV242M2dRNGtDfpLLoPkhDHGbOBAAm-N62cswRdGHpw_tvXvH7Y8qhhHmSKs5NQ5aGSvWECsfEty60iYAU0gksaVplZnawcSX7KWfpKtJsX-P1ZqDxwufaghHGZL9L9KZEDEprI_E0sL8poFpW_o2Xnk3OkZWEDqcnyyUq-hpBm3td7SfNaPtmSAXYsZ0KystHhjhQv4f81lkRjNUY8d6uapw0Nzt8NnMQXJL7aXWrtRTHsLByo4WEBJoFCVq-unpUFP3th8mPvNWUKmcrkqkQh5y0atldieIW3dnsS1P5uTWX9JIHxz3hTFXjPoeyRlcisHt19KT7YCWEDXoOx72Ni51tLWo2VlRsap8x8XT-IWxBYPMIMS7oGVX9b6W-qRp0aJw7Gg3-NvKT2Nk8LLgee7nnx8M9bgR9oXWEDIiDb7wwIwbtSDakbOvi-CCbhtNOW2iLdJBDVCOq7g4oSAlPZ5GMwdTa4PLJKsIO6llPr7rZpDeMRp7zwlNgagogBYIMbbYKGMwe5W0P6grgY1BSPdCGvDE9sjXRFdp7jdzYdVAVggYOVNBet2j7hleFp_I2So2enZhCReBjAQU6aFxpuB3HCJAAECAwUGBwgJ" - } -} \ No newline at end of file diff --git a/tests/fixtures/w3c/electronic-promissory-note-inoperative.json b/tests/fixtures/w3c/electronic-promissory-note-inoperative.json deleted file mode 100644 index 30b62a9..0000000 --- a/tests/fixtures/w3c/electronic-promissory-note-inoperative.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://trustvc.io/context/promissory-note.json", - "https://trustvc.io/context/render-method-context.json", - "https://trustvc.io/context/transferable-records-context.json", - "https://trustvc.io/context/qrcode-context.json", - "https://w3id.org/security/bbs/v1" - ], - "renderMethod": [ - { - "type": "EMBEDDED_RENDERER", - "templateName": "PROMISSORY_NOTE", - "id": "https://generic-templates.tradetrust.io" - } - ], - "credentialSubject": { - "type": ["PromissoryNote"], - "drawerCompanyName": "XYZ Exports Pvt. Ltd.", - "drawerCompanyNo": "CIN-XYZ1234567", - "drawerJurisdiction": "India", - "drawerWalletAddress": "0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", - "drawerPlaceOfIssue": "Mumbai, India", - "draweeCompanyName": "XYZ Imports Ltd.", - "draweeCompanyNo": "REG-XYZ9876543", - "draweeJurisdiction": "California, United States", - "draweeWalletAddress": "0xca93690bb57eeab273c796a9309246bc0fb93649", - "dueDate": "2025-06-19", - "currency": "USD", - "amount": "50,000.00", - "clause": "Payment to be made in full without set-off or counterclaim, subject to terms agreed between Drawer and Drawee.", - "signerName": "John Doe", - "signerPosition": "Chief Financial Officer", - "signerTimeStamp": "2025-06-10", - "logo": "data:image/png;base64,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", - "pNoteId": "PN-9081-2231-SGP", - "commitmentDate": "2025-12-10" - }, - "type": ["VerifiableCredential"], - "qrCode": { - "type": "TrustVCQRCode", - "uri": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2Felectronic-promissory-note-inoperative.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" - }, - "credentialStatus": { - "type": "TransferableRecords", - "tokenNetwork": { "chain": "FREE", "chainId": 101010 }, - "tokenRegistry": "0x7202363bBDb126036F7C3243Ebac310d9d145040", - "tokenId": "690426cb927b40d5d372a9d1204b26b4a965d0a56a74d467317cbc4d9a9148a2" - }, - "issuer": "did:web:trustvc.github.io:did:1", - "issuanceDate": "2025-06-19T02:41:46.742Z", - "id": "urn:bnid:_:0198d015-d559-7777-8027-68d33915df40", - "proof": { - "type": "BbsBlsSignature2020", - "created": "2025-08-22T04:42:28Z", - "proofPurpose": "assertionMethod", - "proofValue": "gcVZ4odizDVQO9xSiYMxKQfPIkxIYVUWV/sco4j70EGLskHGCD/zgcyaNj9d5UeQK9mWxvZYKgbQV0KZEVk43KuhJBP+WM1twNGKzzIPjVgVKOrL0czA62mRo609je3NM5x/iF1YTpwvxJMSOOneJg==", - "verificationMethod": "did:web:trustvc.github.io:did:1#keys-1" - } -} \ No newline at end of file diff --git a/tests/main.test.ts b/tests/main.test.ts index 1351472..1d41f32 100644 --- a/tests/main.test.ts +++ b/tests/main.test.ts @@ -536,12 +536,12 @@ describe('trustvc-cli', () => { let signalWarnSpy: MockedFunction; let signaleSuccessSpy: MockedFunction; let readJsonFileMock: MockedFunction; - let withAsyncCaptureConsoleWarnMock: MockedFunction; + let CaptureConsoleWarnAsyncMock: MockedFunction; let getSupportedNetworkMock: MockedFunction; let getSupportedNetworkNameFromIdMock: MockedFunction; - const W3C_SIGNED_VC_DEFAULT_FIXTURE_PATH = './tests/fixtures/w3c/certificate-of-origin-default.json'; - const OA_SIGNED_VC_REVOKED_FIXTURE_PATH = './tests/fixtures/oa/invoice-revoked.json'; + const OA_V3_DNS_TXT_TOKEN_REGISTRY_FIXTURE = './tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_txt_token_registry_v3.json'; + const W3C_REVOKED_DNS_DID_FIXTURE = './tests/fixtures/verify/w3c/revoked_ecdsa_w3c_verifiable_document_v2_0.json'; beforeEach(async () => { vi.resetAllMocks(); @@ -560,17 +560,16 @@ describe('trustvc-cli', () => { getSupportedNetworkNameFromIdMock = utils.getSupportedNetworkNameFromId as MockedFunction; getSupportedNetworkNameFromIdMock.mockImplementation(actualUtils.getSupportedNetworkNameFromId); - withAsyncCaptureConsoleWarnMock = utils.withAsyncCaptureConsoleWarn as MockedFunction; - withAsyncCaptureConsoleWarnMock.mockImplementation((fn: any) => actualUtils.withAsyncCaptureConsoleWarn(fn)); + CaptureConsoleWarnAsyncMock = utils.CaptureConsoleWarnAsync as MockedFunction; + CaptureConsoleWarnAsyncMock.mockImplementation((fn: any) => actualUtils.CaptureConsoleWarnAsync(fn)); }); it( 'should verify a w3c credential through a given path', async ({ expect }) => { - (prompts.input as any).mockResolvedValueOnce(W3C_SIGNED_VC_DEFAULT_FIXTURE_PATH); + (prompts.input as any).mockResolvedValueOnce(OA_V3_DNS_TXT_TOKEN_REGISTRY_FIXTURE); await verifyHandler(); - expect(signaleSuccessSpy).toHaveBeenCalledWith('DOCUMENT_INTEGRITY: VALID'); expect(signaleSuccessSpy).toHaveBeenCalledWith('DOCUMENT_STATUS: VALID'); expect(signaleSuccessSpy).toHaveBeenCalledWith('ISSUER_IDENTITY: VALID'); @@ -578,15 +577,15 @@ describe('trustvc-cli', () => { ); it( - 'should verify an openattestation credential through a given path', + 'should verify an W3C credential through a given path', async ({ expect }) => { - (prompts.input as any).mockResolvedValueOnce(OA_SIGNED_VC_REVOKED_FIXTURE_PATH); + (prompts.input as any).mockResolvedValueOnce(W3C_REVOKED_DNS_DID_FIXTURE); await verifyHandler(); expect(signaleSuccessSpy).toHaveBeenCalledWith('DOCUMENT_INTEGRITY: VALID'); expect(signaleSuccessSpy).toHaveBeenCalledWith('ISSUER_IDENTITY: VALID'); - expect(signalWarnSpy).toHaveBeenCalledWith(expect.stringContaining('DOCUMENT_STATUS: INVALID')); + expect(signalWarnSpy).toHaveBeenCalledWith(expect.stringContaining('DOCUMENT_STATUS: INVALID [Document has been revoked.]')); }, ); }); From 7f7d3385befac54157d04ca0aa262851e19579e4 Mon Sep 17 00:00:00 2001 From: pennhan-dex Date: Tue, 20 Jan 2026 18:30:44 +0800 Subject: [PATCH 12/18] remove redundant files --- .../oa/bill-of-lading-OA-DNS-DID-V3.json | 75 -------- .../oa/bill-of-lading-OA-DNS-TXT-V3.json | 86 --------- .../fixtures/oa/bill-of-lading-operative.json | 115 ------------ .../oa/certificate-of-origin-default.json | 167 ------------------ .../oa/certificate-of-origin-redacted.json | 161 ----------------- ...lectronic-promissory-note-inoperative.json | 71 -------- tests/fixtures/oa/invoice-expired.json | 88 --------- tests/fixtures/oa/invoice-revoked.json | 88 --------- 8 files changed, 851 deletions(-) delete mode 100644 tests/fixtures/oa/bill-of-lading-OA-DNS-DID-V3.json delete mode 100644 tests/fixtures/oa/bill-of-lading-OA-DNS-TXT-V3.json delete mode 100644 tests/fixtures/oa/bill-of-lading-operative.json delete mode 100644 tests/fixtures/oa/certificate-of-origin-default.json delete mode 100644 tests/fixtures/oa/certificate-of-origin-redacted.json delete mode 100644 tests/fixtures/oa/electronic-promissory-note-inoperative.json delete mode 100644 tests/fixtures/oa/invoice-expired.json delete mode 100644 tests/fixtures/oa/invoice-revoked.json diff --git a/tests/fixtures/oa/bill-of-lading-OA-DNS-DID-V3.json b/tests/fixtures/oa/bill-of-lading-OA-DNS-DID-V3.json deleted file mode 100644 index 81312bc..0000000 --- a/tests/fixtures/oa/bill-of-lading-OA-DNS-DID-V3.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "version": "https://schema.openattestation.com/3.0/schema.json", - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", - "https://schemata.openattestation.com/io/tradetrust/bill-of-lading/1.0/bill-of-lading-context.json" - ], - "credentialSubject": { - "id": "urn:uuid:a013fb9d-bb03-4056-b696-05575eceaf42", - "shipper": { - "address": { - "street": "456 Orchard Road", - "country": "SG" - } - }, - "consignee": { - "name": "TradeTrust" - }, - "notifyParty": { - "name": "TrustVC" - }, - "packages": [ - { - "description": "1 Pallet", - "weight": "1", - "measurement": "KG" - } - ], - "blNumber": "20240315", - "scac": "20240315" - }, - "openAttestationMetadata": { - "template": { - "type": "EMBEDDED_RENDERER", - "name": "BILL_OF_LADING", - "url": "https://generic-templates.tradetrust.io" - }, - "proof": { - "type": "OpenAttestationProofMethod", - "method": "DID", - "value": "did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90#controller", - "revocation": { - "type": "NONE" - } - }, - "identityProof": { - "type": "DNS-DID", - "identifier": "example.tradetrust.io" - } - }, - "issuanceDate": "2021-12-03T12:19:52Z", - "expirationDate": "2029-12-03T12:19:52Z", - "issuer": { - "id": "https://example.tradetrust.io", - "name": "DEMO TOKEN REGISTRY", - "type": "OpenAttestationIssuer" - }, - "type": [ - "VerifiableCredential", - "OpenAttestationCredential" - ], - "proof": { - "type": "OpenAttestationMerkleProofSignature2018", - "proofPurpose": "assertionMethod", - "targetHash": "8f832ec1d27e09b2530cd051c9acea960971c238a3627369f33cdc58af9548cd", - "proofs": [], - "merkleRoot": "8f832ec1d27e09b2530cd051c9acea960971c238a3627369f33cdc58af9548cd", - "salts": "W3sidmFsdWUiOiI2MmZjMzg5NWVmZjg1ODI5Mjc1YmY5MzQxMzI4N2QwY2NjNDliYTcyY2VhOWM1NTA2NjFjYzk4YTA1YTczNjU0IiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiYzI1NWZhZmFkNWQ2YmFlODE3YWJmNDExOGVmZDMwODRiNDMwOTIyZjE4MDU2OGE2NmY4ZDFjZWUxMTFjZDA3NyIsInBhdGgiOiJAY29udGV4dFswXSJ9XQ==", - "privacy": { - "obfuscated": [] - }, - "key": "did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90#controller", - "signature": "0x836a2547654da43f01641b3a0efff6797adc7e8b806d65cb9c67e25b119c70c34aa4c73a14d8138f52c05f6f7e1048ead225c85eb981fac8c2207895e48f14a91c" - } -} diff --git a/tests/fixtures/oa/bill-of-lading-OA-DNS-TXT-V3.json b/tests/fixtures/oa/bill-of-lading-OA-DNS-TXT-V3.json deleted file mode 100644 index 7f59bcd..0000000 --- a/tests/fixtures/oa/bill-of-lading-OA-DNS-TXT-V3.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "version": "https://schema.openattestation.com/3.0/schema.json", - "@context": [ - "https://www.w3.org/2018/credentials/v1", - "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", - "https://schemata.tradetrust.io/io/tradetrust/bill-of-lading/1.0/bill-of-lading-context.json" - ], - "type": [ - "VerifiableCredential", - "OpenAttestationCredential" - ], - "issuer": { - "id": "https://example.com", - "name": "Demo token registry", - "type": "OpenAttestationIssuer" - }, - "issuanceDate": "2010-01-01T19:23:24Z", - "openAttestationMetadata": { - "template": { - "type": "EMBEDDED_RENDERER", - "name": "BILL_OF_LADING", - "url": "https://generic-templates.tradetrust.io" - }, - "proof": { - "type": "OpenAttestationProofMethod", - "method": "TOKEN_REGISTRY", - "value": "0x71D28767662cB233F887aD2Bb65d048d760bA694" - }, - "identityProof": { - "type": "DNS-TXT", - "identifier": "example.tradetrust.io" - } - }, - "credentialSubject": { - "name": "TradeTrust Bill of Lading v3", - "blNumber": "123", - "scac": "DEMO", - "carrierName": "Demo Carrier", - "shipper": { - "name": "Demo Shipper", - "address": { - "street": "One North", - "country": "Singapore" - } - }, - "consignee": { - "name": "Demo Consignee" - }, - "notifyParty": { - "name": "Demo Notify" - }, - "vessel": "1", - "voyageNo": "100", - "portOfLoading": "Singapore Port", - "portOfDischarge": "China Port", - "placeOfReceipt": "Beijing", - "placeOfDelivery": "Singapore", - "packages": [ - { - "description": "Green Apples", - "weight": "20", - "measurement": "100" - } - ], - "links": { - "self": { - "href": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.openattestation.com%2Fstatic%2Fdocuments%2Ftradetrust%2Fv3%2Febl-stability.json%22%2C%22permittedActions%22%3A%5B%22VIEW%22%5D%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%22%2C%20%22chainId%22%3A%20%22101010%22%7D%7D" - } - } - }, - "network": { - "chain": "FREE", - "chainId": "101010" - }, - "proof": { - "type": "OpenAttestationMerkleProofSignature2018", - "proofPurpose": "assertionMethod", - "targetHash": "3569b4d361b452af81fcff075f6df202ed6ffa3e58223f3bb43cc55a54968505", - "proofs": [], - "merkleRoot": "3569b4d361b452af81fcff075f6df202ed6ffa3e58223f3bb43cc55a54968505", - "salts": "W3sidmFsdWUiOiI5MWQxYmMwNzc4NjhmODEyMTYwMGRlMjFjMDEzYWIwNTA0YWM5NGM5MmQ4OTQ0YThmN2ViYzcxNTYyMjkwZGRhIiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiM2U1ODUyMzQ0NDA4YWVhYTE1MmI5Y2I2NjA3YmRjNDFhN2YzNDk4NTI5MDQ3YzA5MmI1ZDZlZDQwMzUxZmQyNyIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiJiNjA3MWFhYjM1ZTMxZTBjMmI2ZjM1ODI5ZWMyMDBhNzVlYjc4ZDdiNDlmMjQ5YzAyMDIyM2VlODIxN2VhOWUzIiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6ImVkNTlkMTNiOTdhZWJiNTViNGRkY2YxNDM2ZGU3MjIwNGU3ZGE4NjdjY2NmZDgxYmIwMjgyODZhYWNhMmI0ZDkiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiNWUzNzVjMzhkNmI3ZDhhNGI2NmM3ZDAzNGJhMjM4Y2U1ODBjZTA2MzZmMWJiNmVlMWRiNDkyNTMyODNjNDQwNyIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6IjFkN2MxMTMyZDE5YTViZTFhMGQ4MDU1M2U5NDA1YzNmZWQ3YWZkMjkzM2Y0NjI5OGJmNDJmODgwYzgyMjg4NTEiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiJiMmMxOTFlNDFiMzNlMDViM2FmMTU0N2JkODZhYTlmNGFlZGI3NjViMjk2YWVlZDZmY2I5ZTBlNzhmY2JmYmMwIiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiJjYmM0YmEwYWYwYzMyYmJmNzdiNzJjN2Y1Njc3NTBhZTYxOWJhZjRlY2I5ZTZlYzE0ZTkwYTFhYTIxZmIxMmY4IiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6ImJkMzZkNDc0OGM3MTRiNWNlOWZkOTllMzgyNTljMWIyZDI3YWMxNjg2YmM5YTQxNGNhYWE5YTRhMDE4OGUyYWYiLCJwYXRoIjoiaXNzdWVyLnR5cGUifSx7InZhbHVlIjoiN2M4OWVlOTJhYmYyNzEyOWE4MmY2ZTU3NDczYTU1YWI5MjAwOWQ4YzM2NmM2NTQ1NjU5ZWNjODBmMGMxMDQ4NSIsInBhdGgiOiJpc3N1YW5jZURhdGUifSx7InZhbHVlIjoiYWY4ZGQ1YWY1MTEzMDg3YzgzNzMyZDNkMTliYjIxYzJjYjdkMTQ5M2Q0MjRjYjBmOGE3ZDhmODAyOGE3MWE4OCIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS50eXBlIn0seyJ2YWx1ZSI6IjJmOTRlMjBkMDExNmNmMDUxOWM4YjM1OWYzYTYxYzAzOWMwNzc1ZWMwNzdhZTE2NGUzNWRlOTY2MTAzYTA4MGMiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiJjYjliYzQxYzI4NDM1ZTU0ZWZlMzRiNjIzODRhNzkzMGU0ZGJhNThjMTYwNmU3MWFhM2QxYzUzODIzZjU0NWNhIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnVybCJ9LHsidmFsdWUiOiJhNzc0MDg2YjAyMWMyYTk1Mzc3NDg5ZmQxYjhkMjc4ZmE5NWRmNDc4ODM1OTY4ODVkYzhmYWI4MzA4YmQ4ZGNmIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnByb29mLnR5cGUifSx7InZhbHVlIjoiNTVlYThlZDI1MDg5N2E3MDRjYzMyZTk2N2MwMTZiZjE0M2ZmYWNiYjUwOWRiOTQzMWRiNTQxYWYyMDk4ZTFhMyIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi5tZXRob2QifSx7InZhbHVlIjoiOWYyMjZiNjhlZTMwNjc5ODU0YjU0OWVkZTFlMTFjMzE1OGUzNDljOWE5YTlkZTJmZDhkZTAwZWQ4ZGEyY2ZkZSIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi52YWx1ZSJ9LHsidmFsdWUiOiJmMzhkZTI1MzFkMDhhNDA5MDEyYzU3ZDUwMDc0NWNkNTQwNmU5YjY4MDg4ZTQwZmY3MDIyZTc0NWUzOTc2MWJiIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLmlkZW50aXR5UHJvb2YudHlwZSJ9LHsidmFsdWUiOiJiM2Y5NjE4NGYyNTFmNzg2Y2Q5OTNlOGYwNzZiZWY2NWI5OTQxODlmNmJmNWYwZTdkNWZhZTA1ODM3NGUyZjk4IiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLmlkZW50aXR5UHJvb2YuaWRlbnRpZmllciJ9LHsidmFsdWUiOiI5MDI0MDFjM2IyNTgwZjRhYzhkYTc0MTdkNGY5YmU4MTUyZjZjMGM3OGIzNjU4NjU1YjFjYTFhNGNiODZhOGRkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0Lm5hbWUifSx7InZhbHVlIjoiMzIwMzQzMjE5Yzk5ODg2NWQ4MjA2MjI2MTE4MWQ0ODE3ZDk3M2NlNmZlZDNhMzE2NGNjOWYxYTQwY2MyZTljOSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5ibE51bWJlciJ9LHsidmFsdWUiOiI1NzU4MTZjMDlhOWE3NzJiNjMyZjJiMDU1MmYyYjc0NmFmYmJkY2JhZDQ1ZmRhNjY2YjMxMjQzYzBlYjY2YjgyIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnNjYWMifSx7InZhbHVlIjoiYWVjMDg0Mjc2MmRkZGQ0OThjMDAxN2ViYWE2NmQ2N2VlNDY2Y2Y5OTZlZTI4YTkwZDE5NmNlMGYwM2NiOGQyNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jYXJyaWVyTmFtZSJ9LHsidmFsdWUiOiJjNTQ3MzE2M2JjM2I5NWUxM2NkMGY2MzdmNGNjN2U2ZmY3YTY5M2NkOGE5ZGRlMDlhYzI0MTljODJiYTk1YmZhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnNoaXBwZXIubmFtZSJ9LHsidmFsdWUiOiIwZWQ0NjJjZDBkMDM2YWVhZjk3N2Q1ZTRlMWViZDM0ZGIzYjdjYTE0YzU0MWE5ODMxOTYwNGMxMWI0MzYwNTgxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnNoaXBwZXIuYWRkcmVzcy5zdHJlZXQifSx7InZhbHVlIjoiODU5ZDYyYzdkNDU4NzA3MGFhYzIwYjA4NDBhMzczZmQxOTRmODdmNmM5M2I5NmQ1OGY0M2E2Nzg5N2U3NGVlMiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5zaGlwcGVyLmFkZHJlc3MuY291bnRyeSJ9LHsidmFsdWUiOiI0MTZiOWRlM2E0M2Y4YTEzMjEwYjJlNDMzYjMwOTRjODIyMTcwYmNmNzZiMzg5NzRhMTE2YjJkYmNkNDM2ZDg1IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmNvbnNpZ25lZS5uYW1lIn0seyJ2YWx1ZSI6ImE2Y2UxZGZkZmNlNmNmZjExNzc2ZjYyMzcyZTJlYzA2NWJkM2YxZTIyNjJkMTFlYTQ4NDFkMjY2YWZiNTI5MTMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3Qubm90aWZ5UGFydHkubmFtZSJ9LHsidmFsdWUiOiI3YjI5MjE0ODczMzA2NzZiNzk2ZmRmYWE2Y2UwY2EyMThmNjI0YzAwNmI0OTMwZjIyYzIxOWNhMDBlM2Q2OTc4IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnZlc3NlbCJ9LHsidmFsdWUiOiI5MDg5NjY2OTMxZGJhZjE3MzAxYjg1MGUzM2I5YTEwODViYzk5MzY5MzJiN2IxMzQ0OGFiYzc3YTU3N2VlM2RmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnZveWFnZU5vIn0seyJ2YWx1ZSI6IjE2ZDhhNjA4ZDNjZTA2YzcyZmJmMWYxNWJkNTRiODhhZjk5ZjY0N2M3MTkxMGE0NzgxZWRkZjc2M2ExZDRlNzgiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QucG9ydE9mTG9hZGluZyJ9LHsidmFsdWUiOiIzZjM4OGI3NmNkNTFhNGJhMTA2MGVlZGQyZDM0N2I5YWQ5YWFkY2E4YTUxMDA4NDMzNzhiNDc5MjhlYjc4MmMxIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnBvcnRPZkRpc2NoYXJnZSJ9LHsidmFsdWUiOiJiODcwNjFmY2M1MTQ0NmM3OWE2MzFjOTU5YjQzZWM1ZTM4MjMyNTcxYjRmZTVhOWJlNzRkNzZkZGZiM2M3NGVkIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnBsYWNlT2ZSZWNlaXB0In0seyJ2YWx1ZSI6IjZkMWRkYTExOGExNWI4ZWM0OWRkMTYxZmFiNzZjMzFhZWExYTQ1YzFkMjg0Mzc1MDU5ZWE1NTQzYWQ4MzEzZmMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QucGxhY2VPZkRlbGl2ZXJ5In0seyJ2YWx1ZSI6IjEyM2Y0ZGJjZmNiNGY5ZTYzNjg2Nzk5NWNiNWM1NzNhNWI4NTE3ZGVkOGFkZmM0OTliMzMwNTg3MGJhMTc2OGIiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QucGFja2FnZXNbMF0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiMjllMDVlZDQ1ZjdiMjQ3YTQzYjE2NjU0MTcxM2JiMjVkYWQ1Y2UwNDA2Yjk3MzliYWEyYmQyM2I4MjRlNGMzYSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5wYWNrYWdlc1swXS53ZWlnaHQifSx7InZhbHVlIjoiMzM3OGM0NmRjMjUyZWZhNDhlN2EyYzg1NzI0NWY1Mzk5MTcwZTIyNWIzNThlMjJjZWM5ODJmZjNkOWVjNTA3ZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5wYWNrYWdlc1swXS5tZWFzdXJlbWVudCJ9LHsidmFsdWUiOiIzNTViNjU2NTEwMzc5NTA4ZWU3ZjFhZDllNzc0M2Q1Nzg1NDcyYWEyZWNhZDkyMzYwYzQ2MzU5YTgxNjJkODZhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmxpbmtzLnNlbGYuaHJlZiJ9LHsidmFsdWUiOiIxMDM3NjM0NGJiMWM4YmVlNWRmMzQ2NzU1YmVkYjMyMjMwZDdiZGNmYmE3YzM2Zjc0OGI2ODgwYzJjZjMwNjUyIiwicGF0aCI6Im5ldHdvcmsuY2hhaW4ifSx7InZhbHVlIjoiMjM5ZjJkZWMwODkxMzczOTUyNzYzMjYzOWNkYjk5NzE2ZGRkYzg0ODRmYWNmYTdhMDYwODY3MzE5MGMyMWIxNyIsInBhdGgiOiJuZXR3b3JrLmNoYWluSWQifV0=", - "privacy": { - "obfuscated": [] - } - } -} \ No newline at end of file diff --git a/tests/fixtures/oa/bill-of-lading-operative.json b/tests/fixtures/oa/bill-of-lading-operative.json deleted file mode 100644 index 6149f37..0000000 --- a/tests/fixtures/oa/bill-of-lading-operative.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "version": "https://schema.openattestation.com/2.0/schema.json", - "data": { - "issuers": [ - { - "id": "fa6f4e9c-1ab2-4b2a-bb50-77eed13b9bfb:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", - "name": "8ed0fb05-f097-4aae-a0a1-784d38a743d9:string:DEMO", - "revocation": { - "type": "ca5f9bf4-46df-4fb9-873c-47ceed337f6d:string:NONE" - }, - "tokenRegistry": "01792f66-39b2-49fc-9126-b9e8d9e4a157:string:0x7202363bBDb126036F7C3243Ebac310d9d145040", - "identityProof": { - "type": "f9952f4c-7d4a-4295-be3a-67cb365bac35:string:DID", - "key": "68fa777b-9d42-44c0-9601-7b4e9ba49571:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller" - } - } - ], - "network": { - "chain": "28660310-1ca6-4bbe-9cb3-2f76277a9aae:string:FREE", - "chainId": "f72d372c-cf27-4dab-a940-099d72e14af1:string:101010" - }, - "$template": { - "type": "e23b623b-e112-4c36-8ea5-b29bc8ac65c3:string:EMBEDDED_RENDERER", - "name": "249dc4a2-c351-4525-9cd7-74669a73f8c5:string:BILL_OF_LADING_CARRIER", - "url": "0ad9e7e9-269c-4717-9092-cbb637ec96be:string:https://generic-templates.tradetrust.io" - }, - "links": { - "self": { - "href": "7676f1b5-94a6-4148-87f3-27fd2d71d713:string:https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2FOA%2Fbill-of-lading-operative.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" - } - }, - "shipper": { - "name": "a731ee52-45b8-4e44-b6c3-5325cf589aed:string:MAERSK Co.", - "address": { - "street": "6cce8eb7-d31e-4d45-a33e-40701bb3b09f:string:101 ORCHARD ROAD", - "country": "d23436a2-cf57-40b3-83fc-25e18c7567bd:string:Singapore" - } - }, - "consignee": { - "toOrderOfText": "4cb008da-42bf-47df-b997-e425188fd4ab:string:TO ORDER", - "name": "2e8a756f-b781-474b-a8c4-a2e4d075acb2:string:xyz Natural Foods Inc." - }, - "notifyParty": { - "name": "5a0db497-23a1-4f31-a63a-54131092a6e8:string:ABC – Import Manager, xyz Natural Foods" - }, - "packages": [ - { - "packagesDescription": "7a1ff50d-b012-45f0-8e07-9ae1acf1373f:string:Organic Cashew Kernels (25kg bags)", - "packagesMeasurement": "4bb01ed3-269c-4d5b-8a4b-7fa00a2850bf:string:100 Bags", - "packagesWeight": "87d39d01-9f08-4ba5-be93-dba2a4735eb0:string:2.65 MT" - }, - { - "packagesDescription": "f5271232-650e-42fd-af3f-a6e3aba07f99:string:Roasted Chickpeas (20kg packs)", - "packagesMeasurement": "397d0424-f2db-4ff7-8721-85018bb5d101:string:60 Bundles", - "packagesWeight": "43a52be1-3f89-4908-98ff-dad47bbc41f8:string:\t1.3" - } - ], - "blNumber": "cbc1ef82-2681-47ad-a4a2-c62cd6a1c8ea:string:SGCNM21566325", - "scac": "5b5b7140-e7b0-443b-bda9-8585c7fd9a18:string:SGPU", - "carrierName": "512ab0f1-1129-4d1d-9f5c-252a8a36fb51:string:Vikram Rao", - "logo": "841a64b1-ea46-49b5-9ad0-9d8417b3d326:string:data:image/png;base64,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", - "onwardInlandRouting": "4b5b6b02-f2e1-43e4-ac79-e904d7152319:string:Rail to Johor Port → Trucking to final inland delivery point (Long Beach, USA)", - "vessel": "a4424c01-ceb9-461c-a4cd-4fa4f02dd5de:string:MAERSK NATALIA", - "voyageNo": "4dab22b5-d56f-4a4f-b2d9-d88761d7301d:string:7831W", - "portOfLoading": "c1a02569-d88b-4f47-9cbf-3e3aed816198:string:Singapore", - "portOfDischarge": "7f7cde04-613b-4d6c-ae71-7b759ac6beed:string:LOS ANGELES, CA", - "placeOfReceipt": "ae4363de-f061-458e-abb9-7ce4a3c110ca:string:JURONG PORT, SINGAPORE", - "placeOfDelivery": "9e5a6fdc-8c82-4b93-b9b0-8c4cd2ae6b66:string:Long Beach Distribution Center, CA", - "placeOfIssueBL": "37e5f1bf-9646-4491-8ca6-155a384d5b26:string:Singapore", - "numberOfOriginalBL": "041bbd52-3d08-478d-8d71-9e325ad80250:string:3", - "dateOfIssueBL": "ea6688b9-43da-4865-9a04-a35cbe0ca808:string:2025-06-05", - "shippedOnBoardDate": "10ab5046-a48a-43d7-8dca-8645ec265fc5:string:2025-06-05", - "signForTermsAndCondition": "f6a95cc5-1383-4eef-99d9-3e6e697ba6ac:string:The carrier accepts the goods as described in good order and condition for carriage under the terms stated herein and subject to the Carrier's standard Bill of Lading Terms and Conditions.", - "signedForCarrierText": "7d43161b-eae5-43e1-8839-50af6d23d606:string:John Doe", - "carrierSignature": "96c5401d-4ae2-484c-bb8e-d1e3c4f1a38c:string:data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=", - "termsOfCarriage": "b2d948c8-90e1-4a70-9a1c-42341598d70a:string:All shipments are subject to the Hague-Visby Rules. The carrier assumes liability only for loss or damage due to its own negligence. Responsibility ceases at the time goods are delivered to the consignee or their agent. Claims must be submitted within 7 working days of delivery.", - "attachments": [ - { - "data": "a423225f-b1a4-48fb-8752-aee3d4acd2ad:string:JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", - "filename": "cb7f0e3e-9844-4351-a624-26453e9c0722:string:blank.pdf", - "type": "c775181f-486e-48d6-b9f8-ac513fbb4e22:string:application/pdf" - }, - { - "data": "82655730-5bbf-4e0a-91c9-f5261fe30232:string:e30=", - "filename": "16bf3666-73e6-48c5-ad6a-fd8fc1d20d29:string:empty.json", - "type": "fedd2c06-10a2-4d3e-ac37-5509709b30c7:string:application/json" - }, - { - "data": "69eb1548-60d3-43f7-8848-c7a30085ab59:string:JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==", - "filename": "b0830aac-50c4-43b5-b50a-088591881ce4:string:sample.pdf", - "type": "a721afdb-b6d6-4283-94a6-694b837ee9df:string:application/pdf" - }, - { - "data": "edb4e1ac-4a16-43e9-9ee6-94c1a073fc17:string:JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", - "filename": "052fb3bd-1ff0-485c-8db0-bce4dc5d2fc0:string:veryverylongfilenameoverhereveryverylongfilenameoverhere.pdf", - "type": "912a08da-7801-4c2b-a856-9d8beebca47d:string:application/pdf" - } - ] - }, - "signature": { - "type": "SHA3MerkleProof", - "targetHash": "b7f09dfa7d4781ea4374e82c5327b3e8e6ca4d37aeb4745a68998b620d17ec4b", - "proof": [], - "merkleRoot": "b7f09dfa7d4781ea4374e82c5327b3e8e6ca4d37aeb4745a68998b620d17ec4b" - }, - "proof": [ - { - "type": "OpenAttestationSignature2018", - "created": "2025-08-21T13:53:08.223Z", - "proofPurpose": "assertionMethod", - "verificationMethod": "did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller", - "signature": "0x8ff0e4e118335965061ea8d9eeb696abf4c0e75d75a68aa12069f259d5f959481432a7d66559306e1a7f523eee0c11e3680b9b7b5dd5801f2c943bdcc475a7e31b" - } - ] -} \ No newline at end of file diff --git a/tests/fixtures/oa/certificate-of-origin-default.json b/tests/fixtures/oa/certificate-of-origin-default.json deleted file mode 100644 index b3f533b..0000000 --- a/tests/fixtures/oa/certificate-of-origin-default.json +++ /dev/null @@ -1,167 +0,0 @@ -{ - "version": "https://schema.openattestation.com/2.0/schema.json", - "data": { - "issuers": [ - { - "id": "754d428d-9ffd-451e-8224-38afb65943a2:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", - "name": "99313671-a504-442b-a9a9-338a2b7e8a75:string:DEMO STORE", - "revocation": { - "type": "114eb88a-cb8d-4659-adbb-5f857d636f9a:string:NONE" - }, - "identityProof": { - "type": "e9c79a03-21c0-4ad1-bdaa-fed23e770c5a:string:DID", - "key": "a3edd524-dd6a-40b6-ac09-8a25940ca0de:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller" - } - } - ], - "network": { - "chain": "e28c5040-d7df-4580-9ee2-d11a90e7549e:string:FREE", - "chainId": "5582af29-6311-4674-a4ba-cf88f88e5ad8:string:101010" - }, - "$template": { - "type": "4ce2d55e-cdc0-43e8-8ab9-d935ddcb2342:string:EMBEDDED_RENDERER", - "name": "98556820-c86f-46b8-a0f7-aaf0fc581857:string:CHAFTA_COO", - "url": "3961d1a2-7a18-4772-8e76-0180195156bb:string:https://generic-templates.tradetrust.io" - }, - "firstSignatoryAuthentication": { - "signature": "35779d25-ae79-4e6a-ad46-21cf9b13246d:string:data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=" - }, - "supplyChainConsignment": { - "exportCountry": { - "code": "d64748c6-0073-4390-b100-dd46d72e8fe4:string:IN" - }, - "exporter": { - "postalAddress": { - "line1": "2a26839f-7298-4f32-90b7-5e143ce045cd:string:Plot 123, Industrial Estate", - "line2": "2c3c1154-340b-45f6-85bf-614941bd4bf4:string:Sector 5, Tech Park", - "cityName": "854ad5e7-f029-4acb-a23d-0ecf61a904a2:string:Mumbai", - "postcode": "3755c153-8bb4-4b54-8e6a-d536a66c83a3:string:400001", - "countrySubDivisionName": "ee35a80a-204d-44e4-b2a1-e2c09ce3b188:string:Maharashtra", - "countryCode": "898c7bfd-a07b-4822-865f-421eda226bff:string:In" - }, - "iD": "9c2762de-c486-4926-8b25-d06e29dc0536:string:EXP-IN-XYZ-0001", - "name": "68251700-9677-4e94-806e-10e328a3d0ba:string:XYZ Exports Pvt. Ltd." - }, - "importCountry": { - "code": "1b382857-8ab9-40b1-afbe-07bb6b2a0bbf:string:GB" - }, - "importer": { - "postalAddress": { - "line1": "cd60002e-7e8d-4bcc-ae49-2ca257342781:string:Unit 88, Commercial Docks", - "line2": "1c549937-21b0-48b1-8306-986c50a695c4:string:Trade Zone West", - "cityName": "14058f21-7fff-44b6-b165-d5ee38986d31:string:London", - "postcode": "dc83cafa-6e5a-408f-bd6f-aba910015ba1:string:E16 4HQ", - "countrySubDivisionName": "ec68fdf6-f32d-4acd-9e54-240b20b98a38:string:Greater London", - "countryCode": "0f98d1f1-a6c6-4fe7-ac32-ff19acb5f92c:string:GB" - }, - "iD": "cb84099b-8d32-4149-bc61-dcac3181207b:string:IMP-UK-XYZ-9999", - "name": "fea99ede-2f34-4cc1-bc3a-102f5350ef86:string:XYZ Foods Ltd." - }, - "includedConsignmentItems": [ - { - "crossBorderRegulatoryProcedure": { - "originCriteriaText": "b2474991-0665-4cb0-8136-b4376d6c6a33:string:Gross Volume: 2.5 CBM" - }, - "manufacturer": { - "postalAddress": { - "line1": "9cdc706f-d3d3-4723-9b93-597dfb380bf0:string:Plot 45, Agro Park", - "line2": "161eff98-8ecb-4eaf-9471-303cdb3546dd:string:Phase II", - "cityName": "79acb9d9-ad41-49bd-9652-d8afcc2fa256:string:Karnal", - "postcode": "6cb4ffa6-c788-4ee5-b41c-4fec7d3c545e:string:132001", - "countrySubDivisionName": "3b33e818-6a47-45d5-88d9-80a73430db58:string:Haryana", - "countryCode": "595b5f5d-0403-453d-8a96-4bdd6eec52cc:string:in" - }, - "iD": "20f7c163-2cbd-4221-9327-0fc002167966:string:MFG-IN-XYZ-001", - "name": "3238b26f-1a16-4579-92ca-515583488e7a:string:XYZ Agro Industries" - }, - "tradeLineItems": [ - { - "invoiceReference": { - "attachedBinaryFile": { - "uRI": "bd95f78a-b91c-463a-aa9a-1184c4e6e2b0:string:https://docs.tweglobal.com/8c624a35-9497-41fb-a548-cb5cf43bac21.pdf" - }, - "iD": "3c2781d7-c075-456f-8570-ba5ff207efaf:string: INV-XYZ-0001", - "formattedIssueDateTime": "710c0a3b-168d-426b-abdd-ebec8909ed78:string:2025-06-10T10:09:00.000Z" - }, - "tradeProduct": { - "harmonisedTariffCode": { - "classCode": "aba71884-cdd2-4d95-a30d-efe8ecbfa0f4:string:10063090", - "className": "5c32be41-583a-4fe6-9144-ea0370840393:string:Semi-milled or wholly milled rice, whether or not polished or glazed" - }, - "originCountry": { - "code": "45a37c72-ba8b-40cf-984c-3f820a85eac7:string:IN" - }, - "iD": "4720139d-2821-4cd3-9eb5-9804d86c19cb:string:TP-XYZ-1001", - "description": "fc8ba8e1-1e1c-42a3-b051-cc9a4adedf48:string:XYZ Premium Basmati Rice, 25kg Bag" - }, - "transportPackages": [ - { - "iD": "63d07b67-9fc3-451f-830e-293577352b90:string:PKG-XYZ-0001", - "grossVolume": "ddb61b3e-da02-4816-b7f8-f0356e627d9d:string:3.0 CBM", - "grossWeight": "bf4c0354-3f4e-47fc-a26e-9f9946570605:string:1000 kg" - } - ], - "sequenceNumber": "645c1034-6fc4-471d-9bd4-633ff530e117:number:1" - } - ], - "iD": "99cc7004-af3e-4921-8d72-58d47d811d01:string:10063090", - "information": "571a2c29-4fcf-4694-992a-bf242bb58ff3:string:Sample Rice Product, 25kg Bag" - } - ], - "loadingBaseportLocation": { - "iD": "64bf0e3e-a6bf-41c9-be42-61168c538a55:string:PORT-IN-XYZ", - "name": "26d23a82-eb35-4ab0-a886-373112059d2f:string:Nhava Sheva (JNPT), India" - }, - "mainCarriageTransportMovement": { - "usedTransportMeans": { - "name": "8f328a2d-84d5-4f73-81b0-600c1785e166:string:Vessel – XYZ CARRIER", - "iD": "017b50e4-da36-4159-98df-7d6dbf42afd1:string:VSL-XYZ-0001" - }, - "departureEvent": { - "departureDateTime": "b4f8b6c0-9397-4e8c-bb0e-d7f2ed9c4857:string:2025-06-18T10:17:00.000Z" - }, - "iD": "c484f17b-e364-4e4d-813c-1c2891922ae3:string:MCTM-XYZ-1234", - "information": "91ec2f31-2b01-40bb-90b4-f7142b759610:string:Ocean Freight via XYZ Shipping Lines" - }, - "unloadingBaseportLocation": { - "iD": "7bd91422-902d-4fe2-8ec5-ef7543e2bd25:string:PORT-UK-XYZ", - "name": "a166db24-2ce7-43ad-a66d-504e5791bfe5:string:Port of Felixstowe, United Kingdom" - }, - "iD": "fb940979-043c-4ea8-a6a4-2f0adbd53aeb:string:CONS-FAKE-12345" - }, - "iD": "9049a350-027c-4319-a95a-e4228e762284:string:COO-FAKE-0001", - "issueDateTime": "1995060c-7834-4afb-916b-05dcc51eaf86:string:2025-06-18T10:09:00.000Z", - "attachments": [ - { - "data": "2b4a88df-aabe-413e-bdd3-7eaae1ea92b6:string:JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==", - "filename": "58243cfb-be63-4bfb-be7c-1af7c63ee9cf:string:sample.pdf", - "type": "5f416e01-88d7-4af3-b620-7051eb493d9d:string:application/pdf" - }, - { - "data": "eb357020-d72b-4bfa-a54e-2db451ea5c44:string:JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", - "filename": "261a20f8-9bfc-4c31-b522-21081a8b523c:string:veryverylongfilenameoverhereveryverylongfilenameoverhere.pdf", - "type": "6526eadc-303d-4ea7-96fa-699752656f9c:string:application/pdf" - } - ], - "links": { - "self": { - "href": "07b25fd3-89e4-435d-8ebe-b17e7dba7bb7:string:https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2FOA%2Fcertificate-of-origin-default.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" - } - } - }, - "signature": { - "type": "SHA3MerkleProof", - "targetHash": "656b09e9a4cb9aa9e24718b0b88e2dc38aabd3cd2500acbd78476fc226f80cbd", - "proof": [], - "merkleRoot": "656b09e9a4cb9aa9e24718b0b88e2dc38aabd3cd2500acbd78476fc226f80cbd" - }, - "proof": [ - { - "type": "OpenAttestationSignature2018", - "created": "2025-08-21T14:00:49.644Z", - "proofPurpose": "assertionMethod", - "verificationMethod": "did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller", - "signature": "0x3395ea9fc2cae1ced5482100c3532b435f2a432e0a1cd801576a0e17bf12ad4075408e99be26b577371aedfccf46cb5786c39b0da6d8eec29e8791c64d3def831c" - } - ] -} \ No newline at end of file diff --git a/tests/fixtures/oa/certificate-of-origin-redacted.json b/tests/fixtures/oa/certificate-of-origin-redacted.json deleted file mode 100644 index 30b2dd0..0000000 --- a/tests/fixtures/oa/certificate-of-origin-redacted.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "version": "https://schema.openattestation.com/2.0/schema.json", - "data": { - "issuers": [ - { - "id": "f6d613a5-2a54-426f-a7db-e80684e6b702:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", - "name": "a50cf38f-b707-4022-8840-ea77da955fdd:string:DEMO STORE", - "revocation": { - "type": "71dccf61-f581-42aa-98a9-b5f6962b4df3:string:NONE" - }, - "identityProof": { - "type": "3f467050-2dd5-4790-a4b3-0a8130fa23d3:string:DID", - "key": "65aa20a7-6b1b-4c29-b528-450f650d99aa:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller" - } - } - ], - "network": { - "chain": "4c679a48-07e2-4c09-affa-2ff088c14866:string:FREE", - "chainId": "9e5be908-50af-462c-a0b3-aa50972cd988:string:101010" - }, - "$template": { - "type": "5f441941-dfc5-4688-9ec0-a73abf4e4073:string:EMBEDDED_RENDERER", - "name": "89f05b41-326e-4b00-b1c7-fa3b7e0ac899:string:CHAFTA_COO", - "url": "c9c33a49-0a82-4554-a21f-3d596e782027:string:https://generic-templates.tradetrust.io" - }, - "firstSignatoryAuthentication": { - "signature": "b735e37c-525a-4471-b5a0-1e9472687022:string:data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=" - }, - "supplyChainConsignment": { - "exportCountry": { - "code": "cde9d7af-ce47-4eca-9883-2da73bcd8295:string:IN" - }, - "exporter": { - "postalAddress": { - "line1": "79cc004a-a601-45d6-bc58-c1536d090967:string:Plot 123, Industrial Estate", - "line2": "c4ba03e1-ff9f-4beb-8a12-01b09e17eba8:string:Sector 5, Tech Park", - "cityName": "aa8b7da6-9c90-4b84-9218-251b4372ceb2:string:Mumbai", - "postcode": "601bf4b0-8745-4995-ac4d-db89a9e4bbbb:string:400001", - "countrySubDivisionName": "126c435a-aaea-4256-b2e7-0f7cf050e9fc:string:Maharashtra", - "countryCode": "40a395cc-a559-4195-9046-2858c299432c:string:In" - }, - "iD": "11544bd4-86ab-41e0-8b61-a8eb423bd528:string:EXP-IN-XYZ-0001", - "name": "c887d7ec-2244-4e96-a04f-aaaf5b841b49:string:XYZ Exports Pvt. Ltd." - }, - "importCountry": { - "code": "55ed96f6-699a-4855-b843-42e97c491a3e:string:GB" - }, - "includedConsignmentItems": [ - { - "crossBorderRegulatoryProcedure": { - "originCriteriaText": "c4240203-fc3a-431d-a99d-764f7144f29c:string:Gross Volume: 2.5 CBM" - }, - "tradeLineItems": [ - { - "invoiceReference": { - "attachedBinaryFile": { - "uRI": "1a81099b-7122-411f-895f-60fb2e5ae19f:string:https://docs.tweglobal.com/8c624a35-9497-41fb-a548-cb5cf43bac21.pdf" - }, - "iD": "9d549e32-1013-48ad-adeb-9de057a7c450:string: INV-XYZ-0001", - "formattedIssueDateTime": "cb12bab9-f88f-4657-beec-8e6a271ff471:string:2025-06-10T10:09:00.000Z" - }, - "tradeProduct": { - "harmonisedTariffCode": { - "classCode": "9b1e556d-8a34-4b21-9e0c-76cbe3fa59f4:string:10063090", - "className": "fca3f9a3-8218-4b1c-bcf4-0ee435f548cb:string:Semi-milled or wholly milled rice, whether or not polished or glazed" - }, - "originCountry": { - "code": "26df7bb4-8cdf-4dd0-8df1-7ed969912560:string:IN" - }, - "iD": "9611c4ee-6ad8-42b0-8762-eade4ca8449f:string:TP-XYZ-1001", - "description": "b49815d1-1efc-4bd2-9c1f-1ef99a79835c:string:XYZ Premium Basmati Rice, 25kg Bag" - }, - "transportPackages": [ - { - "iD": "29ced890-565d-4525-9713-3d7996fbc987:string:PKG-XYZ-0001", - "grossVolume": "9994486e-e904-43ae-a0e5-fc6a8e2a0357:string:3.0 CBM", - "grossWeight": "2c0f35c9-59ec-4e7f-a20f-5163864332fd:string:1000 kg" - } - ], - "sequenceNumber": "4bfc8068-dd1a-4918-95c5-5726879a33f1:number:1" - } - ], - "iD": "d2a6f155-9358-4ee7-9b9c-4aa8eb8c672d:string:10063090", - "information": "0a489d9f-8f14-4d1c-ac94-a6b0799dac7e:string:Sample Rice Product, 25kg Bag" - } - ], - "mainCarriageTransportMovement": { - "usedTransportMeans": { - "name": "f3676147-d86e-4c9a-ac8d-fa6c84098033:string:Vessel – XYZ CARRIER", - "iD": "040d9f3b-7117-4c1c-acb6-79df8647dbfe:string:VSL-XYZ-0001" - }, - "departureEvent": { - "departureDateTime": "fc509fdd-dfd5-4ed7-9542-30e59adea252:string:2025-06-18T10:17:00.000Z" - }, - "iD": "d1496b17-5d59-484b-8a46-7099adfd6619:string:MCTM-XYZ-1234", - "information": "575984c7-ee94-4bfa-8b16-47e3b69caaa8:string:Ocean Freight via XYZ Shipping Lines" - }, - "unloadingBaseportLocation": { - "iD": "da4989c2-f7f9-4f40-bd4c-b07413e8bd20:string:PORT-UK-XYZ", - "name": "c1f1b659-9be5-4cd1-8988-e597d92a81f3:string:Port of Felixstowe, United Kingdom" - }, - "iD": "c8faa94e-68b0-48aa-8b03-22386e9994b1:string:CONS-FAKE-12345" - }, - "iD": "a0fb5596-100b-4111-bc72-10e03260329b:string:COO-FAKE-0001", - "issueDateTime": "1b5ae600-1bd3-4370-aa3a-f8aea81dcdfd:string:2025-06-18T10:09:00.000Z", - "attachments": [ - { - "data": "ca3dbb17-e752-4fb1-a91d-6178eb83efb7:string:JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==", - "filename": "05b26bf1-2d48-45a1-9cec-ad8f92c37b33:string:sample.pdf", - "type": "380dc5e1-10e6-4e06-b228-fd36d7233dd7:string:application/pdf" - }, - { - "data": "c4ec6f12-d368-42a4-a102-20b88e7d19d9:string:JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", - "filename": "752ba85c-b675-421e-ac79-304df93d8ef9:string:veryverylongfilenameoverhereveryverylongfilenameoverhere.pdf", - "type": "806e5597-fcc6-4ded-9311-fbb78531c125:string:application/pdf" - } - ], - "links": { - "self": { - "href": "92567c15-b7bf-4015-a9e5-7f632bcbdbd5:string:https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2FOA%2Fcertificate-of-origin-redacted.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" - } - } - }, - "signature": { - "type": "SHA3MerkleProof", - "targetHash": "d1452863da30b45dd5925a9454730b6d2999f293e8f3fae1f7073a4695897893", - "proof": [], - "merkleRoot": "d1452863da30b45dd5925a9454730b6d2999f293e8f3fae1f7073a4695897893" - }, - "proof": [ - { - "type": "OpenAttestationSignature2018", - "created": "2025-08-21T14:01:12.551Z", - "proofPurpose": "assertionMethod", - "verificationMethod": "did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller", - "signature": "0x9409ba94d604242b0f1ab16c2ecf312008b94f52b684278d1d6f6a27d36f80aa55d9c7e6276f99079c09b0362fb95e9bd5238087b406a79511179a90287479451b" - } - ], - "privacy": { - "obfuscatedData": [ - "a79b805960f32ef91adc7a52ff136abcddd7456bb6634699858c3299b15ea30c", - "7240630fe266fc58ba65931aa51241baa064dd99682e59e9e83b1861698d8fee", - "1b05f8501849bf165f5fb0f3758396af7a725e9b83dc4d78db3e346fb24bd0f6", - "276ec228bb7a335e42e59400eb42b2ca0797edb8d806bf11958d6aa711c87a4c", - "0203fe0ac0e82456b788534dc60ef000eda6f443ebfe5a1e3446c2d0e4ce6974", - "7325565592fc1dd9d93b32d013ba8693775f91ae1250d42f436d269e8df46a99", - "0b2bfb0500e3a6107758e3ee7b24a01afb00bef55b431568051223695bc17a7e", - "2d0c0a0133755697748ab43e6c8225f6ac8fb318479e9d236eb62480d24537af", - "fb97b1d28cdee06f54437a1a8ddc7739d16b5e79be9bbb7900b71c3eaa7b0920", - "17a2f0e5c8673d889a70662fe5fa4684a9743c834160f7764325249693ceb27c", - "6212c08e33f1ec2defc7745a044ec1decca341e4635025a5c8741593aa46d6e4", - "00e32dacbce6a3e45de1c4ac19b6c869d4274771f35722dcab7d899dd1610efd", - "11306bddcf18edc4a38823ec0229042030ba9c3ce89de87c552047bd2d911c4b", - "99eace676b398bb6dd0ab447e6781d3411e811f04badf90754b1edf3c1a07d0e", - "c8985c36f8325a396d97a6751e6919c46499ea2fb2661bd40e8c7c8f8c0dff1b", - "8a5658ec4f6bea95d977503aa52998f1dddd8fde1825f0b17287eb57b4394500", - "e0180a7438fef488c73308dd7243c3233ea1728b46e0fd65970383550d773843", - "01d079a4c49409e90ac19e24834632e041b9d1a6a711ad990d7b8c80179a18ab" - ] - } -} \ No newline at end of file diff --git a/tests/fixtures/oa/electronic-promissory-note-inoperative.json b/tests/fixtures/oa/electronic-promissory-note-inoperative.json deleted file mode 100644 index 6a40a44..0000000 --- a/tests/fixtures/oa/electronic-promissory-note-inoperative.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "version": "https://schema.openattestation.com/2.0/schema.json", - "data": { - "issuers": [ - { - "id": "89e619e8-a715-4297-898f-c9147c936a13:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", - "name": "bfcc1275-369d-4d94-8b9f-4f4b9c6244dc:string:DEMO STORE", - "revocation": { - "type": "73afa4c5-3aa6-4689-82c0-bfc5100e0e10:string:NONE" - }, - "tokenRegistry": "cee96408-6a9c-4db2-99ad-3cf67101f64c:string:0x7202363bBDb126036F7C3243Ebac310d9d145040", - "identityProof": { - "type": "2491effe-65a9-4ccc-a391-8175610b5383:string:DID", - "key": "854d99cb-b2c8-4df6-b033-684a7b49a3a8:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller" - } - } - ], - "network": { - "chain": "0f33eb03-7b51-4792-9f68-43ef0634756c:string:FREE", - "chainId": "dd81db90-bf81-4be6-9c41-9af23743b763:string:101010" - }, - "$template": { - "type": "8d476854-2e22-429b-ad95-32cda496bbb1:string:EMBEDDED_RENDERER", - "name": "f3453160-9ba1-437f-bbe4-192b3186d9e9:string:PROMISSORY_NOTE", - "url": "e44c4b39-6b3c-4340-b069-3441cea46d4c:string:https://generic-templates.tradetrust.io" - }, - "links": { - "self": { - "href": "45dea79e-d378-417d-b0af-8d529106432e:string:https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2FOA%2Felectronic-promissory-note-inoperative.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" - } - }, - "type": ["6246c6f3-802d-4877-bc48-37a6db4cefce:string:PromissoryNote"], - "drawerCompanyName": "6ba57d43-3b76-48ae-a9c7-8caf12b37ad4:string:XYZ Exports Pvt. Ltd.", - "drawerCompanyNo": "daac2130-b0a3-4a78-8b85-e3d21dabe752:string:CIN-XYZ1234567", - "drawerJurisdiction": "ce2399ee-e52b-4825-b8b1-6d3cbc210e6c:string:India", - "drawerEmail": "5c440e61-6aa1-4cc2-9470-0d6d357d7664:string:accounts@xyzexports.com", - "drawerWalletAddress": "8559cc37-367e-4211-bb2d-f1485472fdb4:string:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", - "drawerPlaceOfIssue": "9e833d79-6f32-4382-bccd-11c86400e220:string:Mumbai, India", - "draweeCompanyName": "26fe49d5-dbf3-44ad-a8bc-ccd2a68a6ebf:string:XYZ Imports Ltd.", - "draweeCompanyNo": "310d5978-0a2d-4560-9dcd-c8eaa5311e69:string:REG-XYZ9876543", - "draweeJurisdiction": "dd17b411-500c-4453-90bf-49c33ff2d916:string:United Kingdom", - "draweeEmail": "210a2df3-ba9f-42e1-814d-5033b2c193f3:string:finance@xyzimports.co.uk", - "draweeWalletAddress": "e14d6999-537e-4dd6-b87d-84f9c3ab2940:string:0xca93690bb57eeab273c796a9309246bc0fb93649", - "dueDate": "9e57d162-2919-4177-96b5-7cc4084161b2:string:2025-06-19", - "currency": "a6eb075b-2044-429e-a911-c4fd72c853bf:string:USD", - "amount": "62f93c17-c597-492c-be55-b3fb382cc240:string:50,000.00", - "clause": "f19c1d55-6ab9-435b-a889-b6194d5fad88:string:Payment to be made in full without set-off or counterclaim, subject to terms agreed between Drawer and Drawee.", - "signerName": "9c6300b3-7334-44f6-a97e-31d5df7bdf80:string:John Doe", - "signerPosition": "a8a62f86-19a2-44aa-aa57-3d0eb9a171d1:string:Chief Financial Officer", - "signerEmail": "6186d335-7520-4a3a-bbe8-76b8eb4682d8:string:j.doe@xyzexports.com", - "signerTimeStamp": "dc5c3742-1359-4ead-8869-bd3555065692:string:2025-06-19", - "logo": "d3173012-4152-4d8d-99ba-cdc8b0bce30d:string:data:image/png;base64,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", - "pNoteId": "0b45657b-d094-4537-92d1-33e9905e5239:string:PN-9081-2231-SGP", - "commitmentDate": "043c9541-fcfb-435a-b66b-ae85253b11da:string:2025-06-19" - }, - "signature": { - "type": "SHA3MerkleProof", - "targetHash": "6f968142ce6e5de930ca759b7fec8764d989e195f99245aabc493615825dee69", - "proof": [], - "merkleRoot": "6f968142ce6e5de930ca759b7fec8764d989e195f99245aabc493615825dee69" - }, - "proof": [ - { - "type": "OpenAttestationSignature2018", - "created": "2025-08-22T02:19:11.283Z", - "proofPurpose": "assertionMethod", - "verificationMethod": "did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller", - "signature": "0xf5f60011568e131ad4eeb024a8cd7669d8f53123ebbd2da4a1a24b53505ed07c0d9a40d472702b1eec45d364bdb3258c2724ded0b9feb37b5153e2389161c3571c" - } - ] -} \ No newline at end of file diff --git a/tests/fixtures/oa/invoice-expired.json b/tests/fixtures/oa/invoice-expired.json deleted file mode 100644 index c15d3a9..0000000 --- a/tests/fixtures/oa/invoice-expired.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "version": "https://schema.openattestation.com/2.0/schema.json", - "data": { - "issuers": [ - { - "id": "5cde34fc-8c2f-4e5a-8517-3c12ebfd62d5:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", - "name": "fd051ec0-1f58-40c2-9d49-651a59b0674a:string:DEMO STORE", - "revocation": { - "type": "bc8e5fe3-2272-4c5a-a2e7-dc4eff50b224:string:NONE" - }, - "identityProof": { - "type": "d99a6fcc-6312-4a28-b97e-f9e31e1f28df:string:DID", - "key": "80e1a125-b31c-4791-954d-caf9f2db6b07:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller" - } - } - ], - "billFrom": { - "name": "87e4e4b7-eb67-4330-8f46-435dc298c4ed:string:ABC Exports Pvt. Ltd.", - "streetAddress": "4544ba4e-20ff-4d70-b97a-9bf490a57a89:string:Plot 123, Industrial Area", - "city": "d02fc5af-b400-4f20-a558-8c6430e59092:string:Metropolis", - "postalCode": "6630c113-9726-4f1f-aecc-72f70138507c:string:123456", - "phoneNumber": "017bcc98-6f14-4c46-b046-2e910314b9c1:string:+91-11-2222-3333" - }, - "billTo": { - "company": { - "name": "36e6d841-7556-4c24-ba8b-63a6320d33a2:string:XYZ Foods Ltd.", - "streetAddress": "fb804c7e-3c65-469b-9d0d-a80f075a2816:string:Suite 45, Business Bay", - "city": "8a849edc-21b0-411a-9992-7542a4ccb973:string:Gotham", - "postalCode": "69f255d6-1daa-45b1-a1ed-d4d33852560c:string:987654", - "phoneNumber": "990aa092-8d8b-4aa8-a7ac-3d661022aced:string:+44-20-1111-2222" - }, - "name": "72828352-03bd-4020-8e89-ff72a02fc2b1:string:John Doe", - "email": "8e006220-05a5-44e5-8ae4-03683b34c8e0:string:john.doe@xyzfoods.com" - }, - "billableItems": [ - { - "description": "075b633a-46ce-4326-91ab-42eb8ceda2f9:string:Sample Product A (10kg Packs)", - "quantity": "6f1955c2-76b3-4393-bd16-568e38778d50:string:50", - "unitPrice": "e493b503-9f32-4514-b7e5-05a1900da803:string:15.00", - "amount": "fc042545-7242-46ee-8d16-22cc56fb84a1:string:750.00" - }, - { - "description": "bb9d52cd-cda4-4e27-8639-4852fa8d0245:string:Shipping Charges", - "quantity": "2192922b-38e6-4db4-80a6-f039a3f8147c:string:1", - "unitPrice": "b6bdd500-e725-4f27-9d7b-5ddf0a74660d:string:100", - "amount": "611e7783-4c01-468b-acca-776e47b82aaa:string:100" - } - ], - "$template": { - "type": "209e57fd-7ad1-466f-9e16-53df2726adaa:string:EMBEDDED_RENDERER", - "name": "5c000807-0f26-41f5-bb20-3924f99c24ce:string:INVOICE", - "url": "80ee5742-2e00-426c-9c95-f6d3ad23a99f:string:https://generic-templates.tradetrust.io" - }, - "network": { - "chain": "55ad7033-4b5c-453f-9085-98cb2277a630:string:FREE", - "chainId": "289e1750-9fd4-4da7-98e3-d5c443b0ffb6:string:101010" - }, - "id": "946ed010-3797-41b4-879e-4b68d60724f3:string:INV-FAKE-0001", - "date": "7f748d2c-1e73-4eff-8233-4d80439581cd:string:2025-06-18", - "customerId": "79ad01dc-ff11-439c-bf8f-f06ed53f32c8:string:CUST-XYZ-0001", - "terms": "358c0024-3e7f-43e3-bb5d-069815ea042a:string:Net 15 Days", - "subtotal": "aaf8ab59-49dd-4ece-b00f-d3107092e265:string:$850.00", - "tax": "4e2d0726-a76a-41c6-af12-f09d9c1273b8:string:10", - "taxTotal": "59eb3fc4-6bb8-4dfb-9245-457347c53fac:string:85.00", - "total": "1864dc62-3a7b-4b51-bc7f-00d623132c10:string:935.00", - "expirationDate": "3edb07e7-bf46-4a5a-835c-58e499a08d3d:string:2024-12-03T12:19:52Z", - "links": { - "self": { - "href": "19723194-b3e8-431c-9b6c-4fdf7fbe99cf:string:https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2FOA%2Finvoice-expired.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" - } - } - }, - "signature": { - "type": "SHA3MerkleProof", - "targetHash": "8ed8b05cf44bfc3d83ce1bf692b1c6be3aef79dcd7ea9c40a59a0bc295308284", - "proof": [], - "merkleRoot": "8ed8b05cf44bfc3d83ce1bf692b1c6be3aef79dcd7ea9c40a59a0bc295308284" - }, - "proof": [ - { - "type": "OpenAttestationSignature2018", - "created": "2025-08-22T05:35:46.722Z", - "proofPurpose": "assertionMethod", - "verificationMethod": "did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller", - "signature": "0xd3ab3261f29665a8ee76ad2692b721ae6fc1b6456a0c854e8489523b915b6dd5039b04b72df2f5c30f68b46fca39e7f1d17a2bb9e707e38d80a65e5e50bf19161b" - } - ] -} \ No newline at end of file diff --git a/tests/fixtures/oa/invoice-revoked.json b/tests/fixtures/oa/invoice-revoked.json deleted file mode 100644 index b56c1d4..0000000 --- a/tests/fixtures/oa/invoice-revoked.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "version": "https://schema.openattestation.com/2.0/schema.json", - "data": { - "issuers": [ - { - "id": "ab2940ae-4457-4507-88d8-13cc3c67d89f:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638", - "name": "9831dee4-211c-4258-8dec-025f2ff6c12f:string:DEMO STORE", - "revocation": { - "type": "105232a3-902e-4ec6-b557-41072b285476:string:REVOCATION_STORE", - "location": "70a0b696-0541-4075-af28-fbea9e16bc43:string:0x5596c0fC931cfA779B2C4e27D1F54b12DdaeCecd" - }, - "identityProof": { - "type": "adc5d245-acdb-4fbb-96e8-5f859d89a56c:string:DID", - "key": "0f1b3167-af3c-4406-b670-ffe46b01679f:string:did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller" - } - } - ], - "billFrom": { - "name": "cd69c5ed-88e2-4838-a936-4d5bcf3c3edb:string:ABC Exports Pvt. Ltd.", - "streetAddress": "34e01d29-7260-4c44-926c-0d680b971917:string:Plot 123, Industrial Area", - "city": "fbf7c1fe-1fc2-4c42-9d18-1b87131a7420:string:Metropolis", - "postalCode": "9f19f581-54ff-4434-bf8b-3399bca383dd:string:123456", - "phoneNumber": "d0a687f3-d336-4953-819b-ea45a59180a5:string:+91-11-2222-3333" - }, - "billTo": { - "company": { - "name": "0bb13312-3bca-4160-ac1c-7cf6114d85de:string:XYZ Foods Ltd.", - "streetAddress": "5433fc05-a5d9-42d8-9fa0-a8d40b01884b:string:Suite 45, Business Bay", - "city": "574e298b-25c5-454b-9b31-f2822818e3ec:string:Gotham", - "postalCode": "a7b859bc-6001-4ed3-9ef1-bb89cf7943b3:string:987654", - "phoneNumber": "15a08dbe-93d0-4979-be8f-aa645d4fddf1:string:+44-20-1111-2222" - }, - "name": "856f8643-9189-417b-9336-ea8cce076553:string:John Doe", - "email": "04ef8776-0d05-48a2-877c-c9539cf99b43:string:john.doe@xyzfoods.com" - }, - "billableItems": [ - { - "description": "59f0e042-e555-410b-8c25-c39ef08db512:string:Sample Product A (10kg Packs)", - "quantity": "01e14b06-7bb7-4fbe-a742-68cb224c601e:string:50", - "unitPrice": "415c51da-7de5-4b56-adff-f20eeeb542e8:string:15.00", - "amount": "8cb874db-38e8-47ca-9b82-038646603913:string:750.00" - }, - { - "description": "76a52d38-4677-40db-bd71-85a5975d395d:string:Shipping Charges", - "quantity": "b2e73757-9ba9-4430-bd91-4134d312da67:string:1", - "unitPrice": "f864070c-bfff-460a-9be8-d24c9007bd0d:string:100", - "amount": "e9aa4952-77ee-4fbe-a7d9-d10730a30287:string:100" - } - ], - "$template": { - "type": "175b26c7-17fb-4f17-9b5a-b68579fd324a:string:EMBEDDED_RENDERER", - "name": "12351bb6-449f-4732-b6f3-0cb3f921a532:string:INVOICE", - "url": "902fb500-7002-4116-a7a9-dafdc0782d12:string:https://generic-templates.tradetrust.io" - }, - "network": { - "chain": "5938a2d8-6e04-461d-a829-5ae3bf42ac9e:string:FREE", - "chainId": "fc352110-da1e-48a4-af8e-1c35bc4dec8b:string:101010" - }, - "id": "6fb64f27-c35b-44e9-84a7-34c8af276c2c:string:INV-FAKE-0001", - "date": "88a05a8e-845d-40d5-bf05-423dbd22c313:string:2025-06-18", - "customerId": "febf85a0-9c08-4d98-af17-b73407060d58:string:CUST-XYZ-0001", - "terms": "9982f07d-2ac5-42f3-bb41-3441301b21a6:string:Net 15 Days", - "subtotal": "99ecbed8-c403-429c-8083-29524031f085:string:$850.00", - "tax": "9d4e590f-9568-4cc9-b18a-975050c022e4:string:10", - "taxTotal": "36179c99-6552-4edb-a841-d4df562ed1e8:string:85.00", - "total": "e425198c-f325-498d-8d29-0d8ca28a2de9:string:935.00", - "links": { - "self": { - "href": "a1b8d3c1-ecda-4226-9143-022fe2a1b2fe:string:https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.tradetrust.io%2Fstatic%2FOA%2Finvoice-revoked.json%22%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%2F%22%2C%22chainId%22%3A%22101010%22%7D%7D" - } - } - }, - "signature": { - "type": "SHA3MerkleProof", - "targetHash": "1606dd49177f6fc6d30bfb7a5e132543abb675fbd75db805bc5f14930541d9b7", - "proof": [], - "merkleRoot": "1606dd49177f6fc6d30bfb7a5e132543abb675fbd75db805bc5f14930541d9b7" - }, - "proof": [ - { - "type": "OpenAttestationSignature2018", - "created": "2025-08-22T05:34:56.043Z", - "proofPurpose": "assertionMethod", - "verificationMethod": "did:ethr:0x433097a1C1b8a3e9188d8C54eCC057B1D69f1638#controller", - "signature": "0x458517f070af0d7b3d629615507435776aeeef1c0762cc22dac383f164e7fdb95ca8a560277b518d5c4aa7b21f49b067d0dd53a135a3f99c77fa03ab4899b8bf1c" - } - ] -} \ No newline at end of file From 7fb1f610ef2b3e20995b558b9f451cabd775889f Mon Sep 17 00:00:00 2001 From: pennhan-dex Date: Tue, 20 Jan 2026 18:57:29 +0800 Subject: [PATCH 13/18] fix lint --- src/commands/verify.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/commands/verify.ts b/src/commands/verify.ts index dda341c..07a38fb 100644 --- a/src/commands/verify.ts +++ b/src/commands/verify.ts @@ -4,7 +4,6 @@ import { getSupportedNetworkNameFromId, readJsonFile, CaptureConsoleWarnAsync, - NetworkCmdName } from '../utils'; import { getChainId, From 39f68b0393a032b14f770f5d6e5aaf509f708491 Mon Sep 17 00:00:00 2001 From: pennhan-dex Date: Wed, 21 Jan 2026 14:57:02 +0800 Subject: [PATCH 14/18] add missing verify fixtures --- ...signed_wrapped_oa_dns_txt_docstore_v2.json | 109 ++++++++++++++++++ ..._wrapped_oa_dns_txt_token_registry_v2.json | 56 +++++++++ ...signed_wrapped_oa_dns_txt_docstore_v3.json | 103 +++++++++++++++++ ...bs2023_w3c_transferable_document_v2_0.json | 104 +++++++++++++++++ 4 files changed, 372 insertions(+) create mode 100644 tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_txt_docstore_v2.json create mode 100644 tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_txt_token_registry_v2.json create mode 100644 tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_txt_docstore_v3.json create mode 100644 tests/fixtures/verify/w3c/bbs2023_w3c_transferable_document_v2_0.json diff --git a/tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_txt_docstore_v2.json b/tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_txt_docstore_v2.json new file mode 100644 index 0000000..6464637 --- /dev/null +++ b/tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_txt_docstore_v2.json @@ -0,0 +1,109 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "name": "d9464745-6108-42d8-af4d-6f0e82d42899:string:TradeTrust ChAFTA Certificate of Origin v2", + "supplyChainConsignment": { + "exportCountry": { + "code": "fe024186-d712-4475-ac98-d7f82d3aff3a:string:65" + }, + "exporter": { + "postalAddress": { + "line1": "dd62eff8-af36-4a89-95e0-7b26455ab870:string:10 Pasir Panjang Road #10-01 Mapletree Business City", + "postcode": "58f6a94a-5d09-4a5c-99e9-6c3fdacf8ff7:string:117438", + "cityName": "f287d49c-9139-459c-b2da-a87276f9b723:string:Singapore", + "countryCode": "0e7139b8-aeea-448f-b445-f6c20373e7b5:string:65" + }, + "iD": "1ee27a61-719d-4a06-ba19-61828c20c1d7:string:333", + "name": "239966a6-2147-4692-ba43-0078d7741790:string:John Doe" + }, + "importCountry": { + "code": "4871cf7c-ef3d-4ea7-98d7-63d4c02d6407:string:60" + }, + "importer": { + "postalAddress": { + "line1": "83c4339b-fceb-43f2-b597-224d1a0d6164:string:106 Blk F7 Seksyen 1 Bdr Baru Wangsa Maju Setapak", + "cityName": "54caec03-7514-4f1b-ad94-8e4f1ae380b8:string:Kuala Lumpur", + "postcode": "34bb275d-55ec-4dea-9689-76f0fe9e4062:string:53300", + "countryCode": "718306ff-c27e-4cf7-a959-46b433dcccb8:string:60" + }, + "iD": "2a907caf-03d0-428a-b80c-331aa67dc9e2:string:444", + "name": "73da8ae6-58e5-4dc6-be4b-cb52ee417eda:string:Alice Tan" + }, + "loadingBaseportLocation": { + "iD": "bdf341f3-9e28-47d9-86a3-3abd6c5e532f:string:555", + "name": "9091c162-cf23-4443-a751-645144b9dd17:string:Some loading port name" + }, + "mainCarriageTransportMovement": { + "usedTransportMeans": { + "name": "0894b8d4-f416-44e4-b849-462c15c527c0:string:Van", + "iD": "9501e81a-a023-4a27-b41e-7c1b7540924a:string:777" + }, + "departureEvent": {}, + "iD": "cc4b20ba-d319-4bbf-be49-a8c01aa83934:string:666", + "information": "171f9c09-d74a-45c4-916f-7b58cd9b75f5:string:Some information here" + }, + "unloadingBaseportLocation": { + "iD": "a06f13db-dab2-4f67-8481-ddc97ea3a46d:string:888", + "name": "b3966acc-a5a7-4770-b047-3cdd8ae8a8ef:string:Some unloading port name" + }, + "iD": "6e8c7d60-56b3-452e-be01-b656a32e0d5d:string:222", + "information": "bfcd4724-1486-4e36-9e5a-2969789246ee:string:Consignment Information", + "includedConsignmentItems": [] + }, + "$template": { + "type": "eafb8c44-2925-4fd6-b262-8992876a80d0:string:EMBEDDED_RENDERER", + "name": "ee7d000a-e5bf-40c1-ad7d-7833319c462d:string:CHAFTA_COO", + "url": "ec9da1d2-1be2-4b33-b96f-a7f0524fc57a:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "name": "ab4b2ef9-6be3-4df6-a4c4-b59523dbd8e5:string:Demo Issuer", + "documentStore": "a0b4f0d3-01c0-4072-a8ad-6f8fa6ee08ef:string:0xA594f6e10564e87888425c7CC3910FE1c800aB0B", + "identityProof": { + "type": "7a473256-585c-43b2-a429-1ef5d819266e:string:DNS-TXT", + "location": "5ea60d6e-24d9-4537-b4ee-564fe2b8735f:string:example.tradetrust.io" + } + } + ], + "firstSignatoryAuthentication": { + "signature": "5c354242-e993-41f8-9fb8-eae22dea5bde:string:data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QOBaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAyMSA3OS4xNTU3NzIsIDIwMTQvMDEvMTMtMTk6NDQ6MDAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9IjI0NjlGRjdFNDlEMThFM0U5Njg1NjlEMUQxN0I2NEI0IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjI2MTIxNkJFREE1QTExRTY4QjkyQUE2NTA4NTZFNkRCIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI2MTIxNkJEREE1QTExRTY4QjkyQUE2NTA4NTZFNkRCIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE0IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOmY2OTUxMGQ5LWM0NGMtMzM0ZC1iNzJiLTU1MWZkMTdkZTBiMCIgc3RSZWY6ZG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjUwYWY1Y2Y2LWQ5NmQtMTFlNi04NTdiLTg2NWI3MTA4OTkwZSIvPiA8L3JkZjpEZXNjcmlwdGlv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", + "actualDateTime": "60a68c99-c899-4d3e-a83b-63245406435f:string:2020-05-29T09:46:34Z", + "statement": "e7efc705-2b39-4f48-90cc-87859e2c6e0c:string:The undersigned hereby declares that the above-stated information is correct and that the goods exported to [importer] comply with the origin requirements specified in the China-Australia Free Trade Agreement." + }, + "issueLocation": { + "iD": "b0e019da-f63c-41f2-8dea-742f7fc16075:string:unece.un.org:locode:AUADL", + "name": "52c39e08-bac5-4cdf-9cd7-5eab815e46a2:string:Adelaide" + }, + "issuer": { + "iD": "bffd6a1a-a532-4045-b6c0-cc1b0e180a74:string:id:wfa.org.au", + "name": "f8618138-61d7-4cdb-b2cd-c6f31237051e:string:Australian Grape and Wine Incorporated", + "postalAddress": { + "line1": "e8c47018-dba7-4da1-ac18-5a450354c323:string:Level 1, Industry Offcies", + "line2": "a1f12974-bc7f-40dd-afef-4b0cb01ca4db:string:Botanic Road", + "cityName": "ac291751-3d55-4fae-94b0-2cb78e08fbae:string:Adelaide", + "postcode": "0f259d18-9f53-4e15-89fe-f9799b32f886:string:5000", + "countrySubDivisionName": "9514b11b-ed05-4ef6-8ee3-05b88f30137f:string:SA", + "countryCode": "6451c62b-6df0-48d3-b529-957e91f9d710:string:AU" + } + }, + "status": "61b95c57-6552-4f1c-aa3c-2d212e1a87f2:string:issued", + "isPreferential": "cba0b32d-a2b4-4e74-9b3d-fd66fe6e59aa:boolean:true", + "freeTradeAgreement": "7caf8294-3602-40aa-96b5-d6eac8c38900:string:CHAFTA", + "iD": "b46da2a8-06d0-4389-919b-7a663f0205f7:string:111", + "links": { + "self": { + "href": "a9d40b34-fef3-4d95-ba49-c2bd0256ea37:string:https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.openattestation.com%2Fstatic%2Fdocuments%2Ftradetrust%2Fv2%2Fchafta-coo-stability.json%22%2C%22permittedActions%22%3A%5B%22VIEW%22%5D%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%22%2C%22chainId%22%3A%22101010%22%7D%7D%0A" + } + }, + "network": { + "chain": "193d78e7-2cb8-4e00-b86f-45e09654aa54:string:FREE", + "chainId": "60296159-6d5e-4016-b04e-e6bcec325d36:string:101010" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "73e4e9ae2269686ea0a0bed873f042fb690c52370565ee7db3c6e822773917fb", + "proof": [], + "merkleRoot": "73e4e9ae2269686ea0a0bed873f042fb690c52370565ee7db3c6e822773917fb" + } +} \ No newline at end of file diff --git a/tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_txt_token_registry_v2.json b/tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_txt_token_registry_v2.json new file mode 100644 index 0000000..469d39b --- /dev/null +++ b/tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_txt_token_registry_v2.json @@ -0,0 +1,56 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "name": "6c6ff1b0-1f76-44f6-acb4-1f4480adb40d:string:TradeTrust Bill of Lading v2", + "shipper": { + "address": { + "street": "c9f4a183-0607-409b-ab2b-ec4247d45a74:string:One North", + "country": "636102b0-b894-4315-a7e8-b51415348a94:string:Singapore" + }, + "name": "a9f78f2e-c6a8-4e5b-bae3-5482bd21b456:string:Demo Shipper" + }, + "consignee": { + "name": "2cede8d9-9c02-483b-b504-bf8618a99bc4:string:Demo Consignee" + }, + "notifyParty": { + "name": "0304dc0c-96d4-4d7a-b981-148132e290fb:string:Demo Notify" + }, + "$template": { + "type": "ae7232e7-fd0c-4f9a-8f42-52980d469656:string:EMBEDDED_RENDERER", + "name": "c25a962c-557b-42cf-9ca1-d44ec85cca25:string:BILL_OF_LADING", + "url": "f8aec37c-331b-4025-a9b8-11ef2f60a8e5:string:https://generic-templates.tradetrust.io" + }, + "issuers": [ + { + "identityProof": { + "type": "a8b5bfdf-0e2c-4790-9148-232f50b04d1e:string:DNS-TXT", + "location": "fbd510ad-698c-4c5e-9864-ef6738b80201:string:example.tradetrust.io" + }, + "name": "06940f1d-9c4b-42e9-8d75-92b504a74487:string:Demo token registry", + "tokenRegistry": "01a0a2c3-b521-41c0-90e8-522e593f3913:string:0x71D28767662cB233F887aD2Bb65d048d760bA694" + } + ], + "blNumber": "10a9e9c4-fb9c-402c-b51f-2391a71f64db:string:123", + "vessel": "98545c1c-f5fb-4fcb-90b7-e6590cf6ccf3:string:1", + "voyageNo": "a6821d2a-6ebf-4cd2-9708-78b41bfebe75:string:100", + "portOfLoading": "8d8b6c03-53dd-4409-8bde-4cacc1fb614c:string:Singapore Port", + "portOfDischarge": "ad8027a1-f4db-46ad-9f59-513f1f17a95f:string:China Port", + "placeOfReceipt": "a7222399-b500-4bf9-9ab8-51cb6f89a422:string:Beijing", + "placeOfDelivery": "46a36db7-9485-4c0c-8c23-42b3a3e627eb:string:Singapore", + "links": { + "self": { + "href": "4aab0503-088d-49ca-a2e6-917c910c9ca3:string:https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.openattestation.com%2Fstatic%2Fdocuments%2Ftradetrust%2Fv2%2Febl-stability.json%22%2C%22permittedActions%22%3A%5B%22VIEW%22%5D%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%22%2C%22chainId%22%3A%20%22101010%22%7D%7D" + } + }, + "network": { + "chain": "6b1ed020-7e1f-4969-9d9d-3360aaed3e9c:string:FREE", + "chainId": "30e1af7c-40f0-4921-8702-bae3154977f8:string:101010" + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "45c4f4dde4e8da7b0b3eb2ac99fc05a1226b513773a4ef1e0c6389bf30de7a3f", + "proof": [], + "merkleRoot": "45c4f4dde4e8da7b0b3eb2ac99fc05a1226b513773a4ef1e0c6389bf30de7a3f" + } +} \ No newline at end of file diff --git a/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_txt_docstore_v3.json b/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_txt_docstore_v3.json new file mode 100644 index 0000000..0a4c64b --- /dev/null +++ b/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_txt_docstore_v3.json @@ -0,0 +1,103 @@ +{ + "version": "https://schema.openattestation.com/3.0/schema.json", + "@context": [ + "https://www.w3.org/2018/credentials/v1", + "https://schemata.tradetrust.io/io/tradetrust/Invoice/1.0/invoice-context.json", + "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json" + ], + "type": [ + "VerifiableCredential", + "OpenAttestationCredential" + ], + "issuanceDate": "2010-01-01T19:23:24Z", + "issuer": { + "id": "https://example.com", + "name": "DEMO STORE", + "type": "OpenAttestationIssuer" + }, + "openAttestationMetadata": { + "template": { + "type": "EMBEDDED_RENDERER", + "name": "INVOICE", + "url": "https://generic-templates.tradetrust.io" + }, + "proof": { + "type": "OpenAttestationProofMethod", + "method": "DOCUMENT_STORE", + "value": "0xA594f6e10564e87888425c7CC3910FE1c800aB0B" + }, + "identityProof": { + "type": "DNS-TXT", + "identifier": "example.tradetrust.io" + } + }, + "credentialSubject": { + "name": "TradeTrust Invoice v3", + "id": "1111", + "date": "2018-02-21", + "customerId": "564", + "terms": "Due Upon Receipt", + "billFrom": { + "name": "ABC Company", + "streetAddress": "Level 1, Industry Offices", + "city": "Singapore", + "postalCode": "123456", + "phoneNumber": "60305029" + }, + "billTo": { + "company": { + "name": "DEF Company", + "streetAddress": "Level 2, Industry Offices", + "city": "Singapore", + "postalCode": "612345", + "phoneNumber": "61204028" + }, + "name": "James Lee", + "email": "def@company.com" + }, + "billableItems": [ + { + "description": "Service Fee", + "quantity": "1", + "unitPrice": "200", + "amount": "200" + }, + { + "description": "Labor: 5 hours at $75/hr", + "quantity": "5", + "unitPrice": "75", + "amount": "375" + }, + { + "description": "New client discount", + "quantity": "1", + "unitPrice": "50", + "amount": "50" + } + ], + "subtotal": "625", + "tax": "0", + "taxTotal": "0", + "total": "625", + "links": { + "self": { + "href": "https://actions.tradetrust.io?q=%7B%22type%22%3A%22DOCUMENT%22%2C%22payload%22%3A%7B%22uri%22%3A%22https%3A%2F%2Fgallery.openattestation.com%2Fstatic%2Fdocuments%2Ftradetrust%2Fv3%2Finvoice-stability.json%22%2C%22permittedActions%22%3A%5B%22VIEW%22%5D%2C%22redirect%22%3A%22https%3A%2F%2Fref.tradetrust.io%22%2C%20%22chainId%22%3A%20%22101010%22%20%7D%7D" + } + } + }, + "network": { + "chain": "FREE", + "chainId": "101010" + }, + "proof": { + "type": "OpenAttestationMerkleProofSignature2018", + "proofPurpose": "assertionMethod", + "targetHash": "6aced56cddb6d7c374d5a27a76a3c575f62c593759ab3ca95c6b3b0e0e67c0d9", + "proofs": [], + "merkleRoot": "6aced56cddb6d7c374d5a27a76a3c575f62c593759ab3ca95c6b3b0e0e67c0d9", + "salts": "W3sidmFsdWUiOiI2MzkwNDIwOTMwZWM5MWIwMzExOGZjZWQ4MjdhNmIxYzdkZTJjZjc0NGRkMGYwZmY1ZTI5NjZhNGQ2YzdkNGY1IiwicGF0aCI6InZlcnNpb24ifSx7InZhbHVlIjoiZWE4ZWY1NzVlMDk1YjQwMjIzMWU2ZTI3MzgyNzE2YjY2ZDlhZjAzY2ZjNGY0Y2Y3NDAzMmYyYzZjNWFhOTkwNSIsInBhdGgiOiJAY29udGV4dFswXSJ9LHsidmFsdWUiOiI5NGE2NmJmNDljNjcyZDViMmJiZDM1MTA3NDMwYjYwODIwNjMyMWRkMGU4Zjk0YTc5YmM5NTkwYTUxNzk1N2UzIiwicGF0aCI6IkBjb250ZXh0WzFdIn0seyJ2YWx1ZSI6IjI1NjQ4YjI5ZjA1NjFkNWEzZGJhNTNiZGUwNmE2MDc3NmNiY2VhNGJkN2FmOThkZjliZDhmZmNjMWIxYmUwYjQiLCJwYXRoIjoiQGNvbnRleHRbMl0ifSx7InZhbHVlIjoiNmIyMDg2NGM4Yzk3MTYzZDNmMTVlYjU1ODdiNmI3OGRjNTNhOGViODYyNTFkMGVjYzc3MTZhZGVhMTE4Nzg5MiIsInBhdGgiOiJ0eXBlWzBdIn0seyJ2YWx1ZSI6ImM2MzhlYzNkODY1ODNhNzY2MjIwMWI1YWIwZWYxZTc2YjM2MzlhNzM2ZmI3OTZjMmVkOGI0OTY3ZWQxNGYxYWIiLCJwYXRoIjoidHlwZVsxXSJ9LHsidmFsdWUiOiI4YjQ3NzcwMjFjY2E3N2JjYWUxN2IwNWRlOWZiODg5NmFlNjY5ZTVlYjAwYjY0ODBmNTRlOWQ1YTBiNzZlMTFlIiwicGF0aCI6Imlzc3VhbmNlRGF0ZSJ9LHsidmFsdWUiOiI5NjlkYzYwOTQyMWI5MGQ0YWQwOTE1OWEyYjZlNWEzYmQ0ZjQ4MmMzY2ZkYWIyNjc2YzE3MjhhYmRkNTQyOTE0IiwicGF0aCI6Imlzc3Vlci5pZCJ9LHsidmFsdWUiOiI3YTMwMzg5ZDM2MGNiMjZjZGU2ODM2N2ExZmU1NGY3NjZmMjc1NWI2YmRkNzVkMzc2NTdkYmRhNWQwZjEzMGYwIiwicGF0aCI6Imlzc3Vlci5uYW1lIn0seyJ2YWx1ZSI6IjI3YjJmYTA0YWRlMzU3ODI0NWNkZmFiNTEyNTAxNzZkMGFiZWFkMjFmZWVkYTMzNTkxODFmYTg4ODUzMjQ1YTMiLCJwYXRoIjoiaXNzdWVyLnR5cGUifSx7InZhbHVlIjoiYTE0NDMxODcxODA3NTEwZjJhZWI3YjY5NDZhMWYyNmU4N2M0ODVlNjRiOTVmMzUxNDVmYzk0ZDhjNGQ2YzBlMyIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS50ZW1wbGF0ZS50eXBlIn0seyJ2YWx1ZSI6IjczZTY3NzEwNWI2NGZjMzc4NTYyMzU0NDNiOTMzNDkzMzMxMWY1OWIxMmE5ZjZhNDdhODY3NDBkODc2MmRjNDgiLCJwYXRoIjoib3BlbkF0dGVzdGF0aW9uTWV0YWRhdGEudGVtcGxhdGUubmFtZSJ9LHsidmFsdWUiOiI4NGE0MWQ0MTk2OGIzMjNjZTRiY2I3NWZlNTdhZTRkNDY4MmNkZGEzMDVkOTc3YjBmMzI1NzhjMmI0NzE2OTM4IiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnRlbXBsYXRlLnVybCJ9LHsidmFsdWUiOiI4ZjBiMDE2ODc5YTYxYzQxNThlNjM1YzlmYzI4ZjFjYzU5YzAwNDU1ZGEyNjAwNDIwNGJhN2YyODc5MmU5YjMxIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLnByb29mLnR5cGUifSx7InZhbHVlIjoiNDJiMzcyYWI0MGMyNGQzNTg4ZGJjZjAyZjhiNmU0NTJjMzJmZmVjODc0OWUyYWQyNDYzMzA1YmMzNzg1NzUwNyIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi5tZXRob2QifSx7InZhbHVlIjoiZGJkY2Q2YmU1NTg4MjQxNDY5OWE5OTY1NGYxMGJjODg0NzBhMGNjNTZiOGZhNTU1ODg2MTI5Njc5ZjlkOTJjNyIsInBhdGgiOiJvcGVuQXR0ZXN0YXRpb25NZXRhZGF0YS5wcm9vZi52YWx1ZSJ9LHsidmFsdWUiOiI2MTA5MDgzMzVkYmQzYmQ5MzJmZjMyMTgzYzc5MjU0YjViYmQyOGE2OGYzNWY5YjRhMWRjN2QyNGRlZDQ4ZWY3IiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLmlkZW50aXR5UHJvb2YudHlwZSJ9LHsidmFsdWUiOiI1NmNiZWY1YzU3NzIzZjYwNjk2NDJlYTUxMDg4YjRlYTFiMGNlMjI0MmE5N2ViNGIzMGNkZGZjNmVlZjkzNDExIiwicGF0aCI6Im9wZW5BdHRlc3RhdGlvbk1ldGFkYXRhLmlkZW50aXR5UHJvb2YuaWRlbnRpZmllciJ9LHsidmFsdWUiOiIyODdhMWQ5Yzc3ZDk1ZGE5ZTc5ZWI2N2VlZmY2MDJiZWMxMTgyN2I1ZWRmZGUxZjIzYzIwNTBiOTIxMGE5ZjdmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0Lm5hbWUifSx7InZhbHVlIjoiZDhjNGY0ZTMzMTJjMTM3ODgxMTUxYTM3MjVkZGJkODMxMDU5MjM2ZmQ0N2ZjNTdkNzRkYmY5NWVhZGU1MzY2NyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5pZCJ9LHsidmFsdWUiOiI3MzIyZTc5MmU3YzljMTY3OWIyZjc2ZDgwMmU0YzY5ZDRhMzY4NTY0OTUxZWFlNGRiNzA5MzIwYmY4MmYyMmFlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmRhdGUifSx7InZhbHVlIjoiNTA3ZTU5MDZlNjc2ZjZhZmM5ODMzMzc5NzdiMTQ2YjdlNmUyYjM2ZWRhMWEyZTc5MjE0YzJiYTA2MDBiZmFhMiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5jdXN0b21lcklkIn0seyJ2YWx1ZSI6ImZmZjVjMWE0NmExOTMwNzQwNGE0OTJjMTU0MTNmMjEwOWM1NmI0NzVmMDNlZmIzYThiY2I0YzFjN2E3ZTEyYmEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGVybXMifSx7InZhbHVlIjoiZDViOWRmNzkzYzlmMzYxMjFhOTZjMzdkYzEwZDc4ZTQ4MzAxNjI1NGEyODM1YTc3MzM3ZjQxNWQ0OWQxOGRjMiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5uYW1lIn0seyJ2YWx1ZSI6IjRiZTI1NGFmZmJjYmVlZDc1ZGNmZWMxYTEzYTFkNWZiZGNkZWI4Mjk5OTE3ZjJhZWE4MGJlZWU2ZGVjZjBlMDgiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20uc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiJiZTM0ZWYwMjhkMjE1MDFlZTE0MjFhOWFjMmVkMzlkMWJkZGMyOTJjMjk1NDY1NjNlZGFjZWZjNDdlOGNlZGQ0IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxGcm9tLmNpdHkifSx7InZhbHVlIjoiMzA4MDI2MTk2ZTgxMjQ5NDQ3N2E2MmQyYjdmNGFiYTU2YjE3MGE5ZWQ1MDY0NzBmNTVjMGNlMjA2MGY4NjZkZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsRnJvbS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6IjE2MmVkZmY3NzE5ZTRkZDA2MTAyNzAyZmNhZDUxMGVmM2YwNGM4ZjRjY2U5OTg4OTdiNzRkZjBhYmYxZmJiNjQiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbEZyb20ucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiZTM0MTMwMzQwY2I3NDFmOWZkMDdiZmJhNmNhY2QxOTkxMDRiMTM4YzlhMThmMGE2ZTQ0OWQ0YWI5OWEyNDQxNiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5uYW1lIn0seyJ2YWx1ZSI6Ijg0MzQ4NGNlZDViNDdhNGNkMzFmMTEwM2MwYmEyYjc5YjQ4MzE0ZGM0OGQwOTZkMzEzNDc2NTBlM2M2ODM5MzUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkuc3RyZWV0QWRkcmVzcyJ9LHsidmFsdWUiOiIxMGEyN2RjYmEyZDE5YTBkMGFkZmZlYzMwOWJmZjQ3MzQ5MThjZmI4NGFjZmRhZWZkN2E1OTg2ODQyZjJkN2M3IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5jb21wYW55LmNpdHkifSx7InZhbHVlIjoiMmQzYjA3ZWU5OGM5MDNjYjJjOTRjYWEyYzQ1MDYzNjE0NzllY2M0ZDgyMzIzYjllNjdkYjZjNjY0MGYxMmMyNSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8uY29tcGFueS5wb3N0YWxDb2RlIn0seyJ2YWx1ZSI6IjY3MWZjNWUxNDg5OWQxYjU2MTkzM2IzYTMzNjkwMDk0MjFmYjhhZmEwMTRlZGU1YjNiMjdkN2YwMjJkYjc3ZjgiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbFRvLmNvbXBhbnkucGhvbmVOdW1iZXIifSx7InZhbHVlIjoiNmRmMzIyYzhkODhjOTQzYzYzZjlmMDJiYjczMDNiYTExMWVlMzkxZjMxNjMxMDYxYzRhODMxM2I0OTg5YmUzNSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsVG8ubmFtZSJ9LHsidmFsdWUiOiI2ZWJjZDAzZTI1M2YyYTljZjcyN2M5YTYyYWI2NDcwZDZmM2FhOTY0NjIyODViZGJhZWIxODQzMzJhNGQ1OWVhIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxUby5lbWFpbCJ9LHsidmFsdWUiOiIyNjM2MDAzYWE1YzZlNmFjZjU5ZjRlODgxZTdkN2QzMDllNWYwNDY5MTAyODZjN2I3NzJmOWM2MzU2MjQ5M2ZlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMF0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiMjkxNmYzYWM1YzYxYWVhMDJlOWVkMTI3M2Q3ZjJhMGYwYjFjNWI1ODY3ZDViNDE3OWZjNzUyOTZhNDllYjlkNyIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLnF1YW50aXR5In0seyJ2YWx1ZSI6ImVkOTkyYTc1NTNjMzY2MGYwMjhjYjY1ODU4MzViMzJjYmU2MGI4NWQxZDllOTZlYjNjMjJlYmQxMmM2YWM5NzUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1swXS51bml0UHJpY2UifSx7InZhbHVlIjoiMDgzMzgzODBhM2FjYjVlMDEzZmJiZDE0ODJkNzdmMzFjOTRkOGY3NzYzMjU3OGNkZjRjZjFmYmZlNjY0YTdmZCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzBdLmFtb3VudCJ9LHsidmFsdWUiOiJiY2FhYzkzYzA4NGFlOWQyZDRjM2I5MTIzMDE3YTVkMTc4NTUyZGYwNmM5N2I4ZDBkZmMxZWY3YWIzZWU2NzZiIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMV0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiM2I3ZmVlYmJhYzA0MGU2ODdlOTY5NGNhM2ExZWIzNmJjMmEzNTAzMGI2M2RiZjYzMjAxOWQyYWVhNDRjZjc3YiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLnF1YW50aXR5In0seyJ2YWx1ZSI6IjAwYjJjZDZmNTVkMmQ2YWQyNTRiZWM1ZjAxNjlkOThmZTg2OTFmMWY4MTU2N2YwOTZmNzdhMzQ0ZjdjNzQzN2EiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1sxXS51bml0UHJpY2UifSx7InZhbHVlIjoiOTZhNjQyYzM1NTg3Y2FhNmJmNGE1NjI2ZjhmYTEzZjc1YTM3MDAxOTMxOTBkYmM1MDcwMTA1NzZiMGNjYjEwNSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzFdLmFtb3VudCJ9LHsidmFsdWUiOiIzYzU4ODBlZmYwOGY2NjVhYjkxMGU5MmYwMzRlYzhkYzQ5NTk3NWZlMzZmMTdjMzk1YzJkNjUxZjk1ZTdlNGVlIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmJpbGxhYmxlSXRlbXNbMl0uZGVzY3JpcHRpb24ifSx7InZhbHVlIjoiYWZhODhmMmQyMWNhZDk3NWU0YzYxM2U5MTRmMzBiNjg0ZGVhNDJhNmM5MDgwODZkNDk5YzZjMjRhOTYzOTkxZiIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLnF1YW50aXR5In0seyJ2YWx1ZSI6ImZlZjgzMzZmYWZkYzNjYTc0NzU3NmZhOTA3MTg0Yjc1ZjhmMjM1ZWJjODE0NDg2NmE1MDQ3ZjM5ZjgyYTA1ZWUiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QuYmlsbGFibGVJdGVtc1syXS51bml0UHJpY2UifSx7InZhbHVlIjoiMDEyNzVhMmY5OTA4Y2I1ZGRmMzc3ZWRmNjI4ZWQ5YTFiMTAzZjI4ODc4OGM2MGU5NmQ1NmU3ZDA4MGI4NDBjNCIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC5iaWxsYWJsZUl0ZW1zWzJdLmFtb3VudCJ9LHsidmFsdWUiOiJmYmVhMzIzMzEzYjg4ZGQ2NjU5NDBhYWVhNDA3MDMxOWEyZjM3MDg1NTg1ZmY4NzViMDRlYTIwZTI1YjRiNWQ5IiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LnN1YnRvdGFsIn0seyJ2YWx1ZSI6ImYyNWVhYmE4ZjJmYTFmOWUyMTQ4ZDk4NTkyNmNmMGY0NjVmMjE0M2EyMjI3M2U3ZjAzNDQ1YWM0YTZlOWIzMjMiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4In0seyJ2YWx1ZSI6ImViNGNiNjlmYTU0NjAyZjA0NmY2ZDI2ZjQ0ZmI4ZTUyNzk0ZmZmMzE0Y2FkYWU0MmFiY2I1NDg5MmIwNTliZTEiLCJwYXRoIjoiY3JlZGVudGlhbFN1YmplY3QudGF4VG90YWwifSx7InZhbHVlIjoiNmIyNDk0M2EyNjdlYjEzMWJhZGM0M2UzZTc1ZjU5YWIyNWFhYTJlNjJjZDJkYjNmODZjYmJkNDhjMTZiYWVmNSIsInBhdGgiOiJjcmVkZW50aWFsU3ViamVjdC50b3RhbCJ9LHsidmFsdWUiOiIzNzI3OGExYjE0ZDhkOGI3Y2IyOWQwYTY4ZWVmNDYxYzJiMjBkYTA3ZWU0NTgxMmU5YjU2YjBmNDRkODFhNWJmIiwicGF0aCI6ImNyZWRlbnRpYWxTdWJqZWN0LmxpbmtzLnNlbGYuaHJlZiJ9LHsidmFsdWUiOiI5NTkwMTdmNGYyNDk0YjZmMTg3ZDc5MTE5OGM1MzdmNGI2MTdkY2Q5ODUwNzZmMzQ0MTI5ZjFlOWI3NGRhMzc3IiwicGF0aCI6Im5ldHdvcmsuY2hhaW4ifSx7InZhbHVlIjoiOWFlMjY2ZWNlYzMxMjkzOTU5NGQ4YWYwNGVjMzgyNWE0NzllODBhN2JiMTE2YTI5MzhhODU2OTljZjRiZjVkOCIsInBhdGgiOiJuZXR3b3JrLmNoYWluSWQifV0=", + "privacy": { + "obfuscated": [] + } + } +} \ No newline at end of file diff --git a/tests/fixtures/verify/w3c/bbs2023_w3c_transferable_document_v2_0.json b/tests/fixtures/verify/w3c/bbs2023_w3c_transferable_document_v2_0.json new file mode 100644 index 0000000..f2929bf --- /dev/null +++ b/tests/fixtures/verify/w3c/bbs2023_w3c_transferable_document_v2_0.json @@ -0,0 +1,104 @@ +{ + "@context": [ + "https://www.w3.org/ns/credentials/v2", + "https://w3id.org/security/data-integrity/v2", + "https://trustvc.io/context/render-method-context-v2.json", + "https://trustvc.io/context/bill-of-lading-carrier.json", + "https://trustvc.io/context/attachments-context.json", + "https://trustvc.io/context/transferable-records-context.json", + "https://trustvc.io/context/qrcode-context.json" + ], + "renderMethod": [ + { + "type": "EMBEDDED_RENDERER", + "templateName": "BILL_OF_LADING_CARRIER", + "id": "https://generic-templates.tradetrust.io" + } + ], + "credentialSubject": { + "type": [ + "BillOfLadingCarrier" + ], + "shipperName": "MAERSK Co.", + "shipperAddressStreet": "101 ORCHARD ROAD", + "shipperAddressCountry": "Singapore", + "toOrderOfText": "TO ORDER", + "consigneeName": "ABC Natural Foods Inc.", + "notifyPartyName": "Amanda Green – Import Manager, ABC Natural Foods", + "packages": [ + { + "packagesDescription": "Organic Cashew Kernels (25kg bags)", + "packagesMeasurement": "100 Bags", + "packagesWeight": "2.65 MT" + }, + { + "packagesDescription": "Roasted Chickpeas (20kg packs)", + "packagesMeasurement": "60 Bundles", + "packagesWeight": "1.3" + } + ], + "blNumber": "SGCNM21566325", + "scac": "SGPU", + "carrierName": "Vikram Rao", + "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPMAAAA7CAYAAACuTbzmAAAACXBIWXMAACE3AAAhNwEzWJ96AAAMUklEQVR4nO2dvW8byRXA31IUpWMj/gda9weKhwBptQZSpElMQ02AK8QNDkgRBKZzAZLiCFNgiiDFWcIFsJEipIpDmhCmAbeBpTYIEIr5A271H4gNI4sSN5jVW3s4nJmd/aAoiu8H0DLJ/eDu7Jt5877G8n0f5sGoZTsA4OCh+8WG11OdJua2JQCoAQD7ewEAvWLD8+ZyEQSxRMxFmEctmwnjE+HjUwCoFhvehbBtBwD2xW2LDc8RPmPbVgDgBAC2uI+HrCMoNrx+phdBEEtGLuufO2rZTYkgM3YBoCls60gEOdgWjyPSEQQZ8P1JZhdAEEtK5sKMKrDpd1XNtlMj86hl2wCwo9h2CzsGglhZ5iHM25rvxFG1FOO4cbYliJVjHsJ8HuM7nXo8ZdTCOfHQdHuCWDXmIcyHmu86/Jtiw2PvzyTbDcX5NVJXHPeALNrEqjMvazYT6GfCx0fFhjcjjOhqqnNzZCaUTZVwjlp2lXNNMTrYKRDESjNPP7PNCegJjZwEMV/mJswEQdwt85gzEwSxAEiYCeKBQMJMEA+E/H24jHe//3Hts9ykupnzS5tw09vI3XQ+b/33wmBXgiCQhRvAvv+d09m0rvY3ctfwWW4CmzkfNuHmbCN345BAE4Q5C1WzX//259Urf2P/0i/Ah0ke/jfJweXEgktY27mcrOmCTwiCEJhRs8tulwVjsFRDb9Dei+Ub/umvjpy8dQ3vXn9tlMX0wS9MB5FM2D/X4PsTgLU1mxqLIMz5qGaX3a6DIZS73N4slro+aO8piwX86KtOqWBdN9fhurZuXW+tWzeQt66HmzDubVjj5vevGjMdwje/+aq0mRs3N6zxs4J1BRvB6wMUrA+waV1BwQpU7tOf/OnflAlFEIYEwlx2uyw8sq3Z5WjQ3psJxSz/8u+lnHVzsmbd7BSsMazDNaxb7BUINGzCGDas8WnBujopwBjWrTEUrCs7b42rBbje2swF34NCoA9+9ud/yeKzCYKQkEe1Omp++qzsdnuD9p6gPuebE/82x/iK/WMBAGdPu7x9vxuM9tPfDcGCtzCBPuSCOGsxbfLM4DcRBMFLIyYtiHnGMuozKYt+rgZWHiYopLcCbckE+pbb/x8wQf32L9+FlurmH5/t1/zbQgWsY+n5PnS+/PaELNkEEYM8GrtMmCoOUHa7laAT8HNwK9BW8PmnEdr6uC0KNEtrrLZftWaMY98cHXfE9EiCIOILc9IKHp/2CwQahBE6HJFvhfrSAucfr/5ARfcIYk7kYhTDm1J7Z+bPTKBhDSZ+Hm78Nbjy8zCGPIz94PX83euvSZAJYo4wCexFlOMJkRmkjqfeyQX69J9//TUZswhizuQwMERVjifkeNaSHVCfKfszLdDDKz+vq9ZJEERG8EEjVRx9eTcRG7EPB+09pb+Xc21N17+2JqcAN7XB335hFEXGlcrti4XyCYKIZibRAq3UgXFLMRrrhDq0jBuHgqIQd7hOhHUgdarrRRDxWGjWFNYJ6yv83E91a04RBDHNoosT6AJWaK5NEDFYdHECXcAKrWCRMTiFmvEsDNp7lNDyAFi0MPcVi8yB6NeWgZle7zP+TY/j2AqWjJKQFXdnjFp21vM5tvABJeJwZCLMZbdro1r80SLNjFqD9l5UoEgH3VsyVZt80wQRg9RzZkyf/AEAXmCvv4urWfyn7Ha1AomF8R1hDSpmzXaLDY+WaSUIDmYwHrXsOlv/XLbkcaqRGdVcXR40S51kbiqlUOOCcDYupA60aDpBTIPLPTnCksYzcpJWzTZRhZsm25EQE4QScd02KYmFGYNEVIuf82yxEXxORiXWATzWfC8zjp1FhK9SpzIfdO10qHiWdPvQ2mUCaUZm0zzouTFo713osr7Kblf28cUirNXoFmIvGy31rNPo4zVkdQ4Hz1HCh93L8lqFa4A459DZQEYtW3oPHordBIOjKpzMsOvysl5MMY0wP+gRDAVD5KPwYSx7BecydZnlHrWXOlr6xdJI4TYs86zJwl/LbleazKLzCqAngU1lqjKvQNntDnHkS+Qd4K5B5XUIz9ELryPJeZKCthYxJuGjoOD3YVv1+DBhLh+AR5kbgMsPywYx6T6jll3DthHb/gV+f4bLF/eE/RzOM6TCEYxgXmJhZg912e2eGajawyX128pU9Mdlt3uBLjX+umcCXHAU66mEmIMlqFTLbreu8AErg2fQk3AYUfZpCx+eWlyBxg6rY1BWaou/jkF77y7j6g8l9+0AjUYdIY5B7BSlbazR9iom+6DQ9wx8+uwZejNq2ceYjxB2CE4o8Bp2heOfpnVNRaVOAvZMD4UKNpq2A0NBPjEQ5JCtCK+A7BxhRVWT+m2Av+VlzOO/iXF8CK8D910kJbz/qoCkeWMiyDz7WZTNSiXMOOK6mk2OdG6pJaQZ9XCjWnoSUwhiYeASTHv8asrjt/EYi6JmaJzNHFSRk0TZPUG1PDGpg0ZQpXrEVBs21OPrCAC+kNXaXnJMBDRK7c2Cuamx2Bmpjj/Etn2KryNNlZoOHmsRzPv+61AJ5Bner1BORI5xRE9MJuGcaPRY+ThZNEbtK74eopCEDVZCw4xqe9U5lMY0jKRrcm6bMMw2zkihymQ7RmMcb+jpld1uU1qc4vYY9RV8LmTLKrG2d3gj2ahld/CeMcGuCZZtTxB4WfudC+65/r1Y0nUJOccHODSohH9VmgjrlasSSy8ThlDATUcT1TlkwgY4QnZidBqy458O2nvSEQfPV0M7gaja1hYszGIHeheWdk8hfBXeSFZseDUm0DL3G1rceau7LEmlIyaakDDH51j1YGt87zWVy4bZHXB0izROaQJ1zjW/iZ2jhvtqDUKoWchGfdNIvzfCZ9vsmHftrkLOxNHwjugrtJT3o5b9FjsW5iK7yNqPTsIcjzOd0Ch65OOo7DFmJETXVJT1W9VZmIx+TQPrrmrlzTeKABwT7AVFa1UXVEtOJ6BP8NUetexTFOxOVr9z0ZVGlo0khifT3jeN8SNyX+xQokoqLzyqLyPeZh1dZQrmGOg8PCG7qI15sgyoJGSVz+zgXMtBleIM85kfWk5ykqg30143ce8cIyT0ImJu/lCquyw0OpHNeTFEVax2KyMI6mHbFxteKnnJIp+5g1ExT7gHhc3rXpbdbn+B7on7gmlJnsSle9D4FLVNyeDBohzyjGAhmsWGx6YYz2dqy8t5OWrZqXzzafOZaxFW0h1UAVelxpQsvJWFODZ1oycKo4n7SDXi1A0KIJr4/FW/8SCpoC9hKG+SwUfZtjjaHmKyhRPhKqymmW6lVbNNdP1d9rAalBB6CMhCPbdR3ZIKW0SQxhSaePh9lqShionGziIq1jeYV5fd7rlkBHd0CyFw11FakOU6S3QCJW1DWS4+xmfX0XLdxzl84HLCKDGZOzKVzSKxmq1xY8hYlZFZJZSBsInqMNoa+jFDD1XnYCGUTX5aw/6Pbq84o6Ps+KxDVkZ0cR1SX/wN9xyZ+rvPSvOIH2KopUwLPVds28cOdGYejC4p2X2O8xzMCH6akVnlxpCxEvNmHNlOFWrULtZFCyN3KgnDDjuaGHH28LzA0fsiYYzwoSLdkT3ITtnt9rBzCFXLqhA19gKDSJp3nD2VBFXSzEsUaD6STjVw8dlSFUlG3e6oZfexzfp4LFsxyqu8DTJt7AlGkfXCtkhjAIujNq9SVYhahAtoG4UsUfxwGHEVsdlO0pK6eHzV/HobS9i8QaPne3wvXss2agr33dV1qGmrbS7NUKeB8tMPVVDPDt6zH/CeqbLdVOq9Stb2+bZILMzY6LKAcRkrs8yM4aqaac/Rm1lON9vjdzI4vnvf7SQ4j03TVi7vz0b1Oc19U7mmjKZJd5HPfJBlaZxlAIXBNVz3OuQozqVhJFqcfYZxHjQ8/kGc38ThLoGKHYBx0HHbClCQZ66RxVwnFGhXVdQSzxM5cKbNZ+5jKpzqRhxEWUEfKvgwVwwals2hnyZJF8V9Hhs09CkaIWMJGLbdFyyiynAXtt2jZRHkEBSWsK2ihJpt80i3SikK9HOZcUwCa5vHBqueVqPaOZNVINF6WcUHpsStaLHQubKiplbfRHDQCiyS6Jq4+yMaDXtZqaLoXXCEc1zgOVK3A14DXzCwgu0cFic8SaqBYYmfmfl1seFFekHQcize15M0SQyKGlzBNcaNo8ZAkLCYX2gIDu9Z4LaKeTy+ptknwzKA939aaNLK79QpqAAAAABJRU5ErkJggg==", + "onwardInlandRouting": "Rail to Johor Port → Trucking to final inland delivery point (Long Beach, USA)", + "vessel": "MAERSK NATALIA", + "voyageNo": "7831W", + "portOfLoading": "Singapore", + "portOfDischarge": "LOS ANGELES, CA", + "placeOfReceipt": "JURONG PORT, SINGAPORE", + "placeOfDelivery": "Long Beach Distribution Center, CA", + "placeOfIssueBL": "Singapore", + "numberOfOriginalBL": "3", + "dateOfIssueBL": "2025-06-05", + "shippedOnBoardDate": "2025-06-05", + "signForTermsAndCondition": "The carrier accepts the goods as described in good order and condition for carriage under the terms stated herein and subject to the Carrier's standard Bill of Lading Terms and Conditions.", + "signedForCarrierText": "John Doe", + "carrierSignature": "data:image/png;base64,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gMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIXVqaAAAAbSSURBVIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBAQW4UqiQQQIECBAgAABAgQIECBAgIDAwhggQIAAAQIECBAgQIAAAQIEwgkILMKVRIMIECBAgAABAgQIECBAgAABgYUxQIAAAQIECBAgQIAAAQIECIQTEFiEK4kGESBAgAABAgQIECBAgAABAgILY4AAAQIECBAgQIAAAQIECBAIJyCwCFcSDSJAgAABAgQIECBAgAABAgQEFsYAAQIECBAgQIAAAQIECBAgEE5AYBGuJBpEgAABAgQIECBAgAABAgQICCyMAQIECBAgQIAAAQIECBAgQCCcgMAiXEk0iAABAgQIECBAgAABAgQIEBBYGAMECBAgQIAAAQIECBAgQIBAOAGBRbiSaBABAgQIECBAgAABAgQIECAgsDAGCBAgQIAAAQIECBAgQIAAgXACAotwJdEgAgQIECBAgAABAgQIECBAQGBhDBAgQIAAAQIECBAgQIAAAQLhBP4/csBUQgAdQDwAAAAASUVORK5CYII=", + "termsOfCarriage": "All shipments are subject to the Hague-Visby Rules. The carrier assumes liability only for loss or damage due to its own negligence. Responsibility ceases at the time goods are delivered to the consignee or their agent. Claims must be submitted within 7 working days of delivery.", + "attachments": [ + { + "data": "JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", + "filename": "blank.pdf", + "mimeType": "application/pdf" + }, + { + "data": "e30=", + "filename": "empty.json", + "mimeType": "application/json" + }, + { + "data": "JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==", + "filename": "sample.pdf", + "mimeType": "application/pdf" + }, + { + "data": "JVBERi0xLjYNJeLjz9MNCjI0IDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA0L0xlbmd0aCAyMTYvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjePI9RS8MwFIX/yn1bi9jepCQ6GYNpFBTEMsW97CVLbjWYNpImmz/fVsXXcw/f/c4SEFarepPTe4iFok8dU09DgtDBQx6TMwT74vaLTE7uSPDUdXM0Xe/73r1FnVwYYEtHR6d9WdY3kX4ipRMV6oojSmxQMoGyac5RLBAXf63p38aGA7XPorLewyvFcYaJile8rB+D/YcwiRdMMGScszO8/IW0MdhsaKKYGA46gXKTr/cUQVY4We/cYMNpnLVeXPJUXHs9fECr7kAFk+eZ5Xr9LcAAfKpQrA0KZW5kc3RyZWFtDWVuZG9iag0yNSAwIG9iag08PC9GaWx0ZXIvRmxhdGVEZWNvZGUvRmlyc3QgNC9MZW5ndGggNDkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjeslAwULCx0XfOL80rUTDU985MKY42NAIKBsXqh1QWpOoHJKanFtvZAQQYAN/6C60NCmVuZHN0cmVhbQ1lbmRvYmoNMjYgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDkvTGVuZ3RoIDQyL04gMi9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jJTMFAwVzC0ULCx0fcrzS2OBnENFIJi7eyAIsH6LnZ2AAEGAI2FCDcNCmVuZHN0cmVhbQ1lbmRvYmoNMjcgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDUvTGVuZ3RoIDEyMC9OIDEvVHlwZS9PYmpTdG0+PnN0cmVhbQ0KaN4yNFIwULCx0XfOzytJzSspVjAyBgoE6TsX5Rc45VdEGwB5ZoZGCuaWRrH6vqkpmYkYogGJRUCdChZgfUGpxfmlRcmpxUAzA4ryk4NTS6L1A1zc9ENSK0pi7ez0g/JLEktSFQz0QyoLUoF601Pt7AACDADYoCeWDQplbmRzdHJlYW0NZW5kb2JqDTIgMCBvYmoNPDwvTGVuZ3RoIDM1MjUvU3VidHlwZS9YTUwvVHlwZS9NZXRhZGF0YT4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjQtYzAwNSA3OC4xNDczMjYsIDIwMTIvMDgvMjMtMTM6MDM6MDMgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciA2LjAgKFdpbmRvd3MpPC9wZGY6UHJvZHVjZXI+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDA2LTAzLTA2VDE1OjA2OjMzLTA1OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZVBTNS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNi0wNy0xNVQxMDoxMjoyMSswODowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTYtMDctMTVUMTA6MTI6MjErMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnV1aWQ6ZmYzZGNmZDEtMjNmYS00NzZmLTgzOWEtM2U1Y2FlMmRhMmViPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD51dWlkOjM1OTM1MGIzLWFmNDAtNGQ4YS05ZDZjLTAzMTg2YjRmZmIzNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5CbGFuayBQREYgRG9jdW1lbnQ8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+RGVwYXJ0bWVudCBvZiBKdXN0aWNlIChFeGVjdXRpdmUgT2ZmaWNlIG9mIEltbWlncmF0aW9uIFJldmlldyk8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L2RjOmNyZWF0b3I+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNMTEgMCBvYmoNPDwvTWV0YWRhdGEgMiAwIFIvUGFnZUxhYmVscyA2IDAgUi9QYWdlcyA4IDAgUi9UeXBlL0NhdGFsb2c+Pg1lbmRvYmoNMjMgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aCAxMD4+c3RyZWFtDQpIiQIIMAAAAAABDQplbmRzdHJlYW0NZW5kb2JqDTI4IDAgb2JqDTw8L0RlY29kZVBhcm1zPDwvQ29sdW1ucyA0L1ByZWRpY3RvciAxMj4+L0ZpbHRlci9GbGF0ZURlY29kZS9JRFs8REI3Nzc1Q0NFMjI3RjZCMzBDNDQwREY0MjIxREMzOTA+PEJGQ0NDRjNGNTdGNjEzNEFCRDNDMDRBOUU0Q0ExMDZFPl0vSW5mbyA5IDAgUi9MZW5ndGggODAvUm9vdCAxMSAwIFIvU2l6ZSAyOS9UeXBlL1hSZWYvV1sxIDIgMV0+PnN0cmVhbQ0KaN5iYgACJjDByGzIwPT/73koF0wwMUiBWYxA4v9/EMHA9I/hBVCxoDOQeH8DxH2KrIMIglFwIpD1vh5IMJqBxPpArHYgwd/KABBgAP8bEC0NCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQo0NTc2DQolJUVPRg0K", + "filename": "veryverylongfilenameoverhereveryverylongfilenameoverhere.pdf", + "mimeType": "application/pdf" + } + ] + }, + "type": [ + "VerifiableCredential" + ], + "credentialStatus": { + "type": "TransferableRecords", + "tokenNetwork": { + "chain": "FREE", + "chainId": 101010 + }, + "tokenRegistry": "0x7202363bBDb126036F7C3243Ebac310d9d145040", + "tokenId": "77b056e4524e69c51fa0d27459ae504b9b2ab88359b4be40e2b4a60ccda2e900" + }, + "issuer": "did:web:trustvc.github.io:did:1", + "validFrom": "2024-04-01T12:19:52Z", + "id": "urn:uuid:019bde89-fa0b-733c-b663-6b46c6a6908b", + "proof": { + "type": "DataIntegrityProof", + "verificationMethod": "did:web:trustvc.github.io:did:1#multikey-2", + "cryptosuite": "bbs-2023", + "proofPurpose": "assertionMethod", + "proofValue": "u2V0ChVhQhzENt_A1gmatFwG5rfZiOth1JD3ALwgh_esbGXFU5Nhs3hrQ4iw_jzpy5-W1c1OrKWdKLgNG2Lj1G6zQyA3myYqrNy4DgtO86ElSV_ewJqdYQD9WZttHrlLy5Yt4KX5JlbD4AqxyPhcyoKk-Wo6FkAtpZsbWIE72P8kG5m7fT_DVEHnjS2aA2qqbQ2cORbU0hWtYYLDx2EM7LXGzSqyTOC8ZKJ9hgD0GHrf59LhRlLV3-pK34L5ohGo8I-g81SD6xVKofBMNiXxFLrp7w56sQlEOkcpISekB2jtn0DeTWzNHrnVwuejhZPM1PPtOuxtkbzj6J1ggi8bJHCZOPnakpm0CkyIIs5xNfTu0U_0e-0iy-iqq2nuCZy9pc3N1ZXJqL3ZhbGlkRnJvbQ" + } +} \ No newline at end of file From 1f8a7ea50dab095cd72d31e5d5363dfd3fffce15 Mon Sep 17 00:00:00 2001 From: pennhan-dex Date: Thu, 22 Jan 2026 11:40:39 +0800 Subject: [PATCH 15/18] catch stray credential expiration consolewarn --- src/commands/verify.ts | 5 ++++- src/utils/formatting.ts | 21 ++++++++++++++++++++- tests/main.test.ts | 6 +++++- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/commands/verify.ts b/src/commands/verify.ts index 07a38fb..0e388aa 100644 --- a/src/commands/verify.ts +++ b/src/commands/verify.ts @@ -4,6 +4,7 @@ import { getSupportedNetworkNameFromId, readJsonFile, CaptureConsoleWarnAsync, + CaptureConsoleWarn, } from '../utils'; import { getChainId, @@ -76,8 +77,10 @@ const verifyW3CDocument = async ( ): Promise<{ result: VerificationFragment[]; warnings: unknown[][] }> => { signale.info('Verifying W3C document...'); + const { result: isTransferable } = CaptureConsoleWarn(() => isTransferableRecord(signedVC)); + // Non-transferable record: verify directly - if (!isTransferableRecord(signedVC)) { + if (!isTransferable) { return await CaptureConsoleWarnAsync(() => verifyDocument(signedVC)); } diff --git a/src/utils/formatting.ts b/src/utils/formatting.ts index f6813d4..11d52c7 100644 --- a/src/utils/formatting.ts +++ b/src/utils/formatting.ts @@ -40,7 +40,26 @@ export const getErrorMessage = function (error: unknown): string { } }; -// Captures console.warn for an async function to handle expected console.warn. Restores original console.warn functionality after the function is executed. +// Captures console.warn for a function to handle expected console.warn. +// Restores original console.warn functionality after the function is executed. +export const CaptureConsoleWarn= (fn: () => T): { result: T; warnings: unknown[][] } => { + const originalWarn = console.warn; + const warnings: unknown[][] = []; + + console.warn = (...args) => { + warnings.push(args); + }; + + try { + const result = fn(); + return { result, warnings }; + } finally { + console.warn = originalWarn; + } +} + +// Async captures console.warn for an async function to handle expected console.warn. +// Restores original console.warn functionality after the function is executed. export const CaptureConsoleWarnAsync = async (fn: () => Promise): Promise<{ result: T; warnings: unknown[][] }> => { const originalWarn = console.warn; const warnings: unknown[][] = []; diff --git a/tests/main.test.ts b/tests/main.test.ts index 1d41f32..a27dbf8 100644 --- a/tests/main.test.ts +++ b/tests/main.test.ts @@ -537,6 +537,7 @@ describe('trustvc-cli', () => { let signaleSuccessSpy: MockedFunction; let readJsonFileMock: MockedFunction; let CaptureConsoleWarnAsyncMock: MockedFunction; + let CaptureConsoleWarnMock: MockedFunction; let getSupportedNetworkMock: MockedFunction; let getSupportedNetworkNameFromIdMock: MockedFunction; @@ -544,6 +545,7 @@ describe('trustvc-cli', () => { const W3C_REVOKED_DNS_DID_FIXTURE = './tests/fixtures/verify/w3c/revoked_ecdsa_w3c_verifiable_document_v2_0.json'; beforeEach(async () => { + vi.clearAllMocks(); vi.resetAllMocks(); signalWarnSpy = signale.warn as MockedFunction; @@ -562,6 +564,9 @@ describe('trustvc-cli', () => { CaptureConsoleWarnAsyncMock = utils.CaptureConsoleWarnAsync as MockedFunction; CaptureConsoleWarnAsyncMock.mockImplementation((fn: any) => actualUtils.CaptureConsoleWarnAsync(fn)); + + CaptureConsoleWarnMock = utils.CaptureConsoleWarn as MockedFunction; + CaptureConsoleWarnMock.mockImplementation((fn: any) => actualUtils.CaptureConsoleWarn(fn)); }); it( @@ -582,7 +587,6 @@ describe('trustvc-cli', () => { (prompts.input as any).mockResolvedValueOnce(W3C_REVOKED_DNS_DID_FIXTURE); await verifyHandler(); - expect(signaleSuccessSpy).toHaveBeenCalledWith('DOCUMENT_INTEGRITY: VALID'); expect(signaleSuccessSpy).toHaveBeenCalledWith('ISSUER_IDENTITY: VALID'); expect(signalWarnSpy).toHaveBeenCalledWith(expect.stringContaining('DOCUMENT_STATUS: INVALID [Document has been revoked.]')); From 6e5c14e6dfd738caacd9e992d9b908ab4ce9de16 Mon Sep 17 00:00:00 2001 From: pennhan-dex Date: Fri, 23 Jan 2026 11:28:25 +0800 Subject: [PATCH 16/18] handle network prompting --- src/commands/verify.ts | 44 +++++---- src/utils/formatting.ts | 2 +- .../oa_dns_txt_docstore_no_network_field.json | 92 +++++++++++++++++++ 3 files changed, 119 insertions(+), 19 deletions(-) create mode 100644 tests/fixtures/verify/oa/2.0/oa_dns_txt_docstore_no_network_field.json diff --git a/src/commands/verify.ts b/src/commands/verify.ts index 0e388aa..c510d79 100644 --- a/src/commands/verify.ts +++ b/src/commands/verify.ts @@ -5,11 +5,12 @@ import { readJsonFile, CaptureConsoleWarnAsync, CaptureConsoleWarn, + promptNetworkSelection, } from '../utils'; import { getChainId, getDocumentData, - getTransferableRecordsCredentialStatus, + isDocumentRevokable, isTransferableRecord, isWrappedV2Document, isWrappedV3Document, @@ -77,22 +78,17 @@ const verifyW3CDocument = async ( ): Promise<{ result: VerificationFragment[]; warnings: unknown[][] }> => { signale.info('Verifying W3C document...'); + // To capture the console.warn from trustvc function const { result: isTransferable } = CaptureConsoleWarn(() => isTransferableRecord(signedVC)); + const isRevokable = isDocumentRevokable(signedVC); + const requiresNetwork = isTransferable || isRevokable; - // Non-transferable record: verify directly - if (!isTransferable) { - return await CaptureConsoleWarnAsync(() => verifyDocument(signedVC)); - } - - const credentialStatus = getTransferableRecordsCredentialStatus(signedVC); - const chainId = credentialStatus.tokenNetwork.chainId; - - if (chainId == null) { - signale.error('Could not find blockchain information'); - throw new Error('Could not find blockchain information'); - } + // If the document is not transferable or revokable, verify directly + // To capture the console.warn from trustvc function + if (!requiresNetwork) return await CaptureConsoleWarnAsync(() => verifyDocument(signedVC)); try { + const chainId = getChainId(signedVC); const chainName = getSupportedNetworkNameFromId(Number(chainId)); const network = getSupportedNetwork(chainName); const provider = network.provider() as unknown as V5Provider; @@ -102,6 +98,7 @@ const verifyW3CDocument = async ( } catch (err: unknown) { signale.warn(`${err instanceof Error ? err.message : String(err)}`); } + // Fallback: Verify without provider return await CaptureConsoleWarnAsync(() => verifyDocument(signedVC)); }; @@ -110,19 +107,30 @@ const verifyOpenAttestationDocument = async ( signedVC: WrappedOrSignedOpenAttestationDocument ): Promise => { signale.info('Verifying OpenAttestation document...'); - // if chainId is defined, it is a TXT document, else DID document. + checkExpiration(signedVC); + const requiresNetwork = isTransferableRecord(signedVC) || isDocumentRevokable(signedVC); + const chainId = getChainId(signedVC); + + // If the document is not transferable or revokable, verify directly + if (!requiresNetwork) return await verifyDocument(signedVC); + + // If chainId is not found, prompt for network selection + if (requiresNetwork && !chainId) { + const networkName = await promptNetworkSelection(); + const provider = getSupportedNetwork(networkName).provider() as unknown as V5Provider; + if (provider) return await verifyDocument(signedVC, { provider }); + } + try { - const chainId = getChainId(signedVC); const chainName = getSupportedNetworkNameFromId(Number(chainId)); const network = getSupportedNetwork(chainName); const provider = network.provider() as unknown as V5Provider; - if (provider) { - return await verifyDocument(signedVC, { provider }); - } + if (provider) return await verifyDocument(signedVC, { provider }); } catch (err: unknown) { signale.warn(`${err instanceof Error ? err.message : String(err)}`); } + // Fallback: Verify without provider return await verifyDocument(signedVC); }; diff --git a/src/utils/formatting.ts b/src/utils/formatting.ts index 11d52c7..cdb9e9b 100644 --- a/src/utils/formatting.ts +++ b/src/utils/formatting.ts @@ -42,7 +42,7 @@ export const getErrorMessage = function (error: unknown): string { // Captures console.warn for a function to handle expected console.warn. // Restores original console.warn functionality after the function is executed. -export const CaptureConsoleWarn= (fn: () => T): { result: T; warnings: unknown[][] } => { +export const CaptureConsoleWarn = (fn: () => T): { result: T; warnings: unknown[][] } => { const originalWarn = console.warn; const warnings: unknown[][] = []; diff --git a/tests/fixtures/verify/oa/2.0/oa_dns_txt_docstore_no_network_field.json b/tests/fixtures/verify/oa/2.0/oa_dns_txt_docstore_no_network_field.json new file mode 100644 index 0000000..321aa74 --- /dev/null +++ b/tests/fixtures/verify/oa/2.0/oa_dns_txt_docstore_no_network_field.json @@ -0,0 +1,92 @@ +{ + "version": "https://schema.openattestation.com/2.0/schema.json", + "data": { + "id": "99058267-23e7-4540-977b-ef9790bb21c0:string:53b75bbe", + "name": "c763cfdd-f543-4258-a69a-c49fa9115d77:string:Opencerts Demo Certificate", + "description": "41571338-6f96-43c2-82bb-2886e2c0f5e7:string:Opencerts Demo Certificate", + "issuedOn": "43ad0d61-48f0-4cb1-ab2a-a3ce0d4862b6:string:2025-05-29T00:00:00+08:00", + "admissionDate": "f91e4fa4-6e7b-48b0-85ad-1ad7acd460e7:string:2020-08-01T00:00:00+08:00", + "graduationDate": "fb9be3b8-96db-418e-8940-ab45ad1ff246:string:2025-08-01T00:00:00+08:00", + "$template": { + "name": "4bb2ef9c-e9c1-486c-9f65-208a0e1d666f:string:OPENCERTS_DEMO", + "type": "c8028dfa-6d6e-4ea7-a5e9-ea99a41da40b:string:EMBEDDED_RENDERER", + "url": "d98a329b-67c9-4fec-bca5-3b0785883632:string:https://demo-renderer.opencerts.io" + }, + "issuers": [ + { + "name": "60f44aa6-318b-45a1-b3cb-7611d3fdfebc:string:Opencerts", + "documentStore": "4aee735e-ba44-40b5-bde4-62a2629295e9:string:0x641bDE53Df8C249dD123e532764420Ed82cfb664", + "identityProof": { + "type": "6180bc6f-7ffe-4002-8ca0-a2dc7a06f259:string:DNS-TXT", + "location": "567ea620-4e2b-4557-8fc3-65f7c9941a82:string:opencerts.io" + } + } + ], + "recipient": { + "name": "b35e2000-f5fc-4648-b8f0-e60e47b91688:string:Your Name", + "nric": "889d200a-2f77-4436-b24f-66da01f6f977:string:SXXXXXXXY", + "course": "976359b5-abd7-4589-ab9d-626bef6b87b4:string:OpenCerts Demo" + }, + "transcript": [ + { + "name": "80220920-efb3-4891-ba4d-f65ecbe94e08:string:Introduction to Programming", + "grade": "0c11d304-8a33-4607-8500-ace83f64a84b:string:A+", + "courseCredit": "ca5023ca-e1ba-464c-970a-3e95c800886d:string:3", + "courseCode": "149388ce-d243-4214-947d-bdce88275248:string:CS 1110", + "examinationDate": "4b56a0b6-911b-469b-a0af-ece45d1b1c3a:string:2020-12-01T00:00:00+08:00", + "semester": "097886a2-e1ea-4a56-8584-83a765623eec:string:1" + }, + { + "name": "aef69586-5c89-47a6-b19d-5cc8d63b8d06:string:Object Oriented Programming in Java", + "grade": "93c11754-a338-4b48-ba60-cf685087ddf5:string:A+", + "courseCredit": "8d72b490-02bd-41d2-b2c6-384b2216c146:string:4", + "courseCode": "e604a19b-8d27-439a-af9b-fe4d0447677e:string:CS 2110", + "examinationDate": "524e1b75-0c0d-4f7b-bf48-bd48feed2e08:string:2021-12-01T00:00:00+08:00", + "semester": "80f8ae4c-a31e-4317-88d9-368a9267bbfb:string:2" + }, + { + "name": "0631f3c1-4e93-407c-89bb-f7a4cd0e2492:string:Microeconomics", + "grade": "f958cd24-e9d0-4945-8e89-0a1915dcb9ec:string:A+", + "courseCredit": "5c0fe648-f011-4b48-8d7a-92748f9158b2:string:4", + "courseCode": "0aadd6a3-9319-4d36-b101-d6fe5437816b:string:ECON 3030", + "examinationDate": "8f4b8ce3-5b4e-4bce-8e2f-19ea61cb23a6:string:2022-05-01T00:00:00+08:00", + "semester": "24a2f0cb-914f-41d5-9301-3a6370c9a84b:string:3" + }, + { + "name": "6536359b-cf78-4721-8913-7269e6afb6e1:string:Macroeconomics", + "grade": "a0228362-4179-4407-a0ca-aabab8027e51:string:A", + "courseCredit": "2dab9b50-9adc-494f-94f2-3787d072b80e:string:4", + "courseCode": "7fff22b6-b9c7-49ea-9eae-67cb15fc22cd:string:ECON 3040", + "examinationDate": "60afa71e-2680-46ac-be21-650353fc2041:string:2023-05-01T00:00:00+08:00", + "semester": "db7c8385-1c18-4452-8a3b-e68d63178acb:string:4" + }, + { + "name": "490ee6ae-9db8-46e3-90f0-22fd3bf30ba0:string:Econometrics", + "grade": "c89b2f5b-e7a2-4795-9382-b229d7b45dbe:string:A-", + "courseCredit": "0c0450a3-7f5e-410c-8662-2184886045ce:string:4", + "courseCode": "1cee504f-11cd-4bb8-a074-2bc09ccb878a:string:ECON 3120", + "examinationDate": "79fa5252-3155-459b-8d77-f468109114dc:string:2024-05-01T00:00:00+08:00", + "semester": "eae9c859-de7d-4a34-a57c-0c3c2bab9ef3:string:5" + } + ], + "additionalData": { + "merit": "af2774a7-79f3-43b4-879e-02e7021abbba:string:Y", + "studentId": "d968a002-834f-490e-aedd-da8430ee9c66:string:123456", + "transcriptId": "47085854-5b87-420b-9e3e-e7e6b33222d0:string:001", + "certSignatories": [ + { + "signature": "5960e70e-8a78-479e-9ff1-43a536a8db47:string:data:image/png;base64,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", + "name": "5ca93796-e8a2-4ddb-bdae-77fee89e09ae:string:John Demo", + "position": "a7555002-b96a-4d33-8aec-6e5692440ff5:string:Dean of Demos", + "organisation": "28f18be7-037b-4b49-a188-3d6bf2ae5638:string:Opencerts" + } + ] + } + }, + "signature": { + "type": "SHA3MerkleProof", + "targetHash": "0aeccde6a769adf132e17ec171cd4ef4eb5e707337965f69ad7b777d6f73c050", + "proof": [], + "merkleRoot": "0aeccde6a769adf132e17ec171cd4ef4eb5e707337965f69ad7b777d6f73c050" + } +} From c132e247a6e41fde1681067f391934cb32d7299f Mon Sep 17 00:00:00 2001 From: pennhan-dex Date: Fri, 23 Jan 2026 13:39:30 +0800 Subject: [PATCH 17/18] update unit tests and run autoformatter --- src/commands/verify.ts | 252 ++++++------ src/types.ts | 6 +- src/utils/formatting.ts | 14 +- src/utils/networks.ts | 33 +- tests/commands/verify.test.ts | 385 +++++++++--------- ...signed_wrapped_oa_dns_txt_docstore_v2.json | 2 +- ..._wrapped_oa_dns_txt_token_registry_v2.json | 2 +- .../oa/3.0/signed_wrapped_oa_dns_did_v3.json | 2 +- ...signed_wrapped_oa_dns_txt_docstore_v3.json | 7 +- ..._wrapped_oa_dns_txt_token_registry_v3.json | 5 +- .../bbs2020_w3c_transferable_record_v1_1.json | 2 +- .../bbs2020_w3c_verifiable_document_v1_1.json | 2 +- ...bs2023_w3c_transferable_document_v2_0.json | 10 +- .../bbs2023_w3c_verifiable_document_v2_0.json | 11 +- .../ecdsa_w3c_transferable_document_v2_0.json | 2 +- .../ecdsa_w3c_verifiable_document_v2_0.json | 2 +- ..._bbs2020_w3c_verifiable_document_v1_1.json | 2 +- ...ed_ecdsa_w3c_verifiable_document_v2_0.json | 2 +- 18 files changed, 371 insertions(+), 370 deletions(-) diff --git a/src/commands/verify.ts b/src/commands/verify.ts index c510d79..3bb4613 100644 --- a/src/commands/verify.ts +++ b/src/commands/verify.ts @@ -1,24 +1,24 @@ import { input } from '@inquirer/prompts'; import { - getSupportedNetwork, - getSupportedNetworkNameFromId, - readJsonFile, - CaptureConsoleWarnAsync, - CaptureConsoleWarn, - promptNetworkSelection, + getSupportedNetwork, + getSupportedNetworkNameFromId, + readJsonFile, + CaptureConsoleWarnAsync, + CaptureConsoleWarn, + promptNetworkSelection, } from '../utils'; import { - getChainId, - getDocumentData, - isDocumentRevokable, - isTransferableRecord, - isWrappedV2Document, - isWrappedV3Document, - SignedVerifiableCredential, - VerificationFragment, - VerificationFragmentWithData, - verifyDocument, - WrappedOrSignedOpenAttestationDocument + getChainId, + getDocumentData, + isDocumentRevokable, + isTransferableRecord, + isWrappedV2Document, + isWrappedV3Document, + SignedVerifiableCredential, + VerificationFragment, + VerificationFragmentWithData, + verifyDocument, + WrappedOrSignedOpenAttestationDocument, } from '@trustvc/trustvc'; import signale from 'signale'; import type { Provider as V5Provider } from '@ethersproject/providers'; @@ -28,140 +28,146 @@ export const command = 'verify'; export const describe = 'Verify a document signed using w3c or OpenAttestation'; export const handler = async () => { - try { - const signedVC = await promptQuestions(); - if (!signedVC) return; - - await verify(signedVC); - } catch (err: unknown) { - signale.error(err instanceof Error ? err.message : String(err)); - } + try { + const signedVC = await promptQuestions(); + if (!signedVC) return; + + await verify(signedVC); + } catch (err: unknown) { + signale.error(err instanceof Error ? err.message : String(err)); + } }; export const promptQuestions = async (): Promise => { - const pathToSignedVC = await input({ - message: "Please enter the path to your document:", - required: true, - validate: (value: string) => { - if (!value || value.trim() === '') { - return 'Document file path is required'; - } - return true; - }, - }); - - const signedVC: SignedVerifiableCredential = readJsonFile(pathToSignedVC, 'document'); - - return signedVC; + const pathToSignedVC = await input({ + message: 'Please enter the path to your document:', + required: true, + validate: (value: string) => { + if (!value || value.trim() === '') { + return 'Document file path is required'; + } + return true; + }, + }); + + const signedVC: SignedVerifiableCredential = readJsonFile(pathToSignedVC, 'document'); + + return signedVC; }; export const verify = async (signedVC: SignedVerifiableCredential) => { - const isOpenAttestation = isWrappedV2Document(signedVC) || isWrappedV3Document(signedVC); + const isOpenAttestation = isWrappedV2Document(signedVC) || isWrappedV3Document(signedVC); - const { result, warnings } = isOpenAttestation - ? { result: await verifyOpenAttestationDocument(signedVC), warnings: null } - : await verifyW3CDocument(signedVC); + const { result, warnings } = isOpenAttestation + ? { result: await verifyOpenAttestationDocument(signedVC), warnings: null } + : await verifyW3CDocument(signedVC); - if (warnings) { - handleExpiredCredentialWarning(warnings); - } + if (warnings) { + handleExpiredCredentialWarning(warnings); + } - logResultStatus(getResultFromFragment(FragmentType.DOCUMENT_INTEGRITY, result)); - logResultStatus(getResultFromFragment(FragmentType.DOCUMENT_STATUS, result)); - logResultStatus(getResultFromFragment(FragmentType.ISSUER_IDENTITY, result)); + logResultStatus(getResultFromFragment(FragmentType.DOCUMENT_INTEGRITY, result)); + logResultStatus(getResultFromFragment(FragmentType.DOCUMENT_STATUS, result)); + logResultStatus(getResultFromFragment(FragmentType.ISSUER_IDENTITY, result)); }; -// ==== Helper Functions ==== +// ==== Helper Functions ==== const verifyW3CDocument = async ( - signedVC: SignedVerifiableCredential + signedVC: SignedVerifiableCredential, ): Promise<{ result: VerificationFragment[]; warnings: unknown[][] }> => { - signale.info('Verifying W3C document...'); - - // To capture the console.warn from trustvc function - const { result: isTransferable } = CaptureConsoleWarn(() => isTransferableRecord(signedVC)); - const isRevokable = isDocumentRevokable(signedVC); - const requiresNetwork = isTransferable || isRevokable; - - // If the document is not transferable or revokable, verify directly - // To capture the console.warn from trustvc function - if (!requiresNetwork) return await CaptureConsoleWarnAsync(() => verifyDocument(signedVC)); - - try { - const chainId = getChainId(signedVC); - const chainName = getSupportedNetworkNameFromId(Number(chainId)); - const network = getSupportedNetwork(chainName); - const provider = network.provider() as unknown as V5Provider; - if (provider) { - return await CaptureConsoleWarnAsync(() => verifyDocument(signedVC, { provider })); - } - } catch (err: unknown) { - signale.warn(`${err instanceof Error ? err.message : String(err)}`); - } + signale.info('Verifying W3C document...'); - // Fallback: Verify without provider - return await CaptureConsoleWarnAsync(() => verifyDocument(signedVC)); -}; + // To capture the console.warn from trustvc function + const { result: isTransferable } = CaptureConsoleWarn(() => isTransferableRecord(signedVC)); + const isRevokable = isDocumentRevokable(signedVC); + const requiresNetwork = isTransferable || isRevokable; -const verifyOpenAttestationDocument = async ( - signedVC: WrappedOrSignedOpenAttestationDocument -): Promise => { - signale.info('Verifying OpenAttestation document...'); + // If the document is not transferable or revokable, verify directly + // To capture the console.warn from trustvc function + if (!requiresNetwork) return await CaptureConsoleWarnAsync(() => verifyDocument(signedVC)); - checkExpiration(signedVC); - const requiresNetwork = isTransferableRecord(signedVC) || isDocumentRevokable(signedVC); + try { const chainId = getChainId(signedVC); - - // If the document is not transferable or revokable, verify directly - if (!requiresNetwork) return await verifyDocument(signedVC); - - // If chainId is not found, prompt for network selection - if (requiresNetwork && !chainId) { - const networkName = await promptNetworkSelection(); - const provider = getSupportedNetwork(networkName).provider() as unknown as V5Provider; - if (provider) return await verifyDocument(signedVC, { provider }); + const chainName = getSupportedNetworkNameFromId(Number(chainId)); + const network = getSupportedNetwork(chainName); + const provider = network.provider() as unknown as V5Provider; + if (provider) { + return await CaptureConsoleWarnAsync(() => verifyDocument(signedVC, { provider })); } + } catch (err: unknown) { + signale.warn(`${err instanceof Error ? err.message : String(err)}`); + } - try { - const chainName = getSupportedNetworkNameFromId(Number(chainId)); - const network = getSupportedNetwork(chainName); - const provider = network.provider() as unknown as V5Provider; - if (provider) return await verifyDocument(signedVC, { provider }); - } catch (err: unknown) { - signale.warn(`${err instanceof Error ? err.message : String(err)}`); - } + // Fallback: Verify without provider + return await CaptureConsoleWarnAsync(() => verifyDocument(signedVC)); +}; - // Fallback: Verify without provider - return await verifyDocument(signedVC); +const verifyOpenAttestationDocument = async ( + signedVC: WrappedOrSignedOpenAttestationDocument, +): Promise => { + signale.info('Verifying OpenAttestation document...'); + + checkExpiration(signedVC); + const requiresNetwork = isTransferableRecord(signedVC) || isDocumentRevokable(signedVC); + const chainId = getChainId(signedVC); + + // If the document is not transferable or revokable, verify directly + if (!requiresNetwork) return await verifyDocument(signedVC); + + // If chainId is not found, prompt for network selection + if (requiresNetwork && !chainId) { + const networkName = await promptNetworkSelection(); + const provider = getSupportedNetwork(networkName).provider() as unknown as V5Provider; + if (provider) return await verifyDocument(signedVC, { provider }); + } + + try { + const chainName = getSupportedNetworkNameFromId(Number(chainId)); + const network = getSupportedNetwork(chainName); + const provider = network.provider() as unknown as V5Provider; + if (provider) return await verifyDocument(signedVC, { provider }); + } catch (err: unknown) { + signale.warn(`${err instanceof Error ? err.message : String(err)}`); + } + + // Fallback: Verify without provider + return await verifyDocument(signedVC); }; const checkExpiration = (signedVC: WrappedOrSignedOpenAttestationDocument) => { - const documentData = getDocumentData(signedVC); - if (documentData.expirationDate && documentData.expirationDate < new Date().toISOString()) { - signale.warn('The document credential has expired.'); - } + const documentData = getDocumentData(signedVC); + if (documentData.expirationDate && documentData.expirationDate < new Date().toISOString()) { + signale.warn('The document credential has expired.'); + } }; -export const getResultFromFragment = (fragmentType: FragmentType, resultFragments: VerificationFragment[]): VerificationFragmentWithData => { - const fragment = resultFragments.find((fragment: VerificationFragment) => fragment.type === fragmentType && fragment.status !== 'SKIPPED'); - if (!fragment) { - throw new Error(`${fragmentType} could not be verified.`); - } - return fragment as VerificationFragmentWithData; -} +export const getResultFromFragment = ( + fragmentType: FragmentType, + resultFragments: VerificationFragment[], +): VerificationFragmentWithData => { + const fragment = resultFragments.find( + (fragment: VerificationFragment) => + fragment.type === fragmentType && fragment.status !== 'SKIPPED', + ); + if (!fragment) { + throw new Error(`${fragmentType} could not be verified.`); + } + return fragment as VerificationFragmentWithData; +}; export const logResultStatus = (fragment: VerificationFragmentWithData): void => { - if (fragment.status === 'VALID') { - signale.success(`${fragment.type}: ${fragment.status}`); - } else { - signale.warn(`${fragment.type}: ${fragment.status} [${fragment.reason.message}]`); - } -} + if (fragment.status === 'VALID') { + signale.success(`${fragment.type}: ${fragment.status}`); + } else { + signale.warn(`${fragment.type}: ${fragment.status} [${fragment.reason.message}]`); + } +}; // Temporary function to handle expired credential console.log from trustvc function for w2c verification export const handleExpiredCredentialWarning = (warnings: unknown[][]) => { - const expiredWarning = warnings.find((warning) => warning[0] === 'Credential has expired.'); - if (expiredWarning) { - signale.warn(`The document credential has expired.`); - } -} + const expiredWarning = warnings.find((warning) => warning[0] === 'Credential has expired.'); + if (expiredWarning) { + signale.warn(`The document credential has expired.`); + } +}; diff --git a/src/types.ts b/src/types.ts index 92a017f..4b2783f 100644 --- a/src/types.ts +++ b/src/types.ts @@ -44,9 +44,9 @@ export type DidInput = { }; export enum FragmentType { - DOCUMENT_INTEGRITY = 'DOCUMENT_INTEGRITY', - DOCUMENT_STATUS = 'DOCUMENT_STATUS', - ISSUER_IDENTITY = 'ISSUER_IDENTITY' + DOCUMENT_INTEGRITY = 'DOCUMENT_INTEGRITY', + DOCUMENT_STATUS = 'DOCUMENT_STATUS', + ISSUER_IDENTITY = 'ISSUER_IDENTITY', } export type KeyPairGenerateInput = { diff --git a/src/utils/formatting.ts b/src/utils/formatting.ts index cdb9e9b..dd7faf9 100644 --- a/src/utils/formatting.ts +++ b/src/utils/formatting.ts @@ -40,9 +40,9 @@ export const getErrorMessage = function (error: unknown): string { } }; -// Captures console.warn for a function to handle expected console.warn. +// Captures console.warn for a function to handle expected console.warn. // Restores original console.warn functionality after the function is executed. -export const CaptureConsoleWarn = (fn: () => T): { result: T; warnings: unknown[][] } => { +export const CaptureConsoleWarn = (fn: () => T): { result: T; warnings: unknown[][] } => { const originalWarn = console.warn; const warnings: unknown[][] = []; @@ -56,11 +56,13 @@ export const CaptureConsoleWarn = (fn: () => T): { result: T; warnings: unkno } finally { console.warn = originalWarn; } -} +}; -// Async captures console.warn for an async function to handle expected console.warn. +// Async captures console.warn for an async function to handle expected console.warn. // Restores original console.warn functionality after the function is executed. -export const CaptureConsoleWarnAsync = async (fn: () => Promise): Promise<{ result: T; warnings: unknown[][] }> => { +export const CaptureConsoleWarnAsync = async ( + fn: () => Promise, +): Promise<{ result: T; warnings: unknown[][] }> => { const originalWarn = console.warn; const warnings: unknown[][] = []; @@ -74,4 +76,4 @@ export const CaptureConsoleWarnAsync = async (fn: () => Promise): Promise< } finally { console.warn = originalWarn; } -} \ No newline at end of file +}; diff --git a/src/utils/networks.ts b/src/utils/networks.ts index c559b51..eb071d5 100644 --- a/src/utils/networks.ts +++ b/src/utils/networks.ts @@ -32,13 +32,13 @@ export enum NetworkCmdName { const defaultInfuraProvider = (networkName: string): (() => Provider) => - () => - new InfuraProvider(networkName); + () => + new InfuraProvider(networkName); const jsonRpcProvider = (url: string): (() => Provider) => - () => - new JsonRpcProvider(url); + () => + new JsonRpcProvider(url); /** * Creates a provider that checks for an environment variable override @@ -47,20 +47,17 @@ const jsonRpcProvider = * Example: SEPOLIA_RPC=https://sepolia.infura.io/v3/your-key */ const getProviderWithEnvOverride = - ( - networkName: NetworkCmdName, - defaultProvider: () => Provider, - ): (() => Provider) => - () => { - const envVarName = `${networkName.toUpperCase()}_RPC`; - const customRpcUrl = process.env[envVarName]; - - if (customRpcUrl) { - return new JsonRpcProvider(customRpcUrl); - } - - return defaultProvider(); - }; + (networkName: NetworkCmdName, defaultProvider: () => Provider): (() => Provider) => + () => { + const envVarName = `${networkName.toUpperCase()}_RPC`; + const customRpcUrl = process.env[envVarName]; + + if (customRpcUrl) { + return new JsonRpcProvider(customRpcUrl); + } + + return defaultProvider(); + }; // RPC URL mapping for each network (used for provider creation) const rpcUrls: { [key in NetworkCmdName]: string } = { diff --git a/tests/commands/verify.test.ts b/tests/commands/verify.test.ts index 9399cd7..3d5e133 100644 --- a/tests/commands/verify.test.ts +++ b/tests/commands/verify.test.ts @@ -4,220 +4,231 @@ import path from 'node:path'; import { beforeEach, describe, expect, it, MockedFunction, vi } from 'vitest'; import { promptQuestions, verify } from '../../src/commands/verify'; import { SignedVerifiableCredential } from '@trustvc/trustvc'; -import { getResultFromFragment, handleExpiredCredentialWarning, logResultStatus } from '../../src/commands/verify'; +import { + getResultFromFragment, + handleExpiredCredentialWarning, + logResultStatus, +} from '../../src/commands/verify'; import { FragmentType } from '../../src/types'; const VERIFY_FIXTURES_DIR = path.resolve(process.cwd(), 'tests/fixtures/verify'); const PROMPT_QUESTIONS_FIXTURE_PATH = path.resolve( - process.cwd(), - 'tests/fixtures/verify/w3c/bbs2020_w3c_verifiable_document_v1_1.json', + process.cwd(), + 'tests/fixtures/verify/w3c/bbs2020_w3c_verifiable_document_v1_1.json', ); vi.mock('@inquirer/prompts'); vi.mock('signale', () => ({ - default: { - success: vi.fn(), - error: vi.fn(), - warn: vi.fn(), - info: vi.fn(), - }, - Signale: vi.fn().mockImplementation(() => ({ - await: vi.fn(), - success: vi.fn(), - })), + default: { + success: vi.fn(), + error: vi.fn(), + warn: vi.fn(), + info: vi.fn(), + }, + Signale: vi.fn().mockImplementation(() => ({ + await: vi.fn(), + success: vi.fn(), + })), })); describe('verify', () => { - beforeEach(() => { - vi.clearAllMocks(); - vi.resetAllMocks(); + beforeEach(() => { + vi.clearAllMocks(); + }); + + describe('helper functions', () => { + let signaleSuccessMock: MockedFunction; + let signaleWarnMock: MockedFunction; + + beforeEach(async () => { + const signale = await import('signale'); + signaleSuccessMock = (signale.default as any).success; + signaleWarnMock = (signale.default as any).warn; + + // Mock the interactive network selection prompt for ethereum mainnet for oa_dns_txt_docstore_no_network_field.json + // This is used by promptNetworkSelection() when the document requires a network but has no chain/network info. + // e.g. OA V2 files + (prompts.select as any).mockResolvedValue('mainnet'); }); - describe('helper functions', () => { - let signaleSuccessMock: MockedFunction; - let signaleWarnMock: MockedFunction; - - beforeEach(async () => { - const signale = await import('signale'); - signaleSuccessMock = (signale.default as any).success; - signaleWarnMock = (signale.default as any).warn; - }); - - describe('getResultFromFragment', () => { - it('should return the first non-SKIPPED fragment with matching type', () => { - const fragments: any[] = [ - { type: FragmentType.DOCUMENT_STATUS, status: 'SKIPPED' }, - { type: FragmentType.DOCUMENT_STATUS, status: 'VALID', data: { ok: true } }, - ]; - - const fragment = getResultFromFragment(FragmentType.DOCUMENT_STATUS, fragments as any); - expect(fragment).toMatchObject({ type: FragmentType.DOCUMENT_STATUS, status: 'VALID' }); - }); - - it('should throw when no matching non-SKIPPED fragment exists', () => { - const fragments: any[] = [ - { type: FragmentType.DOCUMENT_STATUS, status: 'SKIPPED' }, - { type: FragmentType.DOCUMENT_INTEGRITY, status: 'VALID' }, - ]; - - expect(() => getResultFromFragment(FragmentType.ISSUER_IDENTITY, fragments as any)).toThrow( - 'ISSUER_IDENTITY could not be verified.', - ); - }); - }); - - describe('logResultStatus', () => { - it('should log success when fragment status is VALID', () => { - logResultStatus({ type: FragmentType.DOCUMENT_INTEGRITY, status: 'VALID' } as any); - expect(signaleSuccessMock).toHaveBeenCalledWith('DOCUMENT_INTEGRITY: VALID'); - expect(signaleWarnMock).not.toHaveBeenCalled(); - }); - - it('should log warning when fragment status is not VALID', () => { - logResultStatus({ - type: 'DOCUMENT_STATUS', - status: 'INVALID', - reason: { message: 'Revoked' }, - } as any); - - expect(signaleWarnMock).toHaveBeenCalledWith('DOCUMENT_STATUS: INVALID [Revoked]'); - }); - }); - - describe('handleExpiredCredentialWarning', () => { - it('should log when expiration warning is present', () => { - handleExpiredCredentialWarning([['Credential has expired.']]); - expect(signaleWarnMock).toHaveBeenCalledWith('The document credential has expired.'); - }); - - it('should not log when there is no expiration warning', () => { - handleExpiredCredentialWarning([['Some other warning']]); - expect(signaleWarnMock).not.toHaveBeenCalled(); - }); - }); + describe('getResultFromFragment', () => { + it('should return the first non-SKIPPED fragment with matching type', () => { + const fragments: any[] = [ + { type: FragmentType.DOCUMENT_STATUS, status: 'SKIPPED' }, + { type: FragmentType.DOCUMENT_STATUS, status: 'VALID', data: { ok: true } }, + ]; + + const fragment = getResultFromFragment(FragmentType.DOCUMENT_STATUS, fragments as any); + expect(fragment).toMatchObject({ type: FragmentType.DOCUMENT_STATUS, status: 'VALID' }); + }); + + it('should throw when no matching non-SKIPPED fragment exists', () => { + const fragments: any[] = [ + { type: FragmentType.DOCUMENT_STATUS, status: 'SKIPPED' }, + { type: FragmentType.DOCUMENT_INTEGRITY, status: 'VALID' }, + ]; + + expect(() => getResultFromFragment(FragmentType.ISSUER_IDENTITY, fragments as any)).toThrow( + 'ISSUER_IDENTITY could not be verified.', + ); + }); + }); + + describe('logResultStatus', () => { + it('should log success when fragment status is VALID', () => { + logResultStatus({ type: FragmentType.DOCUMENT_INTEGRITY, status: 'VALID' } as any); + expect(signaleSuccessMock).toHaveBeenCalledWith('DOCUMENT_INTEGRITY: VALID'); + expect(signaleWarnMock).not.toHaveBeenCalled(); + }); + + it('should log warning when fragment status is not VALID', () => { + logResultStatus({ + type: 'DOCUMENT_STATUS', + status: 'INVALID', + reason: { message: 'Revoked' }, + } as any); + + expect(signaleWarnMock).toHaveBeenCalledWith('DOCUMENT_STATUS: INVALID [Revoked]'); + }); + }); + + describe('handleExpiredCredentialWarning', () => { + it('should log when expiration warning is present', () => { + handleExpiredCredentialWarning([['Credential has expired.']]); + expect(signaleWarnMock).toHaveBeenCalledWith('The document credential has expired.'); + }); + + it('should not log when there is no expiration warning', () => { + handleExpiredCredentialWarning([['Some other warning']]); + expect(signaleWarnMock).not.toHaveBeenCalled(); + }); }); + }); - describe('promptQuestions', () => { - it('should return parsed signed VC from readJsonFile', async () => { - (prompts.input as any).mockResolvedValueOnce( - PROMPT_QUESTIONS_FIXTURE_PATH, - ); + describe('promptQuestions', () => { + it('should return parsed signed VC from readJsonFile', async () => { + (prompts.input as any).mockResolvedValueOnce(PROMPT_QUESTIONS_FIXTURE_PATH); - const result = await promptQuestions(); + const result = await promptQuestions(); - expect(result).toBeTruthy(); - }); + expect(result).toBeTruthy(); + }); - it('should abide by validation rules for path input', async () => { - (prompts.input as any).mockResolvedValueOnce( - PROMPT_QUESTIONS_FIXTURE_PATH, - ); + it('should abide by validation rules for path input', async () => { + (prompts.input as any).mockResolvedValueOnce(PROMPT_QUESTIONS_FIXTURE_PATH); - await promptQuestions(); + await promptQuestions(); - const inputArgs = (prompts.input as any).mock.calls[0][0]; + const inputArgs = (prompts.input as any).mock.calls[0][0]; - expect(inputArgs.required).toBe(true); - expect(inputArgs.validate('')).toBe('Document file path is required'); - expect(inputArgs.validate(' ')).toBe('Document file path is required'); - expect(inputArgs.validate('./signed_vc.json')).toBe(true); - }); + expect(inputArgs.required).toBe(true); + expect(inputArgs.validate('')).toBe('Document file path is required'); + expect(inputArgs.validate(' ')).toBe('Document file path is required'); + expect(inputArgs.validate('./signed_vc.json')).toBe(true); + }); - it('should throw error when given an invalid signed VC file path (readJsonFile fails)', async () => { - const missingPath = './missing.json'; + it('should throw error when given an invalid signed VC file path (readJsonFile fails)', async () => { + const missingPath = './missing.json'; - (prompts.input as any).mockResolvedValueOnce(missingPath); + (prompts.input as any).mockResolvedValueOnce(missingPath); - await expect(promptQuestions()).rejects.toThrow( - `Invalid document file path: ${missingPath}`, - ); - }); + await expect(promptQuestions()).rejects.toThrow(`Invalid document file path: ${missingPath}`); + }); + }); + + describe('verify', () => { + let signaleSuccessMock: MockedFunction; + let signaleWarnMock: MockedFunction; + + // Helper function to list all JSON fixture files in a directory recursively + const listVerifyFixturePathsRecursively = (dir: string): string[] => { + const entries = fs.readdirSync(dir, { withFileTypes: true }); + return entries.flatMap((entry) => { + const absolutePath = path.join(dir, entry.name); + if (entry.isDirectory()) return listVerifyFixturePathsRecursively(absolutePath); + if (entry.isFile() && entry.name.toLowerCase().endsWith('.json')) return [absolutePath]; + return []; + }); + }; + + const verifyFixturePaths: string[] = + listVerifyFixturePathsRecursively(VERIFY_FIXTURES_DIR).sort(); + + const inferExpectedWarning = (filePath: string) => { + const fileName = path.basename(filePath).toLowerCase(); + if (fileName.includes('revoked')) return 'revoked'; + if (fileName.includes('expired')) return 'expired'; + return 'none'; + }; + + beforeEach(async () => { + const signale = await import('signale'); + signaleSuccessMock = (signale.default as any).success; + signaleWarnMock = (signale.default as any).warn; }); - describe('verify', () => { - let signaleSuccessMock: MockedFunction; - let signaleWarnMock: MockedFunction; - - const listVerifyFixturePathsRecursively = (dir: string): string[] => { - const entries = fs.readdirSync(dir, { withFileTypes: true }); - return entries.flatMap((entry) => { - const absolutePath = path.join(dir, entry.name); - if (entry.isDirectory()) return listVerifyFixturePathsRecursively(absolutePath); - if (entry.isFile() && entry.name.toLowerCase().endsWith('.json')) return [absolutePath]; - return []; - }); - }; - - - const verifyFixturePaths: string[] = listVerifyFixturePathsRecursively(VERIFY_FIXTURES_DIR).sort(); - - const inferExpectedWarning = (filePath: string) => { - const fileName = path.basename(filePath).toLowerCase(); - if (fileName.includes('revoked')) return 'revoked'; - if (fileName.includes('expired')) return 'expired'; - return 'none'; - }; - - beforeEach(async () => { - const signale = await import('signale'); - signaleSuccessMock = (signale.default as any).success; - signaleWarnMock = (signale.default as any).warn; - }); - - type TestCase = { - name: string; - filePath: string; - expectedWarning: string; - }; - - const testCases: TestCase[] = verifyFixturePaths.map((filePath) => ({ - name: path.relative(process.cwd(), filePath), - filePath, - expectedWarning: inferExpectedWarning(filePath), - })); - - it.each(testCases)( - 'should verify real signed VC fixture: $name', - async (testCase) => { - const { filePath, expectedWarning } = testCase; - const utils = await import('../../src/utils'); - const signedVC = utils.readJsonFile(filePath, 'document'); - - await verify(signedVC); - - const successCalls = signaleSuccessMock.mock.calls ?? []; - const warnCalls = signaleWarnMock.mock.calls ?? []; - - const successMessages = successCalls.map((call: any[]) => call[0]); - const warnMessages = warnCalls.map((call: any[]) => call[0]); - - const combinedMessages = [...successMessages, ...warnMessages]; - - expect(combinedMessages.join('\n')).toContain('DOCUMENT_INTEGRITY:'); - expect(combinedMessages.join('\n')).toContain('ISSUER_IDENTITY:'); - expect(combinedMessages.join('\n')).toContain('DOCUMENT_STATUS:'); - - if (expectedWarning === 'revoked') { - expect(warnMessages.length).toBeGreaterThan(0); - expect(warnMessages.join('\n')).toContain('DOCUMENT_STATUS: INVALID [Document has been revoked.]'); - } - - if (expectedWarning === 'expired') { - expect(warnMessages.length).toBeGreaterThan(0); - expect(warnMessages.join('\n')).toContain('The document credential has expired.'); - } - - if (expectedWarning === 'none') { - expect(successMessages).toEqual( - expect.arrayContaining([ - 'DOCUMENT_INTEGRITY: VALID', - 'DOCUMENT_STATUS: VALID', - 'ISSUER_IDENTITY: VALID', - ]), - ); - } - }, + type TestCase = { + name: string; + filePath: string; + expectedWarning: string; + }; + + const testCases: TestCase[] = verifyFixturePaths.map((filePath) => ({ + name: path.basename(filePath), + filePath: filePath, + expectedWarning: inferExpectedWarning(filePath), + })); + + it.each(testCases)('should verify real signed VC fixture: $name', async (testCase) => { + const { filePath, expectedWarning } = testCase; + const utils = await import('../../src/utils'); + const signedVC = utils.readJsonFile(filePath, 'document'); + + await verify(signedVC); + + // Ensure "no network info" OA fixture triggers the network selection. + // Other fixtures that have network info should not trigger the network selection. + const baseName = path.basename(filePath).toLowerCase(); + if (baseName.includes('no_network_field')) { + expect(prompts.select).toHaveBeenCalled(); + } else { + expect(prompts.select).not.toHaveBeenCalled(); + } + + const successCalls = signaleSuccessMock.mock.calls ?? []; + const warnCalls = signaleWarnMock.mock.calls ?? []; + + const successMessages = successCalls.map((call: any[]) => call[0]); + const warnMessages = warnCalls.map((call: any[]) => call[0]); + + const combinedMessages = [...successMessages, ...warnMessages]; + + expect(combinedMessages.join('\n')).toContain('DOCUMENT_INTEGRITY:'); + expect(combinedMessages.join('\n')).toContain('ISSUER_IDENTITY:'); + expect(combinedMessages.join('\n')).toContain('DOCUMENT_STATUS:'); + + if (expectedWarning === 'revoked') { + expect(warnMessages.length).toBeGreaterThan(0); + expect(warnMessages.join('\n')).toContain( + 'DOCUMENT_STATUS: INVALID [Document has been revoked.]', + ); + } + + if (expectedWarning === 'expired') { + expect(warnMessages.length).toBeGreaterThan(0); + expect(warnMessages.join('\n')).toContain('The document credential has expired.'); + } + + if (expectedWarning === 'none') { + expect(successMessages).toEqual( + expect.arrayContaining([ + 'DOCUMENT_INTEGRITY: VALID', + 'DOCUMENT_STATUS: VALID', + 'ISSUER_IDENTITY: VALID', + ]), ); + } }); + }); }); diff --git a/tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_txt_docstore_v2.json b/tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_txt_docstore_v2.json index 6464637..0912c6c 100644 --- a/tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_txt_docstore_v2.json +++ b/tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_txt_docstore_v2.json @@ -106,4 +106,4 @@ "proof": [], "merkleRoot": "73e4e9ae2269686ea0a0bed873f042fb690c52370565ee7db3c6e822773917fb" } -} \ No newline at end of file +} diff --git a/tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_txt_token_registry_v2.json b/tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_txt_token_registry_v2.json index 469d39b..509e97c 100644 --- a/tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_txt_token_registry_v2.json +++ b/tests/fixtures/verify/oa/2.0/signed_wrapped_oa_dns_txt_token_registry_v2.json @@ -53,4 +53,4 @@ "proof": [], "merkleRoot": "45c4f4dde4e8da7b0b3eb2ac99fc05a1226b513773a4ef1e0c6389bf30de7a3f" } -} \ No newline at end of file +} diff --git a/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_did_v3.json b/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_did_v3.json index 4ffa610..9095c77 100644 --- a/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_did_v3.json +++ b/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_did_v3.json @@ -69,4 +69,4 @@ "key": "did:ethr:0xB26B4941941C51a4885E5B7D3A1B861E54405f90#controller", "signature": "0x836a2547654da43f01641b3a0efff6797adc7e8b806d65cb9c67e25b119c70c34aa4c73a14d8138f52c05f6f7e1048ead225c85eb981fac8c2207895e48f14a91c" } -} \ No newline at end of file +} diff --git a/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_txt_docstore_v3.json b/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_txt_docstore_v3.json index 0a4c64b..adecdfe 100644 --- a/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_txt_docstore_v3.json +++ b/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_txt_docstore_v3.json @@ -5,10 +5,7 @@ "https://schemata.tradetrust.io/io/tradetrust/Invoice/1.0/invoice-context.json", "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json" ], - "type": [ - "VerifiableCredential", - "OpenAttestationCredential" - ], + "type": ["VerifiableCredential", "OpenAttestationCredential"], "issuanceDate": "2010-01-01T19:23:24Z", "issuer": { "id": "https://example.com", @@ -100,4 +97,4 @@ "obfuscated": [] } } -} \ No newline at end of file +} diff --git a/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_txt_token_registry_v3.json b/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_txt_token_registry_v3.json index 51ebf7b..fc52eb4 100644 --- a/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_txt_token_registry_v3.json +++ b/tests/fixtures/verify/oa/3.0/signed_wrapped_oa_dns_txt_token_registry_v3.json @@ -5,10 +5,7 @@ "https://schemata.openattestation.com/com/openattestation/1.0/OpenAttestation.v3.json", "https://schemata.tradetrust.io/io/tradetrust/bill-of-lading/1.0/bill-of-lading-context.json" ], - "type": [ - "VerifiableCredential", - "OpenAttestationCredential" - ], + "type": ["VerifiableCredential", "OpenAttestationCredential"], "issuer": { "id": "https://example.com", "name": "Demo token registry", diff --git a/tests/fixtures/verify/w3c/bbs2020_w3c_transferable_record_v1_1.json b/tests/fixtures/verify/w3c/bbs2020_w3c_transferable_record_v1_1.json index 453f9da..3eebfef 100644 --- a/tests/fixtures/verify/w3c/bbs2020_w3c_transferable_record_v1_1.json +++ b/tests/fixtures/verify/w3c/bbs2020_w3c_transferable_record_v1_1.json @@ -94,4 +94,4 @@ "proofValue": "i41csJtnGrZYhTJi/6Oe+i1CFev2jroBD1r9CE7Yc9MMEUPag8SUFEccvzdG+oxkTVi6gpUcPkkCBODbBNb7En+DKJjVkRzj29k3yt6vrb5lYE1Nq8yRJAwmWHqlhogOAAgXSIC4aZn5QKHAt0E4Hw==", "verificationMethod": "did:web:trustvc.github.io:did:1#keys-1" } -} \ No newline at end of file +} diff --git a/tests/fixtures/verify/w3c/bbs2020_w3c_verifiable_document_v1_1.json b/tests/fixtures/verify/w3c/bbs2020_w3c_verifiable_document_v1_1.json index 2e84315..d5194bb 100644 --- a/tests/fixtures/verify/w3c/bbs2020_w3c_verifiable_document_v1_1.json +++ b/tests/fixtures/verify/w3c/bbs2020_w3c_verifiable_document_v1_1.json @@ -66,4 +66,4 @@ "proofValue": "o32r+zLI4dcOeLY1omIXoqQKXwwC6z9ihFkGowUvlpgdk3lBA02NRiOuTNQt8CExDEfRAbq+17MwX8sMkSSN7Drbug0evckYllVnzTy4hzRTItiHNrGr9979b4i486eQCEF3QwrQPSU1k/v3LXx6lQ==", "verificationMethod": "did:web:trustvc.github.io:did:1#keys-1" } -} \ No newline at end of file +} diff --git a/tests/fixtures/verify/w3c/bbs2023_w3c_transferable_document_v2_0.json b/tests/fixtures/verify/w3c/bbs2023_w3c_transferable_document_v2_0.json index f2929bf..63fde06 100644 --- a/tests/fixtures/verify/w3c/bbs2023_w3c_transferable_document_v2_0.json +++ b/tests/fixtures/verify/w3c/bbs2023_w3c_transferable_document_v2_0.json @@ -16,9 +16,7 @@ } ], "credentialSubject": { - "type": [ - "BillOfLadingCarrier" - ], + "type": ["BillOfLadingCarrier"], "shipperName": "MAERSK Co.", "shipperAddressStreet": "101 ORCHARD ROAD", "shipperAddressCountry": "Singapore", @@ -79,9 +77,7 @@ } ] }, - "type": [ - "VerifiableCredential" - ], + "type": ["VerifiableCredential"], "credentialStatus": { "type": "TransferableRecords", "tokenNetwork": { @@ -101,4 +97,4 @@ "proofPurpose": "assertionMethod", "proofValue": "u2V0ChVhQhzENt_A1gmatFwG5rfZiOth1JD3ALwgh_esbGXFU5Nhs3hrQ4iw_jzpy5-W1c1OrKWdKLgNG2Lj1G6zQyA3myYqrNy4DgtO86ElSV_ewJqdYQD9WZttHrlLy5Yt4KX5JlbD4AqxyPhcyoKk-Wo6FkAtpZsbWIE72P8kG5m7fT_DVEHnjS2aA2qqbQ2cORbU0hWtYYLDx2EM7LXGzSqyTOC8ZKJ9hgD0GHrf59LhRlLV3-pK34L5ohGo8I-g81SD6xVKofBMNiXxFLrp7w56sQlEOkcpISekB2jtn0DeTWzNHrnVwuejhZPM1PPtOuxtkbzj6J1ggi8bJHCZOPnakpm0CkyIIs5xNfTu0U_0e-0iy-iqq2nuCZy9pc3N1ZXJqL3ZhbGlkRnJvbQ" } -} \ No newline at end of file +} diff --git a/tests/fixtures/verify/w3c/bbs2023_w3c_verifiable_document_v2_0.json b/tests/fixtures/verify/w3c/bbs2023_w3c_verifiable_document_v2_0.json index 9f03e7e..6424d05 100644 --- a/tests/fixtures/verify/w3c/bbs2023_w3c_verifiable_document_v2_0.json +++ b/tests/fixtures/verify/w3c/bbs2023_w3c_verifiable_document_v2_0.json @@ -14,16 +14,11 @@ "credentialSubject": { "name": "TrustVC", "birthDate": "2024-04-01T12:19:52Z", - "type": [ - "PermanentResident", - "Person" - ] + "type": ["PermanentResident", "Person"] }, "validUntil": "2029-12-03T12:19:52Z", "issuer": "did:web:trustvc.github.io:did:1", - "type": [ - "VerifiableCredential" - ], + "type": ["VerifiableCredential"], "validFrom": "2024-04-01T12:19:52Z", "id": "urn:uuid:019bdac4-15af-7ddf-a904-e29e770cb8d0", "proof": { @@ -33,4 +28,4 @@ "proofPurpose": "assertionMethod", "proofValue": "u2V0ChVhQl3FQf1iCsd8UOYKoOtE05EwyADb2pFKw3CXYhmAAKstq1lX4o69u58Z67M_2i6RIRZZv-KITPWVH00hkQKuNH3GWNpw9JO1RMQ_iKJm4u-xYQD9WZttHrlLy5Yt4KX5JlbD4AqxyPhcyoKk-Wo6FkAtpZhBXKsdUqNY4_vn1ieMbuZLxuIijh5S1vR5UbeeBlupYYLDx2EM7LXGzSqyTOC8ZKJ9hgD0GHrf59LhRlLV3-pK34L5ohGo8I-g81SD6xVKofBMNiXxFLrp7w56sQlEOkcpISekB2jtn0DeTWzNHrnVwuejhZPM1PPtOuxtkbzj6J1ggQDXmZWDv7Gc0fHBKsyn_bGwKW8HLyTRJZZ-2ielvfxqCZy9pc3N1ZXJqL3ZhbGlkRnJvbQ" } -} \ No newline at end of file +} diff --git a/tests/fixtures/verify/w3c/ecdsa_w3c_transferable_document_v2_0.json b/tests/fixtures/verify/w3c/ecdsa_w3c_transferable_document_v2_0.json index e4ac8c9..76000f3 100644 --- a/tests/fixtures/verify/w3c/ecdsa_w3c_transferable_document_v2_0.json +++ b/tests/fixtures/verify/w3c/ecdsa_w3c_transferable_document_v2_0.json @@ -102,4 +102,4 @@ "proofPurpose": "assertionMethod", "proofValue": "u2V0AhVhAhXO0SlwhidFxMbpIV-KYjjIegFgYCcPGZ6VjO1DsGfW6wug2xWoHGUH0doaCXydbwRi0EtOOoJlfDbn5vYj7uVgjgCQCaSm-p60ackROchjdiT5kjv9sKn_mnlp8JaeWVUMJJVFYIIrSdA2TyIuExK3IoAuJIByBnck7lRfeJu6O9gZNpgVXgIZnL2lzc3VlcmovdmFsaWRGcm9tci9jcmVkZW50aWFsU3ViamVjdG0vcmVuZGVyTWV0aG9kcS9jcmVkZW50aWFsU3RhdHVzZy9xckNvZGU" } -} \ No newline at end of file +} diff --git a/tests/fixtures/verify/w3c/ecdsa_w3c_verifiable_document_v2_0.json b/tests/fixtures/verify/w3c/ecdsa_w3c_verifiable_document_v2_0.json index 4c59821..c3f1622 100644 --- a/tests/fixtures/verify/w3c/ecdsa_w3c_verifiable_document_v2_0.json +++ b/tests/fixtures/verify/w3c/ecdsa_w3c_verifiable_document_v2_0.json @@ -98,4 +98,4 @@ "proofPurpose": "assertionMethod", "proofValue": "u2V0AhVhAN0HNoehLZWCVx43aBosJW3XeHtsL7S-C3PvE8tt5qb_mXfBOD5Wgsza84uGljsaqjRG9svPnQbiJTuCsDGXmW1gjgCQDK674hOYZJLdhCH8Vxiir0VYTPbMDx8zSjZo7OAjRcdhYIIFAEQgGCGbGJjfPUROKRgEnjyBP_YzvtAr-xCfkgjZkgIZnL2lzc3VlcmovdmFsaWRGcm9tci9jcmVkZW50aWFsU3ViamVjdG0vcmVuZGVyTWV0aG9kZy9xckNvZGVlL3R5cGU" } -} \ No newline at end of file +} diff --git a/tests/fixtures/verify/w3c/expired_bbs2020_w3c_verifiable_document_v1_1.json b/tests/fixtures/verify/w3c/expired_bbs2020_w3c_verifiable_document_v1_1.json index 09ee1ab..ad8e64f 100644 --- a/tests/fixtures/verify/w3c/expired_bbs2020_w3c_verifiable_document_v1_1.json +++ b/tests/fixtures/verify/w3c/expired_bbs2020_w3c_verifiable_document_v1_1.json @@ -67,4 +67,4 @@ "proofValue": "k8QwxKBS7BXAWfs1xNv8GuGrEO3FB8/pDIOyWNqI2d2wGYp/tQixwqU0M9GAHV8VNef4c84qgcFZsLSBSM2An8tsYuBoKA8SFJ/lDWfG1KE8rVGAm30irXwSs/afEDzoT2K1T+FA8pEMxuqc1YXdyg==", "verificationMethod": "did:web:trustvc.github.io:did:1#keys-1" } -} \ No newline at end of file +} diff --git a/tests/fixtures/verify/w3c/revoked_ecdsa_w3c_verifiable_document_v2_0.json b/tests/fixtures/verify/w3c/revoked_ecdsa_w3c_verifiable_document_v2_0.json index 1152d99..065681a 100644 --- a/tests/fixtures/verify/w3c/revoked_ecdsa_w3c_verifiable_document_v2_0.json +++ b/tests/fixtures/verify/w3c/revoked_ecdsa_w3c_verifiable_document_v2_0.json @@ -76,4 +76,4 @@ "proofPurpose": "assertionMethod", "proofValue": "u2V0AhVhAJkFjMn4zWrJXhY-EqWhy-NvFRdLm_dF7IIMd4UbLPwjGJyJAnuwqqiM79LZT4bxow0jXYfNF4XWL5bqVFI1MPFgjgCQDuTPhBc6tZKIWyZZZKeARqDErduYv0x3bD7QfG1ke0cNYINX2Sd4geOSiHU73zBQ3d9GTYw79js0OaXhYlf15Z9f4mCZYQCF6ABtuDUFHHkHwG-AsYwmKXytxMMNeSwW2rPP9LHvUt0Ip75uLBjhPONLssKKj_nM7jrRnRAVyNegggCILiZVYQJIxUqZt95fsygUkWlvPkHShl9ZYkf6IZIheKS-uR-SZI7-xcffLx4xZAx1i5dWIJGJC58oBmjlUwsQuM_hKKLlYQFFDtmRXcM1WTY4l3tZdgV1XYPDm8TgvM7m0eguGP1Cwmu2LrGQjFOGLK3PWV89h_GJrRY9zqyDV8019GPztc3FYQABL9bzxVJimp-Zx7rhuN4PsHprgE4jnsk037M3Ge7fcLGXS6j81xtdlCRxMrOOuI4A6VKGufmaTCoyOEbw5KkdYQPXhkK7IO60JL1B8N9VJuZISeF2agzBVLIGZ30XhOc6o6eew9kh9mOtGrJsboEdDL1avqJ5ljs9fRbkGNW4ielFYQGsERhavqeEJAPjw-8Nmqasok0dbtIuwSJK3LuQ-Hw2ac3kkvAC1_qs6wrq2NJZAAPb0osrD4AtRbhadvAih5T5YQIJsg5i4MLmJFmB3Xqh8Fgt-2Bj5yE6k97dWW4z7yAkg9pOBQscRSrooVK5UUhD-pxNaN_pAIJEQSgKp83E_gClYQDAkopPK1GYD_EbAPZtismuEeQ1gyGMPV4-F-Hq25L1XekQrT9xgBtPuq7_YJFErgGGCwq1bdMQNj9WCGRYleIlYQLvmP8E8h9YpwLvTyhQc9U2tS9SNN8ygF4H2671VoL8nnlW57Id8aCdn_tUmjbCQfvCXw3ipHX5umiUEC-OZPU5YQDBDLEuMbQaL4pUjAKr5h3HO_llDwJEHfitVFA21wDkye5kEdAazzA9ar7KgD_p3BwjtBJBsJt4zK5n8A5up9lhYQEj3rJ3XuKwu9PuAsEKJyRk1K5uL7uiLgXZAbZuHVH4cLJSFM3QdwJFz_JiA0IvkrbHReUw5HjLEgFdX1RDE7tpYQGDY7GFYBxlA4ZHTBEQSuGphQ8sCoAU0EufbkdUZDDe8-4BSu9c76qkzyJ4cPygBMgyXVpL4rAoPlQN_zvbTukdYQIhO2jtOfbydRUWukWaAS_Gvc_dWwBRxzKhQ2ESUR2iN_bwIPWlYjQhr2Erhw-ELq1TeMoTMsDInS9zHa6FWD2ZYQC93YRsCDVTFoLdA6MZw1sLafxknnrvX9qJQrYQltDjMGqDCLGXF-LWgWrL2qa2q4mOgho-HiRa8vAhwYkfNSpVYQDL9Xk94G1IH82smnWRuSHcTeLnJjnr6c2SOMz9aP4x13WQOd06R4gEjfgnSJQsUUbL_wrqxmauaVz2jXXfRC_JYQNocs3VegQSfmTkvq1C8Z5dVixoG0KhNxJASSuaAztL5GC_kxxYtjcwwlY2q3MzEBrj2UPXdBJL2fyYi5WqJtZVYQLDjRcAQ0krynJpv-yP3cWqsMhM73dCu59gncXaOw5WJ5UgLnYc2YFa1cd-gTXWHGsW-IWnF6tsi90ZYCerPNXVYQJnoq7XnxXv2LgzJEVAkYUz219wZvMzDokZLa6dM0FaUhE73MOz804icZCqNFInVJfEyaiq1NZMmIucLEmM0vVRYQOJrji5BLxnKLgKT7J8Wry_Zk5jKrS0u1gAyvoT7ncae6-_mvBHqwEBTp3RCJCI57CqW3Q88FlZxWVAlXCnCzKxYQEZoZWUtK3Y7LYaI8M5ZV5VeenK1aRf5KinI0OWBMicpTDUxtsvjHY-3gMUc650S1fDfTQiSENCZwmV9FxjoxbdYQKroB5h1N-9QPPC41dpVws0ugwmtcBUkiM2Nnu34TH65Nd9inaM26RNEQkYopXt9VyuCQDjhkKxHA5W2M7nTYQlYQCL2PoH71g3kID39lWoK2zJRGujHo1FrHkdwulPtPdUgS5SDhjXQfmjVRnStBufeSv6vmWN7csQN6nRbt2YcO4xYQBxYT5jPmvyfYDaZ03w7cWcXDXu5Y4kNYDdyjrIOM_fcpMW-VKTWT6wD8_AJVbHCPO-BSM_pQ0Ov_JrDZssi9UJYQCWuFoWeJslXYK9gYE9m0aF9R9MO--92j4Nrxf4lf4PXP357Jt3LiDd0kKa6LoCHHYd1x1DVoAwQn323oECyrIJYQMm00znThXQHQ1H4cPNXO9JLwmYTrm-vygxgXaAhwU4Jzn2GD-0vcLhINVRYc0d8inTS9skpooOLcvxEwrBqa9NYQPBT4mzzUThagwfa6YImH8JQ501YL_yPXw9ztrfKcbTf6JlseTzW0eTyxcNTrpQv5yUlUTu0OOy9FM2TVKB-_KZYQHrO2SxRwP4t2L_S-hkBBi9F5MxWJNL-udV_e92PhPr176bVyT3MJ-DDKg242iRed_dr3QOpcPHxJMzgqfGhpupYQJE_UDT_FvTy0fz8nuQlvEVr0ToTl7lmiMZMi5WWQgxS0Hl9OHi1agMgGIg3H2qt5Qk_j0YcmbSDyPM52uiufyFYQBgcljiVyU03hcQk-ZjvwuvvtFU9WBqWIsyQv1mot-nIql5N0-0kWmSYRAmGCpICh0wodYp3xewB-0W8qRLVtplYQM9kWzMGkAcFtqyNN64H2GCaKEK9aGZ0RTjYh5HcQZ8FghNcHrJ24lBus3TfQNTHnTYe6o8NfnRaaBFw65g6UjJYQPF_qKw0cjByCfTwO4sqgFtZih3KMwcRYH--L9SVaQaYI3UtmH2IvARu8vaw7S4rRg9KlO2EcNATmLD63ipOghdYQEhgvX1uH4X6uACyOIKWNG6QjQQRVlnxdhi8a1iTBqkpZkqwlP1bWHQUHn7lqJ3whWFJmX5cBxgfwGglIBw5znFYQF1pocG5tSvP_EnYB_uZcK0nkN3-p4T0-PA_c5KO8aq__jgsGmAG0aFl3A_ITN7JQ3UXHhuVDX1ubQdHT2v8wRNYQKqG-6HeI66LRORGVywhlpoOPCrYfUYeBCgtApKHgwn6DWz_VpdKv_01gEuu_FWi_tD8KOdSJbBbvBjpDZA_wOhYQBtBYPPaGwEHANhFjhMMBFgHTuxT1a1f56Ij1IqK8EKeUvZsEN8NX3VVsB2_2w0AC1bw4bABzDoE3Ok4FCn5B_tYQLmyeMXuQCJVXbi91StAwvI-Gp5yLDTOACuxd0Bqj4_N8DtxaFvakp3KoSxySdY2O5fixsfhUf_EX_vBXPdZ3S9YQJNPn48f1iUCkuGI9UInd9g6aYoQ1sDmGMpU_D7irjKe1CWPx_6aRLqeT-SqO3X5DzNm689trKLSRfDgX5ucM_JYQEnc98-_RPkcGVdcfIUEOs-WnbDPgf9zacuIaDH_Nx14RhJt0XTZ4x0YQBOd7a6yKo-P_lLizKva4V-uC4p0q6yFZy9pc3N1ZXJqL3ZhbGlkRnJvbW0vcmVuZGVyTWV0aG9kZy9xckNvZGVlL3R5cGU" } -} \ No newline at end of file +} From c80dba3559fb847f53114839428bc066f3a625e2 Mon Sep 17 00:00:00 2001 From: pennhan-dex Date: Fri, 23 Jan 2026 13:49:42 +0800 Subject: [PATCH 18/18] update readme --- README.md | 45 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 00c332d..1e0a0c5 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,8 @@ A comprehensive command-line interface for managing W3C Verifiable Credentials, - ✅ **Modern Cryptosuites**: Full support for ECDSA-SD-2023 and BBS-2023 - ✅ **Key Pair Generation**: Generate cryptographic key pairs with Multikey format - ✅ **DID Management**: Create and manage did:web identifiers -- ✅ **W3C Verifiable Credentials**: Sign and manage W3C verifiable credentials -- ✅ **OpenAttestation**: Sign and wrap/unwrap OpenAttestation v2/v3 documents +- ✅ **W3C Verifiable Credentials**: Sign, verify and manage W3C verifiable credentials +- ✅ **OpenAttestation**: Sign, verify and wrap/unwrap OpenAttestation v2/v3 documents - ✅ **Token Registry**: Mint tokens to blockchain-based token registries - ✅ **Title Escrow**: Complete transferable records management (holder/beneficiary transfers) - ✅ **Credential Status**: Create and update W3C credential status lists @@ -62,10 +62,10 @@ trustvc key-pair-generation # Create a DID from the key pair trustvc did-web -# Sign a verifiable credential +# Sign a W3C verifiable credential trustvc w3c-sign -# Verify a document +# Verify a W3C document trustvc verify # Create a credential status list @@ -81,6 +81,9 @@ trustvc credential-status-update # Sign OpenAttestation documents trustvc oa-sign +# Verify OpenAttestation documents +trustvc verify + # Wrap an OpenAttestation document trustvc oa-wrap @@ -129,12 +132,16 @@ trustvc title-escrow reject-transfer-owner-holder - **Credential Signing**: Uses `signW3C` to sign verifiable credentials with did:web identifiers and modern cryptosuites. +- **Credential Verification**: Uses `verifyDocument` to verify W3C verifiable credentials. + - **Credential Status**: Provides commands to create and update W3C credential status lists for managing credential revocation and suspension. ### OpenAttestation - **Document Signing**: Uses `signOA` to cryptographically sign OpenAttestation v2 and v3 documents with private keys. +- **Document Verification**: Uses `verifyDocument` to verify OpenAttestation documents. + - **Document Wrapping**: Uses `wrapOA` to wrap OpenAttestation documents. - **Document Unwrapping**: Uses `unwrapOA` to unwrap OpenAttestation documents. @@ -154,9 +161,11 @@ trustvc title-escrow reject-transfer-owner-holder | **W3C Credentials** | [`key-pair-generation`](#key-pair-generation) | Generate cryptographic key pairs (ECDSA-SD-2023, BBS-2023) | | | [`did-web`](#did-web) | Create did:web identifiers from key pairs | | | [`w3c-sign`](#w3c-sign) | Sign W3C verifiable credentials | +| | [`verify`](#verify) | Verify W3C verifiable credentials | | | [`credential-status-create`](#credential-status-create) | Create credential status lists | | | [`credential-status-update`](#credential-status-update) | Update credential status (revoke/suspend) | | **OpenAttestation** | [`oa-sign`](#oa-sign) | Sign OpenAttestation v2/v3 documents | +| | [`verify`](#verify) | Verify OpenAttestation documents | | | [`oa-wrap`](#oa-wrap) | Wrap OpenAttestation documents | | | [`oa-unwrap`](#oa-unwrap) | Unwrap OpenAttestation documents | | **Token Registry** | [`mint`](#mint) | Mint tokens to blockchain registries | @@ -273,6 +282,33 @@ Creates `signed_vc.json` with cryptographic proof. +
+

verify

+ +Verifies a W3C or OA document using respective verification methods. + +**Usage:** + +```sh +trustvc verify +``` + +**Interactive Prompts:** + +- Path to document JSON file +- [If network required but no network detected]: Select network + +**Output:** +Verifies the document integrity, status, and issuer identity. + +**Supported Formats:** + +- W3C Verifiable Credential +- OpenAttestation v2 +- OpenAttestation v3 + +
+

credential-status-create

@@ -842,6 +878,7 @@ src/commands/ └── credentialStatus/ ├── create.ts # Create credential status list └── update.ts # Update credential status list + └── verify.ts # Verify W3C or OA document ``` ## License