Skip to content
2 changes: 1 addition & 1 deletion .github/workflows/react-native-example-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
node-version: '20.2.0'

- name: Install dependencies
run: npm ci --force
run: npm install --force
working-directory: examples/react-native-example

- name: lint
Expand Down
6 changes: 4 additions & 2 deletions integration-tests/cloud-wallet.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,16 @@ describe('Cloud wallet', () => {
authKey: EDV_AUTH_KEY,
}));

await clearEdvDocuments();

wallet = await createNewWallet({
dontWaitForNetwork: true,
dataStore,
});
});

afterAll(async () => {
await clearEdvDocuments();
});

it('should generate a valid master key with mnemonic', async () => {
const { mnemonic, masterKey } = await generateCloudWalletMasterKey();

Expand Down
85 changes: 85 additions & 0 deletions integration-tests/sd-jwt.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import { decodeSDJWT } from '@docknetwork/wallet-sdk-wasm/src/services/credential/sd-jwt';
import {
BasicCredential,
PolygonIDCredential,
UniversityDegreeCredential,
UniversityDegreeCredentialBBS,
} from './data/credentials';
import {
cleanup,
closeWallet,
getCredentialProvider,
getWallet,
} from './helpers';
import {ProofTemplateIds, createProofRequest} from './helpers/certs-helpers';
import {createVerificationController} from '@docknetwork/wallet-sdk-core/src/verification-controller';


describe('SD JWT Credentials', () => {
let wallet;
let credentialId;
const jwt =
'eyJ0eXAiOiJ2YytzZC1qd3QiLCJraWQiOiJkaWQ6Y2hlcWQ6dGVzdG5ldDpjMDg5MGYxYy1jN2JiLTRlYTYtYmU3YS04YzMxNDA0NzQzYjcja2V5cy0xIiwiYWxnIjoiRWREU0EifQ.eyJpYXQiOjE3NTk0MTQzOTQsImlzcyI6ImRpZDpjaGVxZDp0ZXN0bmV0OmMwODkwZjFjLWM3YmItNGVhNi1iZTdhLThjMzE0MDQ3NDNiNyNrZXlzLTEiLCJ2Y3QiOiJJbnRlcm5hbFRlc3RpbmciLCJfc2QiOlsiM3JVUGt1Mk5XckFFeTV3ZE9uVms5TkJBa0haMWE4RDB6Y2liMFNQdmthWSIsIkhjNHAxMnZTTWNMQ0piNVRYVlFrdFFMR2xjM0J3SDNWN2ltakV5ZDdvdzAiLCJNZWNNZEd6NjAxY3kwTTdvanRtSjR1LUI5LTJxSXAya1RvbFpDUm1GZ1pFIiwiZmo4WHdBb0lERmRsWmpEa0NTVzVpeXBPYUZBcVplTWZDRncwTWd3cHhOQSJdLCJfc2RfYWxnIjoic2hhLTI1NiJ9.FcYvNrldceL5BTNmoIaS4Mub8a5NcbiseUeSmmvUpOW8SUom-bchV5AEefrH1VMECbdc2whhk2sW4_jmZo7_Dw~WyI1YTRkZWY1MTAzYjRiYjc0IiwiaWQiLCJkaWQ6a2V5Ono2TWt1OVI4emRBOExENmhjRlhrbjQ3akxuZmNLWk5HbXdhVHJEbmFDQmtTYjhVbiJd~WyJiZDUyMjQ5ZjAyNjk3NWRkIiwiZGF0ZSIsIjIwMjUtMTAtMDkiXQ~WyJlMjcxNzExNzVkODdlMWE1IiwibmFtZSIsIm1heWNvbiJd~WyIwZDFiOTBlNTlhNmMyNDNiIiwibnVtYmVyIiwxMjNd~';

beforeAll(async () => {
await cleanup();

wallet = await getWallet();

const result = await getCredentialProvider().addCredential(jwt);
credentialId = result.id;
});

it('expect to import SD-JWT credential', async () => {
const credential = await getCredentialProvider().getById(credentialId);

expect(credential).toBeDefined();
expect(credential._sd_jwt).toBeDefined();
expect(credential._sd_jwt.encoded).toBe(jwt);

expect(credential.type).toEqual([
'VerifiableCredential',
'InternalTesting',
]);
expect(credential.issuer).toBe(
'did:cheqd:testnet:c0890f1c-c7bb-4ea6-be7a-8c31404743b7#keys-1',
);
expect(credential.credentialSubject.number).toBe(123);
expect(credential.issuanceDate).toBe('2025-10-02T14:13:14.000Z');
expect(credential.expirationDate).toBe(undefined);
});

it('expect to create presentation from SD-JWT credential', async () => {
const credential = await getCredentialProvider().getById(credentialId);

const proofRequest = await createProofRequest(
ProofTemplateIds.ANY_CREDENTIAL,
);

const controller = await createVerificationController({
wallet,
});

await controller.start({
template: proofRequest,
});

let attributesToReveal = ['credentialSubject.number'];

controller.selectedCredentials.set(credential.id, {
credential: credential,
attributesToReveal,
});

const presentation = await controller.createPresentation();


const decoded = await decodeSDJWT(presentation.verifiableCredential[0]);

expect(decoded.disclosures?.length).toBe(1);
expect(decoded.disclosures?.[0].key).toBe('number');
expect(decoded.disclosures?.[0].value).toBe(123);
});

afterAll(() => closeWallet());
});
234 changes: 234 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading