11import { ZeroAddress } from 'ethers' ;
22import { NULL_ADDRESS } from 'iexec/utils' ;
3+ import { createBulkOrder } from '../../utils/createBulkOrder.js' ;
34import {
45 ValidationError ,
56 WorkflowError ,
@@ -9,6 +10,7 @@ import {
910import { formatGrantedAccess } from '../../utils/formatGrantedAccess.js' ;
1011import {
1112 addressOrEnsSchema ,
13+ booleanSchema ,
1214 isEnsTest ,
1315 positiveIntegerStringSchema ,
1416 positiveStrictIntegerStringSchema ,
@@ -49,6 +51,7 @@ export const grantAccess = async ({
4951 authorizedUser,
5052 pricePerAccess,
5153 numberOfAccess,
54+ allowBulk = false ,
5255 onStatusUpdate = ( ) => { } ,
5356} : IExecConsumer & GrantAccessParams ) : Promise < GrantedAccess > => {
5457 const vProtectedData = addressOrEnsSchema ( )
@@ -68,6 +71,7 @@ export const grantAccess = async ({
6871 const vNumberOfAccess = positiveStrictIntegerStringSchema ( )
6972 . label ( 'numberOfAccess' )
7073 . validateSync ( numberOfAccess ) ;
74+ const vAllowBulk = booleanSchema ( ) . label ( 'allowBulk' ) . validateSync ( allowBulk ) ;
7175 const vOnStatusUpdate =
7276 validateOnStatusUpdateCallback < OnStatusUpdateFn < GrantAccessStatuses > > (
7377 onStatusUpdate
@@ -123,48 +127,97 @@ export const grantAccess = async ({
123127 } ) ;
124128 }
125129
126- vOnStatusUpdate ( {
127- title : 'CREATE_DATASET_ORDER' ,
128- isDone : false ,
129- } ) ;
130- const datasetorder = await iexec . order
131- . createDatasetorder ( {
130+ let datasetorder ;
131+
132+ if ( vAllowBulk ) {
133+ vOnStatusUpdate ( {
134+ title : 'CREATE_BULK_ORDER' ,
135+ isDone : false ,
136+ } ) ;
137+
138+ datasetorder = await createBulkOrder ( iexec , {
132139 dataset : vProtectedData ,
133- apprestrict : vAuthorizedApp ,
134- requesterrestrict : vAuthorizedUser ,
135- datasetprice : vPricePerAccess ,
136- volume : vNumberOfAccess ,
140+ app : vAuthorizedApp ,
141+ requester : vAuthorizedUser ,
142+ pricePerAccess : vPricePerAccess ,
137143 tag,
138- } )
139- . then ( ( datasetorderTemplate ) =>
140- iexec . order . signDatasetorder ( datasetorderTemplate )
141- )
142- . catch ( ( e ) => {
144+ } ) . catch ( ( e ) => {
143145 throw new WorkflowError ( {
144- message : 'Failed to sign data access ' ,
146+ message : 'Failed to create bulk order ' ,
145147 errorCause : e ,
146148 } ) ;
147149 } ) ;
148- vOnStatusUpdate ( {
149- title : 'CREATE_DATASET_ORDER' ,
150- isDone : true ,
151- } ) ;
152150
153- vOnStatusUpdate ( {
154- title : 'PUBLISH_DATASET_ORDER' ,
155- isDone : false ,
156- } ) ;
157- await iexec . order . publishDatasetorder ( datasetorder ) . catch ( ( e ) => {
158- handleIfProtocolError ( e ) ;
159- throw new WorkflowError ( {
160- message : 'Failed to publish data access' ,
161- errorCause : e ,
151+ vOnStatusUpdate ( {
152+ title : 'CREATE_BULK_ORDER' ,
153+ isDone : true ,
162154 } ) ;
163- } ) ;
164- vOnStatusUpdate ( {
165- title : 'PUBLISH_DATASET_ORDER' ,
166- isDone : true ,
167- } ) ;
168155
156+ vOnStatusUpdate ( {
157+ title : 'PUBLISH_BULK_ORDER' ,
158+ isDone : false ,
159+ } ) ;
160+
161+ await iexec . order . publishDatasetorder ( datasetorder ) . catch ( ( e ) => {
162+ handleIfProtocolError ( e ) ;
163+ throw new WorkflowError ( {
164+ message : 'Failed to publish bulk order' ,
165+ errorCause : e ,
166+ } ) ;
167+ } ) ;
168+
169+ vOnStatusUpdate ( {
170+ title : 'PUBLISH_BULK_ORDER' ,
171+ isDone : true ,
172+ } ) ;
173+ } else {
174+ vOnStatusUpdate ( {
175+ title : 'CREATE_DATASET_ORDER' ,
176+ isDone : false ,
177+ } ) ;
178+
179+ datasetorder = await iexec . order
180+ . createDatasetorder ( {
181+ dataset : vProtectedData ,
182+ apprestrict : vAuthorizedApp ,
183+ requesterrestrict : vAuthorizedUser ,
184+ datasetprice : vPricePerAccess ,
185+ volume : vNumberOfAccess ,
186+ tag,
187+ } )
188+ . then ( ( datasetorderTemplate ) =>
189+ iexec . order . signDatasetorder ( datasetorderTemplate )
190+ )
191+ . catch ( ( e ) => {
192+ throw new WorkflowError ( {
193+ message : 'Failed to sign data access' ,
194+ errorCause : e ,
195+ } ) ;
196+ } ) ;
197+
198+ vOnStatusUpdate ( {
199+ title : 'CREATE_DATASET_ORDER' ,
200+ isDone : true ,
201+ } ) ;
202+
203+ vOnStatusUpdate ( {
204+ title : 'PUBLISH_DATASET_ORDER' ,
205+ isDone : false ,
206+ } ) ;
207+
208+ await iexec . order . publishDatasetorder ( datasetorder ) . catch ( ( e ) => {
209+ handleIfProtocolError ( e ) ;
210+ throw new WorkflowError ( {
211+ message : 'Failed to publish data access' ,
212+ errorCause : e ,
213+ } ) ;
214+ } ) ;
215+
216+ vOnStatusUpdate ( {
217+ title : 'PUBLISH_DATASET_ORDER' ,
218+ isDone : true ,
219+ } ) ;
220+ }
221+ console . log ( datasetorder ) ;
169222 return formatGrantedAccess ( datasetorder , parseInt ( datasetorder . volume ) ) ;
170223} ;
0 commit comments