diff --git a/package-lock.json b/package-lock.json index 03f683e..d7ccc0e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3835,24 +3835,15 @@ } }, "node_modules/@noble/curves": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.5.0.tgz", - "integrity": "sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.6.0.tgz", + "integrity": "sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==", "license": "MIT", "dependencies": { - "@noble/hashes": "1.4.0" + "@noble/hashes": "1.5.0" }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/curves/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "license": "MIT", "engines": { - "node": ">= 16" + "node": "^14.21.3 || >=16" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -3971,7 +3962,6 @@ "@nrwl/js": "15.9.2", "@phenomnomnominal/tsquery": "4.1.1", "chalk": "^4.1.0", - "dotenv": "~10.0.0", "identity-obj-proxy": "3.0.0", "jest-config": "28.1.1", "jest-resolve": "28.1.1", @@ -4203,7 +4193,6 @@ "chokidar": "^3.5.1", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", - "dotenv": "~10.0.0", "figures": "3.2.0", "flat": "^5.0.2", "glob": "7.1.4", @@ -4284,6 +4273,30 @@ "license": "MIT", "optional": true }, + "node_modules/@polkadot-api/metadata-builders": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.3.2.tgz", + "integrity": "sha512-TKpfoT6vTb+513KDzMBTfCb/ORdgRnsS3TDFpOhAhZ08ikvK+hjHMt5plPiAX/OWkm1Wc9I3+K6W0hX5Ab7MVg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@polkadot-api/substrate-bindings": "0.6.0", + "@polkadot-api/utils": "0.1.0" + } + }, + "node_modules/@polkadot-api/substrate-bindings": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.6.0.tgz", + "integrity": "sha512-lGuhE74NA1/PqdN7fKFdE5C1gNYX357j1tWzdlPXI0kQ7h3kN0zfxNOpPUN7dIrPcOFZ6C0tRRVrBylXkI6xPw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@noble/hashes": "^1.3.1", + "@polkadot-api/utils": "0.1.0", + "@scure/base": "^1.1.1", + "scale-ts": "^1.6.0" + } + }, "node_modules/@polkadot-api/substrate-client": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.1.4.tgz", @@ -4890,9 +4903,9 @@ } }, "node_modules/@scure/base": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.7.tgz", - "integrity": "sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.8.tgz", + "integrity": "sha512-6CyAclxj3Nb0XT7GHK6K4zK6k2xJm6E4Ft0Ohjt4WgegiFUHEtFb2CGzmPmGBwoIhrLsqNLYfLr04Y1GePrzZg==", "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" @@ -4972,17 +4985,6 @@ "smoldot": "2.x" } }, - "node_modules/@substrate/light-client-extension-helpers/node_modules/@polkadot-api/metadata-builders": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.3.2.tgz", - "integrity": "sha512-TKpfoT6vTb+513KDzMBTfCb/ORdgRnsS3TDFpOhAhZ08ikvK+hjHMt5plPiAX/OWkm1Wc9I3+K6W0hX5Ab7MVg==", - "license": "MIT", - "optional": true, - "dependencies": { - "@polkadot-api/substrate-bindings": "0.6.0", - "@polkadot-api/utils": "0.1.0" - } - }, "node_modules/@substrate/light-client-extension-helpers/node_modules/@polkadot-api/observable-client": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@polkadot-api/observable-client/-/observable-client-0.3.2.tgz", @@ -4999,19 +5001,6 @@ "rxjs": ">=7.8.0" } }, - "node_modules/@substrate/light-client-extension-helpers/node_modules/@polkadot-api/substrate-bindings": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.6.0.tgz", - "integrity": "sha512-lGuhE74NA1/PqdN7fKFdE5C1gNYX357j1tWzdlPXI0kQ7h3kN0zfxNOpPUN7dIrPcOFZ6C0tRRVrBylXkI6xPw==", - "license": "MIT", - "optional": true, - "dependencies": { - "@noble/hashes": "^1.3.1", - "@polkadot-api/utils": "0.1.0", - "@scure/base": "^1.1.1", - "scale-ts": "^1.6.0" - } - }, "node_modules/@substrate/light-client-extension-helpers/node_modules/rxjs": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", @@ -7055,16 +7044,6 @@ "node": ">=12" } }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=10" - } - }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -7926,9 +7905,9 @@ "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.7.tgz", - "integrity": "sha512-aAW9al/NMw4COcZnwgUaG8kAjBUXq/El+1R11e9RDHAIlxa1fb1b5SP0K6BbMoNgWdmJ/kXAwoTlVDlUN3OTDw==", + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.8.tgz", + "integrity": "sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig==", "dev": true, "funding": [ { @@ -12326,7 +12305,6 @@ "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", "cliui": "^7.0.2", - "dotenv": "~10.0.0", "enquirer": "~2.3.6", "fast-glob": "3.2.7", "figures": "3.2.0", diff --git a/packages/sdk/src/modules/did/did.spec.ts b/packages/sdk/src/modules/did/did.spec.ts index 238803d..a83ae12 100644 --- a/packages/sdk/src/modules/did/did.spec.ts +++ b/packages/sdk/src/modules/did/did.spec.ts @@ -8,6 +8,7 @@ import type { DidDocument, ReadDidResponse } from '../../types'; import { CustomDocumentFields, Did } from './index'; import { unsubscribeRuntimeVersion } from '../../utils'; import { CreateDidError, ReadDidError, UpdateDidError, RemoveDidError} from '../../utils/errors'; +import { Main as SDK } from '../main'; dotenv.config(); // Load variables from .env file @@ -38,6 +39,7 @@ describe('Did', () => { let user2: KeyringPair; let did: Did; let did2: Did; + let sdk: SDK; beforeAll(async () => { const provider = new WsProvider(BASE_URL); @@ -48,6 +50,7 @@ describe('Did', () => { user2 = keyring2.addFromUri(SEED2); did = new Did(api, { pair: user }); did2 = new Did(api, { pair: user2 }); + sdk = await SDK.createOfflineInstance(); }, 40000); afterAll(async () => { @@ -60,7 +63,6 @@ describe('Did', () => { */ describe('generate()', () => { it('generate did with an incorrect Substrate address', async () => { - const new_did = 'did-test-1'; const address1 = 'Incorrect Address Format'; const address2 = '5Df42mkztLtkksgQuLy4YV6hmhzdjYvDknoxHv1QBkaY12Pgg'; // address has an additional char at the end (49 chars) const address3 = '5Df42mkztLtkksgQuLy4YV6hmhzdjYvDknoxHv1QBkaY12P'; // address has an additional char at the end (47 chars) @@ -69,48 +71,40 @@ describe('Did', () => { const address6 = '5Df42mkztLtkksgQuLy4YV6hmhzdjYvDknoxHv1QBkaY12PI'; // address that is proper length but has I included const address7 = '5Df42mkztLtkksgQuLy4YV6hmhzdjYvDknoxHv1QBkaY12Pl'; // address that is proper length but has I included - await expect(did.generate({address: address1})) + await expect(sdk.did.generate({address: address1})) .rejects.toThrow(new CreateDidError(address_error)); - await expect(did.generate({address: address2})) + await expect(sdk.did.generate({address: address2})) .rejects.toThrow(new CreateDidError(address_error)); - await expect(did.generate({address: address3})) + await expect(sdk.did.generate({address: address3})) .rejects.toThrow(new CreateDidError(address_error)); - await expect(did.generate({address: address4})) + await expect(sdk.did.generate({address: address4})) .rejects.toThrow(new CreateDidError(address_error)); - await expect(did.generate({address: address5})) + await expect(sdk.did.generate({address: address5})) .rejects.toThrow(new CreateDidError(address_error)); - await expect(did.generate({address: address6})) + await expect(sdk.did.generate({address: address6})) .rejects.toThrow(new CreateDidError(address_error)); - await expect(did.generate({address: address7})) + await expect(sdk.did.generate({address: address7})) .rejects.toThrow(new CreateDidError(address_error)); }); it('generate did with an incorrect Ethereum address', async () => { - const new_did = 'did-test-1'; const address1 = 'Incorrect Address Format'; const address2 = '0x9Eeab1aCcb1A701aEfAB00F3b8a275a39646641CC'; // address has an additional char at the end (43 chars) const address3 = '0x9Eeab1aCcb1A701aEfAB00F3b8a275a39646641'; // address has an one less char at the end (41 chars) const address4 = '0x9Eeab1aCcb1A701aEfAB00F3b8a275a39646641Z'; // address is proper length but has invalid hex value of 'Z' - await expect(did.generate({address: address1})) + await expect(sdk.did.generate({address: address1})) .rejects.toThrow(new CreateDidError(address_error)); - await expect(did.generate({address: address2})) + await expect(sdk.did.generate({address: address2})) .rejects.toThrow(new CreateDidError(address_error)); - await expect(did.generate({address: address3})) + await expect(sdk.did.generate({address: address3})) .rejects.toThrow(new CreateDidError(address_error)); - await expect(did.generate({address: address4})) + await expect(sdk.did.generate({address: address4})) .rejects.toThrow(new CreateDidError(address_error)); }); - // throws an error when a seed phrase is not 12 or 24 words long - it('generate did with an incorrect seed', async () => { - const new_did = 'did-test-1'; - await expect(did.generate({seed: 'My incorrect seed phrase'})) - .rejects.toThrow(new CreateDidError('SeedError: Invalid seed phrase length: Seed phrase must be either 12 or 24 words long.')); - }); - it('generate did', async () => { - const result = await did.generate({}); + const result = await sdk.did.generate({address: user.address}); const did_hash = result.value; // check did hash return value: starts with '0x' and only contains hexadecimal values expect(did_hash.startsWith('0x')).toBe(true); @@ -118,8 +112,7 @@ describe('Did', () => { }); it('generate did Substrate address', async () => { - const new_did = 'did-test-1'; - const result = await did.generate({address: user.address}); + const result = await sdk.did.generate({address: user.address}); const did_hash = result.value; // check did hash return value: starts with '0x' and only contains hexadecimal values expect(did_hash.startsWith('0x')).toBe(true); @@ -134,7 +127,7 @@ describe('Did', () => { it('generate did Ethereum address', async () => { const addressETH = '0x9Eeab1aCcb1A701aEfAB00F3b8a275a39646641C'; - const result = await did.generate({address: addressETH, customDocumentFields: {controller: addressETH}}); + const result = await sdk.did.generate({address: addressETH, customDocumentFields: {controller: addressETH}}); const did_hash = result.value; // check did hash return value: starts with '0x' and only contains hexadecimal values expect(did_hash.startsWith('0x')).toBe(true); @@ -166,7 +159,7 @@ describe('Did', () => { }] } - const result = await did.generate({customDocumentFields: customFields}); + const result = await sdk.did.generate({address: user.address, customDocumentFields: customFields}); const did_hash = result.value; // check did hash return value: starts with '0x' and only contains hexadecimal values expect(did_hash.startsWith('0x')).toBe(true); @@ -199,7 +192,7 @@ describe('Did', () => { }] } - const result = await did.generate({address: addressETH, customDocumentFields: customFields}); + const result = await sdk.did.generate({address: addressETH, customDocumentFields: customFields}); const did_hash = result.value; // check did hash return value: starts with '0x' and only contains hexadecimal values expect(did_hash.startsWith('0x')).toBe(true); diff --git a/packages/sdk/src/modules/did/index.ts b/packages/sdk/src/modules/did/index.ts index d3f4e11..4443d63 100644 --- a/packages/sdk/src/modules/did/index.ts +++ b/packages/sdk/src/modules/did/index.ts @@ -49,8 +49,7 @@ type Service = { } interface GenerateDidOptions { - address?: Address; - seed?: string; + address: Address; customDocumentFields?: CustomDocumentFields; } @@ -133,17 +132,14 @@ export class Did extends Base { public async generate(options: GenerateDidOptions): Promise { try { - const { address = '', seed = '', customDocumentFields } = options; - - if (seed !== '') this._checkSeed(seed); + const { address = '', customDocumentFields } = options; if (address !== '') this._checkAddress(address); - const keyPair = this._metadata?.pair || this._getKeyPair(seed); - const accountAddress = address || keyPair.address; + const accountAddress = address; const didDocumentHash = this._generateDidDocument({ didAccountAddress: accountAddress, - didControllerAddress: keyPair.address, + didControllerAddress: accountAddress, customDocumentFields, }); diff --git a/packages/sdk/src/modules/main/index.ts b/packages/sdk/src/modules/main/index.ts index 5068bdb..0b04c7c 100644 --- a/packages/sdk/src/modules/main/index.ts +++ b/packages/sdk/src/modules/main/index.ts @@ -42,6 +42,17 @@ export class Main extends Base { return sdk; } + /** + * Creates a new offline instance of the SDK to use the generate function. + * + * @param None + * @returns The created offline instance of the SDK. + */ + public static async createOfflineInstance(): Promise
{ + const sdk = new Main({}); + return sdk; + } + /** * Connects the SDK to the network. */ diff --git a/packages/sdk/src/modules/main/main.spec.ts b/packages/sdk/src/modules/main/main.spec.ts index feba21d..9cb04ba 100644 --- a/packages/sdk/src/modules/main/main.spec.ts +++ b/packages/sdk/src/modules/main/main.spec.ts @@ -61,6 +61,5 @@ describe('Main', () => { expect(sdk['_api']?.isConnected).toBe(false); }); }); - }); diff --git a/packages/sdk/src/types/common.ts b/packages/sdk/src/types/common.ts index 7382fcb..194b164 100644 --- a/packages/sdk/src/types/common.ts +++ b/packages/sdk/src/types/common.ts @@ -14,7 +14,7 @@ export interface SDKMetadata { } export interface Options { - baseUrl: string; + baseUrl?: string; seed?: string; }