Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: IPEX apply, offer, agree #272

Merged
merged 6 commits into from
Aug 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
157 changes: 132 additions & 25 deletions examples/integration-scripts/credentials.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@
let verifierAid: Aid;
let legalEntityAid: Aid;

let applySaid: string;
let offerSaid: string;
let agreeSaid: string;

beforeAll(async () => {
[issuerClient, holderClient, verifierClient, legalEntityClient] =
await getOrCreateClients(4);
Expand Down Expand Up @@ -251,14 +255,13 @@
);
const grantNotification = holderNotifications[0]; // should only have one notification right now

const [admit, sigs, aend] = await holderClient
.ipex()
.admit(
holderAid.name,
'',
grantNotification.a.d!,
createTimestamp()
);
const [admit, sigs, aend] = await holderClient.ipex().admit({
senderName: holderAid.name,
message: '',
grantSaid: grantNotification.a.d!,
recipient: issuerAid.prefix,
datetime: createTimestamp(),
});
const op = await holderClient
.ipex()
.submitAdmit(holderAid.name, admit, sigs, aend, [issuerAid.prefix]);
Expand Down Expand Up @@ -289,7 +292,107 @@
assert(holderCredential.atc !== undefined);
});

await step('holder IPEX present', async () => {
await step('verifier IPEX apply', async () => {
const [apply, sigs, _] = await verifierClient.ipex().apply({

Check warning on line 296 in examples/integration-scripts/credentials.test.ts

View workflow job for this annotation

GitHub Actions / Build, lint, and test on Node 18 and macOS-latest

'_' is assigned a value but never used

Check warning on line 296 in examples/integration-scripts/credentials.test.ts

View workflow job for this annotation

GitHub Actions / Build, lint, and test on Node 20 and macOS-latest

'_' is assigned a value but never used

Check warning on line 296 in examples/integration-scripts/credentials.test.ts

View workflow job for this annotation

GitHub Actions / Build, lint, and test on Node 18 and ubuntu-latest

'_' is assigned a value but never used

Check warning on line 296 in examples/integration-scripts/credentials.test.ts

View workflow job for this annotation

GitHub Actions / Build, lint, and test on Node 20 and ubuntu-latest

'_' is assigned a value but never used
senderName: verifierAid.name,
schemaSaid: QVI_SCHEMA_SAID,
attributes: { LEI: '5493001KJTIIGC8Y1R17' },
recipient: holderAid.prefix,
datetime: createTimestamp(),
});

const op = await verifierClient
.ipex()
.submitApply(verifierAid.name, apply, sigs, [holderAid.prefix]);
await waitOperation(verifierClient, op);
});

await step('holder IPEX apply receive and offer', async () => {
const holderNotifications = await waitForNotifications(
holderClient,
'/exn/ipex/apply'
);

const holderApplyNote = holderNotifications[0];
assert(holderApplyNote.a.d);

const apply = await holderClient.exchanges().get(holderApplyNote.a.d);
applySaid = apply.exn.d;

let filter: { [x: string]: any } = { '-s': apply.exn.a.s };

Check warning on line 322 in examples/integration-scripts/credentials.test.ts

View workflow job for this annotation

GitHub Actions / Build, lint, and test on Node 18 and macOS-latest

'filter' is never reassigned. Use 'const' instead

Check warning on line 322 in examples/integration-scripts/credentials.test.ts

View workflow job for this annotation

GitHub Actions / Build, lint, and test on Node 18 and macOS-latest

Unexpected any. Specify a different type

Check warning on line 322 in examples/integration-scripts/credentials.test.ts

View workflow job for this annotation

GitHub Actions / Build, lint, and test on Node 20 and macOS-latest

'filter' is never reassigned. Use 'const' instead

Check warning on line 322 in examples/integration-scripts/credentials.test.ts

View workflow job for this annotation

GitHub Actions / Build, lint, and test on Node 20 and macOS-latest

Unexpected any. Specify a different type

Check warning on line 322 in examples/integration-scripts/credentials.test.ts

View workflow job for this annotation

GitHub Actions / Build, lint, and test on Node 18 and ubuntu-latest

'filter' is never reassigned. Use 'const' instead

Check warning on line 322 in examples/integration-scripts/credentials.test.ts

View workflow job for this annotation

GitHub Actions / Build, lint, and test on Node 18 and ubuntu-latest

Unexpected any. Specify a different type

Check warning on line 322 in examples/integration-scripts/credentials.test.ts

View workflow job for this annotation

GitHub Actions / Build, lint, and test on Node 20 and ubuntu-latest

'filter' is never reassigned. Use 'const' instead

Check warning on line 322 in examples/integration-scripts/credentials.test.ts

View workflow job for this annotation

GitHub Actions / Build, lint, and test on Node 20 and ubuntu-latest

Unexpected any. Specify a different type
for (const key in apply.exn.a.a) {
filter[`-a-${key}`] = apply.exn.a.a[key];
}

const matchingCreds = await holderClient.credentials().list({ filter });
expect(matchingCreds).toHaveLength(1);

await markAndRemoveNotification(holderClient, holderNotifications[0]);

const [offer, sigs, end] = await holderClient.ipex().offer({
senderName: holderAid.name,
recipient: verifierAid.prefix,
acdc: new Serder(matchingCreds[0].sad),
applySaid: applySaid,
datetime: createTimestamp(),
});

const op = await holderClient
.ipex()
.submitOffer(holderAid.name, offer, sigs, end, [
verifierAid.prefix,
]);
await waitOperation(holderClient, op);
});

await step('verifier receive offer and agree', async () => {
const verifierNotifications = await waitForNotifications(
verifierClient,
'/exn/ipex/offer'
);

const verifierOfferNote = verifierNotifications[0];
assert(verifierOfferNote.a.d);

const offer = await verifierClient
.exchanges()
.get(verifierOfferNote.a.d);
offerSaid = offer.exn.d;

expect(offer.exn.p).toBe(applySaid);
expect(offer.exn.e.acdc.a.LEI).toBe('5493001KJTIIGC8Y1R17');

await markAndRemoveNotification(verifierClient, verifierOfferNote);

const [agree, sigs, _] = await verifierClient.ipex().agree({

Check warning on line 367 in examples/integration-scripts/credentials.test.ts

View workflow job for this annotation

GitHub Actions / Build, lint, and test on Node 18 and macOS-latest

'_' is assigned a value but never used

Check warning on line 367 in examples/integration-scripts/credentials.test.ts

View workflow job for this annotation

GitHub Actions / Build, lint, and test on Node 20 and macOS-latest

'_' is assigned a value but never used

Check warning on line 367 in examples/integration-scripts/credentials.test.ts

View workflow job for this annotation

GitHub Actions / Build, lint, and test on Node 18 and ubuntu-latest

'_' is assigned a value but never used

Check warning on line 367 in examples/integration-scripts/credentials.test.ts

View workflow job for this annotation

GitHub Actions / Build, lint, and test on Node 20 and ubuntu-latest

'_' is assigned a value but never used
senderName: verifierAid.name,
recipient: holderAid.prefix,
offerSaid: offerSaid,
datetime: createTimestamp(),
});

const op = await verifierClient
.ipex()
.submitAgree(verifierAid.name, agree, sigs, [holderAid.prefix]);
await waitOperation(verifierClient, op);
});

await step('holder IPEX receive agree and grant/present', async () => {
const holderNotifications = await waitForNotifications(
holderClient,
'/exn/ipex/agree'
);

const holderAgreeNote = holderNotifications[0];
assert(holderAgreeNote.a.d);

const agree = await holderClient.exchanges().get(holderAgreeNote.a.d);
agreeSaid = agree.exn.d;

expect(agree.exn.p).toBe(offerSaid);

await markAndRemoveNotification(holderClient, holderAgreeNote);

const holderCredential = await holderClient
.credentials()
.get(qviCredentialId);
Expand All @@ -303,6 +406,7 @@
acdcAttachment: holderCredential.atc,
ancAttachment: holderCredential.ancatc,
issAttachment: holderCredential.issAtc,
agreeSaid: agreeSaid,
datetime: createTimestamp(),
});

Expand All @@ -321,15 +425,18 @@
);

const verifierGrantNote = verifierNotifications[0];
assert(verifierGrantNote.a.d);

const [admit3, sigs3, aend3] = await verifierClient
.ipex()
.admit(
verifierAid.name,
'',
verifierGrantNote.a.d!,
createTimestamp()
);
const grant = await holderClient.exchanges().get(verifierGrantNote.a.d);
expect(grant.exn.p).toBe(agreeSaid);

const [admit3, sigs3, aend3] = await verifierClient.ipex().admit({
senderName: verifierAid.name,
message: '',
grantSaid: verifierGrantNote.a.d!,
recipient: holderAid.prefix,
datetime: createTimestamp(),
});

const op = await verifierClient
.ipex()
Expand All @@ -354,6 +461,7 @@
holderClient,
'/exn/ipex/admit'
);

