@@ -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
0 commit comments