From c3b1e6a5794d3beda642ab9d54a25a752f1a40e4 Mon Sep 17 00:00:00 2001 From: Miroslav Kovar Date: Wed, 7 Jul 2021 13:48:03 +0200 Subject: [PATCH] Use state enums on nodejs layer Signed-off-by: Miroslav Kovar --- Cargo.toml | 2 +- agents/node/vcxagent-core/demo/faber.js | 6 +-- .../src/services/service-connections.js | 4 +- .../src/services/service-cred-issuer.js | 6 +-- .../src/services/service-prover.js | 4 +- .../test/distribute-tails.spec.js | 10 ++-- .../test/feature-discovery.spec.js | 1 - .../vcxagent-core/test/sign-messaging.spec.js | 4 +- .../test/update-state-v2.spec.js | 11 ++--- agents/node/vcxagent-core/test/utils/alice.js | 6 +-- agents/node/vcxagent-core/test/utils/faber.js | 10 ++-- wrappers/node/src/api/common.ts | 49 +++++++++++++++++++ 12 files changed, 80 insertions(+), 33 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 4ff72db781..abababda02 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,6 @@ members = [ debug = true panic = 'unwind' incremental = false - + [profile.dev] split-debuginfo = "unpacked" diff --git a/agents/node/vcxagent-core/demo/faber.js b/agents/node/vcxagent-core/demo/faber.js index a2829f3659..bfc49c1dfc 100644 --- a/agents/node/vcxagent-core/demo/faber.js +++ b/agents/node/vcxagent-core/demo/faber.js @@ -1,4 +1,4 @@ -const { StateType, ProofState, Proof } = require('@hyperledger/node-vcx-wrapper') +const { VerifierStateType, ProofState, Proof } = require('@hyperledger/node-vcx-wrapper') const sleepPromise = require('sleep-promise') const { runScript } = require('./script-common') const { testTailsUrl } = require('../src/common') @@ -88,11 +88,11 @@ async function runFaber (options) { let proofProtocolState = await vcxProof.updateStateV2(connectionToAlice) logger.debug(`vcxProof = ${JSON.stringify(vcxProof)}`) logger.debug(`proofState = ${proofProtocolState}`) - while (![2, 3].includes(proofProtocolState)) { // even if revoked credential was used, state should in final state be StateType.Accepted + while (![VerifierStateType.Finished, VerifierStateType.Failed].includes(proofProtocolState)) { await sleepPromise(2000) proofProtocolState = await vcxProof.updateStateV2(connectionToAlice) logger.info(`proofState=${proofProtocolState}`) - if (proofProtocolState === 3) { + if (proofProtocolState === VerifierStateType.Failed) { logger.error(`Faber proof protocol state is ${3} which an error has ocurred.`) logger.error(`Serialized proof state = ${JSON.stringify(await vcxProof.serialize())}`) process.exit(-1) diff --git a/agents/node/vcxagent-core/src/services/service-connections.js b/agents/node/vcxagent-core/src/services/service-connections.js index a14fd86bed..f157361e65 100644 --- a/agents/node/vcxagent-core/src/services/service-connections.js +++ b/agents/node/vcxagent-core/src/services/service-connections.js @@ -2,7 +2,7 @@ const { getMessagesForConnection } = require('../utils/messages') const { updateMessages, Connection, - StateType + InviterStateType } = require('@hyperledger/node-vcx-wrapper') const { pollFunction } = require('../common') @@ -50,7 +50,7 @@ module.exports.createServiceConnections = function createServiceConnections ({ l async function _progressConnectionToAcceptedState (connection, attemptsThreshold, timeoutMs) { async function progressToAcceptedState () { - if (await connection.updateState() !== 4) { + if (await connection.updateState() !== InviterStateType.Completed) { return { result: undefined, isFinished: false } } else { return { result: null, isFinished: true } diff --git a/agents/node/vcxagent-core/src/services/service-cred-issuer.js b/agents/node/vcxagent-core/src/services/service-cred-issuer.js index d89b9b86e3..bb72c5fdec 100644 --- a/agents/node/vcxagent-core/src/services/service-cred-issuer.js +++ b/agents/node/vcxagent-core/src/services/service-cred-issuer.js @@ -1,5 +1,5 @@ const { - StateType, + IssuerStateType, IssuerCredential } = require('@hyperledger/node-vcx-wrapper') const { pollFunction } = require('../common') @@ -37,7 +37,7 @@ module.exports.createServiceCredIssuer = function createServiceCredIssuer ({ log const issuerCred = await loadIssuerCredential(issuerCredId) const connection = await loadConnection(connectionId) logger.debug('Going to wait until credential request is received.') - await _progressIssuerCredentialToState(issuerCred, connection, 2, 10, 2000) + await _progressIssuerCredentialToState(issuerCred, connection, IssuerStateType.RequestReceived, 10, 2000) await saveIssuerCredential(issuerCredId, issuerCred) } @@ -46,7 +46,7 @@ module.exports.createServiceCredIssuer = function createServiceCredIssuer ({ log const connection = await loadConnection(connectionId) const issuerCred = await loadIssuerCredential(issuerCredId) logger.info('Going to wait until counterparty accepts the credential.') - await _progressIssuerCredentialToState(issuerCred, connection, 4, 10, 2000) + await _progressIssuerCredentialToState(issuerCred, connection, IssuerStateType.Finished, 10, 2000) await saveIssuerCredential(issuerCredId, issuerCred) } diff --git a/agents/node/vcxagent-core/src/services/service-prover.js b/agents/node/vcxagent-core/src/services/service-prover.js index 5f842acb4d..2fff12b5e8 100644 --- a/agents/node/vcxagent-core/src/services/service-prover.js +++ b/agents/node/vcxagent-core/src/services/service-prover.js @@ -2,7 +2,7 @@ const { pollFunction } = require('../common') const { holderSelectCredentialsForProof } = require('../utils/proofs') const { DisclosedProof, - StateType + ProverStateType } = require('@hyperledger/node-vcx-wrapper') module.exports.createServiceProver = function createServiceProver ({ logger, loadConnection, saveDisclosedProof, loadDisclosedProof, listDislosedProofIds }) { @@ -84,7 +84,7 @@ module.exports.createServiceProver = function createServiceProver ({ logger, loa await sendDisclosedProof(disclosedProofId, connectionId) const disclosedProof = await loadDisclosedProof(disclosedProofId) const connection = await loadConnection(connectionId) - await _progressProofToState(disclosedProof, connection, [2, 3]) + await _progressProofToState(disclosedProof, connection, [ProverStateType.PresentationPreparationFailed, ProverStateType.PresentationSent]) const state = await disclosedProof.getState() await saveDisclosedProof(disclosedProofId, disclosedProof) return state diff --git a/agents/node/vcxagent-core/test/distribute-tails.spec.js b/agents/node/vcxagent-core/test/distribute-tails.spec.js index 8c9b5a9403..a0d08f01a1 100644 --- a/agents/node/vcxagent-core/test/distribute-tails.spec.js +++ b/agents/node/vcxagent-core/test/distribute-tails.spec.js @@ -5,7 +5,7 @@ const axios = require('axios') const { buildRevocationDetails } = require('../src') const { createPairedAliceAndFaber } = require('./utils/utils') const { initRustapi } = require('../src/index') -const { StateType } = require('@hyperledger/node-vcx-wrapper') +const { IssuerStateType, HolderStateType, VerifierStateType, ProverStateType } = require('@hyperledger/node-vcx-wrapper') const uuid = require('uuid') const sleep = require('sleep-promise') const fs = require('fs') @@ -27,9 +27,9 @@ describe('test tails distribution', () => { const tailsUrl = `http://127.0.0.1:${port}/${tailsUrlId}` await faber.sendCredentialOffer(buildRevocationDetails({ supportRevocation: true, tailsFile: `${__dirname}/tmp/faber/tails`, tailsUrl, maxCreds: 5 })) await alice.acceptCredentialOffer() - await faber.updateStateCredentialV2(StateType.RequestReceived) + await faber.updateStateCredentialV2(IssuerStateType.RequestReceived) await faber.sendCredential() - await alice.updateStateCredentialV2(StateType.Accepted) + await alice.updateStateCredentialV2(HolderStateType.Finished) const faberTailsHash = await faber.getTailsHash() const app = express() @@ -47,8 +47,8 @@ describe('test tails distribution', () => { const request = await faber.requestProofFromAlice() await alice.sendHolderProof(JSON.parse(request), revRegId => aliceTailsFileDir) - await faber.updateStateVerifierProofV2(StateType.Accepted) - await alice.updateStateHolderProofV2(StateType.Accepted) + await faber.updateStateVerifierProofV2(VerifierStateType.Finished) + await alice.updateStateHolderProofV2(ProverStateType.Finished) } catch (err) { console.error(`err = ${err.message} stack = ${err.stack}`) if (server) { diff --git a/agents/node/vcxagent-core/test/feature-discovery.spec.js b/agents/node/vcxagent-core/test/feature-discovery.spec.js index 2820cbf7f8..e44c04c233 100644 --- a/agents/node/vcxagent-core/test/feature-discovery.spec.js +++ b/agents/node/vcxagent-core/test/feature-discovery.spec.js @@ -10,7 +10,6 @@ beforeAll(async () => { }) describe('send ping, get ping', () => { - it('Faber should send credential to Alice', async () => { try { const { alice, faber } = await createPairedAliceAndFaber() diff --git a/agents/node/vcxagent-core/test/sign-messaging.spec.js b/agents/node/vcxagent-core/test/sign-messaging.spec.js index 654f8c61f5..99987a87e1 100644 --- a/agents/node/vcxagent-core/test/sign-messaging.spec.js +++ b/agents/node/vcxagent-core/test/sign-messaging.spec.js @@ -1,7 +1,7 @@ /* eslint-env jest */ require('jest') -const {createPairedAliceAndFaber} = require('./utils/utils') -const {initRustapi} = require('../src/index') +const { createPairedAliceAndFaber } = require('./utils/utils') +const { initRustapi } = require('../src/index') const sleep = require('sleep-promise') beforeAll(async () => { diff --git a/agents/node/vcxagent-core/test/update-state-v2.spec.js b/agents/node/vcxagent-core/test/update-state-v2.spec.js index 9562671a19..e8249da0be 100644 --- a/agents/node/vcxagent-core/test/update-state-v2.spec.js +++ b/agents/node/vcxagent-core/test/update-state-v2.spec.js @@ -1,9 +1,8 @@ /* eslint-env jest */ require('jest') -const { shutdownVcx } = require('@hyperledger/node-vcx-wrapper') const { createPairedAliceAndFaber } = require('./utils/utils') const { initRustapi } = require('../src/index') -const { StateType } = require('@hyperledger/node-vcx-wrapper') +const { IssuerStateType, HolderStateType, ProverStateType, VerifierStateType } = require('@hyperledger/node-vcx-wrapper') const sleep = require('sleep-promise') beforeAll(async () => { @@ -19,14 +18,14 @@ describe('test update state', () => { await faber.sendCredentialOffer() await alice.acceptCredentialOffer() - await faber.updateStateCredentialV2(StateType.RequestReceived) + await faber.updateStateCredentialV2(IssuerStateType.RequestReceived) await faber.sendCredential() - await alice.updateStateCredentialV2(StateType.Accepted) + await alice.updateStateCredentialV2(HolderStateType.Finished) const request = await faber.requestProofFromAlice() await alice.sendHolderProof(JSON.parse(request)) - await faber.updateStateVerifierProofV2(StateType.Accepted) - await alice.updateStateHolderProofV2(StateType.Accepted) + await faber.updateStateVerifierProofV2(VerifierStateType.Finished) + await alice.updateStateHolderProofV2(ProverStateType.Finished) } catch (err) { console.error(`err = ${err.message} stack = ${err.stack}`) await sleep(2000) diff --git a/agents/node/vcxagent-core/test/utils/alice.js b/agents/node/vcxagent-core/test/utils/alice.js index a25923f716..f758c12257 100644 --- a/agents/node/vcxagent-core/test/utils/alice.js +++ b/agents/node/vcxagent-core/test/utils/alice.js @@ -1,6 +1,6 @@ /* eslint-env jest */ const { createVcxAgent } = require('../../src/index') -const { StateType } = require('@hyperledger/node-vcx-wrapper') +const { InviteeStateType, ProverStateType } = require('@hyperledger/node-vcx-wrapper') module.exports.createAlice = async function createAlice () { const agentName = `alice-${Math.floor(new Date() / 1000)}` @@ -26,7 +26,7 @@ module.exports.createAlice = async function createAlice () { await vcxAgent.serviceConnections.inviteeConnectionAcceptFromInvitation(connectionId, invite) const connection = await vcxAgent.serviceConnections.getVcxConnection(connectionId) - expect(await connection.getState()).toBe(StateType.OfferSent) + expect(await connection.getState()).toBe(InviteeStateType.Requested) await vcxAgent.agentShutdownVcx() } @@ -56,7 +56,7 @@ module.exports.createAlice = async function createAlice () { const { selectedCreds } = await vcxAgent.serviceProver.selectCredentials(disclosedProofId, mapRevRegId) const selfAttestedAttrs = { attribute_3: 'Smith' } await vcxAgent.serviceProver.generateProof(disclosedProofId, selectedCreds, selfAttestedAttrs) - expect(await vcxAgent.serviceProver.sendDisclosedProof(disclosedProofId, connectionId)).toBe(StateType.OfferSent) + expect(await vcxAgent.serviceProver.sendDisclosedProof(disclosedProofId, connectionId)).toBe(ProverStateType.PresentationSent) await vcxAgent.agentShutdownVcx() } diff --git a/agents/node/vcxagent-core/test/utils/faber.js b/agents/node/vcxagent-core/test/utils/faber.js index 0bdc147c14..7f75f5ee49 100644 --- a/agents/node/vcxagent-core/test/utils/faber.js +++ b/agents/node/vcxagent-core/test/utils/faber.js @@ -1,7 +1,7 @@ /* eslint-env jest */ const { buildRevocationDetails } = require('../../src') const { createVcxAgent, getSampleSchemaData } = require('../../src') -const { StateType } = require('@hyperledger/node-vcx-wrapper') +const { InviterStateType, IssuerStateType, VerifierStateType } = require('@hyperledger/node-vcx-wrapper') const { getAliceSchemaAttrs, getFaberCredDefName, getFaberProofData } = require('./data') module.exports.createFaber = async function createFaber () { @@ -30,7 +30,7 @@ module.exports.createFaber = async function createFaber () { const invite = await vcxAgent.serviceConnections.inviterConnectionCreate(connectionId, undefined) logger.info(`Faber generated invite:\n${invite}`) const connection = await vcxAgent.serviceConnections.getVcxConnection(connectionId) - expect(await connection.getState()).toBe(StateType.Initialized) + expect(await connection.getState()).toBe(InviterStateType.Invited) await vcxAgent.agentShutdownVcx() @@ -41,7 +41,7 @@ module.exports.createFaber = async function createFaber () { logger.info('Faber is going to generate invite') await vcxAgent.agentInitVcx() - expect(await vcxAgent.serviceConnections.connectionUpdate(connectionId)).toBe(StateType.RequestReceived) + expect(await vcxAgent.serviceConnections.connectionUpdate(connectionId)).toBe(InviterStateType.Responded) await vcxAgent.agentShutdownVcx() } @@ -90,7 +90,7 @@ module.exports.createFaber = async function createFaber () { await vcxAgent.agentInitVcx() logger.info('Issuer sending credential') - expect(await vcxAgent.serviceCredIssuer.sendCredential(issuerCredId, connectionId)).toBe(StateType.Accepted) + expect(await vcxAgent.serviceCredIssuer.sendCredential(issuerCredId, connectionId)).toBe(IssuerStateType.Finished) logger.info('Credential sent') await vcxAgent.agentShutdownVcx() @@ -105,7 +105,7 @@ module.exports.createFaber = async function createFaber () { await vcxAgent.serviceVerifier.createProof(proofId, proofData) logger.info(`Faber is sending proof request to connection ${connectionId}`) const { state, proofRequestMessage } = await vcxAgent.serviceVerifier.sendProofRequest(connectionId, proofId) - expect(state).toBe(StateType.OfferSent) + expect(state).toBe(VerifierStateType.PresentationRequestSent) await vcxAgent.agentShutdownVcx() return proofRequestMessage } diff --git a/wrappers/node/src/api/common.ts b/wrappers/node/src/api/common.ts index d08d0ebdce..a93a47eb6d 100644 --- a/wrappers/node/src/api/common.ts +++ b/wrappers/node/src/api/common.ts @@ -118,6 +118,55 @@ export enum StateType { Rejected = 9, } +export enum InviterStateType { + Null = 0, + Invited = 1, + Requested = 2, + Responded = 3, + Completed = 4 +} + +export enum InviteeStateType { + Null = 0, + Invited = 1, + Requested = 2, + Responded = 3, + Completed = 4 +} + +export enum HolderStateType { + OfferReceived = 0, + RequestSent = 1, + Finished = 2, + Failed = 3, +} + +export enum IssuerStateType { + Initial = 0, + OfferSent = 1, + RequestReceived = 2, + CredentialSent = 3, + Finished = 4, + Failed = 5, +} + +export enum ProverStateType { + Initial = 0, + PresentationPrepared = 1, + PresentationPreparationFailed = 2, + PresentationSent = 3, + Finished = 4, + Failed = 5, +} + +export enum VerifierStateType { + Initial = 0, + PresentationRequestSent = 1, + Finished = 2, + Failed = 3, +} + + export interface IInitVCXOptions { libVCXPath?: string; }