Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 18 additions & 9 deletions integration-tests/did-resolution.test.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,12 @@
import {blockchainService} from '@docknetwork/wallet-sdk-wasm/src/services/blockchain';
import {issueCredential} from './helpers/certs-helpers';
import {
getWallet,
getDIDProvider,
getMessageProvider,
closeWallet,
} from './helpers/wallet-helpers';
import {logger} from '@docknetwork/wallet-sdk-data-store/src/logger';
import { storageService } from '@docknetwork/wallet-sdk-wasm/src/services/storage';

describe('DID resolution', () => {
let wallet;

beforeAll(async () => {
wallet = await getWallet();
});

it('should resolve did service endpoints', async () => {
const wallet = await getWallet();
Expand All @@ -34,7 +26,24 @@ describe('DID resolution', () => {
const cachedEntry = JSON.parse(cacheJSON);
expect(cachedEntry.value).toEqual(doc1);
expect(cachedEntry.id).toEqual('did:cheqd:testnet:c0890f1c-c7bb-4ea6-be7a-8c31404743b7');

closeWallet(wallet)
});

afterAll(() => closeWallet(wallet));
it('should resolve DID without active blockchain connection (fallback resolver)', async () => {
const doc1 = await blockchainService.resolveDID(
'did:cheqd:testnet:c0890f1c-c7bb-4ea6-be7a-8c31404743b7',
);

const messagingService = doc1.service.find(service => service.type === 'DIDCommMessaging');
expect(messagingService).toBeDefined();

const cacheKey = `did-cache:did:cheqd:testnet:c0890f1c-c7bb-4ea6-be7a-8c31404743b7`;
const cacheJSON = await storageService.getItem(cacheKey);
expect(cacheJSON).toBeDefined();

const cachedEntry = JSON.parse(cacheJSON);
expect(cachedEntry.value).toEqual(doc1);
expect(cachedEntry.id).toEqual('did:cheqd:testnet:c0890f1c-c7bb-4ea6-be7a-8c31404743b7');
});
});
2 changes: 0 additions & 2 deletions packages/relay-service/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,6 @@ const getMessages = async ({
assert(Array.isArray(keyPairDocs), 'keyPairDocs must be an array');
assert(!!keyPairDocs.length, 'keyPairDocs must not be empty');

await blockchainService.waitBlockchainReady();

const {payload, dids} = await generateSignedPayloadFromList(keyPairDocs, {
limit,
});
Expand Down
4 changes: 2 additions & 2 deletions packages/relay-service/tests/didcomm.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@ const mockDIDResolver = {
};

blockchainService.createDIDResolver = () => mockDIDResolver;
blockchainService.resolver = mockDIDResolver;
blockchainService._resolver = mockDIDResolver;

describe('DIDComm', () => {
it('expect to decrypt didcomm message', async () => {
blockchainService.resolver = mockDIDResolver;
blockchainService._resolver = mockDIDResolver;

const keyAgreementKey = await getDerivedAgreementKey(ALICE_KEY_PAIR_DOC);

Expand Down
31 changes: 23 additions & 8 deletions packages/wasm/src/services/blockchain/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,11 @@ export class BlockchainService {
cheqdApi;
cheqdApiUrl;
isBlockchainReady = false;
resolver: any;
private _resolver: any;

get resolver(): any {
return this._resolver;
}
/**
* Event names emitted by the blockchain service
* @static
Expand Down Expand Up @@ -93,7 +97,8 @@ export class BlockchainService {
this.cheqdModules = new CheqdCoreModules(this.cheqdApi);
this.modules = new MultiApiCoreModules([this.cheqdModules]);
this.emitter = new EventEmitter();
this.resolver = this.createDIDResolver();
// Blockchain is not ready yet, but we can use fallback resolvers
this._resolver = this.createDIDResolver();
}

/**
Expand Down Expand Up @@ -161,12 +166,21 @@ export class BlockchainService {
* @private
* @returns {CachedDIDResolver} Cached DID resolver instance
*/
createDIDResolver() {
const router = new AnyDIDResolver([
new DIDKeyResolver(),
new CoreResolver(this.modules),
createDIDResolver(isBlockchainReady: boolean) {
let resolvers = [
new UniversalResolver(universalResolverUrl),
]);
new DIDKeyResolver(),
]

// Add blockchain resolvers if the blockchain is ready
if (isBlockchainReady) {
resolvers = [
new CoreResolver(this.modules),
...resolvers
]
}

const router = new AnyDIDResolver(resolvers);

return new CachedDIDResolver(router);
}
Expand Down Expand Up @@ -226,7 +240,8 @@ export class BlockchainService {
}


this.resolver = this.createDIDResolver();
// Re-create the resolver with the new blockchain connection
this._resolver = this.createDIDResolver(true);

if (
process.env.NODE_ENV !== 'test' ||
Expand Down
Loading