Skip to content

Commit 4cdb180

Browse files
committed
Creating acceptEvent
1 parent 9d71937 commit 4cdb180

3 files changed

Lines changed: 76 additions & 8 deletions

File tree

src/appTemplates/AppClientAccount.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,15 @@ class AppClientAccount extends Application {
5959
params: { types: ['request/collector-client-v1'], streams: [this.baseStreamId], limit: MAX_COLLECTORS }
6060
}];
6161
const [accessesRes, eventRes] = await this.connection.api(apiCalls);
62+
const accessHDSCollectorMap = {};
6263
for (const access of accessesRes.accesses) {
63-
// do something
64-
console.log('##', access);
65-
}
66-
for (const access of accessesRes.accessDeletions) {
67-
// do something
68-
console.log('##', access);
64+
if (access.clientData.hdsCollectorClient) {
65+
accessHDSCollectorMap[access.name] = access;
66+
}
6967
}
7068
for (const event of eventRes.events) {
7169
const collectorClient = new CollectorClient(this, event);
70+
if (accessHDSCollectorMap[collectorClient.key] != null) collectorClient.accessData = accessHDSCollectorMap[collectorClient.key];
7271
this.cache.collectorClientsMap[collectorClient.key] = collectorClient;
7372
}
7473

src/appTemplates/CollectorClient.js

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,21 @@ class CollectorClient {
2727
return this.eventData.content.requesterEventId;
2828
}
2929

30+
get requestData () {
31+
return this.eventData.content.requesterEventData.content;
32+
}
33+
3034
get status () {
3135
if (!this.accessData && this.eventData.status === CollectorClient.STATUSES.refused) {
3236
return CollectorClient.STATUSES.refused;
3337
}
3438
return CollectorClient.STATUSES.incoming;
3539
}
3640

37-
constructor (app, eventData) {
41+
constructor (app, eventData, accessData = null) {
3842
this.app = app;
3943
this.eventData = eventData;
44+
this.accessData = accessData;
4045
}
4146

4247
/**
@@ -47,7 +52,7 @@ class CollectorClient {
4752
const publicStreamId = accessInfo.clientData.hdsCollector.public.streamId;
4853
// get request event cont
4954
const requesterConnection = new pryv.Connection(apiEndpoint);
50-
const requesterEvents = await requesterConnection.apiOne('events.get', { streams: [publicStreamId], limit: 1 }, 'events');
55+
const requesterEvents = await requesterConnection.apiOne('events.get', { types: ['request/collector-v1'], streams: [publicStreamId], limit: 1 }, 'events');
5156
if (!requesterEvents[0]) throw new HDSLibError('Cannot find requester event in public stream', requesterEvents);
5257

5358
const eventData = {
@@ -64,6 +69,54 @@ class CollectorClient {
6469
return new CollectorClient(app, event);
6570
}
6671

72+
/**
73+
* Accept current request
74+
*/
75+
async accept () {
76+
// create access for requester
77+
if (this.accessData != null) throw new HDSLibError('Access Info already set');
78+
// create access
79+
const cleanedPermissions = this.requestData.permissions.map((p) => {
80+
if (p.streamId) return { streamId: p.streamId, level: p.level };
81+
return p;
82+
});
83+
const accessCreateData = {
84+
name: this.key,
85+
type: 'shared',
86+
permissions: cleanedPermissions,
87+
clientData: {
88+
hdsCollectorClient: {
89+
version: 0,
90+
eventData: this.eventData
91+
}
92+
}
93+
};
94+
const accessData = await this.app.connection.apiOne('accesses.create', accessCreateData, 'access');
95+
this.accessData = accessData;
96+
if (!this.accessData.apiEndpoint) throw new HDSLibError('Failed creating request access', accessData);
97+
98+
// sent access credentials to requester
99+
// check content of accessInfo
100+
const publicStreamId = this.eventData.content.accessInfo.clientData.hdsCollector.inbox.streamId;
101+
const requesterEventId = this.requesterEventId;
102+
const requestrerApiEndpoint = this.eventData.content.apiEndpoint;
103+
104+
// acceptEvent to be sent to requester
105+
const acceptEvent = {
106+
type: 'credentials/collector-v1',
107+
streamIds: [publicStreamId],
108+
content: {
109+
apiEndpoint: this.accessData.apiEndpoint,
110+
eventId: requesterEventId
111+
}
112+
};
113+
114+
const requesterConnection = new pryv.Connection(requestrerApiEndpoint);
115+
const requesterEvent = await requesterConnection.apiOne('events.create', acceptEvent, 'event');
116+
117+
return { accessData, requesterEvent };
118+
}
119+
67120
/**
68121
* return the key to discriminate collectorClients
69122
* @param {PryvAccessInfo} accessInfo

tests/apptemplates.test.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,9 @@ describe('[APTX] appTemplates', function () {
134134
// set request content
135135
const requestContent = {
136136
version: 0,
137+
requester: {
138+
name: 'Test requester name'
139+
},
137140
description: {
138141
en: 'Short Description'
139142
},
@@ -194,6 +197,19 @@ describe('[APTX] appTemplates', function () {
194197
assert.equal(collectorClientsCached.length, 1);
195198
const collectorClients = await appClient.getCollectorClients(true);
196199
assert.equal(collectorClients.length, 1);
200+
201+
// check requestData
202+
assert.deepEqual(collectorClient.requestData, requestContent);
203+
204+
// accept
205+
const acceptResult = await collectorClient.accept();
206+
assert.equal(acceptResult.requesterEvent.content.eventId, invite.eventId);
207+
assert.ok(!!acceptResult.requesterEvent.content.apiEndpoint);
208+
209+
// force refresh and check online
210+
const collectorClients2 = await appClient.getCollectorClients(true);
211+
assert.equal(collectorClients2.length, 1);
212+
assert.deepEqual(collectorClients2[0].accessData, acceptResult.accessData);
197213
});
198214

199215
describe('[APCX] app Templates Client', function () {

0 commit comments

Comments
 (0)