@twin.org/auditable-item-stream-service 0.0.3-next.2 → 0.0.3-next.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/README.md +2 -2
  2. package/dist/es/auditableItemStreamRoutes.js +471 -130
  3. package/dist/es/auditableItemStreamRoutes.js.map +1 -1
  4. package/dist/es/auditableItemStreamService.js +330 -138
  5. package/dist/es/auditableItemStreamService.js.map +1 -1
  6. package/dist/es/entities/auditableItemStream.js +20 -6
  7. package/dist/es/entities/auditableItemStream.js.map +1 -1
  8. package/dist/es/models/IAuditableItemStreamServiceConstructorOptions.js.map +1 -1
  9. package/dist/es/models/IAuditableItemStreamServiceContext.js.map +1 -1
  10. package/dist/types/auditableItemStreamRoutes.d.ts +33 -1
  11. package/dist/types/auditableItemStreamService.d.ts +44 -37
  12. package/dist/types/entities/auditableItemStream.d.ts +12 -3
  13. package/dist/types/models/IAuditableItemStreamServiceConstructorOptions.d.ts +4 -0
  14. package/dist/types/models/IAuditableItemStreamServiceContext.d.ts +4 -0
  15. package/docs/changelog.md +355 -77
  16. package/docs/examples.md +211 -1
  17. package/docs/open-api/spec.json +839 -177
  18. package/docs/reference/classes/AuditableItemStream.md +32 -16
  19. package/docs/reference/classes/AuditableItemStreamEntry.md +13 -13
  20. package/docs/reference/classes/AuditableItemStreamService.md +107 -84
  21. package/docs/reference/functions/auditableItemStreamClose.md +31 -0
  22. package/docs/reference/functions/auditableItemStreamListEntriesNoStream.md +31 -0
  23. package/docs/reference/functions/auditableItemStreamListEntryObjectsNoStream.md +31 -0
  24. package/docs/reference/functions/auditableItemStreamRemoveProof.md +31 -0
  25. package/docs/reference/index.md +4 -0
  26. package/docs/reference/interfaces/IAuditableItemStreamServiceConfig.md +2 -2
  27. package/docs/reference/interfaces/IAuditableItemStreamServiceConstructorOptions.md +18 -10
  28. package/locales/en.json +6 -1
  29. package/package.json +6 -5
@@ -2,9 +2,9 @@
2
2
  // SPDX-License-Identifier: Apache-2.0.
3
3
  import { HttpParameterHelper } from "@twin.org/api-models";
4
4
  import { AuditableItemStreamContexts, AuditableItemStreamTypes } from "@twin.org/auditable-item-stream-models";
5
- import { Coerce, ComponentFactory, Guards } from "@twin.org/core";
5
+ import { Coerce, ComponentFactory, Guards, Is } from "@twin.org/core";
6
6
  import { SchemaOrgContexts, SchemaOrgTypes } from "@twin.org/standards-schema-org";
7
- import { HeaderTypes, HttpStatusCode, MimeTypes } from "@twin.org/web";
7
+ import { HeaderHelper, HeaderTypes, HttpStatusCode, MimeTypes } from "@twin.org/web";
8
8
  /**
9
9
  * The source used when communicating about these routes.
10
10
  */
@@ -39,21 +39,31 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
39
39
  id: "auditableItemStreamCreateRequestExample",
40
40
  request: {
41
41
  body: {
42
+ "@context": [
43
+ SchemaOrgContexts.Context,
44
+ AuditableItemStreamContexts.Context,
45
+ AuditableItemStreamContexts.ContextCommon
46
+ ],
47
+ type: AuditableItemStreamTypes.Stream,
42
48
  annotationObject: {
43
49
  "@context": "https://schema.org",
44
50
  "@type": "Note",
45
51
  content: "This is a simple note"
46
52
  },
47
- entries: [
48
- {
49
- entryObject: {
50
- "@context": "https://schema.org",
51
- "@type": "Event",
52
- startDate: "2011-04-09T20:00:00Z",
53
- description: "A description of the event"
53
+ entries: {
54
+ type: SchemaOrgTypes.ItemList,
55
+ [SchemaOrgTypes.ItemListElement]: [
56
+ {
57
+ type: AuditableItemStreamTypes.StreamEntry,
58
+ entryObject: {
59
+ "@context": "https://schema.org",
60
+ "@type": "Event",
61
+ startDate: "2011-04-09T20:00:00Z",
62
+ description: "A description of the event"
63
+ }
54
64
  }
55
- }
56
- ]
65
+ ]
66
+ }
57
67
  }
58
68
  }
59
69
  }
@@ -69,7 +79,7 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
69
79
  response: {
70
80
  statusCode: HttpStatusCode.created,
71
81
  headers: {
72
- [HeaderTypes.Location]: "ais:1234567890"
82
+ [HeaderTypes.Location]: "ais%3A1234567890"
73
83
  }
74
84
  }
75
85
  }
