@@ -35,6 +35,8 @@ import type {
35
35
Verifiers ,
36
36
} from '@hyperledger/indy-vdr-shared'
37
37
38
+ import { handleInvalidNullResponse , IndyVdrError } from '@hyperledger/indy-vdr-shared'
39
+
38
40
import { handleError } from './error'
39
41
import {
40
42
deallocateCallback ,
@@ -46,6 +48,14 @@ import {
46
48
} from './ffi'
47
49
import { nativeIndyVdr } from './library'
48
50
51
+ function handleReturnPointer < Return > ( returnValue : Buffer ) : Return {
52
+ if ( returnValue . address ( ) === 0 ) {
53
+ throw IndyVdrError . customError ( { message : 'Unexpected null pointer' } )
54
+ }
55
+
56
+ return returnValue . deref ( ) as Return
57
+ }
58
+
49
59
export class NodeJSIndyVdr implements IndyVdr {
50
60
private promisify = async ( method : ( nativeCallbackPtr : Buffer , id : number ) => void ) : Promise < void > => {
51
61
return new Promise ( ( resolve , reject ) => {
@@ -65,10 +75,10 @@ export class NodeJSIndyVdr implements IndyVdr {
65
75
} )
66
76
}
67
77
68
- private promisifyWithResponse = async < T > (
78
+ private promisifyWithResponse = async < Return > (
69
79
method : ( nativeCallbackWithResponsePtr : Buffer , id : number ) => void ,
70
80
isStream = false
71
- ) : Promise < T > => {
81
+ ) : Promise < Return | null > => {
72
82
return new Promise ( ( resolve , reject ) => {
73
83
const cb : NativeCallbackWithResponse = ( id , errorCode , response ) => {
74
84
deallocateCallback ( id )
@@ -83,7 +93,9 @@ export class NodeJSIndyVdr implements IndyVdr {
83
93
//this is required to add array brackets, and commas, to an invalid json object that
84
94
// should be a list
85
95
const mappedResponse = isStream ? '[' + response . replace ( / \n / g, ',' ) + ']' : response
86
- resolve ( JSON . parse ( mappedResponse ) as T )
96
+
97
+ if ( mappedResponse . length === 0 ) return resolve ( null )
98
+ resolve ( JSON . parse ( mappedResponse ) as Return )
87
99
} catch ( error ) {
88
100
reject ( error )
89
101
}
@@ -96,7 +108,8 @@ export class NodeJSIndyVdr implements IndyVdr {
96
108
public getCurrentError ( ) : string {
97
109
const error = allocateString ( )
98
110
handleError ( nativeIndyVdr . indy_vdr_get_current_error ( error ) )
99
- return error . deref ( ) as string
111
+
112
+ return handleReturnPointer < string > ( error )
100
113
}
101
114
102
115
public version ( ) : string {
@@ -130,7 +143,7 @@ export class NodeJSIndyVdr implements IndyVdr {
130
143
nativeIndyVdr . indy_vdr_build_acceptance_mechanisms_request ( submitterDid , aml , version , amlContext , requestHandle )
131
144
)
132
145
133
- return requestHandle . deref ( ) as number
146
+ return handleReturnPointer < number > ( requestHandle )
134
147
}
135
148
136
149
public buildGetAcceptanceMechanismsRequest ( options : GetAcceptanceMechanismsRequestOptions ) : number {
@@ -149,7 +162,7 @@ export class NodeJSIndyVdr implements IndyVdr {
149
162
)
150
163
)
151
164
152
- return requestHandle . deref ( ) as number
165
+ return handleReturnPointer < number > ( requestHandle )
153
166
}
154
167
155
168
public buildAttribRequest ( options : AttribRequestOptions ) : number {
@@ -158,7 +171,7 @@ export class NodeJSIndyVdr implements IndyVdr {
158
171
159
172
handleError ( nativeIndyVdr . indy_vdr_build_attrib_request ( submitterDid , targetDid , hash , raw , enc , requestHandle ) )
160
173
161
- return requestHandle . deref ( ) as number
174
+ return handleReturnPointer < number > ( requestHandle )
162
175
}
163
176
164
177
public buildGetAttribRequest ( options : GetAttribRequestOptions ) : number {
@@ -167,7 +180,7 @@ export class NodeJSIndyVdr implements IndyVdr {
167
180
168
181
handleError ( nativeIndyVdr . indy_vdr_build_get_attrib_request ( submitterDid , targetDid , raw , hash , enc , requestHandle ) )
169
182
170
- return requestHandle . deref ( ) as number
183
+ return handleReturnPointer < number > ( requestHandle )
171
184
}
172
185
173
186
public buildCredDefRequest ( options : CredentialDefinitionRequestOptions ) : number {
@@ -176,7 +189,7 @@ export class NodeJSIndyVdr implements IndyVdr {
176
189
177
190
handleError ( nativeIndyVdr . indy_vdr_build_cred_def_request ( submitterDid , credentialDefinition , requestHandle ) )
178
191
179
- return requestHandle . deref ( ) as number
192
+ return handleReturnPointer < number > ( requestHandle )
180
193
}
181
194
182
195
public buildGetCredDefRequest ( options : GetCredentialDefinitionRequestOptions ) : number {
@@ -185,7 +198,7 @@ export class NodeJSIndyVdr implements IndyVdr {
185
198
186
199
handleError ( nativeIndyVdr . indy_vdr_build_get_cred_def_request ( submitterDid , credentialDefinitionId , requestHandle ) )
187
200
188
- return requestHandle . deref ( ) as number
201
+ return handleReturnPointer < number > ( requestHandle )
189
202
}
190
203
191
204
public buildGetRevocRegDefRequest ( options : GetRevocationRegistryDefinitionRequestOptions ) : number {
@@ -196,7 +209,7 @@ export class NodeJSIndyVdr implements IndyVdr {
196
209
nativeIndyVdr . indy_vdr_build_get_revoc_reg_def_request ( submitterDid , revocationRegistryId , requestHandle )
197
210
)
198
211
199
- return requestHandle . deref ( ) as number
212
+ return handleReturnPointer < number > ( requestHandle )
200
213
}
201
214
202
215
public buildGetRevocRegRequest ( options : GetRevocationRegistryRequestOptions ) : number {
@@ -207,7 +220,7 @@ export class NodeJSIndyVdr implements IndyVdr {
207
220
nativeIndyVdr . indy_vdr_build_get_revoc_reg_request ( submitterDid , revocationRegistryId , timestamp , requestHandle )
208
221
)
209
222
210
- return requestHandle . deref ( ) as number
223
+ return handleReturnPointer < number > ( requestHandle )
211
224
}
212
225
213
226
public buildGetRevocRegDeltaRequest ( options : GetRevocationRegistryDeltaRequestOptions ) : number {
@@ -226,7 +239,7 @@ export class NodeJSIndyVdr implements IndyVdr {
226
239
)
227
240
)
228
241
229
- return requestHandle . deref ( ) as number
242
+ return handleReturnPointer < number > ( requestHandle )
230
243
}
231
244
232
245
public buildRevocRegDefRequest ( options : RevocationRegistryDefinitionRequestOptions ) : number {
@@ -237,7 +250,7 @@ export class NodeJSIndyVdr implements IndyVdr {
237
250
nativeIndyVdr . indy_vdr_build_revoc_reg_def_request ( submitterDid , revocationRegistryDefinition , requestHandle )
238
251
)
239
252
240
- return requestHandle . deref ( ) as number
253
+ return handleReturnPointer < number > ( requestHandle )
241
254
}
242
255
243
256
public buildCustomRequest ( options : CustomRequestOptions ) : number {
@@ -246,7 +259,7 @@ export class NodeJSIndyVdr implements IndyVdr {
246
259
247
260
handleError ( nativeIndyVdr . indy_vdr_build_custom_request ( customRequest , requestHandle ) )
248
261
249
- return requestHandle . deref ( ) as number
262
+ return handleReturnPointer < number > ( requestHandle )
250
263
}
251
264
252
265
public buildDisableAllTxnAuthorAgreementsRequest (
@@ -257,7 +270,7 @@ export class NodeJSIndyVdr implements IndyVdr {
257
270
258
271
handleError ( nativeIndyVdr . indy_vdr_build_disable_all_txn_author_agreements_request ( submitterDid , requestHandle ) )
259
272
260
- return requestHandle . deref ( ) as number
273
+ return handleReturnPointer < number > ( requestHandle )
261
274
}
262
275
263
276
public buildGetNymRequest ( options : GetNymRequestOptions ) : number {
@@ -266,7 +279,7 @@ export class NodeJSIndyVdr implements IndyVdr {
266
279
267
280
handleError ( nativeIndyVdr . indy_vdr_build_get_nym_request ( submitterDid , dest , requestHandle ) )
268
281
269
- return requestHandle . deref ( ) as number
282
+ return handleReturnPointer < number > ( requestHandle )
270
283
}
271
284
272
285
public buildGetSchemaRequest ( options : GetSchemaRequestOptions ) : number {
@@ -275,7 +288,7 @@ export class NodeJSIndyVdr implements IndyVdr {
275
288
276
289
handleError ( nativeIndyVdr . indy_vdr_build_get_schema_request ( submitterDid , schemaId , requestHandle ) )
277
290
278
- return requestHandle . deref ( ) as number
291
+ return handleReturnPointer < number > ( requestHandle )
279
292
}
280
293
281
294
public buildGetTxnAuthorAgreementRequest ( options : GetTransactionAuthorAgreementRequestOptions ) : number {
@@ -284,7 +297,7 @@ export class NodeJSIndyVdr implements IndyVdr {
284
297
285
298
handleError ( nativeIndyVdr . indy_vdr_build_get_txn_author_agreement_request ( submitterDid , data , requestHandle ) )
286
299
287
- return requestHandle . deref ( ) as number
300
+ return handleReturnPointer < number > ( requestHandle )
288
301
}
289
302
290
303
public buildGetTxnRequest ( options : GetTransactionRequestOptions ) : number {
@@ -293,7 +306,7 @@ export class NodeJSIndyVdr implements IndyVdr {
293
306
294
307
handleError ( nativeIndyVdr . indy_vdr_build_get_txn_request ( submitterDid , ledgerType , seqNo , requestHandle ) )
295
308
296
- return requestHandle . deref ( ) as number
309
+ return handleReturnPointer < number > ( requestHandle )
297
310
}
298
311
299
312
public buildGetValidatorInfoRequest ( options : GetValidatorInfoActionOptions ) : number {
@@ -302,7 +315,7 @@ export class NodeJSIndyVdr implements IndyVdr {
302
315
303
316
handleError ( nativeIndyVdr . indy_vdr_build_get_validator_info_request ( submitterDid , requestHandle ) )
304
317
305
- return requestHandle . deref ( ) as number
318
+ return handleReturnPointer < number > ( requestHandle )
306
319
}
307
320
308
321
public buildNymRequest ( options : NymRequestOptions ) : number {
@@ -311,7 +324,7 @@ export class NodeJSIndyVdr implements IndyVdr {
311
324
312
325
handleError ( nativeIndyVdr . indy_vdr_build_nym_request ( submitterDid , dest , verkey , alias , role , requestHandle ) )
313
326
314
- return requestHandle . deref ( ) as number
327
+ return handleReturnPointer < number > ( requestHandle )
315
328
}
316
329
317
330
public buildRevocRegEntryRequest ( options : RevocationRegistryEntryRequestOptions ) : number {
@@ -329,7 +342,7 @@ export class NodeJSIndyVdr implements IndyVdr {
329
342
)
330
343
)
331
344
332
- return requestHandle . deref ( ) as number
345
+ return handleReturnPointer < number > ( requestHandle )
333
346
}
334
347
335
348
public buildSchemaRequest ( options : SchemaRequestOptions ) : number {
@@ -338,7 +351,7 @@ export class NodeJSIndyVdr implements IndyVdr {
338
351
339
352
handleError ( nativeIndyVdr . indy_vdr_build_schema_request ( submitterDid , schema , requestHandle ) )
340
353
341
- return requestHandle . deref ( ) as number
354
+ return handleReturnPointer < number > ( requestHandle )
342
355
}
343
356
344
357
public buildTxnAuthorAgreementRequest ( options : TransactionAuthorAgreementRequestOptions ) : number {
@@ -359,7 +372,7 @@ export class NodeJSIndyVdr implements IndyVdr {
359
372
)
360
373
)
361
374
362
- return requestHandle . deref ( ) as number
375
+ return handleReturnPointer < number > ( requestHandle )
363
376
}
364
377
365
378
public poolCreate ( options : PoolCreateOptions ) : number {
@@ -368,7 +381,7 @@ export class NodeJSIndyVdr implements IndyVdr {
368
381
369
382
handleError ( nativeIndyVdr . indy_vdr_pool_create ( parameters , poolHandle ) )
370
383
371
- return poolHandle . deref ( ) as number
384
+ return handleReturnPointer < number > ( poolHandle )
372
385
}
373
386
374
387
public async poolRefresh ( options : { poolHandle : number } ) : Promise < void > {
@@ -377,41 +390,55 @@ export class NodeJSIndyVdr implements IndyVdr {
377
390
return this . promisify ( ( cbPtr , id ) => nativeIndyVdr . indy_vdr_pool_refresh ( poolHandle , cbPtr , id ) )
378
391
}
379
392
380
- public poolGetStatus ( options : { poolHandle : number } ) : Promise < PoolStatus > {
393
+ public async poolGetStatus ( options : { poolHandle : number } ) : Promise < PoolStatus > {
381
394
const { poolHandle } = serializeArguments ( options )
382
395
383
- return this . promisifyWithResponse ( ( cbPtr , id ) => nativeIndyVdr . indy_vdr_pool_get_status ( poolHandle , cbPtr , id ) )
396
+ const poolStatus = await this . promisifyWithResponse < PoolStatus > ( ( cbPtr , id ) =>
397
+ nativeIndyVdr . indy_vdr_pool_get_status ( poolHandle , cbPtr , id )
398
+ )
399
+
400
+ return handleInvalidNullResponse ( poolStatus )
384
401
}
385
402
386
403
public async poolGetTransactions ( options : { poolHandle : number } ) : Promise < Transactions > {
387
404
const { poolHandle } = serializeArguments ( options )
388
405
389
- return this . promisifyWithResponse < Transactions > (
406
+ const transactions = await this . promisifyWithResponse < Transactions > (
390
407
( cbPtr , id ) => nativeIndyVdr . indy_vdr_pool_get_transactions ( poolHandle , cbPtr , id ) ,
391
408
true
392
409
)
410
+
411
+ return handleInvalidNullResponse ( transactions )
393
412
}
394
413
395
414
public async poolGetVerifiers ( options : { poolHandle : number } ) : Promise < Verifiers > {
396
415
const { poolHandle } = serializeArguments ( options )
397
416
398
- return this . promisifyWithResponse ( ( cbPtr , id ) => nativeIndyVdr . indy_vdr_pool_get_verifiers ( poolHandle , cbPtr , id ) )
417
+ const verifiers = await this . promisifyWithResponse < Verifiers > ( ( cbPtr , id ) =>
418
+ nativeIndyVdr . indy_vdr_pool_get_verifiers ( poolHandle , cbPtr , id )
419
+ )
420
+
421
+ return handleInvalidNullResponse ( verifiers )
399
422
}
400
423
401
424
public async poolSubmitAction < T > ( options : PoolSubmitActionOptions & { poolHandle : number } ) : Promise < T > {
402
425
const { requestHandle, poolHandle, nodes, timeout } = serializeArguments ( options )
403
426
404
- return this . promisifyWithResponse ( ( cbPtr , id ) =>
427
+ const response = await this . promisifyWithResponse < T > ( ( cbPtr , id ) =>
405
428
nativeIndyVdr . indy_vdr_pool_submit_action ( poolHandle , requestHandle , nodes , timeout , cbPtr , id )
406
429
)
430
+
431
+ return handleInvalidNullResponse ( response )
407
432
}
408
433
409
434
public async poolSubmitRequest < T > ( options : PoolSubmitRequestOptions & { poolHandle : number } ) : Promise < T > {
410
435
const { requestHandle, poolHandle } = serializeArguments ( options )
411
436
412
- return this . promisifyWithResponse ( ( cbPtr , id ) =>
437
+ const response = await this . promisifyWithResponse < T > ( ( cbPtr , id ) =>
413
438
nativeIndyVdr . indy_vdr_pool_submit_request ( poolHandle , requestHandle , cbPtr , id )
414
439
)
440
+
441
+ return handleInvalidNullResponse ( response )
415
442
}
416
443
417
444
public poolClose ( options : { poolHandle : number } ) : void {
@@ -435,7 +462,7 @@ export class NodeJSIndyVdr implements IndyVdr {
435
462
)
436
463
)
437
464
438
- return output . deref ( ) as string
465
+ return handleReturnPointer < string > ( output )
439
466
}
440
467
441
468
public requestFree ( options : { requestHandle : number } ) : void {
@@ -450,7 +477,8 @@ export class NodeJSIndyVdr implements IndyVdr {
450
477
451
478
handleError ( nativeIndyVdr . indy_vdr_request_get_body ( requestHandle , output ) )
452
479
453
- return JSON . parse ( output . deref ( ) as string ) as T
480
+ const outputString = handleReturnPointer < string > ( output )
481
+ return JSON . parse ( outputString ) as T
454
482
}
455
483
456
484
public requestGetSignatureInput ( options : { requestHandle : number } ) : string {
@@ -459,7 +487,7 @@ export class NodeJSIndyVdr implements IndyVdr {
459
487
460
488
handleError ( nativeIndyVdr . indy_vdr_request_get_signature_input ( requestHandle , output ) )
461
489
462
- return output . deref ( ) as string
490
+ return handleReturnPointer < string > ( output )
463
491
}
464
492
465
493
public requestSetEndorser ( options : RequestSetEndorserOptions & { requestHandle : number } ) : void {
0 commit comments