diff --git a/package.json b/package.json index d337ab35b..54c1fc2a4 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,14 @@ "version": "BEFORE=$(jq --raw-output .version src/static/manifest.json) && AFTER=$(date +%Y.%-m.%-d) && grep --files-with-matches --recursive $BEFORE src | xargs sed --in-place \"s/$BEFORE/$AFTER/g\" && git checkout -b version-bump && git commit --all --message=\"Version $AFTER\"" }, "dependencies": { - "@kiltprotocol/sdk-js": "^0.34.0", + "@kiltprotocol/chain-helpers": "0.100.0-alpha.1", + "@kiltprotocol/credentials": "0.100.0-alpha.1", + "@kiltprotocol/did": "0.100.0-alpha.1", + "@kiltprotocol/extension-api": "KILTprotocol/kilt-extension-api#rf-sdk-1-alpha", + "@kiltprotocol/legacy-credentials": "0.100.0-alpha.1", + "@kiltprotocol/sdk-js": "1.0.0-alpha.1", + "@kiltprotocol/types": "0.100.0-alpha.1", + "@kiltprotocol/utils": "0.100.0-alpha.1", "@polkadot/extension-inject": "^0.46.6", "@polkadot/keyring": "^12.6.2", "@polkadot/types": "^10.11.2", diff --git a/src/channels/ChallengeChannels/backgroundChallengeChannel.ts b/src/channels/ChallengeChannels/backgroundChallengeChannel.ts index efe47da4f..0473f7bb5 100644 --- a/src/channels/ChallengeChannels/backgroundChallengeChannel.ts +++ b/src/channels/ChallengeChannels/backgroundChallengeChannel.ts @@ -1,5 +1,7 @@ import { Runtime } from 'webextension-polyfill'; -import { Utils } from '@kiltprotocol/sdk-js'; + +import { Crypto } from '@kiltprotocol/utils'; +import { multibaseKeyToDidKey } from '@kiltprotocol/did'; import { getTabEncryption } from '../../utilities/getTabEncryption/getTabEncryption'; import { initKiltSDK } from '../../utilities/initKiltSDK/initKiltSDK'; @@ -18,9 +20,18 @@ export async function produceEncryptedChallenge( const { dAppEncryptionDidKey, sporranEncryptionDidKeyUri } = encryption; - const { nonce, box } = Utils.Crypto.encryptAsymmetricAsStr( - Utils.Crypto.coToUInt8(challenge), - dAppEncryptionDidKey.publicKey, + const { keyType, publicKey } = multibaseKeyToDidKey( + dAppEncryptionDidKey.publicKeyMultibase, + ); + if (keyType !== 'x25519') { + throw new Error( + `key type ${keyType} is not suitable for x25519 key agreement`, + ); + } + + const { nonce, box } = Crypto.encryptAsymmetricAsStr( + Crypto.coToUInt8(challenge), + publicKey, encryption.encryptionKey.secretKey, ); diff --git a/src/channels/ChallengeChannels/types.ts b/src/channels/ChallengeChannels/types.ts index 99ee27187..089acab09 100644 --- a/src/channels/ChallengeChannels/types.ts +++ b/src/channels/ChallengeChannels/types.ts @@ -1,12 +1,12 @@ -import { DidResourceUri } from '@kiltprotocol/sdk-js'; +import type { DidUrl } from '@kiltprotocol/types'; export interface ChallengeInput { - dAppEncryptionKeyId: DidResourceUri; + dAppEncryptionKeyId: DidUrl; challenge: string; } export interface ChallengeOutput { - encryptionKeyId: DidResourceUri; + encryptionKeyId: DidUrl; encryptedChallenge: string; nonce: string; } diff --git a/src/channels/CreateDidChannels/types.ts b/src/channels/CreateDidChannels/types.ts index 907fceeec..0f3a554b8 100644 --- a/src/channels/CreateDidChannels/types.ts +++ b/src/channels/CreateDidChannels/types.ts @@ -1,4 +1,5 @@ -import { DidUri, KiltAddress } from '@kiltprotocol/sdk-js'; +import type { Did, KiltAddress } from '@kiltprotocol/types'; + import { HexString } from '@polkadot/util/types'; import { DAppName } from '../../dApps/AccessChannels/DAppName'; @@ -6,7 +7,7 @@ import { Origin } from '../../dApps/AccessChannels/Origin'; export type CreateDidInput = DAppName & { submitter: KiltAddress; - pendingDidUri?: DidUri; + pendingDidUri?: Did; }; export type CreateDidOriginInput = CreateDidInput & Origin; diff --git a/src/channels/CredentialChannels/backgroundCredentialChannel.ts b/src/channels/CredentialChannels/backgroundCredentialChannel.ts index 125b614f1..7287667a9 100644 --- a/src/channels/CredentialChannels/backgroundCredentialChannel.ts +++ b/src/channels/CredentialChannels/backgroundCredentialChannel.ts @@ -1,5 +1,16 @@ +import type { + IEncryptedMessage, + IReject, +} from '@kiltprotocol/extension-api/types'; + +import { + isSubmitTerms, + isSubmitAttestation, + isRejectAttestation, + isIRequestCredential, +} from '@kiltprotocol/extension-api/utils'; + import { Runtime } from 'webextension-polyfill'; -import { IEncryptedMessage, IRejectTerms } from '@kiltprotocol/sdk-js'; import { BrowserChannel } from '../base/BrowserChannel/BrowserChannel'; import { channelsEnum } from '../base/channelsEnum'; @@ -30,12 +41,14 @@ export async function showCredentialPopup( await getTabEncryption(sender); const message = await decrypt(encrypted); - if (message.body.type === 'submit-terms') { + if (isSubmitTerms(message)) { try { const { content } = message.body; if (specVersion === '1.0') { - // @ts-expect-error compatibility with old cType interface - content.cTypes = content.cTypes?.map((cType) => cType.schema); + message.body.content.cTypes = content.cTypes?.map( + // @ts-expect-error compatibility with old cType interface + (cType) => cType.schema, + ); } // the DID to use for signing could be predetermined by the dApp, if we have a matching identity we’ll use it @@ -51,23 +64,23 @@ export async function showCredentialPopup( sender, ); } catch (error) { - const { claim, legitimations, delegationId } = message.body.content; - - const rejectionBody: IRejectTerms = { - content: { claim, legitimations, delegationId }, - type: 'reject-terms', + const rejectionBody: IReject = { + content: { message: 'Terms rejected' }, + type: 'reject', }; return encrypt(rejectionBody); } } - if (message.body.type === 'submit-attestation') { + + if (isSubmitAttestation(message)) { await saveChannel.get(message.body.content.attestation, sender); } - if (message.body.type === 'reject-attestation') { + + if (isRejectAttestation(message)) { await rejectChannel.get(message.body.content, sender); } - if (message.body.type === 'request-credential') { + if (isIRequestCredential(message)) { return await shareChannel.get( { credentialRequest: message.body.content, diff --git a/src/channels/CredentialChannels/types.ts b/src/channels/CredentialChannels/types.ts index 38e92cb03..f99db2cc6 100644 --- a/src/channels/CredentialChannels/types.ts +++ b/src/channels/CredentialChannels/types.ts @@ -1,4 +1,4 @@ -import { IEncryptedMessage } from '@kiltprotocol/sdk-js'; +import type { IEncryptedMessage } from '@kiltprotocol/extension-api/types'; import { DAppName } from '../../dApps/AccessChannels/DAppName'; diff --git a/src/channels/ShareIdentitiesChannels/types.ts b/src/channels/ShareIdentitiesChannels/types.ts index 4836037ae..9a4ef847e 100644 --- a/src/channels/ShareIdentitiesChannels/types.ts +++ b/src/channels/ShareIdentitiesChannels/types.ts @@ -1,4 +1,4 @@ -import { DidUri } from '@kiltprotocol/sdk-js'; +import type { Did } from '@kiltprotocol/types'; import { DAppName } from '../../dApps/AccessChannels/DAppName'; import { Origin } from '../../dApps/AccessChannels/Origin'; @@ -7,4 +7,4 @@ export type ShareIdentitiesInput = DAppName; export type ShareIdentitiesOriginInput = ShareIdentitiesInput & Origin; -export type ShareIdentitiesOutput = Array<{ did: DidUri; name?: string }>; +export type ShareIdentitiesOutput = Array<{ did: Did; name?: string }>; diff --git a/src/channels/SignDidChannels/types.ts b/src/channels/SignDidChannels/types.ts index fdb4aba9a..6c079bed3 100644 --- a/src/channels/SignDidChannels/types.ts +++ b/src/channels/SignDidChannels/types.ts @@ -1,18 +1,19 @@ +import type { Did, DidUrl, ICredential } from '@kiltprotocol/types'; + import { HexString } from '@polkadot/util/types'; -import { DidResourceUri, DidUri, ICredential } from '@kiltprotocol/sdk-js'; import { DAppName } from '../../dApps/AccessChannels/DAppName'; import { Origin } from '../../dApps/AccessChannels/Origin'; export type SignDidInput = DAppName & { plaintext: string; - didUri?: DidUri; + didUri?: Did; }; export type SignDidOriginInput = SignDidInput & Origin; export interface SignDidOutput { signature: HexString; - didKeyUri: DidResourceUri; + didKeyUri: DidUrl; credentials?: { name: string; credential: ICredential }[]; } diff --git a/src/channels/SignDidExtrinsicChannels/types.ts b/src/channels/SignDidExtrinsicChannels/types.ts index 949291b54..fc9b06996 100644 --- a/src/channels/SignDidExtrinsicChannels/types.ts +++ b/src/channels/SignDidExtrinsicChannels/types.ts @@ -1,5 +1,6 @@ +import type { Did, DidUrl, KiltAddress } from '@kiltprotocol/types'; + import { HexString } from '@polkadot/util/types'; -import { DidResourceUri, DidUri, KiltAddress } from '@kiltprotocol/sdk-js'; import { DAppName } from '../../dApps/AccessChannels/DAppName'; import { Origin } from '../../dApps/AccessChannels/Origin'; @@ -7,12 +8,12 @@ import { Origin } from '../../dApps/AccessChannels/Origin'; export type SignDidExtrinsicInput = DAppName & { extrinsic: HexString; submitter: KiltAddress; - didUri?: DidUri; + didUri?: Did; }; export type SignDidExtrinsicOriginInput = SignDidExtrinsicInput & Origin; export interface SignDidExtrinsicOutput { signed: HexString; - didKeyUri: DidResourceUri; + didKeyUri: DidUrl; } diff --git a/src/channels/claimChannel/types.ts b/src/channels/claimChannel/types.ts index 32ef5b6bc..e08168d02 100644 --- a/src/channels/claimChannel/types.ts +++ b/src/channels/claimChannel/types.ts @@ -1,8 +1,12 @@ -import { ITerms, DidUri, IEncryptedMessage } from '@kiltprotocol/sdk-js'; +import type { Did } from '@kiltprotocol/types'; +import type { + IEncryptedMessage, + ITerms, +} from '@kiltprotocol/extension-api/types'; export interface ClaimInput extends ITerms { attesterName: string; - attesterDid: DidUri; + attesterDid: Did; specVersion: '1.0' | '3.0'; } diff --git a/src/channels/rejectChannel/types.ts b/src/channels/rejectChannel/types.ts index 4af29d1a3..e307f1f3e 100644 --- a/src/channels/rejectChannel/types.ts +++ b/src/channels/rejectChannel/types.ts @@ -1,4 +1,4 @@ -import { ICredential } from '@kiltprotocol/sdk-js'; +import type { ICredential } from '@kiltprotocol/types'; export type RejectInput = ICredential['rootHash']; diff --git a/src/channels/saveChannel/types.ts b/src/channels/saveChannel/types.ts index e5790f424..5285b02ab 100644 --- a/src/channels/saveChannel/types.ts +++ b/src/channels/saveChannel/types.ts @@ -1,4 +1,4 @@ -import { IAttestation } from '@kiltprotocol/sdk-js'; +import type { IAttestation } from '@kiltprotocol/types'; export type SaveInput = IAttestation; diff --git a/src/channels/shareChannel/types.ts b/src/channels/shareChannel/types.ts index 90d178e77..b760c56e2 100644 --- a/src/channels/shareChannel/types.ts +++ b/src/channels/shareChannel/types.ts @@ -1,12 +1,12 @@ -import { - DidUri, +import type { Did } from '@kiltprotocol/types'; +import type { IEncryptedMessage, IRequestCredentialContent, -} from '@kiltprotocol/sdk-js'; +} from '@kiltprotocol/extension-api/types'; export type ShareInput = { credentialRequest: IRequestCredentialContent; - verifierDid: DidUri; + verifierDid: Did; specVersion: '1.0' | '3.0'; }; diff --git a/src/components/IdentitiesCarousel/IdentitiesCarousel.tsx b/src/components/IdentitiesCarousel/IdentitiesCarousel.tsx index 1731319f1..b8a74a538 100644 --- a/src/components/IdentitiesCarousel/IdentitiesCarousel.tsx +++ b/src/components/IdentitiesCarousel/IdentitiesCarousel.tsx @@ -39,8 +39,8 @@ function IdentityLink({ const modifiedIndex = !isNew(identity) ? identities.indexOf(identity) + delta : isPrevious - ? length - 1 - : 0; + ? length - 1 + : 0; const isInRange = 0 <= modifiedIndex && modifiedIndex < length; const isNewIdentity = showAdd && !isInRange; diff --git a/src/components/KiltAmount/KiltAmount.stories.tsx b/src/components/KiltAmount/KiltAmount.stories.tsx index b0fd6d3a9..459eba041 100644 --- a/src/components/KiltAmount/KiltAmount.stories.tsx +++ b/src/components/KiltAmount/KiltAmount.stories.tsx @@ -1,5 +1,5 @@ import { Meta } from '@storybook/react'; -import { BalanceUtils } from '@kiltprotocol/sdk-js'; +import { BalanceUtils } from '@kiltprotocol/chain-helpers'; import { KiltAmount } from './KiltAmount'; diff --git a/src/components/KiltAmount/KiltAmount.test.tsx b/src/components/KiltAmount/KiltAmount.test.tsx index fa43844f5..825839197 100644 --- a/src/components/KiltAmount/KiltAmount.test.tsx +++ b/src/components/KiltAmount/KiltAmount.test.tsx @@ -1,4 +1,4 @@ -import { BalanceUtils } from '@kiltprotocol/sdk-js'; +import { BalanceUtils } from '@kiltprotocol/chain-helpers'; import { render } from '../../testing/testing'; diff --git a/src/components/PasswordField/PasswordField.test.tsx b/src/components/PasswordField/PasswordField.test.tsx index 0f2743fcb..a6b30d127 100644 --- a/src/components/PasswordField/PasswordField.test.tsx +++ b/src/components/PasswordField/PasswordField.test.tsx @@ -1,6 +1,8 @@ +import type { KiltKeyringPair } from '@kiltprotocol/types'; + import { FormEvent } from 'react'; import { userEvent } from '@testing-library/user-event'; -import { KiltKeyringPair, Utils } from '@kiltprotocol/sdk-js'; +import { Crypto } from '@kiltprotocol/utils'; import { identitiesMock as identities, @@ -22,9 +24,7 @@ import { useInterval } from '../../utilities/useInterval/useInterval'; import { PasswordField } from './PasswordField'; -jest - .mocked(Utils.Crypto.makeKeypairFromSeed) - .mockReturnValue({} as KiltKeyringPair); +jest.mocked(Crypto.makeKeypairFromSeed).mockReturnValue({} as KiltKeyringPair); jest.mock('../../channels/SavedPasswordsChannels/SavedPasswordsChannels'); jest.mock('../../utilities/identities/identities'); diff --git a/src/components/PasswordField/PasswordField.tsx b/src/components/PasswordField/PasswordField.tsx index 1c1174540..fd1ef842f 100644 --- a/src/components/PasswordField/PasswordField.tsx +++ b/src/components/PasswordField/PasswordField.tsx @@ -1,3 +1,5 @@ +import type { KiltKeyringPair } from '@kiltprotocol/types'; + import { Dispatch, FormEvent, @@ -11,7 +13,7 @@ import { } from 'react'; import { Link } from 'react-router-dom'; import browser from 'webextension-polyfill'; -import { KiltKeyringPair, Utils } from '@kiltprotocol/sdk-js'; +import { Crypto } from '@kiltprotocol/utils'; import * as styles from './PasswordField.module.css'; @@ -124,7 +126,7 @@ export function PasswordField({ await forgetPasswordChannel.get(address); } - const keypair = Utils.Crypto.makeKeypairFromSeed(seed, 'sr25519'); + const keypair = Crypto.makeKeypairFromSeed(seed, 'sr25519'); return { password, keypair, seed }; }, [address, rememberRef, savedPassword, t], diff --git a/src/components/UnknownIdentity/UnknownIdentity.tsx b/src/components/UnknownIdentity/UnknownIdentity.tsx index 9cf5085df..020e41ce9 100644 --- a/src/components/UnknownIdentity/UnknownIdentity.tsx +++ b/src/components/UnknownIdentity/UnknownIdentity.tsx @@ -1,4 +1,4 @@ -import type { KiltAddress } from '@kiltprotocol/sdk-js'; +import type { KiltAddress } from '@kiltprotocol/types'; import browser from 'webextension-polyfill'; diff --git a/src/injectedScript.ts b/src/injectedScript.ts index 6ce1ffc4b..147f027db 100644 --- a/src/injectedScript.ts +++ b/src/injectedScript.ts @@ -1,10 +1,13 @@ -import { HexString } from '@polkadot/util/types'; -import { +import type { Did, DidUrl, KiltAddress } from '@kiltprotocol/types'; +import type { IEncryptedMessage, - DidResourceUri, - DidUri, - KiltAddress, -} from '@kiltprotocol/sdk-js'; + IEncryptedMessageV1, + InjectedWindowProvider, + PubSubSessionV1, + PubSubSessionV2, +} from '@kiltprotocol/extension-api/types'; + +import { HexString } from '@polkadot/util/types'; import { injectedCredentialChannel } from './channels/CredentialChannels/injectedCredentialChannel'; import { injectIntoDApp } from './dApps/injectIntoDApp/injectIntoDApp'; @@ -15,12 +18,10 @@ import { injectedSignDidExtrinsicChannel } from './channels/SignDidExtrinsicChan import { injectedCreateDidChannel } from './channels/CreateDidChannels/injectedCreateDidChannel'; import { injectedShareIdentitiesChannel } from './channels/ShareIdentitiesChannels/injectedShareIdentitiesChannel'; import { injectedAccessChannel } from './dApps/AccessChannels/injectedAccessChannel'; -import { - IEncryptedMessageV1, - InjectedWindowProvider, - PubSubSessionV1, - PubSubSessionV2, -} from './interfaces'; + +interface InjectedSporranApi extends InjectedWindowProvider { + getDidList: () => Promise>; +} let onMessageFromSporran: (message: IEncryptedMessage) => Promise; @@ -52,7 +53,7 @@ async function storeMessageFromSporran( async function startSession( unsafeDAppName: string, - dAppEncryptionKeyId: DidResourceUri, + dAppEncryptionKeyId: DidUrl, challenge: string, ): Promise { const dAppName = unsafeDAppName.substring(0, 50); @@ -148,19 +149,17 @@ async function startSession( }; } -function getDidList(): ReturnType< - InjectedWindowProvider['getDidList'] -> { +function getDidList(): ReturnType['getDidList']> { const dAppName = document.title.substring(0, 50); return injectedShareIdentitiesChannel.get({ dAppName }); } async function signWithDid( plaintext: string, - didUri?: DidUri, + didUri?: Did, ): Promise<{ signature: HexString; - didKeyUri: DidResourceUri; + didKeyUri: DidUrl; }> { const dAppName = document.title.substring(0, 50); return injectedSignDidChannel.get({ plaintext, didUri, dAppName }); @@ -169,10 +168,10 @@ async function signWithDid( async function signExtrinsicWithDid( extrinsic: HexString, submitter: KiltAddress, - didUri?: DidUri, + didUri?: Did, ): Promise<{ signed: HexString; - didKeyUri: DidResourceUri; + didKeyUri: DidUrl; }> { const dAppName = document.title.substring(0, 50); return injectedSignDidExtrinsicChannel.get({ @@ -185,7 +184,7 @@ async function signExtrinsicWithDid( async function getSignedDidCreationExtrinsic( submitter: KiltAddress, - pendingDidUri?: DidUri, + pendingDidUri?: Did, ): Promise<{ signedExtrinsic: HexString; }> { @@ -198,9 +197,7 @@ const { version } = configuration; const apiWindow = window as unknown as { kilt: { meta?: { versions: { credentials: string } }; - sporran?: Partial< - InjectedWindowProvider - >; + sporran?: Partial>; }; }; diff --git a/src/interfaces.ts b/src/interfaces.ts deleted file mode 100644 index 7bf42e6c1..000000000 --- a/src/interfaces.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { - DidResourceUri, - DidUri, - IEncryptedMessage, - KiltAddress, -} from '@kiltprotocol/sdk-js'; -import { HexString } from '@polkadot/util/types'; - -export interface IEncryptedMessageV1 { - /** ID of the key agreement key of the receiver DID used to encrypt the message */ - receiverKeyId: DidResourceUri; - - /** ID of the key agreement key of the sender DID used to encrypt the message */ - senderKeyId: DidResourceUri; - - /** ciphertext as hexadecimal */ - ciphertext: string; - - /** 24 bytes nonce as hexadecimal */ - nonce: string; -} - -export interface PubSubSessionV1 { - /** Configure the callback the extension must use to send messages to the dApp. Overrides previous values. */ - listen: ( - callback: (message: IEncryptedMessageV1) => Promise, - ) => Promise; - - /** send the encrypted message to the extension */ - send: (message: IEncryptedMessageV1) => Promise; - - /** close the session and stop receiving further messages */ - close: () => Promise; - - /** ID of the key agreement key of the temporary DID the extension will use to encrypt the session messages */ - encryptionKeyId: string; - - /** bytes as hexadecimal */ - encryptedChallenge: string; - - /** 24 bytes nonce as hexadecimal */ - nonce: string; -} - -export interface PubSubSessionV2 { - /** Configure the callback the extension must use to send messages to the dApp. Overrides previous values. */ - listen: ( - callback: (message: IEncryptedMessage) => Promise, - ) => Promise; - - /** send the encrypted message to the extension */ - send: (message: IEncryptedMessage) => Promise; - - /** close the session and stop receiving further messages */ - close: () => Promise; - - /** ID of the key agreement key of the temporary DID the extension will use to encrypt the session messages */ - encryptionKeyUri: DidResourceUri; - - /** bytes as hexadecimal */ - encryptedChallenge: string; - - /** 24 bytes nonce as hexadecimal */ - nonce: string; -} - -export interface InjectedWindowProvider { - startSession: ( - dAppName: string, - dAppEncryptionKeyId: DidResourceUri, - challenge: string, - ) => Promise; - - name: string; - version: string; - specVersion: '1.0' | '3.0'; - - getDidList: () => Promise>; - - signWithDid: ( - plaintext: string, - didUri?: DidUri, - ) => Promise<{ signature: string; didKeyUri: DidResourceUri }>; - - signExtrinsicWithDid: ( - extrinsic: HexString, - signer: KiltAddress, - didUri?: DidUri, - ) => Promise<{ signed: HexString; didKeyUri: DidResourceUri }>; - - getSignedDidCreationExtrinsic: ( - submitter: KiltAddress, - pendingDidUri?: DidUri, - ) => Promise<{ signedExtrinsic: HexString }>; -} diff --git a/src/testing/jest.setup.ts b/src/testing/jest.setup.ts index da919e585..8cb6479bf 100644 --- a/src/testing/jest.setup.ts +++ b/src/testing/jest.setup.ts @@ -56,7 +56,13 @@ jest.mock('@kiltprotocol/sdk-js', () => ({ this.api = api; }, }, +})); + +jest.mock('@kiltprotocol/credentials', () => ({ CType: { hashToId: jest.fn() }, +})); + +jest.mock('@kiltprotocol/chain-helpers', () => ({ BalanceUtils: { toFemtoKilt(coins: number) { const string = coins.toString().includes('e') @@ -72,24 +78,36 @@ jest.mock('@kiltprotocol/sdk-js', () => ({ }, }, Blockchain: { submitSignedTx: jest.fn() }, - Did: { - isSameSubject: jest.fn().mockReturnValue(true), - resourceIdToChain: jest - .fn() - .mockImplementation((input) => input.substring(1)), +})); + +jest.mock('@kiltprotocol/did', () => ({ + isSameSubject: jest.fn().mockReturnValue(true), + serviceToChain: jest + .fn() + .mockImplementation(({ id, type, serviceEndpoint }) => ({ + id: id.substring(1), + serviceTypes: type, + urls: serviceEndpoint, + })), +})); + +jest.mock('@kiltprotocol/utils', () => ({ + DataUtils: { + isKiltAddress: jest.fn(), }, - Utils: { - DataUtils: { - isKiltAddress: jest.fn(), - }, - Crypto: { - makeKeypairFromSeed: jest.fn(), - makeKeypairFromUri: jest.fn(), - encodeAddress: (address: string) => address, + Crypto: { + makeKeypairFromSeed: jest.fn(), + makeKeypairFromUri: jest.fn(), + encodeAddress: (address: string) => address, + }, + Signers: { + select: { + bySignerId: jest.fn(), + byAlgorithm: jest.fn(), + byDid: jest.fn(), + verifiableOnChain: jest.fn(), }, }, - KiltPublishedCredentialCollectionV1Type: - 'KiltPublishedCredentialCollectionV1', })); jest.mock('../components/Avatar/Identicon', () => ({ diff --git a/src/utilities/balanceChanges/balanceChanges.mock.ts b/src/utilities/balanceChanges/balanceChanges.mock.ts index b4f70d892..fae04974c 100644 --- a/src/utilities/balanceChanges/balanceChanges.mock.ts +++ b/src/utilities/balanceChanges/balanceChanges.mock.ts @@ -1,4 +1,4 @@ -import { BalanceUtils } from '@kiltprotocol/sdk-js'; +import { BalanceUtils } from '@kiltprotocol/chain-helpers'; import { Balances } from './balanceChanges'; diff --git a/src/utilities/balanceChanges/mockBalanceChanges.ts b/src/utilities/balanceChanges/mockBalanceChanges.ts index bec15545b..856f0d798 100644 --- a/src/utilities/balanceChanges/mockBalanceChanges.ts +++ b/src/utilities/balanceChanges/mockBalanceChanges.ts @@ -1,4 +1,4 @@ -import { BalanceUtils } from '@kiltprotocol/sdk-js'; +import { BalanceUtils } from '@kiltprotocol/chain-helpers'; import { onAddressBalanceChange } from './balanceChanges'; diff --git a/src/utilities/checkout/checkout.ts b/src/utilities/checkout/checkout.ts index 9d3ecd173..cb1265f59 100644 --- a/src/utilities/checkout/checkout.ts +++ b/src/utilities/checkout/checkout.ts @@ -1,4 +1,4 @@ -import type { KiltAddress } from '@kiltprotocol/sdk-js'; +import type { KiltAddress } from '@kiltprotocol/types'; import ky from 'ky'; diff --git a/src/utilities/credentials/CredentialsProvider.mock.tsx b/src/utilities/credentials/CredentialsProvider.mock.tsx index d1a3758b9..f223109d3 100644 --- a/src/utilities/credentials/CredentialsProvider.mock.tsx +++ b/src/utilities/credentials/CredentialsProvider.mock.tsx @@ -1,4 +1,5 @@ -import { IAttestation } from '@kiltprotocol/sdk-js'; +import type { IAttestation } from '@kiltprotocol/types'; + import { PropsWithChildren } from 'react'; import { ShareInput } from '../../channels/shareChannel/types'; diff --git a/src/utilities/credentials/credentials.ts b/src/utilities/credentials/credentials.ts index f7f0b522a..90805ed7f 100644 --- a/src/utilities/credentials/credentials.ts +++ b/src/utilities/credentials/credentials.ts @@ -1,14 +1,17 @@ -import { useContext, useEffect, useMemo } from 'react'; -import { isEqual, omit, pick, pull, reject, without } from 'lodash-es'; -import { - Attestation, - ConfigService, - Credential, +import type { Did, - DidUri, ICredential, KiltPublishedCredentialCollectionV1, -} from '@kiltprotocol/sdk-js'; +} from '@kiltprotocol/types'; + +import { useContext, useEffect, useMemo } from 'react'; +import { isEqual, omit, pick, pull, reject, without } from 'lodash-es'; + +import { ConfigService } from '@kiltprotocol/sdk-js'; +import { isSameSubject } from '@kiltprotocol/did'; +import { Attestation } from '@kiltprotocol/credentials'; +import { Credential } from '@kiltprotocol/legacy-credentials'; + import { mutate } from 'swr'; import { storage } from '../storage/storage'; @@ -150,7 +153,7 @@ export function isUnusableCredential({ status }: SporranCredential) { } export function useIdentityCredentials( - did: DidUri | undefined, + did: Did | undefined, onlyUsable = true, ): SporranCredential[] | undefined { const all = useCredentials(); @@ -171,7 +174,7 @@ export function useIdentityCredentials( const { fullDid } = parseDidUri(did); return filtered.filter((credential) => - Did.isSameSubject(credential.credential.claim.owner, fullDid), + isSameSubject(credential.credential.claim.owner, fullDid), ); }, [all, did, onlyUsable]); } diff --git a/src/utilities/did/did.ts b/src/utilities/did/did.ts index 5448ffaf5..8fe648348 100644 --- a/src/utilities/did/did.ts +++ b/src/utilities/did/did.ts @@ -1,51 +1,57 @@ +import type { Did, DidDocument, UriFragment } from '@kiltprotocol/types'; + +import { DidResolver } from '@kiltprotocol/sdk-js'; import { - ConfigService, - Did, - DidDocument, - DidEncryptionKey, - DidUri, -} from '@kiltprotocol/sdk-js'; + getFullDid, + parse, + parseDocumentFromLightDid, +} from '@kiltprotocol/did'; import { useAsyncValue } from '../useAsyncValue/useAsyncValue'; -export function isFullDid(did: DidUri | undefined): boolean { +export function isFullDid(did: Did | undefined): boolean { if (!did) { // maybe the DID was deleted from the blockchain return false; } - return Did.parse(did).type === 'full'; + return parse(did).type === 'full'; } -export async function getFullDidDocument(did: DidUri): Promise { - const api = ConfigService.get('api'); - return Did.linkedInfoFromChain(await api.call.did.query(Did.toChain(did))) - .document; +export async function getFullDidDocument(did: Did): Promise { + const { + didDocument, + didResolutionMetadata: { error }, + } = await DidResolver.resolve(did, {}); + if (!didDocument) { + throw new Error(`DID resolution error: ${error}`); + } + return didDocument; } -export function useFullDidDocument(did: DidUri): DidDocument | undefined { +export function useFullDidDocument(did: Did): DidDocument | undefined { return useAsyncValue(getFullDidDocument, [did]); } -export async function getDidDocument(did: DidUri): Promise { +export async function getDidDocument(did: Did): Promise { return isFullDid(did) ? await getFullDidDocument(did) - : Did.parseDocumentFromLightDid(did); + : parseDocumentFromLightDid(did); } export function getDidEncryptionKey({ keyAgreement, -}: DidDocument): DidEncryptionKey { +}: DidDocument): UriFragment { if (!keyAgreement || !keyAgreement[0]) { throw new Error('encryptionKey is not defined somehow'); } return keyAgreement[0]; } -export function parseDidUri(did: DidUri): ReturnType & { - fullDid: DidUri; +export function parseDidUri(did: Did): ReturnType & { + fullDid: Did; } { - const parsed = Did.parse(did); - const fullDid = parsed.type === 'full' ? did : Did.getFullDidUri(did); + const parsed = parse(did); + const fullDid = parsed.type === 'full' ? did : getFullDid(did); return { ...parsed, diff --git a/src/utilities/did/useIsOnChainDidDeleted.ts b/src/utilities/did/useIsOnChainDidDeleted.ts index c01ae9290..7e0ae1e95 100644 --- a/src/utilities/did/useIsOnChainDidDeleted.ts +++ b/src/utilities/did/useIsOnChainDidDeleted.ts @@ -1,18 +1,19 @@ -import { Did, DidUri } from '@kiltprotocol/sdk-js'; +import type { Did } from '@kiltprotocol/types'; + +import { DidResolver } from '@kiltprotocol/sdk-js'; import { useAsyncValue } from '../useAsyncValue/useAsyncValue'; -async function getIsOnChainDidDeleted( - did: DidUri | undefined, -): Promise { +async function getIsOnChainDidDeleted(did: Did | undefined): Promise { if (!did) { return false; } try { - const resolved = await Did.resolve(did); + const { didResolutionMetadata, didDocumentMetadata } = + await DidResolver.resolve(did, {}); return Boolean( - resolved && resolved.metadata && resolved.metadata.deactivated, + !didResolutionMetadata.error && didDocumentMetadata.deactivated, ); } catch (error) { console.error(error, 'Could not get DID deletion status'); @@ -21,7 +22,7 @@ async function getIsOnChainDidDeleted( } export function useIsOnChainDidDeleted( - did: DidUri | undefined, + did: Did | undefined, ): boolean | undefined { return useAsyncValue(getIsOnChainDidDeleted, [did]); } diff --git a/src/utilities/didDowngrade/didDowngrade.ts b/src/utilities/didDowngrade/didDowngrade.ts index 3c686312d..32982392e 100644 --- a/src/utilities/didDowngrade/didDowngrade.ts +++ b/src/utilities/didDowngrade/didDowngrade.ts @@ -1,13 +1,20 @@ -import BN from 'bn.js'; -import { - Blockchain, - ConfigService, +import type { Did, - DidUri, KiltKeyringPair, - SignExtrinsicCallback, + SignerInterface, SubmittableExtrinsic, -} from '@kiltprotocol/sdk-js'; +} from '@kiltprotocol/types'; + +import BN from 'bn.js'; + +import { ConfigService } from '@kiltprotocol/sdk-js'; +import { Blockchain } from '@kiltprotocol/chain-helpers'; +import { + authorizeBatch, + authorizeTx, + linkedInfoFromChain, + toChain, +} from '@kiltprotocol/did'; import { getIdentityCryptoFromSeed, Identity } from '../identities/identities'; import { isFullDid } from '../did/did'; @@ -19,36 +26,35 @@ interface DidTransaction { async function getSignedTransaction( keypair: KiltKeyringPair, - sign: SignExtrinsicCallback, - did: DidUri, + signers: SignerInterface[], + did: Did, ): Promise { const api = ConfigService.get('api'); const submitter = keypair.address; - const chainDid = Did.toChain(did); - const { web3Name, document } = Did.linkedInfoFromChain( - await api.call.did.query(chainDid), - ); + const chainDid = toChain(did); + const { document } = linkedInfoFromChain(await api.call.did.query(chainDid)); + const web3Name = document.alsoKnownAs?.[0]; const servicesCount = document.service?.length ?? 0; let authorized: SubmittableExtrinsic; if (web3Name) { - authorized = await Did.authorizeBatch({ + authorized = await authorizeBatch({ batchFunction: api.tx.utility.batchAll, did, extrinsics: [ api.tx.web3Names.releaseByOwner(), api.tx.did.delete(servicesCount), ], - sign, + signers, submitter, }); } else { - authorized = await Did.authorizeTx( - document.uri, + authorized = await authorizeTx( + document.id, api.tx.did.delete(servicesCount), - sign, + signers, submitter, ); } @@ -58,12 +64,12 @@ async function getSignedTransaction( return { extrinsic }; } -export async function getFee(did: DidUri | undefined): Promise { +export async function getFee(did: Did | undefined): Promise { if (!did || !isFullDid(did)) { return new BN(0); } - const { keypair, sign } = makeFakeIdentityCrypto(); - const { extrinsic } = await getSignedTransaction(keypair, sign, did); + const { keypair, signers } = await makeFakeIdentityCrypto(); + const { extrinsic } = await getSignedTransaction(keypair, signers, did); return (await extrinsic.paymentInfo(keypair)).partialFee; } @@ -77,8 +83,12 @@ export async function sign( if (!identity.did) { throw new Error('DID is deleted and unusable'); } - const { keypair, sign } = await getIdentityCryptoFromSeed(seed); - const { extrinsic } = await getSignedTransaction(keypair, sign, identity.did); + const { keypair, signers } = await getIdentityCryptoFromSeed(seed); + const { extrinsic } = await getSignedTransaction( + keypair, + signers, + identity.did, + ); const hash = extrinsic.hash.toHex(); currentTx[hash] = { extrinsic }; diff --git a/src/utilities/didUpgrade/didUpgrade.ts b/src/utilities/didUpgrade/didUpgrade.ts index f66ecf957..d40bbbb64 100644 --- a/src/utilities/didUpgrade/didUpgrade.ts +++ b/src/utilities/didUpgrade/didUpgrade.ts @@ -1,22 +1,26 @@ -import BN from 'bn.js'; -import { - Blockchain, - ConfigService, +import type { Did, DidDocument, - DidUri, KiltAddress, KiltKeyringPair, - SignExtrinsicCallback, + SignerInterface, SubmittableExtrinsic, -} from '@kiltprotocol/sdk-js'; +} from '@kiltprotocol/types'; + +import BN from 'bn.js'; import { useMemo } from 'react'; +import { ConfigService } from '@kiltprotocol/sdk-js'; +import { Blockchain } from '@kiltprotocol/chain-helpers'; import { - getIdentityCryptoFromSeed, - getLightDidFromSeed, -} from '../identities/identities'; + NewDidEncryptionKey, + NewDidVerificationKey, + createLightDidDocument, + getStoreTx, +} from '@kiltprotocol/did'; + +import { getIdentityCryptoFromSeed } from '../identities/identities'; import { parseDidUri } from '../did/did'; import { useAsyncValue } from '../useAsyncValue/useAsyncValue'; import { useAddressBalance } from '../../components/Balance/Balance'; @@ -25,33 +29,49 @@ import { makeFakeIdentityCrypto } from '../makeFakeIdentityCrypto/makeFakeIdenti interface DidTransaction { extrinsic: SubmittableExtrinsic; - did: DidUri; + did: Did; } export async function getTransaction( lightDidDocument: DidDocument, + keysToAdd: { + authenticationKey: NewDidVerificationKey; + encryptionKey: NewDidEncryptionKey; + }, keypair: KiltKeyringPair, - sign: SignExtrinsicCallback, + signers: SignerInterface[], submitter?: KiltAddress, ): Promise { - const { fullDid: did } = parseDidUri(lightDidDocument.uri); + const { fullDid: did } = parseDidUri(lightDidDocument.id); - const extrinsic = await Did.getStoreTx( - lightDidDocument, + const { authenticationKey, encryptionKey } = keysToAdd; + + const extrinsic = await getStoreTx( + { authentication: [authenticationKey], keyAgreement: [encryptionKey] }, submitter || keypair.address, - async (input) => sign({ ...input, did }), + signers, ); return { extrinsic, did }; } export async function getFee(): Promise { - const { keypair, sign, fakeSeed } = makeFakeIdentityCrypto(); - const document = getLightDidFromSeed(fakeSeed); + const { keypair, signers, authenticationKey, encryptionKey } = + await makeFakeIdentityCrypto(); const api = ConfigService.get('api'); - const { extrinsic } = await getTransaction(document, keypair, sign); + const lightDidDocument = createLightDidDocument({ + authentication: [authenticationKey], + keyAgreement: [encryptionKey], + }); + + const { extrinsic } = await getTransaction( + lightDidDocument, + { authenticationKey, encryptionKey }, + keypair, + signers, + ); const signed = await extrinsic.signAsync(keypair); const extrinsicFee = (await signed.paymentInfo(keypair)).partialFee; @@ -62,7 +82,7 @@ export async function getFee(): Promise { export function useKiltCosts( address: string, - did: DidUri | undefined, + did: Did | undefined, ): { fee?: BN; deposit?: BN; @@ -88,9 +108,15 @@ export function useKiltCosts( const currentTx: Record = {}; export async function sign(seed: Uint8Array): Promise { - const document = getLightDidFromSeed(seed); - const { keypair, sign } = await getIdentityCryptoFromSeed(seed); - const { extrinsic, did } = await getTransaction(document, keypair, sign); + const { didDocument, keypair, signers, authenticationKey, encryptionKey } = + await getIdentityCryptoFromSeed(seed); + + const { extrinsic, did } = await getTransaction( + didDocument, + { authenticationKey, encryptionKey }, + keypair, + signers, + ); const signed = await extrinsic.signAsync(keypair); @@ -99,7 +125,7 @@ export async function sign(seed: Uint8Array): Promise { return hash; } -export async function submit(hash: string): Promise { +export async function submit(hash: string): Promise { const { extrinsic, did } = currentTx[hash]; await Blockchain.submitSignedTx(extrinsic); delete currentTx[hash]; diff --git a/src/utilities/getDeposit/getDeposit.ts b/src/utilities/getDeposit/getDeposit.ts index 62a044cbf..fc6ac2c89 100644 --- a/src/utilities/getDeposit/getDeposit.ts +++ b/src/utilities/getDeposit/getDeposit.ts @@ -1,4 +1,12 @@ -import { ConfigService, Did, DidUri, KiltAddress } from '@kiltprotocol/sdk-js'; +import type { Did, KiltAddress } from '@kiltprotocol/types'; + +import { ConfigService } from '@kiltprotocol/sdk-js'; +import { + depositFromChain, + linkedInfoFromChain, + parse, + toChain, +} from '@kiltprotocol/did'; import BN from 'bn.js'; @@ -17,7 +25,7 @@ async function getDefaultDeposit() { } async function getDepositWeb3Name( - did: DidUri | undefined, + did: Did | undefined, ): Promise { if (!did || !isFullDid(did)) { return getDefaultDeposit(); @@ -25,53 +33,46 @@ async function getDepositWeb3Name( const api = ConfigService.get('api'); - const { web3Name } = Did.linkedInfoFromChain( - await api.call.did.query(Did.toChain(did)), - ); + const { + document: { alsoKnownAs }, + } = linkedInfoFromChain(await api.call.did.query(toChain(did))); - if (!web3Name) { + if (!alsoKnownAs) { return getDefaultDeposit(); } - const data = await api.query.web3Names.owner(web3Name); + const data = await api.query.web3Names.owner(alsoKnownAs[0]); if (data.isNone) { return; } - return Did.depositFromChain(data.unwrap().deposit); + return depositFromChain(data.unwrap().deposit); } export function useDepositWeb3Name( - did: DidUri | undefined, + did: Did | undefined, ): DepositData | undefined { return useAsyncValue(getDepositWeb3Name, [did]); } export async function getDepositDid( - did: DidUri | undefined, + did: Did | undefined, ): Promise { const api = ConfigService.get('api'); - if (!did || Did.parse(did).type === 'light') { - if ('deposit' in api.consts.did) { - // TODO: remove this `if` once the Spiritnet is updated - return { amount: api.consts.did.deposit as BN }; - } - - const baseDeposit = api.consts.did.baseDeposit as BN; - const keyDeposit = api.consts.did.keyDeposit as BN; + if (!did || parse(did).type === 'light') { + const baseDeposit = api.consts.did.baseDeposit; + const keyDeposit = api.consts.did.keyDeposit; const amount = baseDeposit.add(keyDeposit).add(keyDeposit); return { amount }; } - return Did.depositFromChain( - (await api.query.did.did(Did.toChain(did))).unwrap().deposit, + return depositFromChain( + (await api.query.did.did(toChain(did))).unwrap().deposit, ); } -export function useDepositDid( - did: DidUri | undefined, -): DepositData | undefined { +export function useDepositDid(did: Did | undefined): DepositData | undefined { return useAsyncValue(getDepositDid, [did]); } @@ -81,5 +82,5 @@ export function getDepositServiceEndpoint(type: ActionType): DepositData { return { amount: new BN(0) }; } - return { amount: api.consts.did.serviceEndpointDeposit as BN }; + return { amount: api.consts.did.serviceEndpointDeposit }; } diff --git a/src/utilities/getTabEncryption/getTabEncryption.ts b/src/utilities/getTabEncryption/getTabEncryption.ts index 1de9e4e18..058ebaf89 100644 --- a/src/utilities/getTabEncryption/getTabEncryption.ts +++ b/src/utilities/getTabEncryption/getTabEncryption.ts @@ -1,16 +1,22 @@ -import { Runtime } from 'webextension-polyfill'; -import { Keypair } from '@polkadot/util-crypto/types'; -import { - Did, - DidResourceUri, +import type { + DidUrl, + KiltKeyringPair, + VerificationMethod, +} from '@kiltprotocol/types'; +import type { + EncryptRequestData, IEncryptedMessage, IMessage, - KiltKeyringPair, - Message, MessageBody, - ResolvedDidKey, - Utils, -} from '@kiltprotocol/sdk-js'; +} from '@kiltprotocol/extension-api/types'; + +import { Runtime } from 'webextension-polyfill'; +import { Keypair } from '@polkadot/util-crypto/types'; + +import { DidResolver } from '@kiltprotocol/sdk-js'; +import { Crypto } from '@kiltprotocol/utils'; +import { createLightDidDocument } from '@kiltprotocol/did'; +import * as Message from '@kiltprotocol/extension-api/messaging'; import { verifyDidConfigResource } from '../wellKnownDid/wellKnownDid'; import { getDidEncryptionKey } from '../did/did'; @@ -18,8 +24,8 @@ import { getDidEncryptionKey } from '../did/did'; interface TabEncryption { authenticationKey: KiltKeyringPair; encryptionKey: Keypair; - sporranEncryptionDidKeyUri: DidResourceUri; - dAppEncryptionDidKey: ResolvedDidKey; + sporranEncryptionDidKeyUri: DidUrl; + dAppEncryptionDidKey: VerificationMethod; decrypt: (encrypted: IEncryptedMessage) => Promise; encrypt: (messageBody: MessageBody) => Promise; } @@ -28,7 +34,7 @@ const tabEncryptions: Record = {}; export async function getTabEncryption( sender: Runtime.MessageSender, - dAppEncryptionKeyUri?: DidResourceUri, + dAppEncryptionKeyUri?: DidUrl, ): Promise { if (!sender.tab || !sender.tab.id || !sender.url) { throw new Error('Message not from a tab'); @@ -45,34 +51,43 @@ export async function getTabEncryption( ); } - const encryptionKey = Utils.Crypto.makeEncryptionKeypairFromSeed(); + const encryptionKey = Crypto.makeEncryptionKeypairFromSeed(); const { secretKey } = encryptionKey; - const baseKey = Utils.Crypto.makeKeypairFromSeed( - secretKey.slice(0, 32), - 'sr25519', - ); + const baseKey = Crypto.makeKeypairFromSeed(secretKey.slice(0, 32), 'sr25519'); const authenticationKey = baseKey.derive( '//authentication', ) as typeof baseKey; - const sporranDidDocument = Did.createLightDidDocument({ + const sporranDidDocument = createLightDidDocument({ authentication: [authenticationKey], keyAgreement: [encryptionKey], }); const sporranEncryptionDidKey = getDidEncryptionKey(sporranDidDocument); const sporranEncryptionDidKeyUri = - `${sporranDidDocument.uri}${sporranEncryptionDidKey.id}` as DidResourceUri; + `${sporranDidDocument.id}${sporranEncryptionDidKey}` as DidUrl; + + const { contentStream } = await DidResolver.dereference( + dAppEncryptionKeyUri, + {}, + ); + const dAppEncryptionDidKey = contentStream as VerificationMethod | undefined; + + if (dAppEncryptionDidKey?.type !== 'Multikey') { + throw new Error( + `DApp encryption key ${dAppEncryptionKeyUri} does not resolve to a Multikey verification key as expected`, + ); + } - const dAppEncryptionDidKey = await Did.resolveKey(dAppEncryptionKeyUri); const dAppDid = dAppEncryptionDidKey.controller; + await verifyDidConfigResource(dAppDid, sender.url); async function decrypt(encrypted: IEncryptedMessage): Promise { return Message.decrypt( encrypted, async ({ data: box, peerPublicKey, nonce }) => { - const data = Utils.Crypto.decryptAsymmetric( + const data = Crypto.decryptAsymmetric( { box, nonce }, peerPublicKey, secretKey, @@ -86,27 +101,31 @@ export async function getTabEncryption( ); } + async function encryptCallback({ data, peerPublicKey }: EncryptRequestData) { + const { nonce, box } = Crypto.encryptAsymmetric( + data, + peerPublicKey, + secretKey, + ); + + return { + data: box, + nonce, + keyUri: sporranEncryptionDidKeyUri, + }; + } + async function encrypt(messageBody: MessageBody): Promise { const message = Message.fromBody( messageBody, - sporranDidDocument.uri, + sporranDidDocument.id, dAppDid, ); + return Message.encrypt( message, - async ({ data, peerPublicKey }) => { - const { nonce, box } = Utils.Crypto.encryptAsymmetric( - data, - peerPublicKey, - secretKey, - ); - return { - data: box, - nonce, - keyUri: sporranEncryptionDidKeyUri, - }; - }, - dAppEncryptionKeyUri as DidResourceUri, + encryptCallback, + `${sporranDidDocument.id}${getDidEncryptionKey(sporranDidDocument)}`, ); } diff --git a/src/utilities/identities/identities.ts b/src/utilities/identities/identities.ts index 890a18931..c9e8e3dd4 100644 --- a/src/utilities/identities/identities.ts +++ b/src/utilities/identities/identities.ts @@ -1,3 +1,18 @@ +import type { + Did, + DidDocument, + DidUrl, + KiltAddress, + KiltEncryptionKeypair, + KiltKeyringPair, + SignerInterface, +} from '@kiltprotocol/types'; +import type { + EncryptRequestData, + IEncryptedMessage, + MessageBody, +} from '@kiltprotocol/extension-api/types'; + import { useContext } from 'react'; import { mutate } from 'swr'; import { @@ -7,30 +22,24 @@ import { mnemonicToMiniSecret, sr25519PairFromSeed, } from '@polkadot/util-crypto'; -import { - Did, - DidDocument, - DidResourceUri, - DidUri, - EncryptRequestData, - IEncryptedMessage, - KiltAddress, - KiltEncryptionKeypair, - KiltKeyringPair, - Message, - MessageBody, - SignCallback, - SignRequestData, - Utils, -} from '@kiltprotocol/sdk-js'; import { find, map, max, memoize } from 'lodash-es'; +import { DidResolver } from '@kiltprotocol/sdk-js'; +import { Crypto, Signers } from '@kiltprotocol/utils'; +import { createLightDidDocument, getFullDid, parse } from '@kiltprotocol/did'; +import * as Message from '@kiltprotocol/extension-api/messaging'; + import { loadEncrypted, saveEncrypted, } from '../storageEncryption/storageEncryption'; -import { getDidDocument, getDidEncryptionKey, parseDidUri } from '../did/did'; +import { + getDidDocument, + getDidEncryptionKey, + isFullDid, + parseDidUri, +} from '../did/did'; import { storage } from '../storage/storage'; import { useSwrDataOrThrow } from '../useSwrDataOrThrow/useSwrDataOrThrow'; @@ -45,7 +54,7 @@ const CURRENT_IDENTITY_KEY = 'currentIdentity'; export const NEW: Identity = { address: 'NEW' as KiltAddress, - did: '' as DidUri, + did: '' as Did, name: '', index: -1, }; @@ -86,7 +95,7 @@ export async function setCurrentIdentity(address: string): Promise { await mutate(['getCurrentIdentity', CURRENT_IDENTITY_KEY]); } -export async function setCurrentIdentityByDid(did?: DidUri): Promise { +export async function setCurrentIdentityByDid(did?: Did): Promise { if (!did) { return; } @@ -122,7 +131,8 @@ interface IdentityDidCrypto { didDocument: DidDocument; keypair: KiltKeyringPair; authenticationKey: KiltKeyringPair; - sign: SignCallback; + encryptionKey: KiltEncryptionKeypair; + signers: SignerInterface[]; encrypt: ( messageBody: MessageBody, dAppDidDocument: DidDocument, @@ -130,7 +140,7 @@ interface IdentityDidCrypto { } export function deriveAuthenticationKey(seed: Uint8Array) { - const baseKey = Utils.Crypto.makeKeypairFromSeed(seed, 'sr25519'); + const baseKey = Crypto.makeKeypairFromSeed(seed, 'sr25519'); return baseKey.derive('//did//0') as typeof baseKey; } @@ -140,17 +150,17 @@ export function deriveEncryptionKeyFromSeed( const keypair = sr25519PairFromSeed(seed); const { path } = keyExtractPath('//did//keyAgreement//0'); const { secretKey } = keyFromPath(keypair, path, 'sr25519'); - return Utils.Crypto.makeEncryptionKeypairFromSeed(blake2AsU8a(secretKey)); + return Crypto.makeEncryptionKeypairFromSeed(blake2AsU8a(secretKey)); } export function deriveAttestationKeyFromSeed(seed: Uint8Array) { - const baseKey = Utils.Crypto.makeKeypairFromSeed(seed, 'sr25519'); + const baseKey = Crypto.makeKeypairFromSeed(seed, 'sr25519'); return baseKey.derive('//did//assertion//0') as typeof baseKey; } async function fixLightDidIssues(seed: Uint8Array) { const identities = await getIdentities(); - const { address } = Utils.Crypto.makeKeypairFromSeed(seed, 'sr25519'); + const { address } = Crypto.makeKeypairFromSeed(seed, 'sr25519'); const identity = identities[address]; if (!identity) { @@ -158,7 +168,7 @@ async function fixLightDidIssues(seed: Uint8Array) { return; } - const parsed = identity.did && Did.parse(identity.did); + const parsed = identity.did && parse(identity.did); if (parsed && parsed.type !== 'light') { return; } @@ -177,8 +187,8 @@ async function fixLightDidIssues(seed: Uint8Array) { getDidEncryptionKey(document); } catch { // We re-create the invalid DID from scratch and update its URI in the identity. - const { uri } = getLightDidFromSeed(seed); - await saveIdentity({ ...identity, did: uri }); + const { id } = getLightDidFromSeed(seed); + await saveIdentity({ ...identity, did: id }); } } @@ -186,46 +196,38 @@ export async function getIdentityCryptoFromSeed( seed: Uint8Array, ): Promise { await fixLightDidIssues(seed); + const keypair = Crypto.makeKeypairFromSeed(seed, 'sr25519'); const authenticationKey = deriveAuthenticationKey(seed); const encryptionKey = deriveEncryptionKeyFromSeed(seed); - const keypair = Utils.Crypto.makeKeypairFromSeed(seed, 'sr25519'); const identities = await getIdentities(); const did = getIdentityDid(identities[keypair.address]); const didDocument = await getDidDocument(did); + // id must be an address for light DIDs - passing the light DID key URL does not work + const signers = await Signers.getSignersForKeypair({ + keypair: authenticationKey, + id: isFullDid(did) + ? `${didDocument.id}${didDocument.authentication?.[0]}` + : authenticationKey.address, + }); + + const keyUri = + `${didDocument.id}${getDidEncryptionKey(didDocument)}` as DidUrl; + async function encryptCallback({ data, peerPublicKey }: EncryptRequestData) { - const { box, nonce } = Utils.Crypto.encryptAsymmetric( + const { box, nonce } = Crypto.encryptAsymmetric( data, peerPublicKey, encryptionKey.secretKey, ); - const keyUri = `${didDocument.uri}${getDidEncryptionKey(didDocument).id}`; + return { nonce, data: box, - keyUri: keyUri as DidResourceUri, - }; - } - - async function sign({ data, keyRelationship }: SignRequestData) { - if (keyRelationship !== 'authentication') { - throw new Error( - 'Only key relationship "authentication" is supported for signing', - ); - } - - const signature = authenticationKey.sign(data, { withType: false }); - const keyUri = - `${didDocument.uri}${didDocument.authentication[0].id}` as DidResourceUri; - const keyType = authenticationKey.type; - - return { - signature, keyUri, - keyType, }; } @@ -235,14 +237,14 @@ export async function getIdentityCryptoFromSeed( ): Promise { const message = Message.fromBody( messageBody, - didDocument.uri, - dAppDidDocument.uri, + didDocument.id, + dAppDidDocument.id, ); return Message.encrypt( message, encryptCallback, - `${dAppDidDocument.uri}${getDidEncryptionKey(dAppDidDocument).id}`, + `${dAppDidDocument.id}${getDidEncryptionKey(dAppDidDocument)}`, ); } @@ -250,7 +252,8 @@ export async function getIdentityCryptoFromSeed( didDocument, keypair, authenticationKey, - sign, + encryptionKey, + signers, encrypt, }; } @@ -260,13 +263,13 @@ export async function encryptIdentity( password: string, ): Promise { const seed = mnemonicToMiniSecret(backupPhrase); - const { address } = Utils.Crypto.makeKeypairFromUri(backupPhrase, 'sr25519'); + const { address } = Crypto.makeKeypairFromUri(backupPhrase, 'sr25519'); await saveEncrypted(address, password, seed); return address; } export function getLightDidFromSeed(seed: Uint8Array): DidDocument { - return Did.createLightDidDocument({ + return createLightDidDocument({ authentication: [deriveAuthenticationKey(seed)], keyAgreement: [deriveEncryptionKeyFromSeed(seed)], }); @@ -289,11 +292,11 @@ export async function createIdentity( const seed = mnemonicToMiniSecret(backupPhrase); - const { uri } = getLightDidFromSeed(seed); + const { id } = getLightDidFromSeed(seed); const { name, index } = await getIdentityName(); - const identity = { name, address, did: uri, index }; + const identity = { name, address, did: id, index }; await saveIdentity(identity); return identity; @@ -308,14 +311,16 @@ export async function importIdentity( const seed = mnemonicToMiniSecret(backupPhrase); const lightDidDocument = getLightDidFromSeed(seed); - const lightDid = lightDidDocument.uri; + const lightDid = lightDidDocument.id; + + const { + didDocumentMetadata: { canonicalId, deactivated }, + } = await DidResolver.resolve(lightDid, {}); - const resolved = await Did.resolve(lightDid); - const fullDid = resolved?.metadata?.canonicalId; + const fullDid = canonicalId; - const deactivated = resolved?.metadata?.deactivated; const did = deactivated ? undefined : fullDid || lightDid; - const deletedDid = deactivated ? Did.getFullDidUri(lightDid) : undefined; + const deletedDid = deactivated ? getFullDid(lightDid) : undefined; const { name, index } = await getIdentityName(); @@ -357,10 +362,14 @@ async function syncDidStateWithBlockchain(address: string | null | undefined) { const { fullDid, type } = parseDidUri(identity.did); const wasOnChain = type === 'full'; - const resolved = await Did.resolve(identity.did); + const { + didDocument, + didDocumentMetadata: { canonicalId, deactivated }, + } = await DidResolver.resolve(identity.did, {}); + const isOnChain = wasOnChain - ? Boolean(resolved && resolved.metadata && !resolved.metadata.deactivated) - : Boolean(resolved && resolved.metadata && resolved.metadata.canonicalId); + ? Boolean(didDocument && !deactivated) + : Boolean(didDocument && canonicalId); if (wasOnChain && !isOnChain) { await saveIdentity({ @@ -389,7 +398,7 @@ export function useCurrentIdentity(): string | null | undefined { return data; } -export function getIdentityDid({ did }: Identity): DidUri { +export function getIdentityDid({ did }: Identity): Did { if (!did) { throw new Error('DID is deleted and unusable'); } diff --git a/src/utilities/identities/types.ts b/src/utilities/identities/types.ts index 2e70397f7..71656df65 100644 --- a/src/utilities/identities/types.ts +++ b/src/utilities/identities/types.ts @@ -1,11 +1,11 @@ -import { DidUri, KiltAddress } from '@kiltprotocol/sdk-js'; +import type { Did, KiltAddress } from '@kiltprotocol/types'; export interface Identity { address: KiltAddress; - did?: DidUri; + did?: Did; name: string; index: number; - deletedDid?: DidUri; + deletedDid?: Did; } export type IdentitiesMap = Record; diff --git a/src/utilities/initKiltSDK/initKiltSDK.ts b/src/utilities/initKiltSDK/initKiltSDK.ts index 7ff6fadc9..f330f99e4 100644 --- a/src/utilities/initKiltSDK/initKiltSDK.ts +++ b/src/utilities/initKiltSDK/initKiltSDK.ts @@ -1,4 +1,5 @@ -import { Blockchain, ConfigService, connect } from '@kiltprotocol/sdk-js'; +import { ConfigService, connect } from '@kiltprotocol/sdk-js'; +import { Blockchain } from '@kiltprotocol/chain-helpers'; import { getStoredEndpoint } from '../endpoints/endpoints'; import { configuration } from '../../configuration/configuration'; diff --git a/src/utilities/makeFakeIdentityCrypto/makeFakeIdentityCrypto.ts b/src/utilities/makeFakeIdentityCrypto/makeFakeIdentityCrypto.ts index ad8958f08..a0a7ffd19 100644 --- a/src/utilities/makeFakeIdentityCrypto/makeFakeIdentityCrypto.ts +++ b/src/utilities/makeFakeIdentityCrypto/makeFakeIdentityCrypto.ts @@ -1,10 +1,26 @@ -import { Utils } from '@kiltprotocol/sdk-js'; +import { Crypto, Signers } from '@kiltprotocol/utils'; -import { makeSignExtrinsicCallback } from '../makeSignExtrinsicCallback/makeSignExtrinsicCallback'; +import { + deriveAuthenticationKey, + deriveEncryptionKeyFromSeed, +} from '../identities/identities'; + +export async function makeFakeIdentityCrypto(fakeSeed = new Uint8Array(32)) { + const keypair = Crypto.makeKeypairFromSeed(fakeSeed, 'sr25519'); + const authenticationKey = deriveAuthenticationKey(fakeSeed); + const encryptionKey = deriveEncryptionKeyFromSeed(fakeSeed); + + const signers = await Signers.getSignersForKeypair({ + keypair: authenticationKey, + id: authenticationKey.address, + }); -export function makeFakeIdentityCrypto(fakeSeed = new Uint8Array(32)) { - const keypair = Utils.Crypto.makeKeypairFromSeed(fakeSeed, 'sr25519'); - const sign = makeSignExtrinsicCallback(keypair); const { address } = keypair; - return { keypair, address, sign, fakeSeed }; + return { + keypair, + address, + signers, + authenticationKey, + encryptionKey, + }; } diff --git a/src/utilities/makeSignExtrinsicCallback/makeSignExtrinsicCallback.ts b/src/utilities/makeSignExtrinsicCallback/makeSignExtrinsicCallback.ts deleted file mode 100644 index 2d17bd952..000000000 --- a/src/utilities/makeSignExtrinsicCallback/makeSignExtrinsicCallback.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { - KiltKeyringPair, - SignExtrinsicCallback, - SignRequestData, -} from '@kiltprotocol/sdk-js'; - -export function makeSignExtrinsicCallback( - keypair: KiltKeyringPair, -): SignExtrinsicCallback { - return async function sign({ data }: SignRequestData) { - return { - signature: keypair.sign(data, { withType: false }), - keyType: keypair.type, - }; - }; -} diff --git a/src/utilities/mockTerms/mockTerms.ts b/src/utilities/mockTerms/mockTerms.ts index 1f7720ffa..fdcad0da5 100644 --- a/src/utilities/mockTerms/mockTerms.ts +++ b/src/utilities/mockTerms/mockTerms.ts @@ -1,4 +1,4 @@ -import { DidUri, ICType } from '@kiltprotocol/sdk-js'; +import type { Did, ICType } from '@kiltprotocol/types'; import { identitiesMock } from '../identities/IdentitiesProvider.mock'; import { Terms } from '../../views/SignQuote/SignQuote'; @@ -27,7 +27,7 @@ export const mockTerms: Terms = { Email: 'ingo@kilt.io', }, owner: identitiesMock['4tDjyLy2gESkLzvaLnpbn7N61VgnwAhqnTHsPPFAwaZjGwP1'] - .did as DidUri, + .did as Did, }, legitimations: [], quote: { diff --git a/src/utilities/transfers/transfers.ts b/src/utilities/transfers/transfers.ts index d908a17e8..8ab1eeeee 100644 --- a/src/utilities/transfers/transfers.ts +++ b/src/utilities/transfers/transfers.ts @@ -1,11 +1,12 @@ -import BN from 'bn.js'; - -import { - Blockchain, - ConfigService, +import type { KiltKeyringPair, SubmittableExtrinsic, -} from '@kiltprotocol/sdk-js'; +} from '@kiltprotocol/types'; + +import { ConfigService } from '@kiltprotocol/sdk-js'; +import { Blockchain } from '@kiltprotocol/chain-helpers'; + +import BN from 'bn.js'; const currentTx: Record = {}; diff --git a/src/utilities/useSubmitStates/useSubmitStates.ts b/src/utilities/useSubmitStates/useSubmitStates.ts index 05ba41868..a71fdbbac 100644 --- a/src/utilities/useSubmitStates/useSubmitStates.ts +++ b/src/utilities/useSubmitStates/useSubmitStates.ts @@ -1,13 +1,15 @@ -import { useCallback, useState } from 'react'; -import { - Blockchain, - ConfigService, +import type { ISubmittableResult, KiltKeyringPair, SubmittableExtrinsic, -} from '@kiltprotocol/sdk-js'; +} from '@kiltprotocol/types'; + +import { useCallback, useState } from 'react'; import BN from 'bn.js'; +import { ConfigService } from '@kiltprotocol/sdk-js'; +import { Blockchain } from '@kiltprotocol/chain-helpers'; + import { asKiltCoins } from '../../components/KiltAmount/KiltAmount'; import { transformBalances } from '../transformBalances/transformBalances'; import { makeFakeIdentityCrypto } from '../makeFakeIdentityCrypto/makeFakeIdentityCrypto'; @@ -17,7 +19,7 @@ async function getUnpaidCosts( draft: SubmittableExtrinsic, tip = new BN(0), ): Promise { - const { keypair } = makeFakeIdentityCrypto(); + const { keypair } = await makeFakeIdentityCrypto(); const extrinsic = await draft.signAsync(keypair, { tip }); const fee = (await extrinsic.paymentInfo(keypair)).partialFee; diff --git a/src/utilities/useWeb3Name/useWeb3Name.ts b/src/utilities/useWeb3Name/useWeb3Name.ts index be5ece11b..f3fb0e7cf 100644 --- a/src/utilities/useWeb3Name/useWeb3Name.ts +++ b/src/utilities/useWeb3Name/useWeb3Name.ts @@ -1,11 +1,12 @@ -import { ConfigService, Did, DidUri } from '@kiltprotocol/sdk-js'; +import type { Did } from '@kiltprotocol/types'; + +import { ConfigService } from '@kiltprotocol/sdk-js'; +import { linkedInfoFromChain, toChain } from '@kiltprotocol/did'; import { isFullDid } from '../did/did'; import { useAsyncValue } from '../useAsyncValue/useAsyncValue'; -export function useWeb3Name( - did: DidUri | undefined, -): string | null | undefined { +export function useWeb3Name(did: Did | undefined): string | null | undefined { return useAsyncValue( async (did) => { if (!(did && isFullDid(did))) { @@ -13,12 +14,12 @@ export function useWeb3Name( } const api = ConfigService.get('api'); - const result = await api.call.did.query(Did.toChain(did)); + const result = await api.call.did.query(toChain(did)); if (result.isNone) { return null; } - return Did.linkedInfoFromChain(result).web3Name; + return linkedInfoFromChain(result).document.alsoKnownAs?.[0]; }, [did], ); diff --git a/src/utilities/w3nCreate/w3nCreate.ts b/src/utilities/w3nCreate/w3nCreate.ts index 464c40999..94bc6dd1e 100644 --- a/src/utilities/w3nCreate/w3nCreate.ts +++ b/src/utilities/w3nCreate/w3nCreate.ts @@ -1,25 +1,29 @@ -import { ConfigService, Did, DidUri } from '@kiltprotocol/sdk-js'; +import type { Did } from '@kiltprotocol/types'; + +import { ConfigService } from '@kiltprotocol/sdk-js'; import { useMemo } from 'react'; import BN from 'bn.js'; +import { authorizeTx } from '@kiltprotocol/did'; + import { useAsyncValue } from '../useAsyncValue/useAsyncValue'; import { useDepositWeb3Name } from '../getDeposit/getDeposit'; import { useAddressBalance } from '../../components/Balance/Balance'; import { makeFakeIdentityCrypto } from '../makeFakeIdentityCrypto/makeFakeIdentityCrypto'; -async function getFee(did: DidUri | undefined) { +async function getFee(did: Did | undefined) { if (!did) { return; } - const { address, keypair, sign } = makeFakeIdentityCrypto(); + const { address, keypair, signers } = await makeFakeIdentityCrypto(); const api = ConfigService.get('api'); - const authorized = await Did.authorizeTx( + const authorized = await authorizeTx( did, api.tx.web3Names.claim('01234567890123456789012345678901'), - sign, + signers, address, ); const signed = await authorized.signAsync(keypair); @@ -28,7 +32,7 @@ async function getFee(did: DidUri | undefined) { export function useKiltCosts( address: string, - did: DidUri | undefined, + did: Did | undefined, ): { fee?: BN; deposit?: BN; diff --git a/src/utilities/wellKnownDid/wellKnownDid.ts b/src/utilities/wellKnownDid/wellKnownDid.ts index 72825b7aa..034c5979b 100644 --- a/src/utilities/wellKnownDid/wellKnownDid.ts +++ b/src/utilities/wellKnownDid/wellKnownDid.ts @@ -1,10 +1,14 @@ +import type { Did } from '@kiltprotocol/types'; + import ky from 'ky'; -import { Did, DidResourceUri, DidUri, Utils } from '@kiltprotocol/sdk-js'; + +import { validateDid, verifyDidSignature } from '@kiltprotocol/did'; +import { Crypto } from '@kiltprotocol/utils'; import { getDidDocument } from '../did/did'; interface CredentialSubject { - id: DidUri; + id: Did; origin: string; rootHash: string; } @@ -38,7 +42,7 @@ async function asyncSome( } export async function verifyDidConfigResource( - did: DidUri, + did: Did, tabUrl: string, ): Promise { const { origin } = new URL(tabUrl); @@ -72,7 +76,7 @@ export async function verifyDidConfigResource( ); } - Did.validateUri(credentialSubject.id, 'Did'); + validateDid(credentialSubject.id, 'Did'); const matchesIssuer = issuer === credentialSubject.id; if (!matchesIssuer) { throw new Error( @@ -87,20 +91,17 @@ export async function verifyDidConfigResource( ); } - const issuerDidDocument = await getDidDocument(issuer); + const issuerDidDocument = await getDidDocument(issuer as Did); if (!issuerDidDocument.assertionMethod?.[0]) { throw new Error( `The credential at ${url} is issued for ${credentialSubject.id} but this DID has no assertionMethod key`, ); } - await Did.verifyDidSignature({ - keyUri: - `${issuerDidDocument.uri}${issuerDidDocument.assertionMethod?.[0].id}` as DidResourceUri, - signature: Utils.Crypto.coToUInt8( - credential.proof.signature as string, - ), - message: Utils.Crypto.coToUInt8(credentialSubject.rootHash), + await verifyDidSignature({ + signerUrl: `${issuerDidDocument.id}${issuerDidDocument.assertionMethod?.[0]}`, + signature: Crypto.coToUInt8(credential.proof.signature as string), + message: Crypto.coToUInt8(credentialSubject.rootHash), }); return true; diff --git a/src/views/CreateDidDApp/CreateDidDApp.tsx b/src/views/CreateDidDApp/CreateDidDApp.tsx index da1cfe032..ce6fa9d83 100644 --- a/src/views/CreateDidDApp/CreateDidDApp.tsx +++ b/src/views/CreateDidDApp/CreateDidDApp.tsx @@ -1,6 +1,7 @@ import { FormEvent, useCallback } from 'react'; import browser from 'webextension-polyfill'; -import { Did } from '@kiltprotocol/sdk-js'; + +import { getStoreTx } from '@kiltprotocol/did'; import * as styles from './CreateDidDApp.module.css'; @@ -9,7 +10,7 @@ import { PasswordField, usePasswordField, } from '../../components/PasswordField/PasswordField'; -import { isFullDid, parseDidUri } from '../../utilities/did/did'; +import { isFullDid } from '../../utilities/did/did'; import { Identity } from '../../utilities/identities/types'; import { usePopupData } from '../../utilities/popups/usePopupData'; @@ -44,13 +45,19 @@ export function CreateDidDApp({ identity }: Props) { const { seed } = await passwordField.get(event); - const { didDocument, sign } = await getIdentityCryptoFromSeed(seed); - const { fullDid: did } = parseDidUri(didDocument.uri); + const { authenticationKey, encryptionKey, didDocument, signers } = + await getIdentityCryptoFromSeed(seed); + + if (!didDocument.authentication) { + throw new Error( + 'At least one authentication key required to create DID', + ); + } - const storeTx = await Did.getStoreTx( - didDocument, + const storeTx = await getStoreTx( + { authentication: [authenticationKey], keyAgreement: [encryptionKey] }, submitter, - async (input) => sign({ ...input, did }), + signers, ); const signedExtrinsic = storeTx.method.toHex(); diff --git a/src/views/DidDowngrade/DidDowngrade.test.tsx b/src/views/DidDowngrade/DidDowngrade.test.tsx index f957219f7..cc6257186 100644 --- a/src/views/DidDowngrade/DidDowngrade.test.tsx +++ b/src/views/DidDowngrade/DidDowngrade.test.tsx @@ -1,4 +1,4 @@ -import { BalanceUtils } from '@kiltprotocol/sdk-js'; +import { BalanceUtils } from '@kiltprotocol/chain-helpers'; import { identitiesMock as identities, render } from '../../testing/testing'; diff --git a/src/views/DidDowngrade/DidDowngrade.tsx b/src/views/DidDowngrade/DidDowngrade.tsx index b78822ecc..ee65ceb79 100644 --- a/src/views/DidDowngrade/DidDowngrade.tsx +++ b/src/views/DidDowngrade/DidDowngrade.tsx @@ -1,8 +1,9 @@ +import type { Did } from '@kiltprotocol/types'; + import { FormEvent, Fragment, useCallback, useMemo, useState } from 'react'; import { Link } from 'react-router-dom'; import BN from 'bn.js'; import browser from 'webextension-polyfill'; -import { DidUri } from '@kiltprotocol/sdk-js'; import * as styles from './DidDowngrade.module.css'; @@ -42,7 +43,7 @@ import { useAsyncValue } from '../../utilities/useAsyncValue/useAsyncValue'; function useCosts( address: string, - did: DidUri | undefined, // after the downgrade it’s set to undefined + did: Did | undefined, // after the downgrade it’s set to undefined ): { fee?: BN; deposit?: BN; diff --git a/src/views/DidEndpointsFlow/DidEndpointsFlow.tsx b/src/views/DidEndpointsFlow/DidEndpointsFlow.tsx index ffb2a7ead..f5a7cdfb1 100644 --- a/src/views/DidEndpointsFlow/DidEndpointsFlow.tsx +++ b/src/views/DidEndpointsFlow/DidEndpointsFlow.tsx @@ -1,6 +1,7 @@ +import type { Service } from '@kiltprotocol/types'; + import { useCallback, useState } from 'react'; import { Redirect, Route, Switch, useHistory } from 'react-router-dom'; -import { DidServiceEndpoint } from '@kiltprotocol/sdk-js'; import { Identity } from '../../utilities/identities/types'; import { DidEndpointsForm } from '../DidEndpointsForm/DidEndpointsForm'; @@ -15,7 +16,7 @@ export function DidEndpointsFlow({ identity }: Props) { const history = useHistory(); const [type, setType] = useState<'add' | 'remove'>('add'); - const [values, setValues] = useState(); + const [values, setValues] = useState(); const { address } = identity; const signPath = generatePath(paths.identity.did.manage.endpoints.sign, { @@ -23,7 +24,7 @@ export function DidEndpointsFlow({ identity }: Props) { }); const onAdd = useCallback( - async (endpoint: DidServiceEndpoint) => { + async (endpoint: Service) => { setType('add'); setValues(endpoint); history.push(signPath); @@ -32,7 +33,7 @@ export function DidEndpointsFlow({ identity }: Props) { ); const onRemove = useCallback( - async (endpoint: DidServiceEndpoint) => { + async (endpoint: Service) => { setType('remove'); setValues(endpoint); history.push(signPath); diff --git a/src/views/DidEndpointsForm/DidEndpointsForm.test.tsx b/src/views/DidEndpointsForm/DidEndpointsForm.test.tsx index c27157010..061e87838 100644 --- a/src/views/DidEndpointsForm/DidEndpointsForm.test.tsx +++ b/src/views/DidEndpointsForm/DidEndpointsForm.test.tsx @@ -1,10 +1,8 @@ +import type { DidDocument, Service } from '@kiltprotocol/types'; + +import { ConfigService, connect } from '@kiltprotocol/sdk-js'; + import { MemoryRouter, Route } from 'react-router-dom'; -import { - ConfigService, - connect, - DidDocument, - DidServiceEndpoint, -} from '@kiltprotocol/sdk-js'; import { identitiesMock, render, screen } from '../../testing/testing'; import { useFullDidDocument } from '../../utilities/did/did'; @@ -16,7 +14,7 @@ import { DidEndpointsForm } from './DidEndpointsForm'; const identity = identitiesMock['4pNXuxPWhMxhRctgB4qd3MkRt2Sxp7Y7sxrApVCVXCEcdQMo']; -const service: DidServiceEndpoint[] = [ +const service: Service[] = [ { serviceEndpoint: ['https://sporran.org/'], type: ['Some Type'], diff --git a/src/views/DidEndpointsForm/DidEndpointsForm.tsx b/src/views/DidEndpointsForm/DidEndpointsForm.tsx index ac008b7f9..43409e2db 100644 --- a/src/views/DidEndpointsForm/DidEndpointsForm.tsx +++ b/src/views/DidEndpointsForm/DidEndpointsForm.tsx @@ -1,3 +1,8 @@ +import { + KiltPublishedCredentialCollectionV1Type, + type Service, +} from '@kiltprotocol/types'; + import { FormEvent, RefObject, @@ -9,14 +14,11 @@ import { import { Link, Prompt, Redirect, useParams } from 'react-router-dom'; import browser from 'webextension-polyfill'; import { stringToU8a } from '@polkadot/util'; -import { - ConfigService, - Did, - DidServiceEndpoint, - KiltPublishedCredentialCollectionV1Type, -} from '@kiltprotocol/sdk-js'; import { last } from 'lodash-es'; +import { ConfigService } from '@kiltprotocol/sdk-js'; +import { serviceToChain } from '@kiltprotocol/did'; + import * as styles from './DidEndpointsForm.module.css'; import { IdentitySlide } from '../../components/IdentitySlide/IdentitySlide'; @@ -44,9 +46,9 @@ function DidEndpointCard({ startUrl, onRemove, }: { - endpoint: DidServiceEndpoint; + endpoint: Service; startUrl?: string; - onRemove: (endpoint: DidServiceEndpoint) => void; + onRemove: (endpoint: Service) => void; }) { const t = browser.i18n.getMessage; @@ -60,7 +62,7 @@ function DidEndpointCard({ type: [type], serviceEndpoint: [url], } = endpoint; - const id = Did.resourceIdToChain(endpoint.id); + const { id } = serviceToChain(endpoint); const expanded = !startUrl || id === decodeURIComponent(params.id); const { address } = params; @@ -118,7 +120,7 @@ function DidNewEndpoint({ tooMany, startUrl, }: { - onAdd: (endpoint: DidServiceEndpoint) => void; + onAdd: (endpoint: Service) => void; tooMany: boolean; startUrl?: string; }) { @@ -317,8 +319,8 @@ function DidNewEndpoint({ interface Props { identity: Identity; - onAdd: (endpoint: DidServiceEndpoint) => void; - onRemove: (endpoint: DidServiceEndpoint) => void; + onAdd: (endpoint: Service) => void; + onRemove: (endpoint: Service) => void; } export function DidEndpointsForm({ identity, onAdd, onRemove }: Props) { diff --git a/src/views/DidEndpointsSign/DidEndpointsSign.stories.tsx b/src/views/DidEndpointsSign/DidEndpointsSign.stories.tsx index 187dea4de..25ff13dd4 100644 --- a/src/views/DidEndpointsSign/DidEndpointsSign.stories.tsx +++ b/src/views/DidEndpointsSign/DidEndpointsSign.stories.tsx @@ -1,5 +1,6 @@ +import type { Service } from '@kiltprotocol/types'; + import { Meta } from '@storybook/react'; -import { DidServiceEndpoint } from '@kiltprotocol/sdk-js'; import { identitiesMock } from '../../utilities/identities/IdentitiesProvider.mock'; @@ -13,13 +14,13 @@ export default { const identity = identitiesMock['4pNXuxPWhMxhRctgB4qd3MkRt2Sxp7Y7sxrApVCVXCEcdQMo']; -const endpoint: DidServiceEndpoint = { +const endpoint: Service = { serviceEndpoint: ['https://sporran.org/'], type: ['Some Type'], id: '#123456', }; -const longUrlEndpoint: DidServiceEndpoint = { +const longUrlEndpoint: Service = { ...endpoint, serviceEndpoint: [ 'https://www.this-is-a-super-long-url/which-just-keeps-going-and-going/to-test-the-overflow-behaviour-of-the-url-value', diff --git a/src/views/DidEndpointsSign/DidEndpointsSign.test.tsx b/src/views/DidEndpointsSign/DidEndpointsSign.test.tsx index 52993c77c..9e6d4023b 100644 --- a/src/views/DidEndpointsSign/DidEndpointsSign.test.tsx +++ b/src/views/DidEndpointsSign/DidEndpointsSign.test.tsx @@ -1,4 +1,6 @@ -import { BalanceUtils, DidServiceEndpoint } from '@kiltprotocol/sdk-js'; +import type { Service } from '@kiltprotocol/types'; + +import { BalanceUtils } from '@kiltprotocol/chain-helpers'; import { identitiesMock, render } from '../../testing/testing'; import { waitForGetPassword } from '../../channels/SavedPasswordsChannels/SavedPasswordsChannels.mock'; @@ -13,7 +15,7 @@ import { DidEndpointsSign } from './DidEndpointsSign'; const identity = identitiesMock['4pNXuxPWhMxhRctgB4qd3MkRt2Sxp7Y7sxrApVCVXCEcdQMo']; -const endpoint: DidServiceEndpoint = { +const endpoint: Service = { serviceEndpoint: ['https://sporran.org/'], type: ['Some Type'], id: '#123456', diff --git a/src/views/DidEndpointsSign/DidEndpointsSign.tsx b/src/views/DidEndpointsSign/DidEndpointsSign.tsx index 4626e2111..f4e3de79b 100644 --- a/src/views/DidEndpointsSign/DidEndpointsSign.tsx +++ b/src/views/DidEndpointsSign/DidEndpointsSign.tsx @@ -1,15 +1,17 @@ -import { FormEvent, useCallback, useMemo } from 'react'; -import { Link } from 'react-router-dom'; -import browser from 'webextension-polyfill'; -import { +import type { BN, - ConfigService, Did, - DidServiceEndpoint, - DidUri, + Service, KiltKeyringPair, - SignExtrinsicCallback, -} from '@kiltprotocol/sdk-js'; + SignerInterface, +} from '@kiltprotocol/types'; + +import { FormEvent, useCallback, useMemo } from 'react'; +import { Link } from 'react-router-dom'; +import browser from 'webextension-polyfill'; + +import { ConfigService } from '@kiltprotocol/sdk-js'; +import { authorizeTx, serviceToChain } from '@kiltprotocol/did'; import * as styles from './DidEndpointsSign.module.css'; @@ -43,32 +45,29 @@ export type ActionType = 'add' | 'remove'; async function getDidAuthorizedExtrinsic( keypair: KiltKeyringPair, - sign: SignExtrinsicCallback, - did: DidUri, - service: DidServiceEndpoint, + signers: SignerInterface[], + did: Did, + service: Service, type: ActionType, ) { const document = await getFullDidDocument(did); const api = ConfigService.get('api'); + const chainService = serviceToChain(service); const draft = type === 'add' - ? api.tx.did.addServiceEndpoint(Did.serviceToChain(service)) - : api.tx.did.removeServiceEndpoint(Did.resourceIdToChain(service.id)); + ? api.tx.did.addServiceEndpoint(chainService) + : api.tx.did.removeServiceEndpoint(chainService.id); - return Did.authorizeTx(document.uri, draft, sign, keypair.address); + return authorizeTx(document.id, draft, signers, keypair.address); } -async function getFee( - did: DidUri, - service: DidServiceEndpoint, - type: ActionType, -) { - const { keypair, sign } = makeFakeIdentityCrypto(); +async function getFee(did: Did, service: Service, type: ActionType) { + const { keypair, signers } = await makeFakeIdentityCrypto(); const authorized = await getDidAuthorizedExtrinsic( keypair, - sign, + signers, did, service, type, @@ -81,9 +80,9 @@ async function getFee( export function useCosts( address: string, - did: DidUri, + did: Did, type: ActionType, - service: DidServiceEndpoint, + service: Service, ): { fee?: BN; deposit?: BN; @@ -109,7 +108,7 @@ export function useCosts( interface Props { identity: Identity; type: ActionType; - endpoint: DidServiceEndpoint; + endpoint: Service; } export function DidEndpointsSign({ identity, type, endpoint }: Props) { @@ -128,11 +127,11 @@ export function DidEndpointsSign({ identity, type, endpoint }: Props) { event.preventDefault(); const { keypair, seed } = await passwordField.get(event); - const { sign } = await getIdentityCryptoFromSeed(seed); + const { signers } = await getIdentityCryptoFromSeed(seed); const authorized = await getDidAuthorizedExtrinsic( keypair, - sign, + signers, did, endpoint, type, @@ -197,9 +196,7 @@ export function DidEndpointsSign({ identity, type, endpoint }: Props) {
{t('view_DidEndpointsSign_id')}
-
- {Did.resourceIdToChain(endpoint.id)} -
+
{serviceToChain(endpoint).id}
diff --git a/src/views/DidUpgrade/DidUpgrade.test.tsx b/src/views/DidUpgrade/DidUpgrade.test.tsx index f53817ad7..6f2a98548 100644 --- a/src/views/DidUpgrade/DidUpgrade.test.tsx +++ b/src/views/DidUpgrade/DidUpgrade.test.tsx @@ -1,4 +1,4 @@ -import { BalanceUtils } from '@kiltprotocol/sdk-js'; +import { BalanceUtils } from '@kiltprotocol/chain-helpers'; import { identitiesMock as identities, render } from '../../testing/testing'; diff --git a/src/views/DidUpgradeEuro/DidUpgradeEuro.tsx b/src/views/DidUpgradeEuro/DidUpgradeEuro.tsx index f5ca5dedf..075c8bf35 100644 --- a/src/views/DidUpgradeEuro/DidUpgradeEuro.tsx +++ b/src/views/DidUpgradeEuro/DidUpgradeEuro.tsx @@ -48,13 +48,16 @@ export function DidUpgradeEuro({ identity }: Props) { } const { seed } = await passwordField.get(event); - const { keypair, sign } = await getIdentityCryptoFromSeed(seed); + const { keypair, signers, authenticationKey, encryptionKey } = + await getIdentityCryptoFromSeed(seed); const document = getLightDidFromSeed(seed); + const { extrinsic } = await getTransaction( document, + { authenticationKey, encryptionKey }, keypair, - sign, + signers, submitter, ); diff --git a/src/views/DidUpgradeExplainer/DidUpgradeExplainer.test.tsx b/src/views/DidUpgradeExplainer/DidUpgradeExplainer.test.tsx index 663a967d7..051faa53e 100644 --- a/src/views/DidUpgradeExplainer/DidUpgradeExplainer.test.tsx +++ b/src/views/DidUpgradeExplainer/DidUpgradeExplainer.test.tsx @@ -1,4 +1,4 @@ -import { BalanceUtils } from '@kiltprotocol/sdk-js'; +import { BalanceUtils } from '@kiltprotocol/chain-helpers'; import { moreIdentitiesMock as identities, diff --git a/src/views/ImportBackupPhrase/ImportBackupPhrase.test.tsx b/src/views/ImportBackupPhrase/ImportBackupPhrase.test.tsx index 7606ad9af..42ef9e890 100644 --- a/src/views/ImportBackupPhrase/ImportBackupPhrase.test.tsx +++ b/src/views/ImportBackupPhrase/ImportBackupPhrase.test.tsx @@ -1,6 +1,9 @@ +import type { KiltKeyringPair } from '@kiltprotocol/types'; + import { userEvent } from '@testing-library/user-event'; import { mnemonicValidate } from '@polkadot/util-crypto'; -import { KiltKeyringPair, Utils } from '@kiltprotocol/sdk-js'; + +import { Crypto } from '@kiltprotocol/utils'; import { render, screen } from '../../testing/testing'; @@ -41,7 +44,7 @@ async function typeElevenWords() { describe('ImportBackupPhrase', () => { beforeEach(() => { - jest.mocked(Utils.Crypto.makeKeypairFromUri).mockReset(); + jest.mocked(Crypto.makeKeypairFromUri).mockReset(); }); it('should render for import', async () => { @@ -108,7 +111,7 @@ describe('ImportBackupPhrase', () => { it('should report mismatching backup phrase', async () => { jest.mocked(mnemonicValidate).mockReturnValue(true); - jest.mocked(Utils.Crypto.makeKeypairFromUri).mockReturnValue({ + jest.mocked(Crypto.makeKeypairFromUri).mockReturnValue({ address: 'FAIL', } as unknown as KiltKeyringPair); @@ -127,7 +130,7 @@ describe('ImportBackupPhrase', () => { it('should allow backup phrase import', async () => { jest.mocked(mnemonicValidate).mockReturnValue(true); - jest.mocked(Utils.Crypto.makeKeypairFromUri).mockReturnValue({ + jest.mocked(Crypto.makeKeypairFromUri).mockReturnValue({ address: 'PASS', } as unknown as KiltKeyringPair); @@ -149,7 +152,7 @@ describe('ImportBackupPhrase', () => { it('should allow backup phrase reset', async () => { jest.mocked(mnemonicValidate).mockReturnValue(true); - jest.mocked(Utils.Crypto.makeKeypairFromUri).mockReturnValue({ + jest.mocked(Crypto.makeKeypairFromUri).mockReturnValue({ address: '4p273cfeZ2JRz46AcJoQvTRHCH8Vaj92jts2VxepZtQwbTBB', } as unknown as KiltKeyringPair); diff --git a/src/views/ImportBackupPhrase/ImportBackupPhrase.tsx b/src/views/ImportBackupPhrase/ImportBackupPhrase.tsx index f4ff0ffc3..a1f4c5890 100644 --- a/src/views/ImportBackupPhrase/ImportBackupPhrase.tsx +++ b/src/views/ImportBackupPhrase/ImportBackupPhrase.tsx @@ -9,7 +9,7 @@ import { } from 'react'; import DEFAULT_WORDLIST from '@polkadot/util-crypto/mnemonic/wordlists/en'; import { mnemonicValidate } from '@polkadot/util-crypto'; -import { Utils } from '@kiltprotocol/sdk-js'; +import { Crypto } from '@kiltprotocol/utils'; import browser from 'webextension-polyfill'; import * as styles from './ImportBackupPhrase.module.css'; @@ -35,7 +35,7 @@ function isInvalid( return t('view_ImportBackupPhrase_error_invalid_backup_phrase'); } - const { address } = Utils.Crypto.makeKeypairFromUri(mnemonic, 'sr25519'); + const { address } = Crypto.makeKeypairFromUri(mnemonic, 'sr25519'); const noNeedToCompare = !expectedAddress; const matchesExpectations = expectedAddress === address; diff --git a/src/views/ImportCredentials/ImportCredentials.tsx b/src/views/ImportCredentials/ImportCredentials.tsx index 3ffc4897a..8e27de512 100644 --- a/src/views/ImportCredentials/ImportCredentials.tsx +++ b/src/views/ImportCredentials/ImportCredentials.tsx @@ -1,6 +1,9 @@ import { MouseEvent, useCallback, useMemo, useState } from 'react'; import { filter, reject, sortBy } from 'lodash-es'; -import { Credential, Did } from '@kiltprotocol/sdk-js'; + +import { isSameSubject } from '@kiltprotocol/did'; + +import { Credential } from '@kiltprotocol/legacy-credentials'; import { saveCredential, @@ -77,8 +80,7 @@ export function ImportCredentials() { } const knownIdentity = identitiesList.find( - ({ did }) => - did && Did.isSameSubject(did, credential.claim.owner), + ({ did }) => did && isSameSubject(did, credential.claim.owner), ); if (!knownIdentity) { throw new Error('orphaned'); diff --git a/src/views/ImportCredentials/types.ts b/src/views/ImportCredentials/types.ts index 251336d37..545550a7d 100644 --- a/src/views/ImportCredentials/types.ts +++ b/src/views/ImportCredentials/types.ts @@ -1,4 +1,4 @@ -import { KiltAddress } from '@kiltprotocol/sdk-js'; +import type { KiltAddress } from '@kiltprotocol/types'; export interface Import { fileName: string; diff --git a/src/views/ReviewTransaction/ReviewTransaction.stories.tsx b/src/views/ReviewTransaction/ReviewTransaction.stories.tsx index a46838c8e..90f7a53b3 100644 --- a/src/views/ReviewTransaction/ReviewTransaction.stories.tsx +++ b/src/views/ReviewTransaction/ReviewTransaction.stories.tsx @@ -1,6 +1,6 @@ import { Meta } from '@storybook/react'; import { MemoryRouter, Route } from 'react-router-dom'; -import { BalanceUtils } from '@kiltprotocol/sdk-js'; +import { BalanceUtils } from '@kiltprotocol/chain-helpers'; import { identitiesMock as identities } from '../../utilities/identities/IdentitiesProvider.mock'; import { paths } from '../paths'; diff --git a/src/views/ReviewTransaction/ReviewTransaction.test.tsx b/src/views/ReviewTransaction/ReviewTransaction.test.tsx index 3470ee682..41f8a3917 100644 --- a/src/views/ReviewTransaction/ReviewTransaction.test.tsx +++ b/src/views/ReviewTransaction/ReviewTransaction.test.tsx @@ -1,4 +1,4 @@ -import { BalanceUtils } from '@kiltprotocol/sdk-js'; +import { BalanceUtils } from '@kiltprotocol/chain-helpers'; import { identitiesMock as identities, render } from '../../testing/testing'; import { waitForGetPassword } from '../../channels/SavedPasswordsChannels/SavedPasswordsChannels.mock'; diff --git a/src/views/SaveCredential/SaveCredential.tsx b/src/views/SaveCredential/SaveCredential.tsx index 52968f99d..853b2fadf 100644 --- a/src/views/SaveCredential/SaveCredential.tsx +++ b/src/views/SaveCredential/SaveCredential.tsx @@ -1,6 +1,7 @@ +import type { IAttestation } from '@kiltprotocol/types'; + import { useCallback, useEffect } from 'react'; import browser from 'webextension-polyfill'; -import { IAttestation } from '@kiltprotocol/sdk-js'; import * as styles from './SaveCredential.module.css'; diff --git a/src/views/SendToken/SendToken.test.tsx b/src/views/SendToken/SendToken.test.tsx index 7d208f1ef..58e9af68a 100644 --- a/src/views/SendToken/SendToken.test.tsx +++ b/src/views/SendToken/SendToken.test.tsx @@ -1,11 +1,9 @@ import { act } from '@testing-library/react'; import { userEvent } from '@testing-library/user-event'; -import { - BalanceUtils, - ConfigService, - connect, - Utils, -} from '@kiltprotocol/sdk-js'; + +import { ConfigService, connect } from '@kiltprotocol/sdk-js'; +import { BalanceUtils } from '@kiltprotocol/chain-helpers'; +import { DataUtils } from '@kiltprotocol/utils'; import { NEW } from '../../utilities/identities/identities'; import { @@ -34,7 +32,7 @@ const identity = identities['4tDjyLy2gESkLzvaLnpbn7N61VgnwAhqnTHsPPFAwaZjGwP1']; describe('SendToken', () => { beforeEach(() => { - jest.mocked(Utils.DataUtils.isKiltAddress).mockReturnValue(true); + jest.mocked(DataUtils.isKiltAddress).mockReturnValue(true); Object.defineProperty(window.navigator, 'onLine', { value: true, writable: true, @@ -198,7 +196,7 @@ describe('SendToken', () => { }); it('should report an invalid recipient', async () => { - jest.mocked(Utils.DataUtils.isKiltAddress).mockReturnValue(false); + jest.mocked(DataUtils.isKiltAddress).mockReturnValue(false); render(); diff --git a/src/views/SendToken/SendToken.tsx b/src/views/SendToken/SendToken.tsx index 17a5c4619..70f374e8f 100644 --- a/src/views/SendToken/SendToken.tsx +++ b/src/views/SendToken/SendToken.tsx @@ -12,7 +12,10 @@ import { import BN from 'bn.js'; import browser from 'webextension-polyfill'; import { find } from 'lodash-es'; -import { BalanceUtils, ConfigService, Utils } from '@kiltprotocol/sdk-js'; + +import { ConfigService } from '@kiltprotocol/sdk-js'; +import { BalanceUtils } from '@kiltprotocol/chain-helpers'; +import { DataUtils } from '@kiltprotocol/utils'; import * as styles from './SendToken.module.css'; @@ -153,7 +156,7 @@ function getAddressError(address: string, identity: Identity): string | null { return t('view_SendToken_recipient_same'); } - if (!Utils.DataUtils.isKiltAddress(address)) { + if (!DataUtils.isKiltAddress(address)) { return t('view_SendToken_recipient_invalid'); } @@ -203,7 +206,7 @@ export function SendToken({ identity, onSuccess }: Props) { const recipientError = recipient && getAddressError(recipient, identity); const recipientBalance = useAddressBalance( - Utils.DataUtils.isKiltAddress(recipient) ? recipient : '', + DataUtils.isKiltAddress(recipient) ? recipient : '', ); const recipientBalanceZero = recipientBalance?.total?.isZero?.(); @@ -270,7 +273,7 @@ export function SendToken({ identity, onSuccess }: Props) { if (isNew(identity)) { return; } - if (recipient && !Utils.DataUtils.isKiltAddress(recipient)) { + if (recipient && !DataUtils.isKiltAddress(recipient)) { return; } const realFee = await getFee({ diff --git a/src/views/SendToken/getFee.ts b/src/views/SendToken/getFee.ts index 500a8551b..905035c23 100644 --- a/src/views/SendToken/getFee.ts +++ b/src/views/SendToken/getFee.ts @@ -21,7 +21,7 @@ export async function getFee(input: FeeInput): Promise { ); // Including any signature increases the transaction size and the fee - const { keypair } = makeFakeIdentityCrypto(); + const { keypair } = await makeFakeIdentityCrypto(); const signedTx = await tx.signAsync(keypair, input); return (await signedTx.paymentInfo(keypair)).partialFee; } diff --git a/src/views/ShareCredentialSelect/ShareCredentialSelect.tsx b/src/views/ShareCredentialSelect/ShareCredentialSelect.tsx index ca513fdf7..f641b96eb 100644 --- a/src/views/ShareCredentialSelect/ShareCredentialSelect.tsx +++ b/src/views/ShareCredentialSelect/ShareCredentialSelect.tsx @@ -1,7 +1,10 @@ +import type { Did } from '@kiltprotocol/types'; + import { FormEvent, RefObject, useCallback, useRef } from 'react'; import browser from 'webextension-polyfill'; import { reject, sortBy } from 'lodash-es'; -import { Did, DidUri } from '@kiltprotocol/sdk-js'; + +import { isSameSubject } from '@kiltprotocol/did'; import { useHistory } from 'react-router'; @@ -73,7 +76,7 @@ function MatchingIdentityCredentials({ }) { const credentials = allCredentials.filter( ({ credential }) => - identity.did && Did.isSameSubject(credential.claim.owner, identity.did), + identity.did && isSameSubject(credential.claim.owner, identity.did), ); return ( @@ -122,15 +125,13 @@ export function ShareCredentialSelect({ onCancel, onSelect, selected }: Props) { const { credentialRequest } = data; const { cTypes } = credentialRequest; const owner = - 'owner' in credentialRequest - ? (credentialRequest.owner as DidUri) - : undefined; + 'owner' in credentialRequest ? (credentialRequest.owner as Did) : undefined; const cTypeHashes = cTypes.map(({ cTypeHash }) => cTypeHash); const matchingCredentials = credentials?.filter( ({ credential: { claim } }) => cTypeHashes.includes(claim.cTypeHash) && - (owner ? Did.isSameSubject(claim.owner, owner) : true), + (owner ? isSameSubject(claim.owner, owner) : true), ); const displayedCredentials = reject(matchingCredentials, { diff --git a/src/views/ShareCredentialSign/ShareCredentialSign.tsx b/src/views/ShareCredentialSign/ShareCredentialSign.tsx index 2fadb8715..922def0d7 100644 --- a/src/views/ShareCredentialSign/ShareCredentialSign.tsx +++ b/src/views/ShareCredentialSign/ShareCredentialSign.tsx @@ -1,12 +1,12 @@ +import type { ICredentialPresentation } from '@kiltprotocol/types'; +import type { ISubmitCredential } from '@kiltprotocol/extension-api/types'; + import browser from 'webextension-polyfill'; import { FormEvent, useCallback, useState } from 'react'; -import { - Attestation, - ConfigService, - Credential, - ICredentialPresentation, - ISubmitCredential, -} from '@kiltprotocol/sdk-js'; + +import { ConfigService } from '@kiltprotocol/sdk-js'; +import { Attestation } from '@kiltprotocol/credentials'; +import { Credential } from '@kiltprotocol/legacy-credentials'; import * as styles from './ShareCredentialSign.module.css'; @@ -77,12 +77,12 @@ export function ShareCredentialSign({ selected, onCancel, popupData }: Props) { event.preventDefault(); const { seed } = await passwordField.get(event); - const { encrypt, sign } = await getIdentityCryptoFromSeed(seed); + const { encrypt, signers } = await getIdentityCryptoFromSeed(seed); const presentation = await Credential.createPresentation({ credential: sporranCredential.credential, selectedAttributes: sharedContents, - signCallback: sign, + signers, challenge, }); diff --git a/src/views/SignDApp/SignDApp.tsx b/src/views/SignDApp/SignDApp.tsx index 9f13bac8b..133855af6 100644 --- a/src/views/SignDApp/SignDApp.tsx +++ b/src/views/SignDApp/SignDApp.tsx @@ -1,6 +1,7 @@ import { FormEvent, Fragment, useCallback } from 'react'; import browser from 'webextension-polyfill'; -import { Utils } from '@kiltprotocol/sdk-js'; + +import { Crypto, ss58Format } from '@kiltprotocol/utils'; import * as styles from './SignDApp.module.css'; @@ -27,10 +28,7 @@ export function SignDApp() { const passwordField = usePasswordField(); const identities = useIdentities().data; - const kiltAddress = Utils.Crypto.encodeAddress( - input.address as string, - Utils.ss58Format, - ); + const kiltAddress = Crypto.encodeAddress(input.address as string, ss58Format); const identity = identities && identities[kiltAddress]; const handleSubmit = useCallback( diff --git a/src/views/SignDid/SignDid.tsx b/src/views/SignDid/SignDid.tsx index 3ba20230e..5da2da2f3 100644 --- a/src/views/SignDid/SignDid.tsx +++ b/src/views/SignDid/SignDid.tsx @@ -1,15 +1,14 @@ +import type { DidUrl, ICredential } from '@kiltprotocol/types'; + import { FormEvent, useCallback, useRef } from 'react'; import browser from 'webextension-polyfill'; -import { - Credential, - DidResourceUri, - ICredential, - Utils, -} from '@kiltprotocol/sdk-js'; - import { without } from 'lodash-es'; +import { Crypto } from '@kiltprotocol/utils'; + +import { Credential } from '@kiltprotocol/legacy-credentials'; + import * as styles from './SignDid.module.css'; import { Identity } from '../../utilities/identities/types'; @@ -52,11 +51,9 @@ export function SignDid({ identity, popupData, onCancel, credentials }: Props) { const { didDocument, authenticationKey } = await getIdentityCryptoFromSeed(seed); - const signature = Utils.Crypto.u8aToHex( - authenticationKey.sign(plaintext), - ); + const signature = Crypto.u8aToHex(authenticationKey.sign(plaintext)); const didKeyUri = - `${didDocument.uri}${didDocument.authentication[0].id}` as DidResourceUri; + `${didDocument.id}${didDocument.authentication?.[0]}` as DidUrl; if (!credentials) { await backgroundSignDidChannel.return({ signature, didKeyUri }); diff --git a/src/views/SignDidExtrinsic/SignDidExtrinsic.tsx b/src/views/SignDidExtrinsic/SignDidExtrinsic.tsx index af08da273..a41aac3b6 100644 --- a/src/views/SignDidExtrinsic/SignDidExtrinsic.tsx +++ b/src/views/SignDidExtrinsic/SignDidExtrinsic.tsx @@ -1,21 +1,27 @@ +import type { DidUrl, Service } from '@kiltprotocol/types'; + import { FormEvent, Fragment, PropsWithChildren, useCallback } from 'react'; import browser from 'webextension-polyfill'; -import { - ConfigService, - Did, - DidResourceUri, - DidServiceEndpoint, - SignRequestData, -} from '@kiltprotocol/sdk-js'; import { GenericExtrinsic } from '@polkadot/types'; +import { ConfigService } from '@kiltprotocol/sdk-js'; +import { + authorizeBatch, + authorizeTx, + didKeyToVerificationMethod, + getVerificationRelationshipForTx, + publicKeyToChain, + serviceToChain, +} from '@kiltprotocol/did'; + +import { Signers } from '@kiltprotocol/utils'; + import * as styles from './SignDidExtrinsic.module.css'; import { Identity } from '../../utilities/identities/types'; import { usePopupData } from '../../utilities/popups/usePopupData'; import { deriveAttestationKeyFromSeed, - deriveAuthenticationKey, getIdentityCryptoFromSeed, } from '../../utilities/identities/identities'; import { getFullDidDocument, isFullDid } from '../../utilities/did/did'; @@ -40,7 +46,7 @@ import { getRemoveServiceEndpoint, } from './didExtrinsic'; -function Endpoint({ endpoint }: { endpoint: DidServiceEndpoint }) { +function Endpoint({ endpoint }: { endpoint: Service }) { const t = browser.i18n.getMessage; return ( @@ -69,9 +75,7 @@ function Endpoint({ endpoint }: { endpoint: DidServiceEndpoint }) {
{t('view_SignDidExtrinsic_endpoint_id')}
-
- {Did.resourceIdToChain(endpoint.id)} -
+
{serviceToChain(endpoint).id}
); @@ -250,7 +254,7 @@ export function SignDidExtrinsic({ identity }: Props) { const { seed } = await passwordField.get(event); - const keyRelationship = Did.getKeyRelationshipForTx(extrinsic); + const keyRelationship = getVerificationRelationshipForTx(extrinsic); if (!keyRelationship) { throw new Error('No key relationship found'); @@ -258,37 +262,48 @@ export function SignDidExtrinsic({ identity }: Props) { if (keyRelationship === 'assertionMethod') { const api = ConfigService.get('api'); - const attestationKey = deriveAttestationKeyFromSeed(seed); + const keypair = deriveAttestationKeyFromSeed(seed); + + const { type, publicKey } = keypair; + + const attestationKey = didKeyToVerificationMethod(did, '#assert', { + keyType: type, + publicKey, + }); + + const assertionDidDocument = { ...fullDidDocument }; + + // DID will always have at least 1 verification method, unless deactivated + assertionDidDocument.verificationMethod?.push(attestationKey); + + assertionDidDocument.assertionMethod = [attestationKey.id]; + + const assertionMethodSigners = await Signers.getSignersForKeypair({ + keypair, + id: `${assertionDidDocument.id}${assertionDidDocument.assertionMethod[0]}`, + }); - async function sign({ data, keyRelationship }: SignRequestData) { - const signingKey = - keyRelationship === 'assertionMethod' - ? attestationKey - : deriveAuthenticationKey(seed); - const signature = signingKey.sign(data, { withType: false }); - const keyType = signingKey.type; + const { signers: authSigners } = await getIdentityCryptoFromSeed(seed); - return { signature, keyType }; - } + const signers = [...assertionMethodSigners, ...authSigners]; - const authorized = await Did.authorizeBatch({ + const authorized = await authorizeBatch({ batchFunction: api.tx.utility.batchAll, - did: fullDidDocument.uri, + did: assertionDidDocument, extrinsics: [ - api.tx.did.setAttestationKey(Did.publicKeyToChain(attestationKey)), + api.tx.did.setAttestationKey(publicKeyToChain(keypair)), extrinsic, api.tx.did.removeAttestationKey(), ], - sign, + signers, submitter, }); const signed = authorized.toHex(); // Assertion key will not exist in the DID document, so we return authentication key instead - const didKey = fullDidDocument.authentication[0]; - const didKeyUri = - `${fullDidDocument.uri}${didKey.id}` as DidResourceUri; + const didKey = assertionDidDocument.authentication?.[0]; + const didKeyUri = `${assertionDidDocument.id}${didKey}` as DidUrl; await backgroundSignDidExtrinsicChannel.return({ signed, didKeyUri }); @@ -300,14 +315,14 @@ export function SignDidExtrinsic({ identity }: Props) { if (!didKey) { throw new Error('No extrinsic signing key stored'); } - const didKeyUri = `${fullDidDocument.uri}${didKey.id}` as DidResourceUri; + const didKeyUri = `${fullDidDocument.id}${didKey}` as DidUrl; - const { sign } = await getIdentityCryptoFromSeed(seed); + const { signers } = await getIdentityCryptoFromSeed(seed); - const authorized = await Did.authorizeTx( - fullDidDocument.uri, + const authorized = await authorizeTx( + fullDidDocument.id, extrinsic, - sign, + signers, submitter, ); const signed = authorized.toHex(); diff --git a/src/views/SignDidExtrinsic/didExtrinsic.ts b/src/views/SignDidExtrinsic/didExtrinsic.ts index 08146ff99..41f5c1d75 100644 --- a/src/views/SignDidExtrinsic/didExtrinsic.ts +++ b/src/views/SignDidExtrinsic/didExtrinsic.ts @@ -1,14 +1,14 @@ +import type { Did, Service, UriFragment } from '@kiltprotocol/types'; + import browser from 'webextension-polyfill'; -import { - ConfigService, - Did, - DidServiceEndpoint, - DidUri, - UriFragment, -} from '@kiltprotocol/sdk-js'; + +import { ConfigService } from '@kiltprotocol/sdk-js'; +import { linkedInfoFromChain, toChain } from '@kiltprotocol/did'; import { GenericExtrinsic } from '@polkadot/types'; +import { find } from 'lodash-es'; + import { SignDidExtrinsicOriginInput } from '../../channels/SignDidExtrinsicChannels/types'; import { getExtrinsicCallEntry, @@ -50,9 +50,7 @@ export function getExtrinsicValues( ]; } -export function getAddServiceEndpoint( - extrinsic: GenericExtrinsic, -): DidServiceEndpoint { +export function getAddServiceEndpoint(extrinsic: GenericExtrinsic): Service { const human = extrinsic.toHuman() as { method: Parameters[0]; }; @@ -72,9 +70,9 @@ export function getAddServiceEndpoint( export async function getRemoveServiceEndpoint( extrinsic: GenericExtrinsic, - did: DidUri | undefined, + did: Did | undefined, error: ReturnType, -): Promise { +): Promise { error.off(); const human = extrinsic.toHuman() as { method: Parameters[0]; @@ -89,14 +87,15 @@ export async function getRemoveServiceEndpoint( try { const api = ConfigService.get('api'); - const { document } = await Did.linkedInfoFromChain( - await api.call.did.query(Did.toChain(did)), - ); - const service = Did.getService(document, id); - if (!service) { + const { + document: { service }, + } = linkedInfoFromChain(await api.call.did.query(toChain(did))); + + const foundService = find(service, { id }); + if (!foundService) { throw new Error('DID service not found'); } - return service; + return foundService; } catch { error.on(); return fallback; diff --git a/src/views/SignDidStart/SignDidStart.test.tsx b/src/views/SignDidStart/SignDidStart.test.tsx index d7fa95c10..08b995a6a 100644 --- a/src/views/SignDidStart/SignDidStart.test.tsx +++ b/src/views/SignDidStart/SignDidStart.test.tsx @@ -1,4 +1,4 @@ -import { Did } from '@kiltprotocol/sdk-js'; +import { isSameSubject } from '@kiltprotocol/did'; import { SignDidOriginInput } from '../../channels/SignDidChannels/types'; import { identitiesMock as identities, render } from '../../testing/testing'; @@ -64,7 +64,7 @@ describe('SignDidStart', () => { it('should render full DID with no credentials', () => { mockIsFullDid(true); - jest.mocked(Did.isSameSubject).mockReturnValue(false); + jest.mocked(isSameSubject).mockReturnValue(false); const { container } = render( diff --git a/src/views/SignQuote/SignQuote.test.tsx b/src/views/SignQuote/SignQuote.test.tsx index 23482de56..04d627efd 100644 --- a/src/views/SignQuote/SignQuote.test.tsx +++ b/src/views/SignQuote/SignQuote.test.tsx @@ -1,4 +1,4 @@ -import { CType } from '@kiltprotocol/sdk-js'; +import { CType } from '@kiltprotocol/credentials'; import { moreIdentitiesMock as identities, diff --git a/src/views/SignQuote/SignQuote.tsx b/src/views/SignQuote/SignQuote.tsx index 9812c0674..8ecebceaa 100644 --- a/src/views/SignQuote/SignQuote.tsx +++ b/src/views/SignQuote/SignQuote.tsx @@ -1,18 +1,22 @@ -import { FormEvent, Fragment, useCallback } from 'react'; -import browser from 'webextension-polyfill'; -import { filter } from 'lodash-es'; -import { - BalanceUtils, - Credential, - CType, - DidUri, +import type { + Did, IClaim, ICredential, + SignerInterface, +} from '@kiltprotocol/types'; +import type { IRequestAttestation, IRequestAttestationContent, ITerms, - SignCallback, -} from '@kiltprotocol/sdk-js'; +} from '@kiltprotocol/extension-api/types'; + +import { FormEvent, Fragment, useCallback } from 'react'; +import browser from 'webextension-polyfill'; +import { filter } from 'lodash-es'; + +import { Credential } from '@kiltprotocol/legacy-credentials'; +import { CType } from '@kiltprotocol/credentials'; +import { BalanceUtils } from '@kiltprotocol/chain-helpers'; import * as styles from './SignQuote.module.css'; @@ -40,13 +44,13 @@ import { useAsyncValue } from '../../utilities/useAsyncValue/useAsyncValue'; export type Terms = ITerms & { claim: IClaim; attesterName: string; - attesterDid: DidUri; + attesterDid: Did; specVersion: '1.0' | '3.0'; }; async function getCompatibleContent( credential: ICredential, - signCallback: SignCallback, + signers: SignerInterface[], specVersion: Terms['specVersion'], ): Promise { if (specVersion !== '1.0') { @@ -56,7 +60,7 @@ async function getCompatibleContent( // DApps using legacy spec versions will expect a different interface for the message including the claimerSignature property const requestForAttestation = await Credential.createPresentation({ credential, - signCallback, + signers, }); return { requestForAttestation, @@ -111,11 +115,11 @@ export function SignQuote({ identity }: Props) { ); const { seed } = await passwordField.get(event); - const { sign, encrypt, didDocument } = + const { signers, encrypt, didDocument } = await getIdentityCryptoFromSeed(seed); // if a legacy attester generated a claim with a temporary DID, we need to replace it with the real one - const identityClaim = { ...claim, owner: didDocument.uri }; + const identityClaim = { ...claim, owner: didDocument.id }; const credential = Credential.fromClaim(identityClaim, { legitimations, @@ -135,7 +139,7 @@ export function SignQuote({ identity }: Props) { }); const messageBody: IRequestAttestation = { - content: await getCompatibleContent(credential, sign, specVersion), + content: await getCompatibleContent(credential, signers, specVersion), type: 'request-attestation', }; diff --git a/src/views/SignRawDApp/SignRawDApp.tsx b/src/views/SignRawDApp/SignRawDApp.tsx index 6a9b7e0f0..b48ab33c6 100644 --- a/src/views/SignRawDApp/SignRawDApp.tsx +++ b/src/views/SignRawDApp/SignRawDApp.tsx @@ -1,7 +1,7 @@ import { FormEvent, useCallback, useRef } from 'react'; import browser from 'webextension-polyfill'; import { u8aToHex } from '@polkadot/util'; -import { Utils } from '@kiltprotocol/sdk-js'; +import { Crypto, ss58Format } from '@kiltprotocol/utils'; import * as styles from './SignRawDApp.module.css'; @@ -26,9 +26,9 @@ export function SignRawDApp() { const passwordField = usePasswordField(); const identities = useIdentities().data; - const kiltAddress = Utils.Crypto.encodeAddress( + const kiltAddress = Crypto.encodeAddress( values.address as string, - Utils.ss58Format, + ss58Format, ); const identity = identities && identities[kiltAddress]; diff --git a/src/views/W3NCreateChoose/W3NCreateChoose.test.tsx b/src/views/W3NCreateChoose/W3NCreateChoose.test.tsx index 141ef81df..7a32f449e 100644 --- a/src/views/W3NCreateChoose/W3NCreateChoose.test.tsx +++ b/src/views/W3NCreateChoose/W3NCreateChoose.test.tsx @@ -1,5 +1,5 @@ import { MemoryRouter, Route } from 'react-router-dom'; -import { BalanceUtils } from '@kiltprotocol/sdk-js'; +import { BalanceUtils } from '@kiltprotocol/chain-helpers'; import { render } from '../../testing/testing'; diff --git a/src/views/W3NCreateSign/W3NCreateSign.test.tsx b/src/views/W3NCreateSign/W3NCreateSign.test.tsx index 4e320a0a5..c511bfe48 100644 --- a/src/views/W3NCreateSign/W3NCreateSign.test.tsx +++ b/src/views/W3NCreateSign/W3NCreateSign.test.tsx @@ -1,4 +1,6 @@ -import { BalanceUtils, DidDocument } from '@kiltprotocol/sdk-js'; +import type { DidDocument } from '@kiltprotocol/types'; + +import { BalanceUtils } from '@kiltprotocol/chain-helpers'; import { MemoryRouter, Route } from 'react-router-dom'; diff --git a/src/views/W3NCreateSign/W3NCreateSign.tsx b/src/views/W3NCreateSign/W3NCreateSign.tsx index fdcca6944..79b514c05 100644 --- a/src/views/W3NCreateSign/W3NCreateSign.tsx +++ b/src/views/W3NCreateSign/W3NCreateSign.tsx @@ -2,7 +2,9 @@ import { FormEvent, useCallback, useRef } from 'react'; import { useHistory, useParams } from 'react-router-dom'; import browser from 'webextension-polyfill'; -import { ConfigService, Did } from '@kiltprotocol/sdk-js'; +import { ConfigService } from '@kiltprotocol/sdk-js'; + +import { authorizeTx } from '@kiltprotocol/did'; import * as styles from './W3NCreateSign.module.css'; @@ -54,13 +56,13 @@ export function W3NCreateSign({ identity }: Props) { event.preventDefault(); const { keypair, seed } = await passwordField.get(event); - const { sign } = await getIdentityCryptoFromSeed(seed); + const { signers } = await getIdentityCryptoFromSeed(seed); const api = ConfigService.get('api'); - const authorized = await Did.authorizeTx( + const authorized = await authorizeTx( did, api.tx.web3Names.claim(web3name), - sign, + signers, keypair.address, ); await submit(keypair, authorized); diff --git a/src/views/W3NCreateSignEuro/W3NCreateSignEuro.tsx b/src/views/W3NCreateSignEuro/W3NCreateSignEuro.tsx index a5da2d228..bee094758 100644 --- a/src/views/W3NCreateSignEuro/W3NCreateSignEuro.tsx +++ b/src/views/W3NCreateSignEuro/W3NCreateSignEuro.tsx @@ -2,7 +2,8 @@ import { FormEvent, useCallback } from 'react'; import { useHistory, useParams } from 'react-router-dom'; import browser from 'webextension-polyfill'; -import { ConfigService, Did } from '@kiltprotocol/sdk-js'; +import { ConfigService } from '@kiltprotocol/sdk-js'; +import { authorizeTx } from '@kiltprotocol/did'; import * as styles from './W3NCreateSignEuro.module.css'; @@ -55,13 +56,13 @@ export function W3NCreateSignEuro({ identity }: Props) { } const { seed } = await passwordField.get(event); - const { sign } = await getIdentityCryptoFromSeed(seed); + const { signers } = await getIdentityCryptoFromSeed(seed); const api = ConfigService.get('api'); - const authorized = await Did.authorizeTx( + const authorized = await authorizeTx( did, api.tx.web3Names.claim(web3name), - sign, + signers, submitter, ); diff --git a/src/views/W3NRemove/W3NRemove.test.tsx b/src/views/W3NRemove/W3NRemove.test.tsx index c19156651..a8d611e82 100644 --- a/src/views/W3NRemove/W3NRemove.test.tsx +++ b/src/views/W3NRemove/W3NRemove.test.tsx @@ -1,4 +1,6 @@ -import { BalanceUtils, DidDocument } from '@kiltprotocol/sdk-js'; +import type { DidDocument } from '@kiltprotocol/types'; + +import { BalanceUtils } from '@kiltprotocol/chain-helpers'; import { identitiesMock, render } from '../../testing/testing'; import { waitForGetPassword } from '../../channels/SavedPasswordsChannels/SavedPasswordsChannels.mock'; diff --git a/src/views/W3NRemove/W3NRemove.tsx b/src/views/W3NRemove/W3NRemove.tsx index 4b70a288e..33aa11f35 100644 --- a/src/views/W3NRemove/W3NRemove.tsx +++ b/src/views/W3NRemove/W3NRemove.tsx @@ -1,8 +1,11 @@ +import type { DidDocument } from '@kiltprotocol/types'; + import { FormEvent, Fragment, useCallback } from 'react'; import { generatePath, Link } from 'react-router-dom'; import browser from 'webextension-polyfill'; -import { ConfigService, Did, DidDocument } from '@kiltprotocol/sdk-js'; +import { ConfigService } from '@kiltprotocol/sdk-js'; +import { authorizeTx } from '@kiltprotocol/did'; import * as styles from './W3NRemove.module.css'; @@ -38,14 +41,14 @@ async function getFee(fullDid?: DidDocument) { return undefined; } - const { address, keypair, sign } = makeFakeIdentityCrypto(); + const { address, keypair, signers } = await makeFakeIdentityCrypto(); const api = ConfigService.get('api'); - const authorized = await Did.authorizeTx( - fullDid.uri, + const authorized = await authorizeTx( + fullDid.id, api.tx.web3Names.releaseByOwner(), - sign, + signers, address, ); @@ -84,14 +87,14 @@ export function W3NRemove({ identity }: Props) { } const { keypair, seed } = await passwordField.get(event); - const { sign } = await getIdentityCryptoFromSeed(seed); + const { signers } = await getIdentityCryptoFromSeed(seed); const api = ConfigService.get('api'); - const authorized = await Did.authorizeTx( - fullDidDocument.uri, + const authorized = await authorizeTx( + fullDidDocument.id, api.tx.web3Names.releaseByOwner(), - sign, + signers, keypair.address, ); await submit(keypair, authorized); diff --git a/yarn.lock b/yarn.lock index 0299452a8..bb9628078 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1618,6 +1618,20 @@ __metadata: languageName: node linkType: hard +"@digitalbazaar/multikey-context@npm:^1.0.0": + version: 1.0.0 + resolution: "@digitalbazaar/multikey-context@npm:1.0.0" + checksum: 8f87cfc4a5081d583a97da53bb8d099771523c08ec3bdce944937d2d8e2eb98db52d36e13964f08debdde2950a87399c61b5acef7888d712c7c9d76dda5d7c6d + languageName: node + linkType: hard + +"@digitalbazaar/security-context@npm:^1.0.0": + version: 1.0.1 + resolution: "@digitalbazaar/security-context@npm:1.0.1" + checksum: 6d1444002958454be5dd70cc6ba4d0df952f90162756d6320d88501ff44fc7d48dcb2aa3452b77e8941a9da4e4c7d050d3510827db93637ff469b92391c63324 + languageName: node + linkType: hard + "@discoveryjs/json-ext@npm:^0.5.0, @discoveryjs/json-ext@npm:^0.5.3": version: 0.5.7 resolution: "@discoveryjs/json-ext@npm:0.5.7" @@ -2247,141 +2261,210 @@ __metadata: languageName: node linkType: hard -"@kiltprotocol/asset-did@npm:0.34.0": - version: 0.34.0 - resolution: "@kiltprotocol/asset-did@npm:0.34.0" +"@kiltprotocol/augment-api@npm:0.100.0-alpha.1": + version: 0.100.0-alpha.1 + resolution: "@kiltprotocol/augment-api@npm:0.100.0-alpha.1" dependencies: - "@kiltprotocol/types": "npm:0.34.0" - "@kiltprotocol/utils": "npm:0.34.0" - checksum: bb185921bf42eba76f7122f4539ebffd9832a94a402bb6bf6827c43a248c65e5f791003a550fc1114111948c4891fa3483bf9dd66c78159f185a80e21a328c7a + "@kiltprotocol/type-definitions": "npm:0.100.0-alpha.1" + "@polkadot/api-base": "npm:^10.0.0" + "@polkadot/rpc-core": "npm:^10.0.0" + "@polkadot/types": "npm:^10.0.0" + "@polkadot/types-codec": "npm:^10.0.0" + checksum: d1b405c08c7edb309d3e9a4a0f76c0f561fc472eeae99fdfaac4be6bd9bb4280fa66f412b8234fe712a9f0880fa42539e1a15b2a04e0c35e549c5381d7148d73 languageName: node linkType: hard -"@kiltprotocol/augment-api@npm:0.34.0": - version: 0.34.0 - resolution: "@kiltprotocol/augment-api@npm:0.34.0" +"@kiltprotocol/chain-helpers@npm:0.100.0-alpha.1": + version: 0.100.0-alpha.1 + resolution: "@kiltprotocol/chain-helpers@npm:0.100.0-alpha.1" dependencies: - "@kiltprotocol/type-definitions": "npm:0.34.0" - checksum: af13cabff015a657e2169737c9078625fa274e650d67136707494711834e0bc23c62d2dc9123e8ecc0166e8b811411efd88bcbf92a1900540df89d8f2b85a046 - languageName: node - linkType: hard - -"@kiltprotocol/chain-helpers@npm:0.34.0": - version: 0.34.0 - resolution: "@kiltprotocol/chain-helpers@npm:0.34.0" - dependencies: - "@kiltprotocol/config": "npm:0.34.0" - "@kiltprotocol/types": "npm:0.34.0" - "@kiltprotocol/utils": "npm:0.34.0" + "@kiltprotocol/config": "npm:0.100.0-alpha.1" + "@kiltprotocol/type-definitions": "npm:0.100.0-alpha.1" + "@kiltprotocol/types": "npm:0.100.0-alpha.1" + "@kiltprotocol/utils": "npm:0.100.0-alpha.1" "@polkadot/api": "npm:^10.4.0" + "@polkadot/api-derive": "npm:^10.0.0" "@polkadot/types": "npm:^10.4.0" - checksum: 02cfff57101e2fedd5a531de44adea80912c82fc4284d321d893f2e946d0b2dc532cadfe3e31171ff7ceb30483868af7f123be90c4f5a4fec02d2c0b917718a3 + "@polkadot/util": "npm:^12.0.0" + "@polkadot/util-crypto": "npm:^12.0.0" + checksum: e4abcb5154802de1ab483a15de0056ea5fb67126563a0c6af5fb6a4b7a822f43d5e6d52d303e05fb78fa711d977d23a12ed7b57ad95ae6e8f4507b4d7d209884 languageName: node linkType: hard -"@kiltprotocol/config@npm:0.34.0": - version: 0.34.0 - resolution: "@kiltprotocol/config@npm:0.34.0" +"@kiltprotocol/config@npm:0.100.0-alpha.1": + version: 0.100.0-alpha.1 + resolution: "@kiltprotocol/config@npm:0.100.0-alpha.1" dependencies: - "@kiltprotocol/types": "npm:0.34.0" + "@kiltprotocol/types": "npm:0.100.0-alpha.1" "@polkadot/api": "npm:^10.4.0" typescript-logging: "npm:^1.0.0" - checksum: a677341348be1a8f976de092a917da697c83050f8db42cd29cf8fb99198bd22e6e465c8e483726700aa48639c088bbf1a8af6814c858e620c298bbf81899e9a9 + checksum: b922f3bcfa886daf382029085acd901c7a6dd30245e17e48ab4a678ffb0d2c9dbbfc688a7cd0f3af2b0eb962e1973c6ed248688c7231c97a2410ecce910bd5ea languageName: node linkType: hard -"@kiltprotocol/core@npm:0.34.0": - version: 0.34.0 - resolution: "@kiltprotocol/core@npm:0.34.0" +"@kiltprotocol/credentials@npm:0.100.0-alpha.1, @kiltprotocol/credentials@npm:^0.100.0-alpha.1": + version: 0.100.0-alpha.1 + resolution: "@kiltprotocol/credentials@npm:0.100.0-alpha.1" dependencies: - "@kiltprotocol/asset-did": "npm:0.34.0" - "@kiltprotocol/augment-api": "npm:0.34.0" - "@kiltprotocol/chain-helpers": "npm:0.34.0" - "@kiltprotocol/config": "npm:0.34.0" - "@kiltprotocol/did": "npm:0.34.0" - "@kiltprotocol/type-definitions": "npm:0.34.0" - "@kiltprotocol/types": "npm:0.34.0" - "@kiltprotocol/utils": "npm:0.34.0" + "@kiltprotocol/augment-api": "npm:0.100.0-alpha.1" + "@kiltprotocol/chain-helpers": "npm:0.100.0-alpha.1" + "@kiltprotocol/config": "npm:0.100.0-alpha.1" + "@kiltprotocol/did": "npm:0.100.0-alpha.1" + "@kiltprotocol/eddsa-jcs-2022": "npm:0.1.0-rc.1" + "@kiltprotocol/es256k-jcs-2023": "npm:0.1.0-rc.1" + "@kiltprotocol/jcs-data-integrity-proofs-common": "npm:0.1.0-rc.1" + "@kiltprotocol/sr25519-jcs-2023": "npm:0.1.0-rc.1" + "@kiltprotocol/types": "npm:0.100.0-alpha.1" + "@kiltprotocol/utils": "npm:0.100.0-alpha.1" "@polkadot/api": "npm:^10.4.0" "@polkadot/keyring": "npm:^12.0.0" "@polkadot/types": "npm:^10.4.0" "@polkadot/util": "npm:^12.0.0" "@polkadot/util-crypto": "npm:^12.0.0" - checksum: 44fcc1b716af56c098d67e6cdcca33120c933c253e1d7007e0e156ef6207f78b8af09cd6a2ca638dae35a2db391589bfb5fb80bff7c31eae8ce756beda71d4e5 + json-pointer: "npm:^0.6.2" + checksum: a49e3ec6b926b12ee626946a7be7149cff959a9f06f201f9b786bddd7e73e03bad8d71fd375ce6c21a55dabdcc0a36f08d67b3126695f1ff978b3139933b2768 languageName: node linkType: hard -"@kiltprotocol/did@npm:0.34.0": - version: 0.34.0 - resolution: "@kiltprotocol/did@npm:0.34.0" +"@kiltprotocol/did@npm:0.100.0-alpha.1, @kiltprotocol/did@npm:^0.100.0-alpha.1": + version: 0.100.0-alpha.1 + resolution: "@kiltprotocol/did@npm:0.100.0-alpha.1" dependencies: - "@kiltprotocol/augment-api": "npm:0.34.0" - "@kiltprotocol/config": "npm:0.34.0" - "@kiltprotocol/types": "npm:0.34.0" - "@kiltprotocol/utils": "npm:0.34.0" + "@digitalbazaar/multikey-context": "npm:^1.0.0" + "@digitalbazaar/security-context": "npm:^1.0.0" + "@kiltprotocol/augment-api": "npm:0.100.0-alpha.1" + "@kiltprotocol/config": "npm:0.100.0-alpha.1" + "@kiltprotocol/types": "npm:0.100.0-alpha.1" + "@kiltprotocol/utils": "npm:0.100.0-alpha.1" "@polkadot/api": "npm:^10.4.0" "@polkadot/keyring": "npm:^12.0.0" "@polkadot/types": "npm:^10.4.0" - "@polkadot/types-codec": "npm:^10.4.0" "@polkadot/util": "npm:^12.0.0" "@polkadot/util-crypto": "npm:^12.0.0" - checksum: 4b4a4f75bd525ec9197009d4beac394b7358ad0d84bee06cba8846a29d6f0dadfa9bbbc5d8585a5855593b162015a9a61f3cbb2b8bd5192532048f13e69f8324 + multibase: "npm:^4.0.6" + checksum: 55e3b7e4a1e5327575b048f40640ba2d3cd47858b6ecb8b5b1f368b5bcfc4d4ad0571186173928354e299e093c0d45b1660f6eb891e26f364fe6b8cf44ad25a8 + languageName: node + linkType: hard + +"@kiltprotocol/eddsa-jcs-2022@npm:0.1.0-rc.1": + version: 0.1.0-rc.1 + resolution: "@kiltprotocol/eddsa-jcs-2022@npm:0.1.0-rc.1" + dependencies: + "@kiltprotocol/jcs-data-integrity-proofs-common": "npm:^0.1.0-rc.1" + "@noble/curves": "npm:^1.0.0" + "@scure/base": "npm:^1.1.1" + checksum: ddf9246f679290931202bb9ac17f062342ff8fc20d4324ebae78d2148c4d06bec40d2a42f24a40bc9fbfb6fad6d7a9445428065b50e8ce2099f7c70cc20cd58a + languageName: node + linkType: hard + +"@kiltprotocol/es256k-jcs-2023@npm:0.1.0-rc.1": + version: 0.1.0-rc.1 + resolution: "@kiltprotocol/es256k-jcs-2023@npm:0.1.0-rc.1" + dependencies: + "@kiltprotocol/jcs-data-integrity-proofs-common": "npm:^0.1.0-rc.1" + "@noble/curves": "npm:^1.0.0" + "@scure/base": "npm:^1.1.1" + checksum: 376f889829ba4e5384bc1ab42435f6f1bee7e4773307608fba2945ee37a453c030d38b56fea1033bf73e453b9f4da90ffce342baad394f8606d6a4de1e86ce41 + languageName: node + linkType: hard + +"@kiltprotocol/extension-api@KILTprotocol/kilt-extension-api#rf-sdk-1-alpha": + version: 0.1.0 + resolution: "@kiltprotocol/extension-api@https://github.com/KILTprotocol/kilt-extension-api.git#commit=88e48709ccdbefc5eac3268fdfe822f2831d550a" + dependencies: + "@kiltprotocol/credentials": "npm:^0.100.0-alpha.1" + "@kiltprotocol/did": "npm:^0.100.0-alpha.1" + "@kiltprotocol/legacy-credentials": "npm:^0.100.0-alpha.1" + "@kiltprotocol/sdk-js": "npm:1.0.0-alpha.1" + "@kiltprotocol/types": "npm:^0.100.0-alpha.1" + "@polkadot/keyring": "npm:^12.3.2" + "@polkadot/util": "npm:^12.3.2" + yargs: "npm:^17.7.2" + bin: + createDidConfig: ./cli/createDidConfig.js + checksum: f9437c0e92af94c7dee9751848aae24abcd25963fa97da68edebc963a798f65c3787d6995f978e94fcbbd766b3411c2f6da6a24008110e950aef4b650726602f + languageName: node + linkType: hard + +"@kiltprotocol/jcs-data-integrity-proofs-common@npm:0.1.0-rc.1, @kiltprotocol/jcs-data-integrity-proofs-common@npm:^0.1.0-rc.1": + version: 0.1.0-rc.1 + resolution: "@kiltprotocol/jcs-data-integrity-proofs-common@npm:0.1.0-rc.1" + dependencies: + canonicalize: "npm:^2.0.0" + multibase: "npm:^4.0.6" + checksum: a7c60afcdc1580dc35a4678be0c1886724a5f02617422d5024312679a8309318fef03959960d398f945a488ad6206a05393547fcc968ba09be9708f2d13f7993 languageName: node linkType: hard -"@kiltprotocol/messaging@npm:0.34.0": - version: 0.34.0 - resolution: "@kiltprotocol/messaging@npm:0.34.0" +"@kiltprotocol/legacy-credentials@npm:0.100.0-alpha.1, @kiltprotocol/legacy-credentials@npm:^0.100.0-alpha.1": + version: 0.100.0-alpha.1 + resolution: "@kiltprotocol/legacy-credentials@npm:0.100.0-alpha.1" dependencies: - "@kiltprotocol/core": "npm:0.34.0" - "@kiltprotocol/did": "npm:0.34.0" - "@kiltprotocol/types": "npm:0.34.0" - "@kiltprotocol/utils": "npm:0.34.0" + "@kiltprotocol/config": "npm:0.100.0-alpha.1" + "@kiltprotocol/credentials": "npm:0.100.0-alpha.1" + "@kiltprotocol/did": "npm:0.100.0-alpha.1" + "@kiltprotocol/types": "npm:0.100.0-alpha.1" + "@kiltprotocol/utils": "npm:0.100.0-alpha.1" "@polkadot/util": "npm:^12.0.0" - checksum: f4de241de425e903df8995f01a19d5769916b1b07612857dc1bf3172140111673381c3c19dcc7cb5d3c90891821cc2ba1c5ba119e8627861e453033f50875b88 + "@polkadot/util-crypto": "npm:^12.0.0" + checksum: 15078331fa8ae360b62b507f0da634e34dacc5136a3aa1e4db9d0e0307d2bf1d3c3cea906bba4e223d562000f78dd2b3892ccee95f27457d83a19619feec79a4 languageName: node linkType: hard -"@kiltprotocol/sdk-js@npm:^0.34.0": - version: 0.34.0 - resolution: "@kiltprotocol/sdk-js@npm:0.34.0" +"@kiltprotocol/sdk-js@npm:1.0.0-alpha.1": + version: 1.0.0-alpha.1 + resolution: "@kiltprotocol/sdk-js@npm:1.0.0-alpha.1" dependencies: - "@kiltprotocol/chain-helpers": "npm:0.34.0" - "@kiltprotocol/config": "npm:0.34.0" - "@kiltprotocol/core": "npm:0.34.0" - "@kiltprotocol/did": "npm:0.34.0" - "@kiltprotocol/messaging": "npm:0.34.0" - "@kiltprotocol/types": "npm:0.34.0" - "@kiltprotocol/utils": "npm:0.34.0" - checksum: f0f8c85ec8b5951aa25023238872bb6863efcd2d1c356465248309cca1d24e485449f37362098e465e4e8585c4b2480e5c290134366c26ab87c3ac4d87037cb2 + "@kiltprotocol/chain-helpers": "npm:0.100.0-alpha.1" + "@kiltprotocol/config": "npm:0.100.0-alpha.1" + "@kiltprotocol/credentials": "npm:0.100.0-alpha.1" + "@kiltprotocol/did": "npm:0.100.0-alpha.1" + "@kiltprotocol/utils": "npm:0.100.0-alpha.1" + checksum: 23a17353da80a3b02f9ab935854c33bfee8ecacd452b1f60f366a44d686e893a1d84c7e51105244170a0afd16dcc49e0d0e42fea8d6cae8ec8665610acdd86a2 languageName: node linkType: hard -"@kiltprotocol/type-definitions@npm:0.34.0": - version: 0.34.0 - resolution: "@kiltprotocol/type-definitions@npm:0.34.0" - checksum: cdc094ade6871cc8421c8285a0bbb76d94d5a0db2bc5fb0d15a2350c4be20d405ed8f93783bf0ae481934da17cdcc0eacc46c6225cfaad82ddae514c01a73e11 +"@kiltprotocol/sr25519-jcs-2023@npm:0.1.0-rc.1": + version: 0.1.0-rc.1 + resolution: "@kiltprotocol/sr25519-jcs-2023@npm:0.1.0-rc.1" + dependencies: + "@kiltprotocol/jcs-data-integrity-proofs-common": "npm:^0.1.0-rc.1" + "@polkadot/util-crypto": "npm:^12.0.1" + "@scure/base": "npm:^1.1.1" + checksum: 7b91c7636d1bef49327a2e8846180a1681e178749ae30159d2ff38f0889f0b7d9fddad24a076fc5abf44098e7107c5932160acef1c0690997f114d1d67ab5b8b languageName: node linkType: hard -"@kiltprotocol/types@npm:0.34.0": - version: 0.34.0 - resolution: "@kiltprotocol/types@npm:0.34.0" +"@kiltprotocol/type-definitions@npm:0.100.0-alpha.1": + version: 0.100.0-alpha.1 + resolution: "@kiltprotocol/type-definitions@npm:0.100.0-alpha.1" + dependencies: + "@polkadot/types": "npm:^10.0.0" + checksum: c00b59603cdfad1e51bc7d36c8f13413b037c53ef3f976bb71f85e02bd666dd7627d8fa5926fc1422bd56d210a276e7451651e60d35a62df5ea2b7aaf7cc48d5 + languageName: node + linkType: hard + +"@kiltprotocol/types@npm:0.100.0-alpha.1, @kiltprotocol/types@npm:^0.100.0-alpha.1": + version: 0.100.0-alpha.1 + resolution: "@kiltprotocol/types@npm:0.100.0-alpha.1" dependencies: "@polkadot/api": "npm:^10.4.0" "@polkadot/keyring": "npm:^12.0.0" "@polkadot/types": "npm:^10.4.0" "@polkadot/util": "npm:^12.0.0" "@polkadot/util-crypto": "npm:^12.0.0" - checksum: 07bcae97f1dbf3aaae3c0df0c5ec1603ce67d2eb7314e17ea7e700c75d9e920c8019d55a73434c0aa9062dd6fac65590630a8f0bb1f77c4070be6d2e60993fb8 + checksum: 942c7e27adc87fd4f2166d083c37b704e271d19c5479eb012c80d1ca905ba7ab9b8c05485feb2c6478570364f9f6141df8264b25d335c432338ef57e7e7d6a9c languageName: node linkType: hard -"@kiltprotocol/utils@npm:0.34.0": - version: 0.34.0 - resolution: "@kiltprotocol/utils@npm:0.34.0" +"@kiltprotocol/utils@npm:0.100.0-alpha.1": + version: 0.100.0-alpha.1 + resolution: "@kiltprotocol/utils@npm:0.100.0-alpha.1" dependencies: - "@kiltprotocol/types": "npm:0.34.0" + "@kiltprotocol/eddsa-jcs-2022": "npm:0.1.0-rc.1" + "@kiltprotocol/es256k-jcs-2023": "npm:0.1.0-rc.1" + "@kiltprotocol/sr25519-jcs-2023": "npm:0.1.0-rc.1" + "@kiltprotocol/types": "npm:0.100.0-alpha.1" "@polkadot/api": "npm:^10.4.0" "@polkadot/keyring": "npm:^12.0.0" "@polkadot/util": "npm:^12.0.0" @@ -2389,7 +2472,7 @@ __metadata: cbor-web: "npm:^9.0.0" tweetnacl: "npm:^1.0.3" uuid: "npm:^9.0.0" - checksum: 787e0f3d0a4fef2ccbf66cbdb80ab3b5fb80f834143d90a69f80a9a492898390f1e39efc8bdcbb56f3836f79791f419f207f1772cfdab8a0ee0129fcdbbd7e86 + checksum: 76a12be00f3b7e7faa1b98fda9f5ea93a44bc1bff232b41805bc25b342f18cb3ad6b0bd4d838675bee831bfff58c28b5cfb6aab409c77a41b54c162e1db35a89 languageName: node linkType: hard @@ -2400,6 +2483,13 @@ __metadata: languageName: node linkType: hard +"@multiformats/base-x@npm:^4.0.1": + version: 4.0.1 + resolution: "@multiformats/base-x@npm:4.0.1" + checksum: f6d16d2d7793ea371206fc17853a0932a7e697ddc739a6b63421a7ee090ee8ab28224c3c7e4401899d0a343bc95284a5f0aa7502edadfb5ad21967f9cbd6a9d2 + languageName: node + linkType: hard + "@ndelangen/get-tarball@npm:^3.0.7": version: 3.0.7 resolution: "@ndelangen/get-tarball@npm:3.0.7" @@ -2411,7 +2501,7 @@ __metadata: languageName: node linkType: hard -"@noble/curves@npm:^1.3.0": +"@noble/curves@npm:^1.0.0, @noble/curves@npm:^1.3.0": version: 1.3.0 resolution: "@noble/curves@npm:1.3.0" dependencies: @@ -2557,7 +2647,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/api-base@npm:10.11.2": +"@polkadot/api-base@npm:10.11.2, @polkadot/api-base@npm:^10.0.0": version: 10.11.2 resolution: "@polkadot/api-base@npm:10.11.2" dependencies: @@ -2570,7 +2660,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/api-derive@npm:10.11.2": +"@polkadot/api-derive@npm:10.11.2, @polkadot/api-derive@npm:^10.0.0": version: 10.11.2 resolution: "@polkadot/api-derive@npm:10.11.2" dependencies: @@ -2631,7 +2721,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/keyring@npm:^12.0.0, @polkadot/keyring@npm:^12.6.2": +"@polkadot/keyring@npm:^12.0.0, @polkadot/keyring@npm:^12.3.2, @polkadot/keyring@npm:^12.6.2": version: 12.6.2 resolution: "@polkadot/keyring@npm:12.6.2" dependencies: @@ -2669,7 +2759,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/rpc-core@npm:10.11.2": +"@polkadot/rpc-core@npm:10.11.2, @polkadot/rpc-core@npm:^10.0.0": version: 10.11.2 resolution: "@polkadot/rpc-core@npm:10.11.2" dependencies: @@ -2719,7 +2809,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/types-codec@npm:10.11.2, @polkadot/types-codec@npm:^10.4.0": +"@polkadot/types-codec@npm:10.11.2, @polkadot/types-codec@npm:^10.0.0": version: 10.11.2 resolution: "@polkadot/types-codec@npm:10.11.2" dependencies: @@ -2765,7 +2855,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/types@npm:10.11.2, @polkadot/types@npm:^10.11.1, @polkadot/types@npm:^10.11.2, @polkadot/types@npm:^10.4.0": +"@polkadot/types@npm:10.11.2, @polkadot/types@npm:^10.0.0, @polkadot/types@npm:^10.11.1, @polkadot/types@npm:^10.11.2, @polkadot/types@npm:^10.4.0": version: 10.11.2 resolution: "@polkadot/types@npm:10.11.2" dependencies: @@ -2794,7 +2884,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/util-crypto@npm:12.6.2, @polkadot/util-crypto@npm:^12.0.0, @polkadot/util-crypto@npm:^12.6.1, @polkadot/util-crypto@npm:^12.6.2": +"@polkadot/util-crypto@npm:12.6.2, @polkadot/util-crypto@npm:^12.0.0, @polkadot/util-crypto@npm:^12.0.1, @polkadot/util-crypto@npm:^12.6.1, @polkadot/util-crypto@npm:^12.6.2": version: 12.6.2 resolution: "@polkadot/util-crypto@npm:12.6.2" dependencies: @@ -2814,7 +2904,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/util@npm:12.6.2, @polkadot/util@npm:^12.0.0, @polkadot/util@npm:^12.6.1, @polkadot/util@npm:^12.6.2": +"@polkadot/util@npm:12.6.2, @polkadot/util@npm:^12.0.0, @polkadot/util@npm:^12.3.2, @polkadot/util@npm:^12.6.1, @polkadot/util@npm:^12.6.2": version: 12.6.2 resolution: "@polkadot/util@npm:12.6.2" dependencies: @@ -3551,7 +3641,7 @@ __metadata: languageName: node linkType: hard -"@scure/base@npm:^1.1.5": +"@scure/base@npm:^1.1.1, @scure/base@npm:^1.1.5": version: 1.1.5 resolution: "@scure/base@npm:1.1.5" checksum: 6eb07be0202fac74a57c79d0d00a45f6f7e57447010c1e3d90a4275d197829727b7abc54b248fc6f9bef9ae374f7be5ee9154dde5b5b73da773560bf17aa8504 @@ -7107,6 +7197,13 @@ __metadata: languageName: node linkType: hard +"canonicalize@npm:^2.0.0": + version: 2.0.0 + resolution: "canonicalize@npm:2.0.0" + checksum: b14fecd0f9e498d22a550656440ed7fd7a9e59eeaba16d72691683a351626f2cd61f62fe17cca4267f39d7a851e027c3defc47b09a9e748dd2cce3ea4eda0a1f + languageName: node + linkType: hard + "case-sensitive-paths-webpack-plugin@npm:^2.4.0": version: 2.4.0 resolution: "case-sensitive-paths-webpack-plugin@npm:2.4.0" @@ -9846,6 +9943,13 @@ __metadata: languageName: node linkType: hard +"foreach@npm:^2.0.4": + version: 2.0.6 + resolution: "foreach@npm:2.0.6" + checksum: dc79f83997ac986dadbc95b4035ce8b86699fb654eb85446b0ad779fe69d567fc9894075e460243ca8bc20adb8fd178ad203aef66dc3c620ac78b18a4cb7059c + languageName: node + linkType: hard + "foreground-child@npm:^3.1.0": version: 3.1.1 resolution: "foreground-child@npm:3.1.1" @@ -12338,6 +12442,15 @@ __metadata: languageName: node linkType: hard +"json-pointer@npm:^0.6.2": + version: 0.6.2 + resolution: "json-pointer@npm:0.6.2" + dependencies: + foreach: "npm:^2.0.4" + checksum: 47f6103032c0340b3392cb650e0ec817f785eccb553407da13fae85bc535483c9b359d7e756de4ed73130172c28d2b02f8beb53a700a98b12e72c7bf70e734b7 + languageName: node + linkType: hard + "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" @@ -13326,6 +13439,15 @@ __metadata: languageName: node linkType: hard +"multibase@npm:^4.0.6": + version: 4.0.6 + resolution: "multibase@npm:4.0.6" + dependencies: + "@multiformats/base-x": "npm:^4.0.1" + checksum: 1e931f2d018a195f7ea1d157782a6ab2eb3913674b79a9193e05ee2ded58383a373124ec9d84d20b12a2561a34659d2fe5a7e49e4ba493af5127b0009fdaf33d + languageName: node + linkType: hard + "multimatch@npm:6.0.0": version: 6.0.0 resolution: "multimatch@npm:6.0.0" @@ -13432,13 +13554,13 @@ __metadata: linkType: hard "nock@npm:^13.4.0": - version: 13.5.0 - resolution: "nock@npm:13.5.0" + version: 13.4.0 + resolution: "nock@npm:13.4.0" dependencies: debug: "npm:^4.1.0" json-stringify-safe: "npm:^5.0.1" propagate: "npm:^2.0.0" - checksum: ba98390042a61b8687da9174fa07282d14f8b0cb5ac50c310eba9bb70a0beb5ea8257ba1f2a3e324db5570111689485a1f16746c2527f3050357e6917666bdef + checksum: b2e4407e71b6e9c42bc74bf631c008b79fa06b17e885d270b8f3ac7081d029dd966cd09024acb96ae5dd77a4737cc86951340715ffabece6893a62dc71ce5b08 languageName: node linkType: hard @@ -16252,7 +16374,14 @@ __metadata: "@babel/core": "npm:^7.23.7" "@babel/preset-env": "npm:^7.23.8" "@babel/preset-typescript": "npm:^7.23.3" - "@kiltprotocol/sdk-js": "npm:^0.34.0" + "@kiltprotocol/chain-helpers": "npm:0.100.0-alpha.1" + "@kiltprotocol/credentials": "npm:0.100.0-alpha.1" + "@kiltprotocol/did": "npm:0.100.0-alpha.1" + "@kiltprotocol/extension-api": "KILTprotocol/kilt-extension-api#rf-sdk-1-alpha" + "@kiltprotocol/legacy-credentials": "npm:0.100.0-alpha.1" + "@kiltprotocol/sdk-js": "npm:1.0.0-alpha.1" + "@kiltprotocol/types": "npm:0.100.0-alpha.1" + "@kiltprotocol/utils": "npm:0.100.0-alpha.1" "@polkadot/extension-inject": "npm:^0.46.6" "@polkadot/keyring": "npm:^12.6.2" "@polkadot/types": "npm:^10.11.2"