@@ -109,8 +119,9 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
109
119
  response: {
110
120
  body: {
111
121
  "@context": [
112
- AuditableItemStreamContexts.ContextRoot,
113
- AuditableItemStreamContexts.ContextRootCommon
122
+ SchemaOrgContexts.Context,
123
+ AuditableItemStreamContexts.Context,
124
+ AuditableItemStreamContexts.ContextCommon
114
125
  ],
115
126
  type: AuditableItemStreamTypes.Stream,
116
127
  id: "ais:1234567890",
@@ -124,25 +135,29 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
124
135
  organizationIdentity: "did:iota:1234567890",
125
136
  proofId: "0101010101010101010101010101010101010101010101010101010101010101",
126
137
  immutableInterval: 10,
127
- entries: [
128
- {
129
- "@context": [
130
- AuditableItemStreamContexts.ContextRoot,
131
- AuditableItemStreamContexts.ContextRootCommon
132
- ],
133
- type: AuditableItemStreamTypes.StreamEntry,
134
- id: "tst:1234567890",
135
- dateCreated: "2024-08-22T11:55:16.271Z",
136
- proofId: "0101010101010101010101010101010101010101010101010101010101010101",
137
- index: 0,
138
- entryObject: {
139
- "@context": "https://schema.org",
140
- "@type": "Event",
141
- startDate: "2011-04-09T20:00:00Z",
142
- description: "A description of the event"
138
+ numberOfItems: 1,
139
+ entries: {
140
+ type: SchemaOrgTypes.ItemList,
141
+ [SchemaOrgTypes.ItemListElement]: [
142
+ {
143
+ "@context": [
144
+ AuditableItemStreamContexts.Context,
145
+ AuditableItemStreamContexts.ContextCommon
146
+ ],
147
+ type: AuditableItemStreamTypes.StreamEntry,
148
+ id: "tst:1234567890",
149
+ dateCreated: "2024-08-22T11:55:16.271Z",
150
+ proofId: "0101010101010101010101010101010101010101010101010101010101010101",
151
+ index: 0,
152
+ entryObject: {
153
+ "@context": "https://schema.org",
154
+ "@type": "Event",
155
+ startDate: "2011-04-09T20:00:00Z",
156
+ description: "A description of the event"
157
+ }
143
158
  }
144
- }
145
- ]
159
+ ]
160
+ }
146
161
  }
147
162
  }
148
163
  }
@@ -160,8 +175,9 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
160
175
  },
161
176
  body: {
162
177
  "@context": [
163
- AuditableItemStreamContexts.ContextRoot,
164
- AuditableItemStreamContexts.ContextRootCommon
178
+ SchemaOrgContexts.Context,
179
+ AuditableItemStreamContexts.Context,
180
+ AuditableItemStreamContexts.ContextCommon
165
181
  ],
166
182
  type: AuditableItemStreamTypes.Stream,
167
183
  id: "ais:1234567890",
@@ -175,25 +191,29 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
175
191
  organizationIdentity: "did:iota:1234567890",
176
192
  proofId: "0101010101010101010101010101010101010101010101010101010101010101",
177
193
  immutableInterval: 10,
178
- entries: [
179
- {
180
- "@context": [
181
- AuditableItemStreamContexts.ContextRoot,
182
- AuditableItemStreamContexts.ContextRootCommon
183
- ],
184
- type: AuditableItemStreamTypes.StreamEntry,
185
- id: "tst:1234567890",
186
- dateCreated: "2024-08-22T11:55:16.271Z",
187
- proofId: "0101010101010101010101010101010101010101010101010101010101010101",
188
- index: 0,
189
- entryObject: {
190
- "@context": "https://schema.org",
191
- "@type": "Event",
192
- startDate: "2011-04-09T20:00:00Z",
193
- description: "A description of the event"
194
+ numberOfItems: 1,
195
+ entries: {
196
+ type: SchemaOrgTypes.ItemList,
197
+ [SchemaOrgTypes.ItemListElement]: [
198
+ {
199
+ "@context": [
200
+ AuditableItemStreamContexts.Context,
201
+ AuditableItemStreamContexts.ContextCommon
202
+ ],
203
+ type: AuditableItemStreamTypes.StreamEntry,
204
+ id: "tst:1234567890",
205
+ dateCreated: "2024-08-22T11:55:16.271Z",
206
+ proofId: "0101010101010101010101010101010101010101010101010101010101010101",
207
+ index: 0,
208
+ entryObject: {
209
+ "@context": "https://schema.org",
210
+ "@type": "Event",
211
+ startDate: "2011-04-09T20:00:00Z",
212
+ description: "A description of the event"
213
+ }
194
214
  }
195
- }
196
- ]
215
+ ]
216
+ }
197
217
  }
198
218
  }
199
219
  }
@@ -221,6 +241,12 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
221
241
  id: "ais:1234567890"
222
242
  },
223
243
  body: {
244
+ "@context": [
245
+ SchemaOrgContexts.Context,
246
+ AuditableItemStreamContexts.Context,
247
+ AuditableItemStreamContexts.ContextCommon
248
+ ],
249
+ type: AuditableItemStreamTypes.Stream,
224
250
  annotationObject: {
225
251
  "@context": "https://schema.org",
226
252
  "@type": "Note",
@@ -269,6 +295,35 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
269
295
  }
270
296
  ]
271
297
  };
298
+ const closeRoute = {
299
+ operationId: "auditableItemStreamClose",
300
+ summary: "Close a stream",
301
+ tag: tagsAuditableItemStream[0].name,
302
+ method: "PUT",
303
+ path: `${baseRouteName}/:id/close`,
304
+ handler: async (httpRequestContext, request) => auditableItemStreamClose(httpRequestContext, componentName, request),
305
+ requestType: {
306
+ type: "IAuditableItemStreamCloseRequest",
307
+ examples: [
308
+ {
309
+ id: "auditableItemStreamCloseRequestExample",
310
+ request: {
311
+ pathParams: {
312
+ id: "ais:1234567890"
313
+ }
314
+ }
315
+ }
316
+ ]
317
+ },
318
+ responseType: [
319
+ {
320
+ type: "INoContentResponse"
321
+ },
322
+ {
323
+ type: "INotFoundResponse"
324
+ }
325
+ ]
326
+ };
272
327
  const listRoute = {
273
328
  operationId: "auditableItemStreamList",
274
329
  summary: "Query streams",
@@ -294,16 +349,17 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
294
349
  response: {
295
350
  body: {
296
351
  "@context": [
297
- SchemaOrgContexts.ContextRoot,
298
- AuditableItemStreamContexts.ContextRoot,
299
- AuditableItemStreamContexts.ContextRootCommon
352
+ SchemaOrgContexts.Context,
353
+ AuditableItemStreamContexts.Context,
354
+ AuditableItemStreamContexts.ContextCommon
300
355
  ],
301
356
  type: [SchemaOrgTypes.ItemList, AuditableItemStreamTypes.StreamList],
302
357
  [SchemaOrgTypes.ItemListElement]: [
303
358
  {
304
359
  "@context": [
305
- AuditableItemStreamContexts.ContextRoot,
306
- AuditableItemStreamContexts.ContextRootCommon
360
+ SchemaOrgContexts.Context,
361
+ AuditableItemStreamContexts.Context,
362
+ AuditableItemStreamContexts.ContextCommon
307
363
  ],
308
364
  type: AuditableItemStreamTypes.Stream,
309
365
  id: "ais:1234567890",
@@ -316,10 +372,10 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
316
372
  },
317
373
  organizationIdentity: "did:iota:1234567890",
318
374
  proofId: "0101010101010101010101010101010101010101010101010101010101010101",
319
- immutableInterval: 10
375
+ immutableInterval: 10,
376
+ numberOfItems: 0
320
377
  }
321
- ],
322
- [SchemaOrgTypes.NextItem]: "1"
378
+ ]
323
379
  }
