From 73dadcb8cc0e746af786d74766afaf94fa971e10 Mon Sep 17 00:00:00 2001 From: Jakub Sydor Date: Mon, 7 Mar 2022 18:30:06 +0100 Subject: [PATCH] feat: feats --- .../classes/VerifiableCredentialsService.md | 87 ------------------- docs/api/modules.md | 46 ++++++---- e2e/fixtures/externalVC.ts | 6 +- e2e/verifiableCredentials.service.e2e.ts | 19 ++-- package-lock.json | 15 +--- package.json | 1 - src/init.ts | 5 ++ src/modules/signer/signer.service.ts | 4 +- src/modules/verifiableCredentials/index.ts | 26 +++++- ...s => verifiableCredentialsBase.service.ts} | 38 +++++--- .../verifiableCredentialsNode.service.ts | 34 ++++++++ .../verifiableCredentialsWeb.service.ts | 34 ++++++++ 12 files changed, 171 insertions(+), 144 deletions(-) delete mode 100644 docs/api/classes/VerifiableCredentialsService.md rename src/modules/verifiableCredentials/{verifiableCredentials.service.ts => verifiableCredentialsBase.service.ts} (77%) create mode 100644 src/modules/verifiableCredentials/verifiableCredentialsNode.service.ts create mode 100644 src/modules/verifiableCredentials/verifiableCredentialsWeb.service.ts diff --git a/docs/api/classes/VerifiableCredentialsService.md b/docs/api/classes/VerifiableCredentialsService.md deleted file mode 100644 index f828c5ef3..000000000 --- a/docs/api/classes/VerifiableCredentialsService.md +++ /dev/null @@ -1,87 +0,0 @@ -# Class: VerifiableCredentialsService - -## Table of contents - -### Constructors - -- [constructor](VerifiableCredentialsService.md#constructor) - -### Methods - -- [signVerifiableCredential](VerifiableCredentialsService.md#signverifiablecredential) -- [verifyVerifiableCredential](VerifiableCredentialsService.md#verifyverifiablecredential) -- [create](VerifiableCredentialsService.md#create) - -## Constructors - -### constructor - -• **new VerifiableCredentialsService**(`_signerService`) - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `_signerService` | [`SignerService`](SignerService.md) | - -## Methods - -### signVerifiableCredential - -▸ **signVerifiableCredential**<`T`\>(`credential`, `options?`): `Promise`<[`SignedVerifiableCredential`](../interfaces/SignedVerifiableCredential.md)<`T`\>\> - -#### Type parameters - -| Name | -| :------ | -| `T` | - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `credential` | [`VerifiableCredential`](../interfaces/VerifiableCredential.md)<`T`\> | -| `options?` | [`SignVerifiableCredentialOptions`](../interfaces/SignVerifiableCredentialOptions.md) | - -#### Returns - -`Promise`<[`SignedVerifiableCredential`](../interfaces/SignedVerifiableCredential.md)<`T`\>\> - -___ - -### verifyVerifiableCredential - -▸ **verifyVerifiableCredential**<`T`\>(`vc`, `options?`): `Promise`<`boolean`\> - -#### Type parameters - -| Name | -| :------ | -| `T` | - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `vc` | [`SignedVerifiableCredential`](../interfaces/SignedVerifiableCredential.md)<`T`\> | -| `options?` | [`VerifyVerifiableCredentialOptions`](../interfaces/VerifyVerifiableCredentialOptions.md) | - -#### Returns - -`Promise`<`boolean`\> - -___ - -### create - -▸ `Static` **create**(`signerService`): `Promise`<[`VerifiableCredentialsService`](VerifiableCredentialsService.md)\> - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `signerService` | [`SignerService`](SignerService.md) | - -#### Returns - -`Promise`<[`VerifiableCredentialsService`](VerifiableCredentialsService.md)\> diff --git a/docs/api/modules.md b/docs/api/modules.md index 89ae9e5a0..446cbcd1a 100644 --- a/docs/api/modules.md +++ b/docs/api/modules.md @@ -35,7 +35,6 @@ - [SignerService](classes/SignerService.md) - [StakingFactoryService](classes/StakingFactoryService.md) - [StakingPoolService](classes/StakingPoolService.md) -- [VerifiableCredentialsService](classes/VerifiableCredentialsService.md) ### Interfaces @@ -112,6 +111,7 @@ - [fromPrivateKey](modules.md#fromprivatekey) - [fromWalletConnectMetamask](modules.md#fromwalletconnectmetamask) - [getMessagingConfig](modules.md#getmessagingconfig) +- [getVerifiableCredentialsService](modules.md#getverifiablecredentialsservice) - [init](modules.md#init) - [initWithEKC](modules.md#initwithekc) - [initWithGnosis](modules.md#initwithgnosis) @@ -545,9 +545,25 @@ ___ ___ +### getVerifiableCredentialsService + +▸ `Const` **getVerifiableCredentialsService**(`signerService`): `Promise`<`VerifiableCredentialsServiceBase`\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `signerService` | [`SignerService`](classes/SignerService.md) | + +#### Returns + +`Promise`<`VerifiableCredentialsServiceBase`\> + +___ + ### init -▸ **init**(`signerService`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +▸ **init**(`signerService`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: `VerifiableCredentialsServiceBase` }\> #### Parameters @@ -557,13 +573,13 @@ ___ #### Returns -`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: `VerifiableCredentialsServiceBase` }\> ___ ### initWithEKC -▸ **initWithEKC**(`proxyUrl?`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +▸ **initWithEKC**(`proxyUrl?`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: `VerifiableCredentialsServiceBase` }\> #### Parameters @@ -573,13 +589,13 @@ ___ #### Returns -`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: `VerifiableCredentialsServiceBase` }\> ___ ### initWithGnosis -▸ **initWithGnosis**(`safeAppSdk`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +▸ **initWithGnosis**(`safeAppSdk`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: `VerifiableCredentialsServiceBase` }\> #### Parameters @@ -589,13 +605,13 @@ ___ #### Returns -`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: `VerifiableCredentialsServiceBase` }\> ___ ### initWithKms -▸ **initWithKms**(`__namedParameters?`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +▸ **initWithKms**(`__namedParameters?`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: `VerifiableCredentialsServiceBase` }\> #### Parameters @@ -607,23 +623,23 @@ ___ #### Returns -`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: `VerifiableCredentialsServiceBase` }\> ___ ### initWithMetamask -▸ **initWithMetamask**(): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +▸ **initWithMetamask**(): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: `VerifiableCredentialsServiceBase` }\> #### Returns -`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: `VerifiableCredentialsServiceBase` }\> ___ ### initWithPrivateKeySigner -▸ **initWithPrivateKeySigner**(`privateKey`, `rpcUrl`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +▸ **initWithPrivateKeySigner**(`privateKey`, `rpcUrl`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: `VerifiableCredentialsServiceBase` }\> #### Parameters @@ -634,13 +650,13 @@ ___ #### Returns -`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: `VerifiableCredentialsServiceBase` }\> ___ ### initWithWalletConnect -▸ **initWithWalletConnect**(`bridge?`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +▸ **initWithWalletConnect**(`bridge?`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: `VerifiableCredentialsServiceBase` }\> #### Parameters @@ -650,7 +666,7 @@ ___ #### Returns -`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: `VerifiableCredentialsServiceBase` }\> ___ diff --git a/e2e/fixtures/externalVC.ts b/e2e/fixtures/externalVC.ts index 39667f0cb..5aec12201 100644 --- a/e2e/fixtures/externalVC.ts +++ b/e2e/fixtures/externalVC.ts @@ -1,4 +1,6 @@ -export const validExemplaryExternalVC = { +// Source: https://github.com/spruceid/ssi/blob/3745b7dfdd18e1b27c6135f8036470efde596f35/did-pkh/tests/vc-eth-eip712sig.jsonld + +export const validExampleExternalVC = { '@context': ['https://www.w3.org/2018/credentials/v1'], type: ['VerifiableCredential'], credentialSubject: { @@ -86,7 +88,7 @@ export const validExemplaryExternalVC = { }, }; -export const invalidExemplaryExternalVC = { +export const invalidExampleExternalVC = { '@context': ['https://www.w3.org/2018/credentials/v1'], type: ['VerifiableCredential'], credentialSubject: { diff --git a/e2e/verifiableCredentials.service.e2e.ts b/e2e/verifiableCredentials.service.e2e.ts index 75de8fd76..e114fde6b 100644 --- a/e2e/verifiableCredentials.service.e2e.ts +++ b/e2e/verifiableCredentials.service.e2e.ts @@ -1,14 +1,12 @@ import { Wallet } from 'ethers'; import { v4 as uuid } from 'uuid'; -import { - invalidExemplaryExternalVC, - validExemplaryExternalVC, -} from './fixtures'; +import { invalidExampleExternalVC, validExampleExternalVC } from './fixtures'; import { replenish, rpcUrl, setupENS } from './utils/setup_contracts'; -import { fromPrivateKey, VerifiableCredentialsService } from '../src'; +import { fromPrivateKey } from '../src'; +import { VerifiableCredentialsServiceNode } from '../src/modules/verifiableCredentials/verifiableCredentialsNode.service'; describe('Verifiable credentials tests', () => { - let verifiableCredentialsService: VerifiableCredentialsService; + let verifiableCredentialsService: VerifiableCredentialsServiceNode; let rootOwnerDid: string; const rootOwnerWallet = Wallet.createRandom(); const rootOwnerAddress = rootOwnerWallet.address; @@ -25,9 +23,8 @@ describe('Verifiable credentials tests', () => { await signerService.publicKeyAndIdentityToken(); rootOwnerDid = signerService.didHex; - verifiableCredentialsService = await VerifiableCredentialsService.create( - signerService - ); + verifiableCredentialsService = + await VerifiableCredentialsServiceNode.create(signerService); }); test('should create a VC proof', async () => { @@ -123,7 +120,7 @@ describe('Verifiable credentials tests', () => { test('should verify valid external VC', async () => { const isValid = await verifiableCredentialsService.verifyVerifiableCredential( - validExemplaryExternalVC + validExampleExternalVC ); expect(isValid).toBe(true); @@ -132,7 +129,7 @@ describe('Verifiable credentials tests', () => { test('should throw an error for invalid external VC', async () => { await expect( verifiableCredentialsService.verifyVerifiableCredential( - invalidExemplaryExternalVC + invalidExampleExternalVC ) ).rejects.toMatchObject({ message: expect.stringContaining('Verifiable Credential is invalid'), diff --git a/package-lock.json b/package-lock.json index 85f88d2a2..7c497da50 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "iam-client-lib", - "version": "4.2.1-alpha.2", + "version": "4.2.1-alpha.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "iam-client-lib", - "version": "4.2.1-alpha.2", + "version": "4.2.1-alpha.3", "license": "GPL-3.0-or-later", "dependencies": { "@energyweb/ekc": "^0.6.5", @@ -27,7 +27,6 @@ "@gnosis.pm/safe-apps-provider": "0.8.0", "@gnosis.pm/safe-apps-sdk": "4.3.0", "@metamask/detect-provider": "^1.2.0", - "@spruceid/didkit-wasm-node": "^0.1.7-rc0", "@walletconnect/ethereum-provider": "^1.7.1", "axios": "^0.26.0", "base64url": "^3.0.1", @@ -4592,11 +4591,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "node_modules/@spruceid/didkit-wasm-node": { - "version": "0.1.7-rc0", - "resolved": "https://registry.npmjs.org/@spruceid/didkit-wasm-node/-/didkit-wasm-node-0.1.7-rc0.tgz", - "integrity": "sha512-sroYgzhxyypgndx+8R/XNh+04LSxutM4+Ewvxad67clgXjVeBu6+u8KgeZ8etpI4QMtvtV3uGSD9mQomnd6gGw==" - }, "node_modules/@tootallnate/once": { "version": "1.1.2", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", @@ -28225,11 +28219,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "@spruceid/didkit-wasm-node": { - "version": "0.1.7-rc0", - "resolved": "https://registry.npmjs.org/@spruceid/didkit-wasm-node/-/didkit-wasm-node-0.1.7-rc0.tgz", - "integrity": "sha512-sroYgzhxyypgndx+8R/XNh+04LSxutM4+Ewvxad67clgXjVeBu6+u8KgeZ8etpI4QMtvtV3uGSD9mQomnd6gGw==" - }, "@tootallnate/once": { "version": "1.1.2", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", diff --git a/package.json b/package.json index a1002e23c..7ae46aa01 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,6 @@ "@gnosis.pm/safe-apps-provider": "0.8.0", "@gnosis.pm/safe-apps-sdk": "4.3.0", "@metamask/detect-provider": "^1.2.0", - "@spruceid/didkit-wasm-node": "^0.1.7-rc0", "@walletconnect/ethereum-provider": "^1.7.1", "axios": "^0.26.0", "base64url": "^3.0.1", diff --git a/src/init.ts b/src/init.ts index 875c34b23..492f3f9c0 100644 --- a/src/init.ts +++ b/src/init.ts @@ -22,6 +22,7 @@ import { defaultKmsServerUrl, } from './utils'; import { chainConfigs } from './config'; +import { getVerifiableCredentialsService } from './modules/verifiableCredentials'; export async function initWithPrivateKeySigner( privateKey: string, @@ -61,6 +62,9 @@ export async function initWithEKC(proxyUrl = defaultAzureProxyUrl) { export async function init(signerService: SignerService) { const messagingService = await MessagingService.create(signerService); + const verifiableCredentialsService = await getVerifiableCredentialsService( + signerService + ); async function connectToCacheServer() { const chainId = signerService.chainId; @@ -116,6 +120,7 @@ export async function init(signerService: SignerService) { return { signerService, messagingService, + verifiableCredentialsService, connectToCacheServer, }; } diff --git a/src/modules/signer/signer.service.ts b/src/modules/signer/signer.service.ts index 4d569f3b9..1e2cd671e 100644 --- a/src/modules/signer/signer.service.ts +++ b/src/modules/signer/signer.service.ts @@ -167,7 +167,9 @@ export class SignerService { get didHex() { const chainBn = BigNumber.from(this.chainId); - return `did:${Methods.Erc1056}:${chainBn.toHexString()}:${this._address}`; + return `did:${ + Methods.Erc1056 + }:${chainBn.toHexString()}:${this._address.toLowerCase()}`; } async send({ diff --git a/src/modules/verifiableCredentials/index.ts b/src/modules/verifiableCredentials/index.ts index 0688defcf..cb26e2858 100644 --- a/src/modules/verifiableCredentials/index.ts +++ b/src/modules/verifiableCredentials/index.ts @@ -1,2 +1,26 @@ -export * from './verifiableCredentials.service'; export * from './verifiableCredentials.types'; + +import { SignerService } from '../signer'; +import { VerifiableCredentialsServiceBase } from './verifiableCredentialsBase.service'; + +export const getVerifiableCredentialsService = async ( + signerService: SignerService +): Promise => { + const isNode = + typeof process !== 'undefined' && + process.versions != null && + process.versions.node != null; + + let service: VerifiableCredentialsServiceBase; + if (isNode) { + service = await import('./verifiableCredentialsNode.service').then( + (module) => module.VerifiableCredentialsServiceNode.create(signerService) + ); + } else { + service = await import('./verifiableCredentialsWeb.service').then( + (module) => module.VerifiableCredentialsServiceWeb.create(signerService) + ); + } + + return service; +}; diff --git a/src/modules/verifiableCredentials/verifiableCredentials.service.ts b/src/modules/verifiableCredentials/verifiableCredentialsBase.service.ts similarity index 77% rename from src/modules/verifiableCredentials/verifiableCredentials.service.ts rename to src/modules/verifiableCredentials/verifiableCredentialsBase.service.ts index 46ba21048..858001635 100644 --- a/src/modules/verifiableCredentials/verifiableCredentials.service.ts +++ b/src/modules/verifiableCredentials/verifiableCredentialsBase.service.ts @@ -1,8 +1,3 @@ -import { - prepareIssueCredential, - completeIssueCredential, -} from 'didkit-wasm-node'; -import { verifyCredential } from '@spruceid/didkit-wasm-node'; import { SignerService } from '../signer'; import { SignedVerifiableCredential, @@ -12,19 +7,36 @@ import { VerifyVerifiableCredentialResults, } from './verifiableCredentials.types'; -export class VerifiableCredentialsService { - constructor(private readonly _signerService: SignerService) {} +export abstract class VerifiableCredentialsServiceBase { + abstract prepareIssueCredential: ( + credential: string, + linked_data_proof_options: string, + public_key: string + ) => Promise; + abstract completeIssueCredential: ( + credential: string, + preparation: string, + signature: string + ) => Promise; + abstract verifyCredential: ( + vc: string, + proof_options: string + ) => Promise; + + constructor(protected readonly _signerService: SignerService) {} - static async create(signerService: SignerService) { - const service = new VerifiableCredentialsService(signerService); - return service; + static async create( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + signerService: SignerService + ): Promise { + throw new Error('Not implemented'); } public async verifyVerifiableCredential( vc: SignedVerifiableCredential, options?: VerifyVerifiableCredentialOptions ) { - const verifyResultsString = await verifyCredential( + const verifyResultsString = await this.verifyCredential( JSON.stringify(vc), JSON.stringify(options || {}) ); @@ -93,7 +105,7 @@ export class VerifiableCredentialsService { }; const stringifyCredential = JSON.stringify(credential); - const preparedVC = await prepareIssueCredential( + const preparedVC = await this.prepareIssueCredential( stringifyCredential, JSON.stringify(proofOptions), JSON.stringify(keyType) @@ -113,7 +125,7 @@ export class VerifiableCredentialsService { typedData.message ); - const signedCredential = await completeIssueCredential( + const signedCredential = await this.completeIssueCredential( stringifyCredential, preparedVC, signature diff --git a/src/modules/verifiableCredentials/verifiableCredentialsNode.service.ts b/src/modules/verifiableCredentials/verifiableCredentialsNode.service.ts new file mode 100644 index 000000000..9fe110c75 --- /dev/null +++ b/src/modules/verifiableCredentials/verifiableCredentialsNode.service.ts @@ -0,0 +1,34 @@ +import { + prepareIssueCredential, + completeIssueCredential, + verifyCredential, +} from 'didkit-wasm-node'; +import { SignerService } from '../signer'; +import { VerifiableCredentialsServiceBase } from './verifiableCredentialsBase.service'; + +export class VerifiableCredentialsServiceNode extends VerifiableCredentialsServiceBase { + prepareIssueCredential: ( + credential: string, + linked_data_proof_options: string, + public_key: string + ) => Promise; + completeIssueCredential: ( + credential: string, + preparation: string, + signature: string + ) => Promise; + verifyCredential: (vc: string, proof_options: string) => Promise; + + constructor(_signerService: SignerService) { + super(_signerService); + + this.completeIssueCredential = completeIssueCredential; + this.prepareIssueCredential = prepareIssueCredential; + this.verifyCredential = verifyCredential; + } + + static async create(signerService: SignerService) { + const service = new VerifiableCredentialsServiceNode(signerService); + return service; + } +} diff --git a/src/modules/verifiableCredentials/verifiableCredentialsWeb.service.ts b/src/modules/verifiableCredentials/verifiableCredentialsWeb.service.ts new file mode 100644 index 000000000..58c32b48b --- /dev/null +++ b/src/modules/verifiableCredentials/verifiableCredentialsWeb.service.ts @@ -0,0 +1,34 @@ +import { + prepareIssueCredential, + completeIssueCredential, + verifyCredential, +} from 'didkit-wasm'; +import { SignerService } from '../signer'; +import { VerifiableCredentialsServiceBase } from './verifiableCredentialsBase.service'; + +export class VerifiableCredentialsServiceWeb extends VerifiableCredentialsServiceBase { + prepareIssueCredential: ( + credential: string, + linked_data_proof_options: string, + public_key: string + ) => Promise; + completeIssueCredential: ( + credential: string, + preparation: string, + signature: string + ) => Promise; + verifyCredential: (vc: string, proof_options: string) => Promise; + + constructor(_signerService: SignerService) { + super(_signerService); + + this.completeIssueCredential = completeIssueCredential; + this.prepareIssueCredential = prepareIssueCredential; + this.verifyCredential = verifyCredential; + } + + static async create(signerService: SignerService) { + const service = new VerifiableCredentialsServiceWeb(signerService); + return service; + } +}