@3sixty/document-management-service 0.0.0-stage → 0.20.0-next.0

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 (38) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +24 -2
  3. package/dist/es/documentManagementRoutes.js +609 -0
  4. package/dist/es/documentManagementRoutes.js.map +1 -0
  5. package/dist/es/documentManagementService.js +967 -0
  6. package/dist/es/documentManagementService.js.map +1 -0
  7. package/dist/es/index.js +8 -0
  8. package/dist/es/index.js.map +1 -0
  9. package/dist/es/models/IDocumentManagementServiceConfig.js +4 -0
  10. package/dist/es/models/IDocumentManagementServiceConfig.js.map +1 -0
  11. package/dist/es/models/IDocumentManagementStorageServiceConstructorOptions.js +2 -0
  12. package/dist/es/models/IDocumentManagementStorageServiceConstructorOptions.js.map +1 -0
  13. package/dist/es/restEntryPoints.js +13 -0
  14. package/dist/es/restEntryPoints.js.map +1 -0
  15. package/dist/types/documentManagementRoutes.d.ts +62 -0
  16. package/dist/types/documentManagementService.d.ts +147 -0
  17. package/dist/types/index.d.ts +5 -0
  18. package/dist/types/models/IDocumentManagementServiceConfig.d.ts +9 -0
  19. package/dist/types/models/IDocumentManagementStorageServiceConstructorOptions.d.ts +34 -0
  20. package/dist/types/restEntryPoints.d.ts +5 -0
  21. package/docs/changelog.md +0 -0
  22. package/docs/examples.md +121 -0
  23. package/docs/open-api/spec.json +1387 -0
  24. package/docs/reference/classes/DocumentManagementService.md +464 -0
  25. package/docs/reference/functions/documentManagementCreate.md +37 -0
  26. package/docs/reference/functions/documentManagementGet.md +31 -0
  27. package/docs/reference/functions/documentManagementGetRevision.md +31 -0
  28. package/docs/reference/functions/documentManagementQuery.md +31 -0
  29. package/docs/reference/functions/documentManagementRemove.md +31 -0
  30. package/docs/reference/functions/documentManagementUpdatePartial.md +31 -0
  31. package/docs/reference/functions/generateRestRoutesDocumentManagement.md +25 -0
  32. package/docs/reference/index.md +25 -0
  33. package/docs/reference/interfaces/IDocumentManagementServiceConfig.md +11 -0
  34. package/docs/reference/interfaces/IDocumentManagementServiceConstructorOptions.md +75 -0
  35. package/docs/reference/variables/restEntryPoints.md +5 -0
  36. package/docs/reference/variables/tagsDocumentManagement.md +5 -0
  37. package/locales/en.json +22 -0
  38. package/package.json +68 -5