324
380
  }
325
381
  }
@@ -337,16 +393,17 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
337
393
  },
338
394
  body: {
339
395
  "@context": [
340
- SchemaOrgContexts.ContextRoot,
341
- AuditableItemStreamContexts.ContextRoot,
342
- AuditableItemStreamContexts.ContextRootCommon
396
+ SchemaOrgContexts.Context,
397
+ AuditableItemStreamContexts.Context,
398
+ AuditableItemStreamContexts.ContextCommon
343
399
  ],
344
400
  type: [SchemaOrgTypes.ItemList, AuditableItemStreamTypes.StreamList],
345
401
  [SchemaOrgTypes.ItemListElement]: [
346
402
  {
347
403
  "@context": [
348
- AuditableItemStreamContexts.ContextRoot,
349
- AuditableItemStreamContexts.ContextRootCommon
404
+ SchemaOrgContexts.Context,
405
+ AuditableItemStreamContexts.Context,
406
+ AuditableItemStreamContexts.ContextCommon
350
407
  ],
351
408
  type: AuditableItemStreamTypes.Stream,
352
409
  id: "ais:1234567890",
@@ -359,10 +416,10 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
359
416
  },
360
417
  organizationIdentity: "did:iota:1234567890",
361
418
  proofId: "0101010101010101010101010101010101010101010101010101010101010101",
362
- immutableInterval: 10
419
+ immutableInterval: 10,
420
+ numberOfItems: 0
363
421
  }
364
- ],
365
- [SchemaOrgTypes.NextItem]: "1"
422
+ ]
366
423
  }
367
424
  }
368
425
  }
@@ -378,7 +435,7 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
378
435
  summary: "Create a new stream entry",
379
436
  tag: tagsAuditableItemStream[0].name,
380
437
  method: "POST",
381
- path: `${baseRouteName}/:id`,
438
+ path: `${baseRouteName}/:id/entries`,
382
439
  handler: async (httpRequestContext, request) => auditableItemStreamCreateEntry(httpRequestContext, componentName, request),
383
440
  requestType: {
384
441
  type: "IAuditableItemStreamCreateEntryRequest",
@@ -411,7 +468,7 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
411
468
  response: {
412
469
  statusCode: HttpStatusCode.created,
413
470
  headers: {
414
- [HeaderTypes.Location]: "ais:1234567890:01010101010"
471
+ [HeaderTypes.Location]: "ais%3A1234567890%3A01010101010"
415
472
  }
416
473
  }
417
474
  }
@@ -424,7 +481,7 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
424
481
  summary: "Delete an entry from the stream",
425
482
  tag: tagsAuditableItemStream[0].name,
426
483
  method: "DELETE",
427
- path: `${baseRouteName}/:id/:entryId`,
484
+ path: `${baseRouteName}/:id/entries/:entryId`,
428
485
  handler: async (httpRequestContext, request) => auditableItemStreamDeleteEntry(httpRequestContext, componentName, request),