await markAndRemoveNotification(holderClient, holderNotifications[0]);
});

Expand Down Expand Up @@ -445,14 +553,13 @@
);
const grantNotification = notifications[0];

const [admit, sigs, aend] = await legalEntityClient
.ipex()
.admit(
legalEntityAid.name,
'',
grantNotification.a.d!,
createTimestamp()
);
const [admit, sigs, aend] = await legalEntityClient.ipex().admit({
senderName: legalEntityAid.name,
message: '',
grantSaid: grantNotification.a.d!,
recipient: holderAid.prefix,
datetime: createTimestamp(),
});

const op = await legalEntityClient
.ipex()
Expand Down
10 changes: 7 additions & 3 deletions examples/integration-scripts/multisig-holder.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -510,9 +510,13 @@ async function multisigAdmitCredential(
let mHab = await client.identifiers().get(memberAlias);
let gHab = await client.identifiers().get(groupName);

const [admit, sigs, end] = await client
.ipex()
.admit(groupName, '', grantSaid, TIME);
const [admit, sigs, end] = await client.ipex().admit({
senderName: groupName,
message: '',
grantSaid: grantSaid,
recipient: issuerPrefix,
datetime: TIME,
});

let op = await client
.ipex()
Expand Down
9 changes: 6 additions & 3 deletions examples/integration-scripts/multisig.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1079,9 +1079,12 @@ test('multisig', async function run() {
console.log('Holder received exchange message with the grant message');
res = await client4.exchanges().get(msgSaid);

const [admit, asigs, aend] = await client4
.ipex()
.admit('holder', '', res.exn.d);
const [admit, asigs, aend] = await client4.ipex().admit({
senderName: 'holder',
message: '',
grantSaid: res.exn.d,
recipient: m['prefix'],
});

op4 = await client4
.ipex()
Expand Down
10 changes: 7 additions & 3 deletions examples/integration-scripts/singlesig-vlei-issuance.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -527,9 +527,13 @@ async function sendAdmitMessage(
assert.equal(notifications.length, 1);
const grantNotification = notifications[0];

const [admit, sigs, aend] = await senderClient
.ipex()
.admit(senderAid.name, '', grantNotification.a.d!, createTimestamp());
const [admit, sigs, aend] = await senderClient.ipex().admit({
senderName: senderAid.name,
message: '',
grantSaid: grantNotification.a.d!,
recipient: recipientAid.prefix,
datetime: createTimestamp(),
});

let op = await senderClient
.ipex()
Expand Down
10 changes: 7 additions & 3 deletions examples/integration-scripts/utils/multisig-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -157,9 +157,13 @@ export async function admitMultisig(
'/exn/ipex/grant'
);

const [admit, sigs, end] = await client
.ipex()
.admit(multisigAID.name, '', grantMsgSaid, timestamp);
const [admit, sigs, end] = await client.ipex().admit({
senderName: multisigAID.name,
message: '',
grantSaid: grantMsgSaid,
recipient: recipientAID.prefix,
datetime: timestamp,
});

await client
.ipex()
Expand Down
9 changes: 6 additions & 3 deletions examples/integration-scripts/utils/test-util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,12 @@ export async function admitSinglesig(
'/exn/ipex/grant'
);

const [admit, sigs, aend] = await client
.ipex()
.admit(aidName, '', grantMsgSaid);
const [admit, sigs, aend] = await client.ipex().admit({
senderName: aidName,
message: '',
grantSaid: grantMsgSaid,
recipient: recipientAid.prefix,
});

await client
.ipex()
Expand Down
Loading
Loading