@@ -8,15 +8,21 @@ import {
8
8
waitForResource ,
9
9
} from '../../../bridge'
10
10
import type { Region , WaitForOptions } from '../../../bridge'
11
- import { PIN_TRANSIENT_STATUSES } from './content.gen'
11
+ import { NAME_TRANSIENT_STATUSES , PIN_TRANSIENT_STATUSES } from './content.gen'
12
12
import {
13
13
marshalCreatePinByCIDRequest ,
14
14
marshalCreatePinByURLRequest ,
15
15
marshalCreateVolumeRequest ,
16
+ marshalIpnsApiCreateNameRequest ,
17
+ marshalIpnsApiImportKeyNameRequest ,
18
+ marshalIpnsApiUpdateNameRequest ,
16
19
marshalReplacePinRequest ,
17
20
marshalUpdateVolumeRequest ,
21
+ unmarshalExportKeyNameResponse ,
22
+ unmarshalListNamesResponse ,
18
23
unmarshalListPinsResponse ,
19
24
unmarshalListVolumesResponse ,
25
+ unmarshalName ,
20
26
unmarshalPin ,
21
27
unmarshalReplacePinResponse ,
22
28
unmarshalVolume ,
@@ -27,12 +33,22 @@ import type {
27
33
CreateVolumeRequest ,
28
34
DeletePinRequest ,
29
35
DeleteVolumeRequest ,
36
+ ExportKeyNameResponse ,
30
37
GetPinRequest ,
31
38
GetVolumeRequest ,
39
+ IpnsApiCreateNameRequest ,
40
+ IpnsApiDeleteNameRequest ,
41
+ IpnsApiExportKeyNameRequest ,
42
+ IpnsApiGetNameRequest ,
43
+ IpnsApiImportKeyNameRequest ,
44
+ IpnsApiListNamesRequest ,
45
+ IpnsApiUpdateNameRequest ,
46
+ ListNamesResponse ,
32
47
ListPinsRequest ,
33
48
ListPinsResponse ,
34
49
ListVolumesRequest ,
35
50
ListVolumesResponse ,
51
+ Name ,
36
52
Pin ,
37
53
ReplacePinRequest ,
38
54
ReplacePinResponse ,
@@ -328,3 +344,179 @@ export class API extends ParentAPI {
328
344
urlParams : urlParams ( [ 'volume_id' , request . volumeId ] ) ,
329
345
} )
330
346
}
347
+
348
+ /** IPFS Naming service API. */
349
+ export class IpnsAPI extends ParentAPI {
350
+ /** Lists the available regions of the API. */
351
+ public static readonly LOCALITIES : Region [ ] = [ 'fr-par' , 'nl-ams' , 'pl-waw' ]
352
+
353
+ /**
354
+ * Create a new name. You can use the `ipns key` command to list and generate
355
+ * more names and their respective keys.
356
+ *
357
+ * @param request - The request {@link IpnsApiCreateNameRequest}
358
+ * @returns A Promise of Name
359
+ */
360
+ createName = ( request : Readonly < IpnsApiCreateNameRequest > ) =>
361
+ this . client . fetch < Name > (
362
+ {
363
+ body : JSON . stringify (
364
+ marshalIpnsApiCreateNameRequest ( request , this . client . settings ) ,
365
+ ) ,
366
+ headers : jsonContentHeaders ,
367
+ method : 'POST' ,
368
+ path : `/ipfs/v1alpha1/regions/${ validatePathParam (
369
+ 'region' ,
370
+ request . region ?? this . client . settings . defaultRegion ,
371
+ ) } /names`,
372
+ } ,
373
+ unmarshalName ,
374
+ )
375
+
376
+ /**
377
+ * Get information about a name. Retrieve information about a specific name.
378
+ *
379
+ * @param request - The request {@link IpnsApiGetNameRequest}
380
+ * @returns A Promise of Name
381
+ */
382
+ getName = ( request : Readonly < IpnsApiGetNameRequest > ) =>
383
+ this . client . fetch < Name > (
384
+ {
385
+ method : 'GET' ,
386
+ path : `/ipfs/v1alpha1/regions/${ validatePathParam (
387
+ 'region' ,
388
+ request . region ?? this . client . settings . defaultRegion ,
389
+ ) } /names/${ validatePathParam ( 'nameId' , request . nameId ) } `,
390
+ } ,
391
+ unmarshalName ,
392
+ )
393
+
394
+ /**
395
+ * Waits for {@link Name} to be in a final state.
396
+ *
397
+ * @param request - The request {@link GetNameRequest}
398
+ * @param options - The waiting options
399
+ * @returns A Promise of Name
400
+ */
401
+ waitForName = (
402
+ request : Readonly < IpnsApiGetNameRequest > ,
403
+ options ?: Readonly < WaitForOptions < Name > > ,
404
+ ) =>
405
+ waitForResource (
406
+ options ?. stop ??
407
+ ( res => Promise . resolve ( ! NAME_TRANSIENT_STATUSES . includes ( res . status ) ) ) ,
408
+ this . getName ,
409
+ request ,
410
+ options ,
411
+ )
412
+
413
+ /**
414
+ * Delete an existing name. Delete a name by its ID.
415
+ *
416
+ * @param request - The request {@link IpnsApiDeleteNameRequest}
417
+ */
418
+ deleteName = ( request : Readonly < IpnsApiDeleteNameRequest > ) =>
419
+ this . client . fetch < void > ( {
420
+ method : 'DELETE' ,
421
+ path : `/ipfs/v1alpha1/regions/${ validatePathParam (
422
+ 'region' ,
423
+ request . region ?? this . client . settings . defaultRegion ,
424
+ ) } /names/${ validatePathParam ( 'nameId' , request . nameId ) } `,
425
+ } )
426
+
427
+ protected pageOfListNames = (
428
+ request : Readonly < IpnsApiListNamesRequest > = { } ,
429
+ ) =>
430
+ this . client . fetch < ListNamesResponse > (
431
+ {
432
+ method : 'GET' ,
433
+ path : `/ipfs/v1alpha1/regions/${ validatePathParam (
434
+ 'region' ,
435
+ request . region ?? this . client . settings . defaultRegion ,
436
+ ) } /names`,
437
+ urlParams : urlParams (
438
+ [ 'order_by' , request . orderBy ?? 'created_at_asc' ] ,
439
+ [ 'organization_id' , request . organizationId ] ,
440
+ [ 'page' , request . page ] ,
441
+ [
442
+ 'page_size' ,
443
+ request . pageSize ?? this . client . settings . defaultPageSize ,
444
+ ] ,
445
+ [ 'project_id' , request . projectId ] ,
446
+ ) ,
447
+ } ,
448
+ unmarshalListNamesResponse ,
449
+ )
450
+
451
+ /**
452
+ * List all names by a Project ID. Retrieve information about all names from a
453
+ * Project ID.
454
+ *
455
+ * @param request - The request {@link IpnsApiListNamesRequest}
456
+ * @returns A Promise of ListNamesResponse
457
+ */
458
+ listNames = ( request : Readonly < IpnsApiListNamesRequest > = { } ) =>
459
+ enrichForPagination ( 'names' , this . pageOfListNames , request )
460
+
461
+ /**
462
+ * Update name information. Update name information (CID, tag, name...).
463
+ *
464
+ * @param request - The request {@link IpnsApiUpdateNameRequest}
465
+ * @returns A Promise of Name
466
+ */
467
+ updateName = ( request : Readonly < IpnsApiUpdateNameRequest > ) =>
468
+ this . client . fetch < Name > (
469
+ {
470
+ body : JSON . stringify (
471
+ marshalIpnsApiUpdateNameRequest ( request , this . client . settings ) ,
472
+ ) ,
473
+ headers : jsonContentHeaders ,
474
+ method : 'PATCH' ,
475
+ path : `/ipfs/v1alpha1/regions/${ validatePathParam (
476
+ 'region' ,
477
+ request . region ?? this . client . settings . defaultRegion ,
478
+ ) } /names/${ validatePathParam ( 'nameId' , request . nameId ) } `,
479
+ } ,
480
+ unmarshalName ,
481
+ )
482
+
483
+ /**
484
+ * Export your private key. Export a private key by its ID.
485
+ *
486
+ * @param request - The request {@link IpnsApiExportKeyNameRequest}
487
+ * @returns A Promise of ExportKeyNameResponse
488
+ */
489
+ exportKeyName = ( request : Readonly < IpnsApiExportKeyNameRequest > ) =>
490
+ this . client . fetch < ExportKeyNameResponse > (
491
+ {
492
+ method : 'GET' ,
493
+ path : `/ipfs/v1alpha1/regions/${ validatePathParam (
494
+ 'region' ,
495
+ request . region ?? this . client . settings . defaultRegion ,
496
+ ) } /names/${ validatePathParam ( 'nameId' , request . nameId ) } /export-key`,
497
+ } ,
498
+ unmarshalExportKeyNameResponse ,
499
+ )
500
+
501
+ /**
502
+ * Import your private key. Import a private key.
503
+ *
504
+ * @param request - The request {@link IpnsApiImportKeyNameRequest}
505
+ * @returns A Promise of Name
506
+ */
507
+ importKeyName = ( request : Readonly < IpnsApiImportKeyNameRequest > ) =>
508
+ this . client . fetch < Name > (
509
+ {
510
+ body : JSON . stringify (
511
+ marshalIpnsApiImportKeyNameRequest ( request , this . client . settings ) ,
512
+ ) ,
513
+ headers : jsonContentHeaders ,
514
+ method : 'POST' ,
515
+ path : `/ipfs/v1alpha1/regions/${ validatePathParam (
516
+ 'region' ,
517
+ request . region ?? this . client . settings . defaultRegion ,
518
+ ) } /names/import-key`,
519
+ } ,
520
+ unmarshalName ,
521
+ )
522
+ }
0 commit comments