429
486
  requestType: {
430
487
  type: "IAuditableItemStreamDeleteRequest",
@@ -454,7 +511,7 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
454
511
  summary: "Update a stream entry",
455
512
  tag: tagsAuditableItemStream[0].name,
456
513
  method: "PUT",
457
- path: `${baseRouteName}/:id/:entryId`,
514
+ path: `${baseRouteName}/:id/entries/:entryId`,
458
515
  handler: async (httpRequestContext, request) => auditableItemStreamUpdateEntry(httpRequestContext, componentName, request),
459
516
  requestType: {
460
517
  type: "IAuditableItemStreamUpdateEntryRequest",
@@ -491,7 +548,7 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
491
548
  summary: "Get a stream entry",
492
549
  tag: tagsAuditableItemStream[0].name,
493
550
  method: "GET",
494
- path: `${baseRouteName}/:id/:entryId`,
551
+ path: `${baseRouteName}/:id/entries/:entryId`,
495
552
  handler: async (httpRequestContext, request) => auditableItemStreamGetEntry(httpRequestContext, componentName, request),
496
553
  requestType: {
497
554
  type: "IAuditableItemStreamGetEntryRequest",
@@ -516,8 +573,8 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
516
573
  response: {
517
574
  body: {
518
575
  "@context": [
519
- AuditableItemStreamContexts.ContextRoot,
520
- AuditableItemStreamContexts.ContextRootCommon
576
+ AuditableItemStreamContexts.Context,
577
+ AuditableItemStreamContexts.ContextCommon
521
578
  ],
522
579
  type: AuditableItemStreamTypes.StreamEntry,
523
580
  id: "tst:1234567890",
@@ -547,8 +604,8 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
547
604
  },
548
605
  body: {
549
606
  "@context": [
550
- AuditableItemStreamContexts.ContextRoot,
551
- AuditableItemStreamContexts.ContextRootCommon
607
+ AuditableItemStreamContexts.Context,
608
+ AuditableItemStreamContexts.ContextCommon
552
609
  ],
553
610
  type: AuditableItemStreamTypes.StreamEntry,
554
611
  id: "tst:1234567890",
@@ -573,10 +630,10 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
573
630
  };
574
631
  const getEntryObjectRoute = {
575
632
  operationId: "auditableItemStreamGetEntryObject",
576
- summary: "Get a stream entry",
633
+ summary: "Get a stream entry object",
577
634
  tag: tagsAuditableItemStream[0].name,
578
635
  method: "GET",
579
- path: `${baseRouteName}/:id/:entryId/object`,
636
+ path: `${baseRouteName}/:id/entries/:entryId/object`,
580
637
  handler: async (httpRequestContext, request) => auditableItemStreamGetEntryObject(httpRequestContext, componentName, request),
581
638
  requestType: {
582
639
  type: "IAuditableItemStreamGetEntryRequest",
@@ -643,16 +700,16 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
643
700
  response: {
644
701
  body: {
645
702
  "@context": [
646
- SchemaOrgContexts.ContextRoot,
647
- AuditableItemStreamContexts.ContextRoot,
648
- AuditableItemStreamContexts.ContextRootCommon
703
+ SchemaOrgContexts.Context,
704
+ AuditableItemStreamContexts.Context,
705
+ AuditableItemStreamContexts.ContextCommon
649
706
  ],
650
707
  type: [SchemaOrgTypes.ItemList, AuditableItemStreamTypes.StreamEntryList],
651
708
  [SchemaOrgTypes.ItemListElement]: [
652
709
  {
653
710
  "@context": [
654
- AuditableItemStreamContexts.ContextRoot,
655
- AuditableItemStreamContexts.ContextRootCommon
711
+ AuditableItemStreamContexts.Context,
712
+ AuditableItemStreamContexts.ContextCommon
656
713
  ],
657
714
  type: AuditableItemStreamTypes.StreamEntry,
658
715
  id: "tst:1234567890",
@@ -666,8 +723,7 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
666
723
  description: "A description of the event"
667
724
  }
668
725
  }
669
- ],
670
- [SchemaOrgTypes.NextItem]: "1"
726
+ ]
671
727
  }
672
728
  }
673
729
  }
@@ -685,16 +741,16 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
685
741
  },
686
742
  body: {
687
743
  "@context": [
688
- SchemaOrgContexts.ContextRoot,
689
- AuditableItemStreamContexts.ContextRoot,
690
- AuditableItemStreamContexts.ContextRootCommon
744
+ SchemaOrgContexts.Context,
745
+ AuditableItemStreamContexts.Context,
746
+ AuditableItemStreamContexts.ContextCommon
691
747
  ],
692
748
  type: [SchemaOrgTypes.ItemList, AuditableItemStreamTypes.StreamEntryList],
693
749
  [SchemaOrgTypes.ItemListElement]: [
694
750
  {
695
751
  "@context": [
696
- AuditableItemStreamContexts.ContextRoot,
697
- AuditableItemStreamContexts.ContextRootCommon
752
+ AuditableItemStreamContexts.Context,
753
+ AuditableItemStreamContexts.ContextCommon
698
754
  ],
699
755
  type: AuditableItemStreamTypes.StreamEntry,
700
756
  id: "tst:1234567890",
@@ -708,8 +764,107 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
708
764
  description: "A description of the event"
709
765
  }
710
766
  }
767
+ ]
768
+ }
769
+ }
770
+ }
771
+ ]
772
+ },
773
+ {
774
+ type: "INotFoundResponse"
775
+ }
776
+ ]
777
+ };
778
+ const listEntriesNoStreamRoute = {
779
+ operationId: "auditableItemStreamListEntriesNoStream",
780
+ summary: "Get the entry objects for all streams",
781
+ tag: tagsAuditableItemStream[0].name,
782
+ method: "GET",
783
+ path: `${baseRouteName}/entries`,
784
+ handler: async (httpRequestContext, request) => auditableItemStreamListEntriesNoStream(httpRequestContext, componentName, request),
785
+ requestType: {
786
+ type: "IAuditableItemStreamListEntriesNoStreamRequest",
787
+ examples: [
788
+ {
789
+ id: "auditableItemStreamListEntriesNoStreamRequestExample",
790
+ request: {}
791
+ }
792
+ ]
793
+ },
794
+ responseType: [
795
+ {
796
+ type: "IAuditableItemStreamListEntriesResponse",
797
+ examples: [
798
+ {
799
+ id: "auditableItemStreamListEntriesNoStreamResponseExample",
800
+ response: {
801
+ body: {
802
+ "@context": [
803
+ SchemaOrgContexts.Context,
804
+ AuditableItemStreamContexts.Context,
805
+ AuditableItemStreamContexts.ContextCommon
711
806
  ],
712
- [SchemaOrgTypes.NextItem]: "1"
807
+ type: [SchemaOrgTypes.ItemList, AuditableItemStreamTypes.StreamEntryList],
808
+ [SchemaOrgTypes.ItemListElement]: [
809
+ {
810
+ "@context": [
811
+ AuditableItemStreamContexts.Context,
812
+ AuditableItemStreamContexts.ContextCommon
813
+ ],
814
+ type: AuditableItemStreamTypes.StreamEntry,
815
+ id: "tst:1234567890",
816
+ dateCreated: "2024-08-22T11:55:16.271Z",
817
+ proofId: "0101010101010101010101010101010101010101010101010101010101010101",
818
+ index: 0,
819
+ entryObject: {
820
+ "@context": "https://schema.org",
821
+ "@type": "Event",
822
+ startDate: "2011-04-09T20:00:00Z",
823
+ description: "A description of the event"
824
+ }
825
+ }
826
+ ]
827
+ }
828
+ }
829
+ }
830
+ ]
831
+ },
832
+ {
833
+ type: "IAuditableItemStreamListEntriesResponse",
834
+ mimeType: MimeTypes.JsonLd,
835
+ examples: [
836
+ {
837
+ id: "auditableItemStreamJsonLdListEntriesNoStreamResponseExample",
838
+ response: {
839
+ headers: {
840
+ [HeaderTypes.ContentType]: MimeTypes.JsonLd
841
+ },
842
+ body: {
843
+ "@context": [
844
+ SchemaOrgContexts.Context,
845
+ AuditableItemStreamContexts.Context,
846
+ AuditableItemStreamContexts.ContextCommon
847
+ ],
848
+ type: [SchemaOrgTypes.ItemList, AuditableItemStreamTypes.StreamEntryList],
849
+ [SchemaOrgTypes.ItemListElement]: [
850
+ {
851
+ "@context": [
852
+ AuditableItemStreamContexts.Context,
853
+ AuditableItemStreamContexts.ContextCommon
854
+ ],
855
+ type: AuditableItemStreamTypes.StreamEntry,
856
+ id: "tst:1234567890",
857
+ dateCreated: "2024-08-22T11:55:16.271Z",
858
+ proofId: "0101010101010101010101010101010101010101010101010101010101010101",
859
+ index: 0,
860
+ entryObject: {
861
+ "@context": "https://schema.org",
862
+ "@type": "Event",
863
+ startDate: "2011-04-09T20:00:00Z",
864
+ description: "A description of the event"
865
+ }
866
+ }
867
+ ]
713
868
  }
714
869
  }
715
870
  }
@@ -749,9 +904,9 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
749
904
  response: {
750
905
  body: {
751
906
  "@context": [
752
- SchemaOrgContexts.ContextRoot,
753
- AuditableItemStreamContexts.ContextRoot,
754
- AuditableItemStreamContexts.ContextRootCommon
907
+ SchemaOrgContexts.Context,
908
+ AuditableItemStreamContexts.Context,
909
+ AuditableItemStreamContexts.ContextCommon
755
910
  ],
756
911
  type: [SchemaOrgTypes.ItemList, AuditableItemStreamTypes.StreamEntryObjectList],
757
912
  [SchemaOrgTypes.ItemListElement]: [
@@ -761,8 +916,55 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
761
916
  startDate: "2011-04-09T20:00:00Z",
762
917
  description: "A description of the event"
763
918
  }
919
+ ]
920
+ }
921
+ }
922
+ }
923
+ ]
924
+ },
925
+ {
926
+ type: "INotFoundResponse"
927
+ }
928
+ ]
929
+ };
930
+ const listEntryObjectsNoStreamRoute = {
931
+ operationId: "auditableItemStreamListEntryObjectsNoStream",
932
+ summary: "Get the entry objects for all streams",
933
+ tag: tagsAuditableItemStream[0].name,
934
+ method: "GET",
935
+ path: `${baseRouteName}/entries/objects`,
936
+ handler: async (httpRequestContext, request) => auditableItemStreamListEntryObjectsNoStream(httpRequestContext, componentName, request),
937
+ requestType: {
938
+ type: "IAuditableItemStreamListEntryObjectsNoStreamRequest",
939
+ examples: [
940
+ {
941
+ id: "auditableItemStreamListEntryObjectsNoStreamRequestExample",
942
+ request: {}
943
+ }
944
+ ]
945
+ },
946
+ responseType: [
947
+ {
948
+ type: "IAuditableItemStreamListEntryObjectsResponse",
949
+ examples: [
950
+ {
951
+ id: "auditableItemStreamListEntryObjectsNoStreamResponseExample",
952
+ response: {
953
+ body: {
954
+ "@context": [
955
+ SchemaOrgContexts.Context,
956
+ AuditableItemStreamContexts.Context,
957
+ AuditableItemStreamContexts.ContextCommon
764
958
  ],
765
- [SchemaOrgTypes.NextItem]: "1"
959
+ type: [SchemaOrgTypes.ItemList, AuditableItemStreamTypes.StreamEntryObjectList],
960
+ [SchemaOrgTypes.ItemListElement]: [
961
+ {
962
+ "@context": "https://schema.org",
963
+ "@type": "Event",
964
+ startDate: "2011-04-09T20:00:00Z",
965
+ description: "A description of the event"
966
+ }
967
+ ]
766
968
  }
767
969
  }
768
970
  }
@@ -773,11 +975,41 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
773
975
  }
774
976
  ]
775
977
  };
978
+ const removeProofRoute = {
979
+ operationId: "auditableItemStreamRemoveProof",
980
+ summary: "Remove the proof from a stream",
981
+ tag: tagsAuditableItemStream[0].name,
982
+ method: "DELETE",
983
+ path: `${baseRouteName}/:id/proof`,
984
+ handler: async (httpRequestContext, request) => auditableItemStreamRemoveProof(httpRequestContext, componentName, request),
985
+ requestType: {
986
+ type: "IAuditableItemStreamRemoveProofRequest",
987
+ examples: [
988
+ {
989
+ id: "auditableItemStreamRemoveProofRequestExample",
990
+ request: {
991
+ pathParams: {
992
+ id: "ais:1234567890"
993
+ }
994
+ }
995
+ }
996
+ ]
997
+ },
998
+ responseType: [
999
+ {
1000
+ type: "INoContentResponse"
1001
+ },
1002
+ {
1003
+ type: "INotFoundResponse"
1004
+ }
1005
+ ]
1006
+ };
776
1007
  return [
777
1008
  createRoute,
778
1009
  getRoute,
779
1010
  updateRoute,
780
1011
  deleteRoute,
1012
+ closeRoute,
781
1013
  listRoute,
782
1014
  createEntryRoute,
783
1015
  getEntryRoute,
@@ -785,7 +1017,10 @@ export function generateRestRoutesAuditableItemStream(baseRouteName, componentNa
785
1017
  deleteEntryRoute,
786
1018
  updateEntryRoute,
787
1019
  listEntriesRoute,
788
- listEntryObjectsRoute
1020
+ listEntriesNoStreamRoute,
1021
+ listEntryObjectsRoute,
1022
+ listEntryObjectsNoStreamRoute,
1023
+ removeProofRoute
789
1024
  ];
790
1025
  }
791
1026
  /**
@@ -799,12 +1034,7 @@ export async function auditableItemStreamCreate(httpRequestContext, componentNam
799
1034
  Guards.object(ROUTES_SOURCE, "request", request);
800
1035
  Guards.object(ROUTES_SOURCE, "request.body", request.body);
801
1036
  const component = ComponentFactory.get(componentName);
802
- const id = await component.create({
803
- annotationObject: request.body.annotationObject,
804
- entries: request.body.entries
805
- }, {
806
- immutableInterval: request.body?.immutableInterval
807
- });
1037
+ const id = await component.create(request.body);
808
1038
  return {
809
1039
  statusCode: HttpStatusCode.created,
810
1040
  headers: {
@@ -823,19 +1053,23 @@ export async function auditableItemStreamGet(httpRequestContext, componentName,
823
1053
  Guards.object(ROUTES_SOURCE, "request", request);
824
1054
  Guards.object(ROUTES_SOURCE, "request.pathParams", request.pathParams);
825
1055
  Guards.stringValue(ROUTES_SOURCE, "request.pathParams.id", request.pathParams.id);
826
- const mimeType = request.headers?.[HeaderTypes.Accept] === MimeTypes.JsonLd ? "jsonld" : "json";
1056
+ const hostingComponent = ComponentFactory.get(httpRequestContext.hostingComponentType ?? "hosting");
827
1057
  const component = ComponentFactory.get(componentName);
828
- const result = await component.get(request.pathParams.id, {
1058
+ const result = await component.get(request.pathParams.id, request.query?.cursor, Coerce.integer(request.query?.limit), {
829
1059
  includeEntries: Coerce.boolean(request.query?.includeEntries),
830
1060
  includeDeleted: Coerce.boolean(request.query?.includeDeleted),
831
1061
  verifyStream: Coerce.boolean(request.query?.verifyStream),
832
1062
  verifyEntries: Coerce.boolean(request.query?.verifyEntries)
833
1063
  });
1064
+ const headers = {
1065
+ [HeaderTypes.ContentType]: request.headers?.[HeaderTypes.Accept] === MimeTypes.JsonLd ? MimeTypes.JsonLd : MimeTypes.Json
1066
+ };
1067
+ if (Is.stringValue(result.cursor)) {
1068
+ headers[HeaderTypes.Link] = HeaderHelper.createLinkHeader(await hostingComponent.buildPublicUrl(httpRequestContext.serverRequest.url), { cursor: result.cursor }, "next");
1069
+ }
834
1070
  return {
835
- headers: {
836
- [HeaderTypes.ContentType]: mimeType === "json" ? MimeTypes.Json : MimeTypes.JsonLd
837
- },
838
- body: result
1071
+ headers,
1072
+ body: result.stream
839
1073
  };
840
1074
  }
841
1075
  /**
@@ -852,8 +1086,8 @@ export async function auditableItemStreamUpdate(httpRequestContext, componentNam
852
1086
  Guards.object(ROUTES_SOURCE, "request.body", request.body);
853
1087
  const component = ComponentFactory.get(componentName);
854
1088
  await component.update({
855
- id: request.pathParams.id,
856
- annotationObject: request.body.annotationObject
1089
+ ...request.body,
1090
+ id: request.pathParams.id
857
1091
  });
858
1092
  return {
859
1093
  statusCode: HttpStatusCode.noContent
@@ -876,6 +1110,23 @@ export async function auditableItemStreamDelete(httpRequestContext, componentNam
876
1110
  statusCode: HttpStatusCode.noContent
877
1111
  };
878
1112
  }
1113
+ /**
1114
+ * Close the stream.
1115
+ * @param httpRequestContext The request context for the API.
1116
+ * @param componentName The name of the component to use in the routes.
1117
+ * @param request The request.
1118
+ * @returns The response object with additional http response properties.
1119
+ */
1120
+ export async function auditableItemStreamClose(httpRequestContext, componentName, request) {
1121
+ Guards.object(ROUTES_SOURCE, "request", request);
1122
+ Guards.object(ROUTES_SOURCE, "request.pathParams", request.pathParams);
1123
+ Guards.stringValue(ROUTES_SOURCE, "request.pathParams.id", request.pathParams.id);
1124
+ const component = ComponentFactory.get(componentName);
1125
+ await component.close(request.pathParams.id);
1126
+ return {
1127
+ statusCode: HttpStatusCode.noContent
1128
+ };
1129
+ }
879
1130
  /**
880
1131
  * Query the stream.
881
1132
  * @param httpRequestContext The request context for the API.
@@ -886,14 +1137,18 @@ export async function auditableItemStreamDelete(httpRequestContext, componentNam
886
1137
  export async function auditableItemStreamList(httpRequestContext, componentName, request) {
887
1138
  Guards.object(ROUTES_SOURCE, "request", request);
888
1139
  Guards.object(ROUTES_SOURCE, "request.query", request.query);
1140
+ const hostingComponent = ComponentFactory.get(httpRequestContext.hostingComponentType ?? "hosting");
889
1141
  const component = ComponentFactory.get(componentName);
890
- const mimeType = request.headers?.[HeaderTypes.Accept] === MimeTypes.JsonLd ? "jsonld" : "json";
891
1142
  const result = await component.query(HttpParameterHelper.objectFromString(request.query?.conditions), request.query?.orderBy, request.query?.orderByDirection, HttpParameterHelper.arrayFromString(request.query?.properties), request.query?.cursor, Coerce.integer(request.query?.limit));
1143
+ const headers = {
1144
+ [HeaderTypes.ContentType]: request.headers?.[HeaderTypes.Accept] === MimeTypes.JsonLd ? MimeTypes.JsonLd : MimeTypes.Json
1145
+ };
1146
+ if (Is.stringValue(result.cursor)) {
1147
+ headers[HeaderTypes.Link] = HeaderHelper.createLinkHeader(await hostingComponent.buildPublicUrl(httpRequestContext.serverRequest.url), { cursor: result.cursor }, "next");
1148
+ }
892
1149
  return {
893
- headers: {
894
- [HeaderTypes.ContentType]: mimeType === "json" ? MimeTypes.Json : MimeTypes.JsonLd
895
- },
896
- body: result
1150
+ headers,
1151
+ body: result.entries
897
1152
  };
898
1153
  }
899
1154
  /**
@@ -968,14 +1223,15 @@ export async function auditableItemStreamGetEntry(httpRequestContext, componentN
968
1223
  Guards.object(ROUTES_SOURCE, "request.pathParams", request.pathParams);
969
1224
  Guards.stringValue(ROUTES_SOURCE, "request.pathParams.id", request.pathParams.id);
970
1225
  Guards.stringValue(ROUTES_SOURCE, "request.pathParams.entryId", request.pathParams.entryId);
971
- const mimeType = request.headers?.[HeaderTypes.Accept] === MimeTypes.JsonLd ? "jsonld" : "json";
972
1226
  const component = ComponentFactory.get(componentName);
973
1227
  const result = await component.getEntry(request.pathParams.id, request.pathParams.entryId, {
974
1228
  verifyEntry: Coerce.boolean(request.query?.verifyEntry)
975
1229
  });
976
1230
  return {
977
1231
  headers: {
978
- [HeaderTypes.ContentType]: mimeType === "json" ? MimeTypes.Json : MimeTypes.JsonLd
1232
+ [HeaderTypes.ContentType]: request.headers?.[HeaderTypes.Accept] === MimeTypes.JsonLd
1233
+ ? MimeTypes.JsonLd
1234
+ : MimeTypes.Json
979
1235
  },
980
1236
  body: result
981
1237
  };
@@ -992,12 +1248,13 @@ export async function auditableItemStreamGetEntryObject(httpRequestContext, comp
992
1248
  Guards.object(ROUTES_SOURCE, "request.pathParams", request.pathParams);
993
1249
  Guards.stringValue(ROUTES_SOURCE, "request.pathParams.id", request.pathParams.id);
994
1250
  Guards.stringValue(ROUTES_SOURCE, "request.pathParams.entryId", request.pathParams.entryId);
995
- const mimeType = request.headers?.[HeaderTypes.Accept] === MimeTypes.JsonLd ? "jsonld" : "json";
996
1251
  const component = ComponentFactory.get(componentName);
997
1252
  const result = await component.getEntryObject(request.pathParams.id, request.pathParams.entryId);
998
1253
  return {
999
1254
  headers: {
1000
- [HeaderTypes.ContentType]: mimeType === "json" ? MimeTypes.Json : MimeTypes.JsonLd
1255
+ [HeaderTypes.ContentType]: request.headers?.[HeaderTypes.Accept] === MimeTypes.JsonLd
1256
+ ? MimeTypes.JsonLd
1257
+ : MimeTypes.Json
1001
1258
  },
1002
1259
  body: result
1003
1260
  };
@@ -1013,8 +1270,8 @@ export async function auditableItemStreamListEntries(httpRequestContext, compone
1013
1270
  Guards.object(ROUTES_SOURCE, "request", request);
1014
1271
  Guards.object(ROUTES_SOURCE, "request.pathParams", request.pathParams);
1015
1272
  Guards.stringValue(ROUTES_SOURCE, "request.pathParams.id", request.pathParams.id);
1273
+ const hostingComponent = ComponentFactory.get(httpRequestContext.hostingComponentType ?? "hosting");
1016
1274
  const component = ComponentFactory.get(componentName);
1017
- const mimeType = request.headers?.[HeaderTypes.Accept] === MimeTypes.JsonLd ? "jsonld" : "json";
1018
1275
  const result = await component.getEntries(request.pathParams.id, {
1019
1276
  conditions: HttpParameterHelper.objectFromString(request.query?.conditions),
1020
1277
  includeDeleted: Coerce.boolean(request.query?.includeDeleted),
@@ -1023,11 +1280,45 @@ export async function auditableItemStreamListEntries(httpRequestContext, compone
1023
1280
  limit: Coerce.integer(request.query?.limit),
1024
1281
  cursor: request.query?.cursor
1025
1282
  });
1283
+ const headers = {
1284
+ [HeaderTypes.ContentType]: request.headers?.[HeaderTypes.Accept] === MimeTypes.JsonLd ? MimeTypes.JsonLd : MimeTypes.Json
1285
+ };
1286
+ if (Is.stringValue(result.cursor)) {
1287
+ headers[HeaderTypes.Link] = HeaderHelper.createLinkHeader(await hostingComponent.buildPublicUrl(httpRequestContext.serverRequest.url), { cursor: result.cursor }, "next");
1288
+ }
1026
1289
  return {
1027
- headers: {
1028
- [HeaderTypes.ContentType]: mimeType === "json" ? MimeTypes.Json : MimeTypes.JsonLd
1029
- },
1030
- body: result
1290
+ headers,
1291
+ body: result.entries
1292
+ };
1293
+ }
1294
+ /**
1295
+ * Query the stream.
1296
+ * @param httpRequestContext The request context for the API.
1297
+ * @param componentName The name of the component to use in the routes.
1298
+ * @param request The request.
1299
+ * @returns The response object with additional http response properties.
1300
+ */
1301
+ export async function auditableItemStreamListEntriesNoStream(httpRequestContext, componentName, request) {
1302
+ Guards.object(ROUTES_SOURCE, "request", request);
1303
+ const hostingComponent = ComponentFactory.get(httpRequestContext.hostingComponentType ?? "hosting");
1304
+ const component = ComponentFactory.get(componentName);
1305
+ const result = await component.getEntries(undefined, {
1306
+ conditions: HttpParameterHelper.objectFromString(request.query?.conditions),
1307
+ includeDeleted: Coerce.boolean(request.query?.includeDeleted),
1308
+ verifyEntries: Coerce.boolean(request.query?.verifyEntries),
1309
+ order: request.query?.order,
1310
+ limit: Coerce.integer(request.query?.limit),
1311
+ cursor: request.query?.cursor
1312
+ });
1313
+ const headers = {
1314
+ [HeaderTypes.ContentType]: request.headers?.[HeaderTypes.Accept] === MimeTypes.JsonLd ? MimeTypes.JsonLd : MimeTypes.Json
1315
+ };
1316
+ if (Is.stringValue(result.cursor)) {
1317
+ headers[HeaderTypes.Link] = HeaderHelper.createLinkHeader(await hostingComponent.buildPublicUrl(httpRequestContext.serverRequest.url), { cursor: result.cursor }, "next");
1318
+ }
1319
+ return {
1320
+ headers,
1321
+ body: result.entries
1031
1322
  };
1032
1323
  }
1033
1324
  /**
@@ -1041,8 +1332,8 @@ export async function auditableItemStreamListEntryObjects(httpRequestContext, co
1041
1332
  Guards.object(ROUTES_SOURCE, "request", request);
1042
1333
  Guards.object(ROUTES_SOURCE, "request.pathParams", request.pathParams);
1043
1334
  Guards.stringValue(ROUTES_SOURCE, "request.pathParams.id", request.pathParams.id);
1335
+ const hostingComponent = ComponentFactory.get(httpRequestContext.hostingComponentType ?? "hosting");
1044
1336
  const component = ComponentFactory.get(componentName);
1045
- const mimeType = request.headers?.[HeaderTypes.Accept] === MimeTypes.JsonLd ? "jsonld" : "json";
1046
1337
  const result = await component.getEntryObjects(request.pathParams.id, {
1047
1338
  conditions: HttpParameterHelper.objectFromString(request.query?.conditions),
1048
1339
  includeDeleted: Coerce.boolean(request.query?.includeDeleted),
@@ -1050,11 +1341,61 @@ export async function auditableItemStreamListEntryObjects(httpRequestContext, co
1050
1341
  limit: Coerce.integer(request.query?.limit),
1051
1342
  cursor: request.query?.cursor
1052
1343
  });
1344
+ const headers = {
1345
+ [HeaderTypes.ContentType]: request.headers?.[HeaderTypes.Accept] === MimeTypes.JsonLd ? MimeTypes.JsonLd : MimeTypes.Json
1346
+ };
1347
+ if (Is.stringValue(result.cursor)) {
1348
+ headers[HeaderTypes.Link] = HeaderHelper.createLinkHeader(await hostingComponent.buildPublicUrl(httpRequestContext.serverRequest.url), { cursor: result.cursor }, "next");
1349
+ }
1053
1350
  return {
1054
- headers: {
1055
- [HeaderTypes.ContentType]: mimeType === "json" ? MimeTypes.Json : MimeTypes.JsonLd
1056
- },
1057
- body: result
1351
+ headers,
1352
+ body: result.entries
1353
+ };
1354
+ }
1355
+ /**
1356
+ * Query the stream objects.
1357
+ * @param httpRequestContext The request context for the API.
1358
+ * @param componentName The name of the component to use in the routes.
1359
+ * @param request The request.
1360
+ * @returns The response object with additional http response properties.
1361
+ */
1362
+ export async function auditableItemStreamListEntryObjectsNoStream(httpRequestContext, componentName, request) {
1363
+ Guards.object(ROUTES_SOURCE, "request", request);
1364
+ const hostingComponent = ComponentFactory.get(httpRequestContext.hostingComponentType ?? "hosting");
1365
+ const component = ComponentFactory.get(componentName);
1366
+ const result = await component.getEntryObjects(undefined, {
1367
+ conditions: HttpParameterHelper.objectFromString(request.query?.conditions),
1368
+ includeDeleted: Coerce.boolean(request.query?.includeDeleted),
1369
+ order: request.query?.order,
1370
+ limit: Coerce.integer(request.query?.limit),
1371
+ cursor: request.query?.cursor
1372
+ });
1373
+ const headers = {
1374
+ [HeaderTypes.ContentType]: request.headers?.[HeaderTypes.Accept] === MimeTypes.JsonLd ? MimeTypes.JsonLd : MimeTypes.Json
1375
+ };
1376
+ if (Is.stringValue(result.cursor)) {
1377
+ headers[HeaderTypes.Link] = HeaderHelper.createLinkHeader(await hostingComponent.buildPublicUrl(httpRequestContext.serverRequest.url), { cursor: result.cursor }, "next");
1378
+ }
1379
+ return {
1380
+ headers,
1381
+ body: result.entries
1382
+ };
1383
+ }
1384
+ /**
1385
+ * Remove the proof from a stream.
1386
+ * @param httpRequestContext The request context for the API.
1387
+ * @param componentName The name of the component to use in the routes.
1388
+ * @param request The request.
1389
+ * @returns The response object with additional http response properties.
1390
+ */
1391
+ export async function auditableItemStreamRemoveProof(httpRequestContext, componentName, request) {
1392
+ Guards.object(ROUTES_SOURCE, "request", request);
1393
+ Guards.object(ROUTES_SOURCE, "request.pathParams", request.pathParams);
1394
+ Guards.stringValue(ROUTES_SOURCE, "request.pathParams.id", request.pathParams.id);
1395
+ const component = ComponentFactory.get(componentName);
1396
+ await component.removeProof(request.pathParams.id);
1397
+ return {
1398
+ statusCode: HttpStatusCode.noContent
1058
1399
  };
1059
1400
  }
1060
1401
  //# sourceMappingURL=auditableItemStreamRoutes.js.map