diff --git a/docker-compose.yaml b/docker-compose.yaml index 6bcacd51..0265d644 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -10,7 +10,7 @@ x-python-env: &python-env services: vlei-server: - image: gleif/vlei + image: gleif/vlei:0.2.0 environment: <<: *python-env command: vLEI-server -s ./schema/acdc -c ./samples/acdc/ -o ./samples/oobis/ diff --git a/package-lock.json b/package-lock.json index 461203aa..d3cb5656 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1110,9 +1110,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -1802,9 +1802,9 @@ } }, "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2804,9 +2804,9 @@ } }, "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3005,9 +3005,9 @@ } }, "node_modules/typedoc/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3248,9 +3248,9 @@ } }, "node_modules/typescript-eslint/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/test-integration/challenge.test.ts b/test-integration/challenge.test.ts index e065a1f8..eba6fafe 100644 --- a/test-integration/challenge.test.ts +++ b/test-integration/challenge.test.ts @@ -1,48 +1,14 @@ import { assert, test } from 'vitest'; -import signify, { Serder } from 'signify-ts'; -import { resolveEnvironment } from './utils/resolve-env.ts'; +import { Serder } from 'signify-ts'; import { assertOperations, + getOrCreateClients, resolveOobi, waitOperation, } from './utils/test-util.ts'; -const { url, bootUrl } = resolveEnvironment(); - test('challenge', async () => { - await signify.ready(); - const bran1 = signify.randomPasscode(); - const bran2 = signify.randomPasscode(); - const client1 = new signify.SignifyClient( - url, - bran1, - signify.Tier.low, - bootUrl - ); - const client2 = new signify.SignifyClient( - url, - bran2, - signify.Tier.low, - bootUrl - ); - await client1.boot(); - await client2.boot(); - await client1.connect(); - await client2.connect(); - const state1 = await client1.state(); - const state2 = await client2.state(); - console.log( - 'Client 1 connected. Client AID:', - state1.controller.state.i, - 'Agent AID: ', - state1.agent.i - ); - console.log( - 'Client 2 connected. Client AID:', - state2.controller.state.i, - 'Agent AID: ', - state2.agent.i - ); + const [client1, client2] = await getOrCreateClients(2); // Generate challenge words const challenge1_small = await client1.challenges().generate(128); diff --git a/test-integration/delegation.test.ts b/test-integration/delegation.test.ts index 726b9910..0e534c93 100644 --- a/test-integration/delegation.test.ts +++ b/test-integration/delegation.test.ts @@ -1,8 +1,7 @@ import { assert, test } from 'vitest'; -import signify from 'signify-ts'; -import { resolveEnvironment } from './utils/resolve-env.ts'; import { assertOperations, + getOrCreateClients, getOrCreateContact, resolveOobi, waitOperation, @@ -10,43 +9,8 @@ import { import { retry } from './utils/retry.ts'; import { step } from './utils/test-step.ts'; -const { url, bootUrl } = resolveEnvironment(); - test('delegation', async () => { - await signify.ready(); - // Boot two clients - const bran1 = signify.randomPasscode(); - const bran2 = signify.randomPasscode(); - const client1 = new signify.SignifyClient( - url, - bran1, - signify.Tier.low, - bootUrl - ); - const client2 = new signify.SignifyClient( - url, - bran2, - signify.Tier.low, - bootUrl - ); - await client1.boot(); - await client2.boot(); - await client1.connect(); - await client2.connect(); - const state1 = await client1.state(); - const state2 = await client2.state(); - console.log( - 'Client 1 connected. Client AID:', - state1.controller.state.i, - 'Agent AID: ', - state1.agent.i - ); - console.log( - 'Client 2 connected. Client AID:', - state2.controller.state.i, - 'Agent AID: ', - state2.agent.i - ); + const [client1, client2] = await getOrCreateClients(2); // Client 1 create delegator AID const icpResult1 = await client1.identifiers().create('delegator', { diff --git a/test-integration/externalModule.test.ts b/test-integration/externalModule.test.ts index 7d31dc4a..2f53cca5 100644 --- a/test-integration/externalModule.test.ts +++ b/test-integration/externalModule.test.ts @@ -1,35 +1,20 @@ import { assert, test } from 'vitest'; import signify from 'signify-ts'; import { BIP39Shim } from './modules/bip39_shim.ts'; -import { resolveEnvironment } from './utils/resolve-env.ts'; -import { assertOperations, waitOperation } from './utils/test-util.ts'; - -const { url, bootUrl } = resolveEnvironment(); +import { + assertOperations, + getOrCreateClient, + waitOperation, +} from './utils/test-util.ts'; test('bip39_shim', async () => { - await signify.ready(); - const bran1 = signify.randomPasscode(); const externalModule: signify.ExternalModule = { type: 'bip39_shim', name: 'bip39_shim', module: BIP39Shim, }; - const client1 = new signify.SignifyClient( - url, - bran1, - signify.Tier.low, - bootUrl, - [externalModule] - ); - await client1.boot(); - await client1.connect(); - const state1 = await client1.state(); - console.log( - 'Client 1 connected. Client AID:', - state1.controller.state.i, - 'Agent AID: ', - state1.agent.i - ); + const client1 = await getOrCreateClient(undefined, [externalModule]); + const words = new BIP39Shim(0, {}).generateMnemonic(256); const icpResult = await client1.identifiers().create('aid1', { algo: signify.Algos.extern, diff --git a/test-integration/multisig-join.test.ts b/test-integration/multisig-join.test.ts index b7d1f4dc..e4b3a7ae 100644 --- a/test-integration/multisig-join.test.ts +++ b/test-integration/multisig-join.test.ts @@ -2,8 +2,6 @@ import signify, { Serder, SignifyClient } from 'signify-ts'; import { getOrCreateClient, getOrCreateIdentifier, -} from './utils/test-setup.ts'; -import { markNotification, waitForNotifications, waitOperation, diff --git a/test-integration/randy.test.ts b/test-integration/randy.test.ts index 0b0f3e37..5d900e71 100644 --- a/test-integration/randy.test.ts +++ b/test-integration/randy.test.ts @@ -1,23 +1,13 @@ import { assert, test } from 'vitest'; import signify from 'signify-ts'; -import { resolveEnvironment } from './utils/resolve-env.ts'; -import { assertOperations, waitOperation } from './utils/test-util.ts'; - -const { url, bootUrl } = resolveEnvironment(); +import { + assertOperations, + getOrCreateClient, + waitOperation, +} from './utils/test-util.ts'; test('randy', async () => { - await signify.ready(); - // Boot client - const bran1 = signify.randomPasscode(); - const client1 = new signify.SignifyClient( - url, - bran1, - signify.Tier.low, - bootUrl - ); - await client1.boot(); - await client1.connect(); - await client1.state(); + const client1 = await getOrCreateClient(); let icpResult = await client1 .identifiers() diff --git a/test-integration/salty.test.ts b/test-integration/salty.test.ts index 83c8a379..a560b9aa 100644 --- a/test-integration/salty.test.ts +++ b/test-integration/salty.test.ts @@ -1,29 +1,13 @@ import { assert, test } from 'vitest'; import signify from 'signify-ts'; -import { resolveEnvironment } from './utils/resolve-env.ts'; -import { assertOperations, waitOperation } from './utils/test-util.ts'; - -const { url, bootUrl } = resolveEnvironment(); +import { + assertOperations, + getOrCreateClient, + waitOperation, +} from './utils/test-util.ts'; test('salty', async () => { - await signify.ready(); - // Boot client - const bran1 = signify.randomPasscode(); - const client1 = new signify.SignifyClient( - url, - bran1, - signify.Tier.low, - bootUrl - ); - await client1.boot(); - await client1.connect(); - const state1 = await client1.state(); - console.log( - 'Client 1 connected. Client AID:', - state1.controller.state.i, - 'Agent AID: ', - state1.agent.i - ); + const client1 = await getOrCreateClient(); let icpResult = await client1 .identifiers() diff --git a/test-integration/utils/test-setup.ts b/test-integration/utils/test-setup.ts deleted file mode 100644 index 71cf6ada..00000000 --- a/test-integration/utils/test-setup.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { - CreateIdentiferArgs, - EventResult, - SignifyClient, - Tier, - randomPasscode, - ready, -} from 'signify-ts'; -import { resolveEnvironment } from './resolve-env.ts'; -import { waitOperation } from './test-util.ts'; - -/** - * Connect or boot a SignifyClient instance - */ -export async function getOrCreateClient( - bran: string | undefined = undefined -): Promise { - const env = resolveEnvironment(); - await ready(); - bran ??= randomPasscode(); - bran = bran.padEnd(21, '_'); - const client = new SignifyClient(env.url, bran, Tier.low, env.bootUrl); - try { - await client.connect(); - } catch { - const res = await client.boot(); - if (!res.ok) throw new Error(); - await client.connect(); - } - console.log('client', { - agent: client.agent?.pre, - controller: client.controller.pre, - }); - return client; -} - -/** - * Get or create a Keri identifier. Uses default witness config from `resolveEnvironment` - * @example - * Create a Keri identifier before running tests - * let name1_id: string, name1_oobi: string; - * beforeAll(async () => { - * [name1_id, name1_oobi] = await getOrCreateIdentifier(client1, "name1"); - * }); - * @see resolveEnvironment - */ -export async function getOrCreateIdentifier( - client: SignifyClient, - name: string, - kargs: CreateIdentiferArgs | undefined = undefined -): Promise<[string, string]> { - let id: string; - try { - const identfier = await client.identifiers().get(name); - // console.log("identifiers.get", identfier); - id = identfier.prefix; - } catch { - const env = resolveEnvironment(); - kargs ??= { - toad: env.witnessIds.length, - wits: env.witnessIds, - }; - const result: EventResult = await client - .identifiers() - .create(name, kargs); - let op = await result.op(); - op = await waitOperation(client, op); - // console.log("identifiers.create", op); - id = op.response.i; - } - const eid = client.agent?.pre; - if (!eid) { - throw new Error('No agent on client'); - } - if (!(await hasEndRole(client, name, 'agent', eid))) { - const result: EventResult = await client - .identifiers() - .addEndRole(name, 'agent', eid); - const op = await result.op(); - await waitOperation(client, op); - // console.log("identifiers.addEndRole", op); - } - const oobi = await client.oobis().get(name, 'agent'); - const result: [string, string] = [id, oobi.oobis[0]]; - console.log(name, result); - return result; -} - -/** - * Get list of end role authorizations for a Keri idenfitier - */ -export async function getEndRoles( - client: SignifyClient, - alias: string, - role?: string -): Promise { - const path = - role !== undefined - ? `/identifiers/${alias}/endroles/${role}` - : `/identifiers/${alias}/endroles`; - const response: Response = await client.fetch(path, 'GET', null); - if (!response.ok) throw new Error(await response.text()); - const result = await response.json(); - // console.log("getEndRoles", result); - return result; -} - -/** - * Test if end role is authorized for a Keri identifier - */ -export async function hasEndRole( - client: SignifyClient, - alias: string, - role: string, - eid: string -): Promise { - const list = await getEndRoles(client, alias, role); - for (const i of list) { - if (i.role === role && i.eid === eid) { - return true; - } - } - return false; -} - -/** - * Get or resolve a Keri contact - * @example - * Create a Keri contact before running tests - * let contact1_id: string; - * beforeAll(async () => { - * contact1_id = await getOrCreateContact(client2, "contact1", name1_oobi); - * }); - */ -export async function getOrCreateContact( - client: SignifyClient, - name: string, - oobi: string -): Promise { - const list = await client.contacts().list(undefined, 'alias', `^${name}$`); - // console.log("contacts.list", list); - if (list.length > 0) { - const contact = list[0]; - if (contact.oobi === oobi) { - // console.log("contacts.id", contact.id); - return contact.id; - } - } - let op = await client.oobis().resolve(oobi, name); - op = await waitOperation(client, op); - // console.log("oobis.resolve", op); - return op.response.i; -} diff --git a/test-integration/utils/test-util.ts b/test-integration/utils/test-util.ts index 5178b158..54dfb760 100644 --- a/test-integration/utils/test-util.ts +++ b/test-integration/utils/test-util.ts @@ -8,6 +8,7 @@ import signify, { SignifyClient, Tier, HabState, + ExternalModule, } from 'signify-ts'; import { RetryOptions, retry } from './retry.ts'; import assert from 'assert'; @@ -168,13 +169,20 @@ export async function getOrCreateAID( * Connect or boot a SignifyClient instance */ export async function getOrCreateClient( - bran: string | undefined = undefined + bran: string | undefined = undefined, + externalModule: ExternalModule[] = [] ): Promise { const env = resolveEnvironment(); await ready(); bran ??= randomPasscode(); bran = bran.padEnd(21, '_'); - const client = new SignifyClient(env.url, bran, Tier.low, env.bootUrl); + const client = new SignifyClient( + env.url, + bran, + Tier.low, + env.bootUrl, + externalModule + ); try { await client.connect(); } catch { diff --git a/test-integration/witness.test.ts b/test-integration/witness.test.ts index 821a16b8..2dc22025 100644 --- a/test-integration/witness.test.ts +++ b/test-integration/witness.test.ts @@ -1,31 +1,17 @@ // This scrip also work if you start keria with no config file with witness urls import { assert, test } from 'vitest'; -import signify from 'signify-ts'; import { resolveEnvironment } from './utils/resolve-env.ts'; -import { resolveOobi, waitOperation } from './utils/test-util.ts'; +import { + getOrCreateClient, + resolveOobi, + waitOperation, +} from './utils/test-util.ts'; const WITNESS_AID = 'BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkf2Ha'; -const { url, bootUrl, witnessUrls } = resolveEnvironment(); +const { witnessUrls } = resolveEnvironment(); test('test witness', async () => { - await signify.ready(); - // Boot client - const bran1 = signify.randomPasscode(); - const client1 = new signify.SignifyClient( - url, - bran1, - signify.Tier.low, - bootUrl - ); - await client1.boot(); - await client1.connect(); - const state1 = await client1.state(); - console.log( - 'Client connected. Client AID:', - state1.controller.state.i, - 'Agent AID: ', - state1.agent.i - ); + const client1 = await getOrCreateClient(); // Client 1 resolves witness OOBI await resolveOobi(client1, witnessUrls[0] + `/oobi/${WITNESS_AID}`, 'wit');