@@ -0,0 +1,609 @@
1
+ // Copyright 2024 IOTA Stiftung.
2
+ // SPDX-License-Identifier: Apache-2.0.
3
+ import { HttpBodyLimit, HttpContextIdKeys, HttpHeaderHelper, HttpUrlHelper } from "@3sixty/api-models";
4
+ import { AuditableItemGraphContexts, AuditableItemGraphTypes } from "@3sixty/auditable-item-graph-models";
5
+ import { ContextIdStore } from "@3sixty/context";
6
+ import { Coerce, ComponentFactory, Converter, Guards, Is } from "@3sixty/core";
7
+ import { DocumentContexts, DocumentTypes } from "@3sixty/document-management-models";
8
+ import { SchemaOrgContexts, SchemaOrgTypes } from "@3sixty/standards-schema-org";
9
+ import { UneceDocumentCodeList } from "@3sixty/standards-unece";
10
+ import { HeaderTypes, HttpStatusCode, MimeTypes } from "@3sixty/web";
11
+ /**
12
+ * The source used when communicating about these routes.
13
+ */
14
+ const ROUTES_SOURCE = "documentManagementStorageRoutes";
15
+ /**
16
+ * The tag to associate with the routes.
17
+ */
18
+ export const tagsDocumentManagement = [
19
+ {
20
+ name: "Document Management",
21
+ description: "Endpoints which are modelled to access a document management contract."
22
+ }
23
+ ];
24
+ /**
25
+ * The REST routes for document management.
26
+ * @param baseRouteName Prefix to prepend to the paths.
27
+ * @param componentName The name of the component to use in the routes stored in the ComponentFactory.
28
+ * @returns The generated routes.
29
+ */
30
+ export function generateRestRoutesDocumentManagement(baseRouteName, componentName) {
31
+ const documentManagementCreateRoute = {
32
+ operationId: "DocumentManagementSet",
33
+ summary: "Store a document in an auditable item graph vertex and add its content to blob storage.",
34
+ tag: tagsDocumentManagement[0].name,
35
+ method: "POST",
36
+ path: `${baseRouteName}/`,
37
+ bodyLimit: HttpBodyLimit.Large,
38
+ handler: async (httpRequestContext, request) => documentManagementCreate(httpRequestContext, componentName, request, baseRouteName),
39
+ requestType: {
40
+ type: "IDocumentManagementCreateRequest",
41
+ examples: [
42
+ {
43
+ id: "DocumentManagementCreateRequestExample",
44
+ request: {
45
+ body: {
46
+ document: {
47
+ documentId: "2721000",
48
+ documentIdFormat: "bol",
49
+ documentCode: UneceDocumentCodeList.BillOfLading,
50
+ annotationObject: {
51
+ "@context": "https://schema.org",
52
+ "@type": "DigitalDocument",
53
+ name: "myfile.pdf"
54
+ }
55
+ },
56
+ blob: "SGVsbG8gV29ybGQ=",
57
+ options: { includeAttestation: true }
58
+ }
59
+ }
60
+ }
61
+ ]
62
+ },
63
+ responseType: [
64
+ {
65
+ type: "ICreatedResponse",
66
+ examples: [
67
+ {
68
+ id: "DocumentManagementCreateResponseExample",
69
+ response: {
70
+ statusCode: HttpStatusCode.created,
71
+ headers: {
72
+ [HeaderTypes.Location]: "aig%3A123456"
73
+ }
74
+ }
75
+ }
76
+ ]
77
+ }
78
+ ]
79
+ };
80
+ const documentManagementUpdatePartialRoute = {
81
+ operationId: "DocumentManagementUpdatePartial",
82
+ summary: "Partially update a document in an auditable item graph vertex and add its content to blob storage.",
83
+ tag: tagsDocumentManagement[0].name,
84
+ method: "PATCH",
85
+ path: `${baseRouteName}/:auditableItemGraphDocumentId`,
86
+ bodyLimit: HttpBodyLimit.Large,
87
+ handler: async (httpRequestContext, request) => documentManagementUpdatePartial(httpRequestContext, componentName, request),
88
+ requestType: {
89
+ type: "IDocumentManagementUpdatePartialRequest",
90
+ examples: [
91
+ {
92
+ id: "DocumentManagementUpdatePartialRequestExample",
93
+ request: {
94
+ pathParams: {
95
+ auditableItemGraphDocumentId: "aig:123456"
96
+ },
97
+ body: {
98
+ document: {
99
+ annotationObject: {
100
+ "@context": "https://schema.org",
101
+ "@type": "DigitalDocument",
102
+ name: "myfile.pdf"
103
+ }
104
+ },
105
+ blob: "SGVsbG8gV29ybGQ="
106
+ }
107
+ }
108
+ }
109
+ ]
110
+ },
111
+ responseType: [
112
+ {
113
+ type: "INoContentResponse",
114
+ examples: [
115
+ {
116
+ id: "DocumentManagementUpdatePartialResponseExample",
117
+ response: {
118
+ statusCode: HttpStatusCode.noContent
119
+ }
120
+ }
121
+ ]
122
+ }
123
+ ]
124
+ };
125
+ const documentManagementGetRoute = {
126
+ operationId: "DocumentManagementGet",
127
+ summary: "Get the data for a document from document management",
128
+ tag: tagsDocumentManagement[0].name,
129
+ method: "GET",
130
+ path: `${baseRouteName}/:auditableItemGraphDocumentId`,
131
+ handler: async (httpRequestContext, request) => documentManagementGet(httpRequestContext, componentName, request),
132
+ requestType: {
133
+ type: "IDocumentManagementGetRequest",
134
+ examples: [
135
+ {
136
+ id: "DocumentManagementGetRequestExample",
137
+ request: {
138
+ pathParams: {
139
+ auditableItemGraphDocumentId: "aig:123456"
140
+ }
141
+ }
142
+ }
143
+ ]
144
+ },
145
+ responseType: [
146
+ {
147
+ type: "IDocumentManagementGetResponse",
148
+ examples: [
149
+ {
150
+ id: "DocumentManagementGetResponseExample",
151
+ response: {
152
+ body: {
153
+ "@context": [
154
+ SchemaOrgContexts.Context,
155
+ DocumentContexts.Context,
156
+ DocumentContexts.ContextCommon
157
+ ],
158
+ type: SchemaOrgTypes.ItemList,
159
+ [SchemaOrgTypes.ItemListElement]: [
160
+ {
161
+ "@context": [
162
+ SchemaOrgContexts.Context,
163
+ DocumentContexts.Context,
164
+ DocumentContexts.ContextCommon
165
+ ],
166
+ type: DocumentTypes.Document,
167
+ id: "2721000:0",
168
+ documentId: "2721000",
169
+ documentIdFormat: "bol",
170
+ documentCode: UneceDocumentCodeList.BillOfLading,
171
+ documentRevision: 0,
172
+ blobStorageId: "blob-memory:c57d94b088f4c6d2cb32ded014813d0c786aa00134c8ee22f84b1e2545602a70",
173
+ integrity: "sha256-123456",
174
+ dateCreated: "2024-01-01T00:00:00Z",
175
+ annotationObject: {
176
+ "@context": "https://schema.org",
177
+ "@type": "DigitalDocument",
178
+ name: "myfile.pdf"
179
+ },
180
+ organizationIdentity: "did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363",
181
+ userIdentity: "did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363"
182
+ }
183
+ ]
184
+ }
185
+ }
186
+ }
187
+ ]
188
+ },
189
+ {
190
+ type: "IDocumentManagementGetResponse",
191
+ mimeType: MimeTypes.JsonLd,
192
+ examples: [
193
+ {
194
+ id: "DocumentManagementGetResponseExample",
195
+ response: {
196
+ body: {
197
+ "@context": [
198
+ SchemaOrgContexts.Context,
199
+ DocumentContexts.Context,
200
+ DocumentContexts.ContextCommon
201
+ ],
202
+ type: SchemaOrgTypes.ItemList,
203
+ [SchemaOrgTypes.ItemListElement]: [
204
+ {
205
+ "@context": [
206
+ SchemaOrgContexts.Context,
207
+ DocumentContexts.Context,
208
+ DocumentContexts.ContextCommon
209
+ ],
210
+ type: DocumentTypes.Document,
211
+ id: "2721000:0",
212
+ documentId: "2721000",
213
+ documentIdFormat: "bol",
214
+ documentCode: UneceDocumentCodeList.BillOfLading,
215
+ documentRevision: 0,
216
+ blobStorageId: "blob-memory:c57d94b088f4c6d2cb32ded014813d0c786aa00134c8ee22f84b1e2545602a70",
217
+ integrity: "sha256-123456",
218
+ dateCreated: "2024-01-01T00:00:00Z",
219
+ annotationObject: {
220
+ "@context": "https://schema.org",
221
+ "@type": "DigitalDocument",
222
+ name: "myfile.pdf"
223
+ },
224
+ organizationIdentity: "did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363",
225
+ userIdentity: "did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363"
226
+ }
227
+ ]
228
+ }
229
+ }
230
+ }
231
+ ]
232
+ },
233
+ {
234
+ type: "INotFoundResponse"
235
+ }
236
+ ]
237
+ };
238
+ const documentManagementGetRevisionRoute = {
239
+ operationId: "DocumentManagementGetRevision",
240
+ summary: "Get the data for a document revision from document management",
241
+ tag: tagsDocumentManagement[0].name,
242
+ method: "GET",
243
+ path: `${baseRouteName}/:auditableItemGraphDocumentId/:revision`,
244
+ handler: async (httpRequestContext, request) => documentManagementGetRevision(httpRequestContext, componentName, request),
245
+ requestType: {
246
+ type: "IDocumentManagementGetRequest",
247
+ examples: [
248
+ {
249
+ id: "DocumentManagementGetRevisionRequestExample",
250
+ request: {
251
+ pathParams: {
252
+ auditableItemGraphDocumentId: "aig:123456",
253
+ revision: "1"
254
+ }
255
+ }
256
+ }
257
+ ]
258
+ },
259
+ responseType: [
260
+ {
261
+ type: "IDocumentManagementGetRevisionResponse",
262
+ examples: [
263
+ {
264
+ id: "DocumentManagementGetRevisionResponseExample",
265
+ response: {
266
+ body: {
267
+ "@context": [
268
+ SchemaOrgContexts.Context,
269
+ DocumentContexts.Context,
270
+ DocumentContexts.ContextCommon
271
+ ],
272
+ type: DocumentTypes.Document,
273
+ id: "2721000:0",
274
+ documentId: "2721000",
275
+ documentIdFormat: "bol",
276
+ documentCode: UneceDocumentCodeList.BillOfLading,
277
+ documentRevision: 1,
278
+ blobStorageId: "blob-memory:c57d94b088f4c6d2cb32ded014813d0c786aa00134c8ee22f84b1e2545602a70",
279
+ integrity: "sha256-123456",
280
+ dateCreated: "2024-01-01T00:00:00Z",
281
+ annotationObject: {
282
+ "@context": "https://schema.org",
283
+ "@type": "DigitalDocument",
284
+ name: "myfile.pdf"
285
+ },
286
+ organizationIdentity: "did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363",
287
+ userIdentity: "did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363"
288
+ }
289
+ }
290
+ }
291
+ ]
292
+ },
293
+ {
294
+ type: "IDocumentManagementGetRevisionResponse",
295
+ mimeType: MimeTypes.JsonLd,
296
+ examples: [
297
+ {
298
+ id: "DocumentManagementGetRevisionResponseExample",
299
+ response: {
300
+ body: {
301
+ "@context": [
302
+ SchemaOrgContexts.Context,
303
+ DocumentContexts.Context,
304
+ DocumentContexts.ContextCommon
305
+ ],
306
+ type: DocumentTypes.Document,
307
+ id: "2721000:0",
308
+ documentId: "2721000",
309
+ documentIdFormat: "bol",
310
+ documentCode: UneceDocumentCodeList.BillOfLading,
311
+ documentRevision: 1,
312
+ blobStorageId: "blob-memory:c57d94b088f4c6d2cb32ded014813d0c786aa00134c8ee22f84b1e2545602a70",
313
+ integrity: "sha256-123456",
314
+ dateCreated: "2024-01-01T00:00:00Z",
315
+ annotationObject: {
316
+ "@context": "https://schema.org",
317
+ "@type": "DigitalDocument",
318
+ name: "myfile.pdf"
319
+ },
320
+ organizationIdentity: "did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363",
321
+ userIdentity: "did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363"
322
+ }
323
+ }
324
+ }
325
+ ]
326
+ },
327
+ {
328
+ type: "INotFoundResponse"
329
+ }
330
+ ]
331
+ };
332
+ const documentManagementRemoveRevisionRoute = {
333
+ operationId: "DocumentManagementRemove",
334
+ summary: "Remove an document from an auditable item graph vertex",
335
+ tag: tagsDocumentManagement[0].name,
336
+ method: "DELETE",
337
+ path: `${baseRouteName}/:auditableItemGraphDocumentId/:revision`,
338
+ handler: async (httpRequestContext, request) => documentManagementRemove(httpRequestContext, componentName, request),
339
+ requestType: {
340
+ type: "IDocumentManagementRemoveRequest",
341
+ examples: [
342
+ {
343
+ id: "DocumentManagementRemoveRequestExample",
344
+ request: {
345
+ pathParams: {
346
+ auditableItemGraphDocumentId: "aig:1234",
347
+ revision: "1"
348
+ }
349
+ }
350
+ }
351
+ ]
352
+ },
353
+ responseType: [
354
+ {
355
+ type: "INoContentResponse"
356
+ },
357
+ {
358
+ type: "INotFoundResponse"
359
+ }
360
+ ]
361
+ };
362
+ const documentManagementQueryRoute = {
363
+ operationId: "DocumentManagementQuery",
364
+ summary: "Query the items from an auditable item graph vertex",
365
+ tag: tagsDocumentManagement[0].name,
366
+ method: "GET",
367
+ path: `${baseRouteName}/`,
368
+ handler: async (httpRequestContext, request) => documentManagementQuery(httpRequestContext, componentName, request),
369
+ requestType: {
370
+ type: "IDocumentManagementQueryRequest",
371
+ examples: [
372
+ {
373
+ id: "DocumentManagementQueryRequestExample",
374
+ request: {
375
+ query: {
376
+ documentId: "2721000"
377
+ }
378
+ }
379
+ }
380
+ ]
381
+ },
382
+ responseType: [
383
+ {
384
+ type: "IDocumentManagementQueryResponse",
385
+ examples: [
386
+ {
387
+ id: "DocumentManagementQueryResponseExample",
388
+ response: {
389
+ body: {
390
+ "@context": [SchemaOrgContexts.Context, AuditableItemGraphContexts.Context],
391
+ type: [SchemaOrgTypes.ItemList, AuditableItemGraphTypes.VertexList],
392
+ [SchemaOrgTypes.ItemListElement]: [
393
+ {
394
+ "@context": [
395
+ AuditableItemGraphContexts.Context,
396
+ AuditableItemGraphContexts.ContextCommon
397
+ ],
398
+ id: "aig:c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7",
399
+ type: AuditableItemGraphTypes.Vertex,
400
+ dateCreated: "2024-08-22T04:13:20.000Z",
401
+ aliases: [
402
+ {
403
+ "@context": [AuditableItemGraphContexts.Context],
404
+ id: "test-id-0",
405
+ type: AuditableItemGraphTypes.Alias,
406
+ dateCreated: "2024-08-22T04:13:20.000Z"
407
+ }
408
+ ],
409
+ resources: [
410
+ {
411
+ "@context": AuditableItemGraphContexts.Context,
412
+ type: AuditableItemGraphTypes.Resource,
413
+ dateCreated: "2024-08-22T04:13:20.000Z",
414
+ resourceObject: {
415
+ "@context": [
416
+ "https://schema.3sixty.global/documents/",
417
+ "https://schema.3sixty.global/common/",
418
+ "https://schema.org"
419
+ ],
420
+ type: "Document",
421
+ id: "test-id-0:0",
422
+ documentId: "test-id-0",
423
+ documentCode: "unece:DocumentCodeList#705",
424
+ documentRevision: 0,
425
+ annotationObject: {
426
+ "@context": "https://schema.org",
427
+ type: "DigitalDocument",
428
+ name: "bill-of-lading"
429
+ },
430
+ integrity: "sha256-E3Duqrp6bHojSx+CzDttAToAiP1eFkCDAPBbKLABVGM=",
431
+ blobStorageId: "blob:memory:1370eeaaba7a6c7a234b1f82cc3b6d013a0088fd5e16408300f05b28b0015463",
432
+ dateCreated: "2024-08-22T04:13:20.000Z",
433
+ organizationIdentity: "did:entity-storage:0x0101010101010101010101010101010101010101010101010101010101010101",
434
+ userIdentity: "did:entity-storage:0x0404040404040404040404040404040404040404040404040404040404040404"
435
+ }
436
+ }
437
+ ]
438
+ }
439
+ ]
440
+ }
441
+ }
442
+ }
443
+ ]
444
+ }
445
+ ]
446
+ };
447
+ return [
448
+ documentManagementCreateRoute,
449
+ documentManagementUpdatePartialRoute,
450
+ documentManagementGetRoute,
451
+ documentManagementGetRevisionRoute,
452
+ documentManagementRemoveRevisionRoute,
453
+ documentManagementQueryRoute
454
+ ];
455
+ }
456
+ /**
457
+ * Create a document as an auditable item graph vertex.
458
+ * @param httpRequestContext The request context for the API.
459
+ * @param componentName The name of the component to use in the routes.
460
+ * @param request The request.
461
+ * @param baseRouteName The base route name for constructing URLs.
462
+ * @returns The response object with additional http response properties.
463
+ */
464
+ export async function documentManagementCreate(httpRequestContext, componentName, request, baseRouteName) {
465
+ Guards.object(ROUTES_SOURCE, "request", request);
466
+ Guards.object(ROUTES_SOURCE, "request.body", request.body);
467
+ Guards.object(ROUTES_SOURCE, "request.body.document", request.body.document);
468
+ Guards.stringValue(ROUTES_SOURCE, "request.body.blob", request.body.blob);
469
+ const component = ComponentFactory.get(componentName);
470
+ const id = await component.create(request.body.document, Is.stringBase64(request.body.blob)
471
+ ? Converter.base64ToBytes(request.body.blob)
472
+ : request.body.blob, request.body.auditableItemGraphEdges, {
473
+ includeAttestation: request.body.options?.includeAttestation,
474
+ includeAlias: request.body.options?.includeAlias,
475
+ aliasAnnotationObject: request.body.options?.aliasAnnotationObject
476
+ });
477
+ const contextIds = await ContextIdStore.getContextIds();
478
+ const publicOrigin = contextIds?.[HttpContextIdKeys.PublicOrigin];
479
+ const headers = {};
480
+ HttpHeaderHelper.buildId(headers, id, HttpUrlHelper.combineOriginPath(publicOrigin, `${baseRouteName}/:id`));
481
+ return {
482
+ statusCode: HttpStatusCode.created,
483
+ headers
484
+ };
485
+ }
486
+ /**
487
+ * Get the document from the auditable item graph vertex.
488
+ * @param httpRequestContext The request context for the API.
489
+ * @param componentName The name of the component to use in the routes.
490
+ * @param request The request.
491
+ * @returns The response object with additional http response properties.
492
+ */
493
+ export async function documentManagementGet(httpRequestContext, componentName, request) {
494
+ Guards.object(ROUTES_SOURCE, "request", request);
495
+ Guards.object(ROUTES_SOURCE, "request.pathParams", request.pathParams);
496
+ Guards.stringValue(ROUTES_SOURCE, "request.pathParams.auditableItemGraphDocumentId", request.pathParams.auditableItemGraphDocumentId);
497
+ const component = ComponentFactory.get(componentName);
498
+ const result = await component.get(request.pathParams.auditableItemGraphDocumentId, {
499
+ includeBlobStorageMetadata: Coerce.boolean(request.query?.includeBlobStorageMetadata),
500
+ includeBlobStorageData: Coerce.boolean(request.query?.includeBlobStorageData),
501
+ includeAttestation: Coerce.boolean(request.query?.includeAttestation),
502
+ includeRemoved: Coerce.boolean(request.query?.includeRemoved),
503
+ includeDeletedEdges: Coerce.boolean(request.query?.includeDeletedEdges),
504
+ extractRuleGroupId: request.query?.extractRuleGroupId,
505
+ extractMimeType: request.query?.extractMimeType
506
+ }, request.query?.cursor, Coerce.integer(request.query?.limit));
507
+ const headers = {};
508
+ HttpHeaderHelper.buildJsonContentType(headers, request.headers);
509
+ const contextIds = await ContextIdStore.getContextIds();
510
+ HttpHeaderHelper.buildCursor(headers, httpRequestContext.serverRequest.url, contextIds?.[HttpContextIdKeys.PublicOrigin], result.cursor);
511
+ return {
512
+ headers,
513
+ body: result.entries
514
+ };
515
+ }
516
+ /**
517
+ * Get the document revision from the auditable item graph vertex.
518
+ * @param httpRequestContext The request context for the API.
519
+ * @param componentName The name of the component to use in the routes.
520
+ * @param request The request.
521
+ * @returns The response object with additional http response properties.
522
+ */
523
+ export async function documentManagementGetRevision(httpRequestContext, componentName, request) {
524
+ Guards.object(ROUTES_SOURCE, "request", request);
525
+ Guards.object(ROUTES_SOURCE, "request.pathParams", request.pathParams);
526
+ Guards.stringValue(ROUTES_SOURCE, "request.pathParams.auditableItemGraphDocumentId", request.pathParams.auditableItemGraphDocumentId);
527
+ const revision = Coerce.integer(request.pathParams.revision);
528
+ Guards.integer(ROUTES_SOURCE, "revision", revision);
529
+ const component = ComponentFactory.get(componentName);
530
+ const result = await component.getRevision(request.pathParams.auditableItemGraphDocumentId, revision, {
531
+ includeBlobStorageMetadata: Coerce.boolean(request.query?.includeBlobStorageMetadata),
532
+ includeBlobStorageData: Coerce.boolean(request.query?.includeBlobStorageData),
533
+ includeAttestation: Coerce.boolean(request.query?.includeAttestation),
534
+ extractRuleGroupId: request.query?.extractRuleGroupId,
535
+ extractMimeType: request.query?.extractMimeType
536
+ });
537
+ const headers = {};
538
+ HttpHeaderHelper.buildJsonContentType(headers, request.headers);
539
+ return {
540
+ headers,
541
+ body: result
542
+ };
543
+ }
544
+ /**
545
+ * Update the document from the auditable item graph vertex.
546
+ * @param httpRequestContext The request context for the API.
547
+ * @param componentName The name of the component to use in the routes.
548
+ * @param request The request.
549
+ * @returns The response object with additional http response properties.
550
+ */
551
+ export async function documentManagementUpdatePartial(httpRequestContext, componentName, request) {
552
+ Guards.object(ROUTES_SOURCE, "request", request);
553
+ Guards.object(ROUTES_SOURCE, "request.pathParams", request.pathParams);
554
+ Guards.stringValue(ROUTES_SOURCE, "request.pathParams.auditableItemGraphDocumentId", request.pathParams.auditableItemGraphDocumentId);
555
+ Guards.object(ROUTES_SOURCE, "request.body", request.body);
556
+ const component = ComponentFactory.get(componentName);
557
+ await component.updatePartial(request.pathParams.auditableItemGraphDocumentId, request.body.document, Is.stringBase64(request.body.blob)
558
+ ? Converter.base64ToBytes(request.body.blob)
559
+ : request.body.blob, request.body.auditableItemGraphEdges, {
560
+ includeAttestation: request.body.options?.includeAttestation,
561
+ includeAlias: request.body.options?.includeAlias,
562
+ aliasAnnotationObject: request.body.options?.aliasAnnotationObject
563
+ });
564
+ return {
565
+ statusCode: HttpStatusCode.noContent
566
+ };
567
+ }
568
+ /**
569
+ * Remove the document from the auditable item graph vertex.
570
+ * @param httpRequestContext The request context for the API.
571
+ * @param componentName The name of the component to use in the routes.
572
+ * @param request The request.
573
+ * @returns The response object with additional http response properties.
574
+ */
575
+ export async function documentManagementRemove(httpRequestContext, componentName, request) {
576
+ Guards.object(ROUTES_SOURCE, "request", request);
577
+ Guards.object(ROUTES_SOURCE, "request.pathParams", request.pathParams);
578
+ Guards.stringValue(ROUTES_SOURCE, "request.pathParams.auditableItemGraphDocumentId", request.pathParams.auditableItemGraphDocumentId);
579
+ const revision = Coerce.integer(request.pathParams.revision);
580
+ Guards.integer(ROUTES_SOURCE, "revision", revision);
581
+ const component = ComponentFactory.get(componentName);
582
+ await component.removeRevision(request.pathParams.auditableItemGraphDocumentId, revision);
583
+ return {
584
+ statusCode: HttpStatusCode.noContent
585
+ };
586
+ }
587
+ /**
588
+ * Query the documents from an auditable item graph vertex.
589
+ * @param httpRequestContext The request context for the API.
590
+ * @param componentName The name of the component to use in the routes.
591
+ * @param request The request.
592
+ * @returns The response object with additional http response properties.
593
+ */
594
+ export async function documentManagementQuery(httpRequestContext, componentName, request) {
595
+ Guards.object(ROUTES_SOURCE, "request", request);
596
+ Guards.object(ROUTES_SOURCE, "request.query", request.query);
597
+ Guards.stringValue(ROUTES_SOURCE, "request.query.documentId", request.query.documentId);
598
+ const component = ComponentFactory.get(componentName);
599
+ const result = await component.query(request.query.documentId, request.query?.cursor, Coerce.integer(request.query?.limit));
600
+ const headers = {};
601
+ HttpHeaderHelper.buildJsonContentType(headers, request.headers);
602
+ const contextIds = await ContextIdStore.getContextIds();
603
+ HttpHeaderHelper.buildCursor(headers, httpRequestContext.serverRequest.url, contextIds?.[HttpContextIdKeys.PublicOrigin], result.cursor);
604
+ return {
605
+ headers,
606
+ body: result.entries
607
+ };
608
+ }
609
+ //# sourceMappingURL=documentManagementRoutes.js.map