@3sixty/document-management-service 0.20.0-next.0 → 0.20.0-next.1
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.
- package/dist/es/documentManagementRoutes.js.map +1 -1
- package/dist/es/documentManagementService.js.map +1 -1
- package/dist/es/index.js.map +1 -1
- package/dist/es/models/IDocumentManagementServiceConfig.js.map +1 -1
- package/dist/es/models/IDocumentManagementStorageServiceConstructorOptions.js.map +1 -1
- package/dist/es/restEntryPoints.js.map +1 -1
- package/docs/changelog.md +17 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"documentManagementRoutes.js","sourceRoot":"","sources":["../../src/documentManagementRoutes.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tHttpBodyLimit,\n\tHttpContextIdKeys,\n\tHttpHeaderHelper,\n\tHttpUrlHelper,\n\ttype ICreatedResponse,\n\ttype IHttpRequestContext,\n\ttype INoContentResponse,\n\ttype INotFoundResponse,\n\ttype IRestRoute,\n\ttype ITag\n} from \"@3sixty/api-models\";\nimport {\n\tAuditableItemGraphContexts,\n\tAuditableItemGraphTypes\n} from \"@3sixty/auditable-item-graph-models\";\nimport { ContextIdStore } from \"@3sixty/context\";\nimport { Coerce, ComponentFactory, Converter, Guards, Is } from \"@3sixty/core\";\nimport {\n\tDocumentContexts,\n\tDocumentTypes,\n\ttype IDocumentManagementComponent,\n\ttype IDocumentManagementCreateRequest,\n\ttype IDocumentManagementGetRequest,\n\ttype IDocumentManagementGetResponse,\n\ttype IDocumentManagementGetRevisionRequest,\n\ttype IDocumentManagementGetRevisionResponse,\n\ttype IDocumentManagementQueryRequest,\n\ttype IDocumentManagementQueryResponse,\n\ttype IDocumentManagementRemoveRequest,\n\ttype IDocumentManagementUpdatePartialRequest\n} from \"@3sixty/document-management-models\";\nimport { nameof } from \"@3sixty/nameof\";\nimport { SchemaOrgContexts, SchemaOrgTypes } from \"@3sixty/standards-schema-org\";\nimport { UneceDocumentCodeList } from \"@3sixty/standards-unece\";\nimport { HeaderTypes, HttpStatusCode, type IHttpHeaders, MimeTypes } from \"@3sixty/web\";\n\n/**\n * The source used when communicating about these routes.\n */\nconst ROUTES_SOURCE = \"documentManagementStorageRoutes\";\n\n/**\n * The tag to associate with the routes.\n */\nexport const tagsDocumentManagement: ITag[] = [\n\t{\n\t\tname: \"Document Management\",\n\t\tdescription: \"Endpoints which are modelled to access a document management contract.\"\n\t}\n];\n\n/**\n * The REST routes for document management.\n * @param baseRouteName Prefix to prepend to the paths.\n * @param componentName The name of the component to use in the routes stored in the ComponentFactory.\n * @returns The generated routes.\n */\nexport function generateRestRoutesDocumentManagement(\n\tbaseRouteName: string,\n\tcomponentName: string\n): IRestRoute[] {\n\tconst documentManagementCreateRoute: IRestRoute<\n\t\tIDocumentManagementCreateRequest,\n\t\tICreatedResponse\n\t> = {\n\t\toperationId: \"DocumentManagementSet\",\n\t\tsummary:\n\t\t\t\"Store a document in an auditable item graph vertex and add its content to blob storage.\",\n\t\ttag: tagsDocumentManagement[0].name,\n\t\tmethod: \"POST\",\n\t\tpath: `${baseRouteName}/`,\n\t\tbodyLimit: HttpBodyLimit.Large,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tdocumentManagementCreate(httpRequestContext, componentName, request, baseRouteName),\n\t\trequestType: {\n\t\t\ttype: nameof<IDocumentManagementCreateRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"DocumentManagementCreateRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\tdocumentId: \"2721000\",\n\t\t\t\t\t\t\t\tdocumentIdFormat: \"bol\",\n\t\t\t\t\t\t\t\tdocumentCode: UneceDocumentCodeList.BillOfLading,\n\t\t\t\t\t\t\t\tannotationObject: {\n\t\t\t\t\t\t\t\t\t\"@context\": \"https://schema.org\",\n\t\t\t\t\t\t\t\t\t\"@type\": \"DigitalDocument\",\n\t\t\t\t\t\t\t\t\tname: \"myfile.pdf\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tblob: \"SGVsbG8gV29ybGQ=\",\n\t\t\t\t\t\t\toptions: { includeAttestation: true }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<ICreatedResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"DocumentManagementCreateResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tstatusCode: HttpStatusCode.created,\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t[HeaderTypes.Location]: \"aig%3A123456\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t};\n\n\tconst documentManagementUpdatePartialRoute: IRestRoute<\n\t\tIDocumentManagementUpdatePartialRequest,\n\t\tINoContentResponse\n\t> = {\n\t\toperationId: \"DocumentManagementUpdatePartial\",\n\t\tsummary:\n\t\t\t\"Partially update a document in an auditable item graph vertex and add its content to blob storage.\",\n\t\ttag: tagsDocumentManagement[0].name,\n\t\tmethod: \"PATCH\",\n\t\tpath: `${baseRouteName}/:auditableItemGraphDocumentId`,\n\t\tbodyLimit: HttpBodyLimit.Large,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tdocumentManagementUpdatePartial(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IDocumentManagementUpdatePartialRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"DocumentManagementUpdatePartialRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tauditableItemGraphDocumentId: \"aig:123456\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\tannotationObject: {\n\t\t\t\t\t\t\t\t\t\"@context\": \"https://schema.org\",\n\t\t\t\t\t\t\t\t\t\"@type\": \"DigitalDocument\",\n\t\t\t\t\t\t\t\t\tname: \"myfile.pdf\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tblob: \"SGVsbG8gV29ybGQ=\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<INoContentResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"DocumentManagementUpdatePartialResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tstatusCode: HttpStatusCode.noContent\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t};\n\n\tconst documentManagementGetRoute: IRestRoute<\n\t\tIDocumentManagementGetRequest,\n\t\tIDocumentManagementGetResponse\n\t> = {\n\t\toperationId: \"DocumentManagementGet\",\n\t\tsummary: \"Get the data for a document from document management\",\n\t\ttag: tagsDocumentManagement[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/:auditableItemGraphDocumentId`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tdocumentManagementGet(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IDocumentManagementGetRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"DocumentManagementGetRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tauditableItemGraphDocumentId: \"aig:123456\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<IDocumentManagementGetResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"DocumentManagementGetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\t\t\t\t\tDocumentContexts.Context,\n\t\t\t\t\t\t\t\t\tDocumentContexts.ContextCommon\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttype: SchemaOrgTypes.ItemList,\n\t\t\t\t\t\t\t\t[SchemaOrgTypes.ItemListElement]: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\t\t\t\t\t\t\tDocumentContexts.Context,\n\t\t\t\t\t\t\t\t\t\t\tDocumentContexts.ContextCommon\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\ttype: DocumentTypes.Document,\n\t\t\t\t\t\t\t\t\t\tid: \"2721000:0\",\n\t\t\t\t\t\t\t\t\t\tdocumentId: \"2721000\",\n\t\t\t\t\t\t\t\t\t\tdocumentIdFormat: \"bol\",\n\t\t\t\t\t\t\t\t\t\tdocumentCode: UneceDocumentCodeList.BillOfLading,\n\t\t\t\t\t\t\t\t\t\tdocumentRevision: 0,\n\t\t\t\t\t\t\t\t\t\tblobStorageId:\n\t\t\t\t\t\t\t\t\t\t\t\"blob-memory:c57d94b088f4c6d2cb32ded014813d0c786aa00134c8ee22f84b1e2545602a70\",\n\t\t\t\t\t\t\t\t\t\tintegrity: \"sha256-123456\",\n\t\t\t\t\t\t\t\t\t\tdateCreated: \"2024-01-01T00:00:00Z\",\n\t\t\t\t\t\t\t\t\t\tannotationObject: {\n\t\t\t\t\t\t\t\t\t\t\t\"@context\": \"https://schema.org\",\n\t\t\t\t\t\t\t\t\t\t\t\"@type\": \"DigitalDocument\",\n\t\t\t\t\t\t\t\t\t\t\tname: \"myfile.pdf\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\torganizationIdentity:\n\t\t\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363\",\n\t\t\t\t\t\t\t\t\t\tuserIdentity:\n\t\t\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: nameof<IDocumentManagementGetResponse>(),\n\t\t\t\tmimeType: MimeTypes.JsonLd,\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"DocumentManagementGetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\t\t\t\t\tDocumentContexts.Context,\n\t\t\t\t\t\t\t\t\tDocumentContexts.ContextCommon\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttype: SchemaOrgTypes.ItemList,\n\t\t\t\t\t\t\t\t[SchemaOrgTypes.ItemListElement]: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\t\t\t\t\t\t\tDocumentContexts.Context,\n\t\t\t\t\t\t\t\t\t\t\tDocumentContexts.ContextCommon\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\ttype: DocumentTypes.Document,\n\t\t\t\t\t\t\t\t\t\tid: \"2721000:0\",\n\t\t\t\t\t\t\t\t\t\tdocumentId: \"2721000\",\n\t\t\t\t\t\t\t\t\t\tdocumentIdFormat: \"bol\",\n\t\t\t\t\t\t\t\t\t\tdocumentCode: UneceDocumentCodeList.BillOfLading,\n\t\t\t\t\t\t\t\t\t\tdocumentRevision: 0,\n\t\t\t\t\t\t\t\t\t\tblobStorageId:\n\t\t\t\t\t\t\t\t\t\t\t\"blob-memory:c57d94b088f4c6d2cb32ded014813d0c786aa00134c8ee22f84b1e2545602a70\",\n\t\t\t\t\t\t\t\t\t\tintegrity: \"sha256-123456\",\n\t\t\t\t\t\t\t\t\t\tdateCreated: \"2024-01-01T00:00:00Z\",\n\t\t\t\t\t\t\t\t\t\tannotationObject: {\n\t\t\t\t\t\t\t\t\t\t\t\"@context\": \"https://schema.org\",\n\t\t\t\t\t\t\t\t\t\t\t\"@type\": \"DigitalDocument\",\n\t\t\t\t\t\t\t\t\t\t\tname: \"myfile.pdf\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\torganizationIdentity:\n\t\t\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363\",\n\t\t\t\t\t\t\t\t\t\tuserIdentity:\n\t\t\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: nameof<INotFoundResponse>()\n\t\t\t}\n\t\t]\n\t};\n\n\tconst documentManagementGetRevisionRoute: IRestRoute<\n\t\tIDocumentManagementGetRevisionRequest,\n\t\tIDocumentManagementGetRevisionResponse\n\t> = {\n\t\toperationId: \"DocumentManagementGetRevision\",\n\t\tsummary: \"Get the data for a document revision from document management\",\n\t\ttag: tagsDocumentManagement[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/:auditableItemGraphDocumentId/:revision`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tdocumentManagementGetRevision(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IDocumentManagementGetRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"DocumentManagementGetRevisionRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tauditableItemGraphDocumentId: \"aig:123456\",\n\t\t\t\t\t\t\trevision: \"1\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<IDocumentManagementGetRevisionResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"DocumentManagementGetRevisionResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\t\t\t\t\tDocumentContexts.Context,\n\t\t\t\t\t\t\t\t\tDocumentContexts.ContextCommon\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttype: DocumentTypes.Document,\n\t\t\t\t\t\t\t\tid: \"2721000:0\",\n\t\t\t\t\t\t\t\tdocumentId: \"2721000\",\n\t\t\t\t\t\t\t\tdocumentIdFormat: \"bol\",\n\t\t\t\t\t\t\t\tdocumentCode: UneceDocumentCodeList.BillOfLading,\n\t\t\t\t\t\t\t\tdocumentRevision: 1,\n\t\t\t\t\t\t\t\tblobStorageId:\n\t\t\t\t\t\t\t\t\t\"blob-memory:c57d94b088f4c6d2cb32ded014813d0c786aa00134c8ee22f84b1e2545602a70\",\n\t\t\t\t\t\t\t\tintegrity: \"sha256-123456\",\n\t\t\t\t\t\t\t\tdateCreated: \"2024-01-01T00:00:00Z\",\n\t\t\t\t\t\t\t\tannotationObject: {\n\t\t\t\t\t\t\t\t\t\"@context\": \"https://schema.org\",\n\t\t\t\t\t\t\t\t\t\"@type\": \"DigitalDocument\",\n\t\t\t\t\t\t\t\t\tname: \"myfile.pdf\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\torganizationIdentity:\n\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363\",\n\t\t\t\t\t\t\t\tuserIdentity:\n\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: nameof<IDocumentManagementGetRevisionResponse>(),\n\t\t\t\tmimeType: MimeTypes.JsonLd,\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"DocumentManagementGetRevisionResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\t\t\t\t\tDocumentContexts.Context,\n\t\t\t\t\t\t\t\t\tDocumentContexts.ContextCommon\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttype: DocumentTypes.Document,\n\t\t\t\t\t\t\t\tid: \"2721000:0\",\n\t\t\t\t\t\t\t\tdocumentId: \"2721000\",\n\t\t\t\t\t\t\t\tdocumentIdFormat: \"bol\",\n\t\t\t\t\t\t\t\tdocumentCode: UneceDocumentCodeList.BillOfLading,\n\t\t\t\t\t\t\t\tdocumentRevision: 1,\n\t\t\t\t\t\t\t\tblobStorageId:\n\t\t\t\t\t\t\t\t\t\"blob-memory:c57d94b088f4c6d2cb32ded014813d0c786aa00134c8ee22f84b1e2545602a70\",\n\t\t\t\t\t\t\t\tintegrity: \"sha256-123456\",\n\t\t\t\t\t\t\t\tdateCreated: \"2024-01-01T00:00:00Z\",\n\t\t\t\t\t\t\t\tannotationObject: {\n\t\t\t\t\t\t\t\t\t\"@context\": \"https://schema.org\",\n\t\t\t\t\t\t\t\t\t\"@type\": \"DigitalDocument\",\n\t\t\t\t\t\t\t\t\tname: \"myfile.pdf\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\torganizationIdentity:\n\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363\",\n\t\t\t\t\t\t\t\tuserIdentity:\n\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: nameof<INotFoundResponse>()\n\t\t\t}\n\t\t]\n\t};\n\n\tconst documentManagementRemoveRevisionRoute: IRestRoute<\n\t\tIDocumentManagementRemoveRequest,\n\t\tINoContentResponse\n\t> = {\n\t\toperationId: \"DocumentManagementRemove\",\n\t\tsummary: \"Remove an document from an auditable item graph vertex\",\n\t\ttag: tagsDocumentManagement[0].name,\n\t\tmethod: \"DELETE\",\n\t\tpath: `${baseRouteName}/:auditableItemGraphDocumentId/:revision`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tdocumentManagementRemove(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IDocumentManagementRemoveRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"DocumentManagementRemoveRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tauditableItemGraphDocumentId: \"aig:1234\",\n\t\t\t\t\t\t\trevision: \"1\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<INoContentResponse>()\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: nameof<INotFoundResponse>()\n\t\t\t}\n\t\t]\n\t};\n\n\tconst documentManagementQueryRoute: IRestRoute<\n\t\tIDocumentManagementQueryRequest,\n\t\tIDocumentManagementQueryResponse\n\t> = {\n\t\toperationId: \"DocumentManagementQuery\",\n\t\tsummary: \"Query the items from an auditable item graph vertex\",\n\t\ttag: tagsDocumentManagement[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tdocumentManagementQuery(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: nameof<IDocumentManagementQueryRequest>(),\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"DocumentManagementQueryRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tquery: {\n\t\t\t\t\t\t\tdocumentId: \"2721000\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: nameof<IDocumentManagementQueryResponse>(),\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"DocumentManagementQueryResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": [SchemaOrgContexts.Context, AuditableItemGraphContexts.Context],\n\t\t\t\t\t\t\t\ttype: [SchemaOrgTypes.ItemList, AuditableItemGraphTypes.VertexList],\n\t\t\t\t\t\t\t\t[SchemaOrgTypes.ItemListElement]: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\t\t\tAuditableItemGraphContexts.Context,\n\t\t\t\t\t\t\t\t\t\t\tAuditableItemGraphContexts.ContextCommon\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\tid: \"aig:c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7\",\n\t\t\t\t\t\t\t\t\t\ttype: AuditableItemGraphTypes.Vertex,\n\t\t\t\t\t\t\t\t\t\tdateCreated: \"2024-08-22T04:13:20.000Z\",\n\t\t\t\t\t\t\t\t\t\taliases: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"@context\": [AuditableItemGraphContexts.Context],\n\t\t\t\t\t\t\t\t\t\t\t\tid: \"test-id-0\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: AuditableItemGraphTypes.Alias,\n\t\t\t\t\t\t\t\t\t\t\t\tdateCreated: \"2024-08-22T04:13:20.000Z\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\tresources: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\t\t\t\t\t\t\t\t\ttype: AuditableItemGraphTypes.Resource,\n\t\t\t\t\t\t\t\t\t\t\t\tdateCreated: \"2024-08-22T04:13:20.000Z\",\n\t\t\t\t\t\t\t\t\t\t\t\tresourceObject: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"https://schema.3sixty.global/documents/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"https://schema.3sixty.global/common/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"https://schema.org\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"Document\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tid: \"test-id-0:0\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tdocumentId: \"test-id-0\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tdocumentCode: \"unece:DocumentCodeList#705\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tdocumentRevision: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\tannotationObject: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"@context\": \"https://schema.org\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"DigitalDocument\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tname: \"bill-of-lading\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\tintegrity: \"sha256-E3Duqrp6bHojSx+CzDttAToAiP1eFkCDAPBbKLABVGM=\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tblobStorageId:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"blob:memory:1370eeaaba7a6c7a234b1f82cc3b6d013a0088fd5e16408300f05b28b0015463\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tdateCreated: \"2024-08-22T04:13:20.000Z\",\n\t\t\t\t\t\t\t\t\t\t\t\t\torganizationIdentity:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x0101010101010101010101010101010101010101010101010101010101010101\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tuserIdentity:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x0404040404040404040404040404040404040404040404040404040404040404\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t};\n\n\treturn [\n\t\tdocumentManagementCreateRoute,\n\t\tdocumentManagementUpdatePartialRoute,\n\t\tdocumentManagementGetRoute,\n\t\tdocumentManagementGetRevisionRoute,\n\t\tdocumentManagementRemoveRevisionRoute,\n\t\tdocumentManagementQueryRoute\n\t];\n}\n\n/**\n * Create a document as an auditable item graph vertex.\n * @param httpRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @param baseRouteName The base route name for constructing URLs.\n * @returns The response object with additional http response properties.\n */\nexport async function documentManagementCreate(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IDocumentManagementCreateRequest,\n\tbaseRouteName: string\n): Promise<ICreatedResponse> {\n\tGuards.object<IDocumentManagementCreateRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IDocumentManagementCreateRequest[\"body\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.body),\n\t\trequest.body\n\t);\n\tGuards.object<IDocumentManagementCreateRequest[\"body\"][\"document\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.body.document),\n\t\trequest.body.document\n\t);\n\tGuards.stringValue(ROUTES_SOURCE, nameof(request.body.blob), request.body.blob);\n\n\tconst component = ComponentFactory.get<IDocumentManagementComponent>(componentName);\n\tconst id = await component.create(\n\t\trequest.body.document,\n\t\tIs.stringBase64(request.body.blob)\n\t\t\t? Converter.base64ToBytes(request.body.blob)\n\t\t\t: request.body.blob,\n\t\trequest.body.auditableItemGraphEdges,\n\t\t{\n\t\t\tincludeAttestation: request.body.options?.includeAttestation,\n\t\t\tincludeAlias: request.body.options?.includeAlias,\n\t\t\taliasAnnotationObject: request.body.options?.aliasAnnotationObject\n\t\t}\n\t);\n\n\tconst contextIds = await ContextIdStore.getContextIds();\n\tconst publicOrigin = contextIds?.[HttpContextIdKeys.PublicOrigin];\n\n\tconst headers: IHttpHeaders = {};\n\tHttpHeaderHelper.buildId(\n\t\theaders,\n\t\tid,\n\t\tHttpUrlHelper.combineOriginPath(publicOrigin, `${baseRouteName}/:id`)\n\t);\n\n\treturn {\n\t\tstatusCode: HttpStatusCode.created,\n\t\theaders\n\t};\n}\n\n/**\n * Get the document from the auditable item graph vertex.\n * @param httpRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function documentManagementGet(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IDocumentManagementGetRequest\n): Promise<IDocumentManagementGetResponse> {\n\tGuards.object<IDocumentManagementGetRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IDocumentManagementGetRequest[\"pathParams\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.pathParams),\n\t\trequest.pathParams\n\t);\n\tGuards.stringValue(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.pathParams.auditableItemGraphDocumentId),\n\t\trequest.pathParams.auditableItemGraphDocumentId\n\t);\n\n\tconst component = ComponentFactory.get<IDocumentManagementComponent>(componentName);\n\n\tconst result = await component.get(\n\t\trequest.pathParams.auditableItemGraphDocumentId,\n\t\t{\n\t\t\tincludeBlobStorageMetadata: Coerce.boolean(request.query?.includeBlobStorageMetadata),\n\t\t\tincludeBlobStorageData: Coerce.boolean(request.query?.includeBlobStorageData),\n\t\t\tincludeAttestation: Coerce.boolean(request.query?.includeAttestation),\n\t\t\tincludeRemoved: Coerce.boolean(request.query?.includeRemoved),\n\t\t\tincludeDeletedEdges: Coerce.boolean(request.query?.includeDeletedEdges),\n\t\t\textractRuleGroupId: request.query?.extractRuleGroupId,\n\t\t\textractMimeType: request.query?.extractMimeType\n\t\t},\n\t\trequest.query?.cursor,\n\t\tCoerce.integer(request.query?.limit)\n\t);\n\n\tconst headers: IHttpHeaders = {};\n\tHttpHeaderHelper.buildJsonContentType(headers, request.headers);\n\n\tconst contextIds = await ContextIdStore.getContextIds();\n\tHttpHeaderHelper.buildCursor(\n\t\theaders,\n\t\thttpRequestContext.serverRequest.url,\n\t\tcontextIds?.[HttpContextIdKeys.PublicOrigin],\n\t\tresult.cursor\n\t);\n\n\treturn {\n\t\theaders,\n\t\tbody: result.entries\n\t};\n}\n\n/**\n * Get the document revision from the auditable item graph vertex.\n * @param httpRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function documentManagementGetRevision(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IDocumentManagementGetRevisionRequest\n): Promise<IDocumentManagementGetRevisionResponse> {\n\tGuards.object<IDocumentManagementGetRevisionRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IDocumentManagementGetRevisionRequest[\"pathParams\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.pathParams),\n\t\trequest.pathParams\n\t);\n\tGuards.stringValue(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.pathParams.auditableItemGraphDocumentId),\n\t\trequest.pathParams.auditableItemGraphDocumentId\n\t);\n\n\tconst revision = Coerce.integer(request.pathParams.revision);\n\tGuards.integer(ROUTES_SOURCE, nameof(revision), revision);\n\n\tconst component = ComponentFactory.get<IDocumentManagementComponent>(componentName);\n\n\tconst result = await component.getRevision(\n\t\trequest.pathParams.auditableItemGraphDocumentId,\n\t\trevision,\n\t\t{\n\t\t\tincludeBlobStorageMetadata: Coerce.boolean(request.query?.includeBlobStorageMetadata),\n\t\t\tincludeBlobStorageData: Coerce.boolean(request.query?.includeBlobStorageData),\n\t\t\tincludeAttestation: Coerce.boolean(request.query?.includeAttestation),\n\t\t\textractRuleGroupId: request.query?.extractRuleGroupId,\n\t\t\textractMimeType: request.query?.extractMimeType\n\t\t}\n\t);\n\n\tconst headers: IHttpHeaders = {};\n\tHttpHeaderHelper.buildJsonContentType(headers, request.headers);\n\n\treturn {\n\t\theaders,\n\t\tbody: result\n\t};\n}\n\n/**\n * Update the document from the auditable item graph vertex.\n * @param httpRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function documentManagementUpdatePartial(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IDocumentManagementUpdatePartialRequest\n): Promise<INoContentResponse> {\n\tGuards.object<IDocumentManagementUpdatePartialRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IDocumentManagementUpdatePartialRequest[\"pathParams\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.pathParams),\n\t\trequest.pathParams\n\t);\n\tGuards.stringValue(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.pathParams.auditableItemGraphDocumentId),\n\t\trequest.pathParams.auditableItemGraphDocumentId\n\t);\n\tGuards.object<IDocumentManagementUpdatePartialRequest[\"body\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.body),\n\t\trequest.body\n\t);\n\n\tconst component = ComponentFactory.get<IDocumentManagementComponent>(componentName);\n\n\tawait component.updatePartial(\n\t\trequest.pathParams.auditableItemGraphDocumentId,\n\t\trequest.body.document,\n\t\tIs.stringBase64(request.body.blob)\n\t\t\t? Converter.base64ToBytes(request.body.blob)\n\t\t\t: request.body.blob,\n\t\trequest.body.auditableItemGraphEdges,\n\t\t{\n\t\t\tincludeAttestation: request.body.options?.includeAttestation,\n\t\t\tincludeAlias: request.body.options?.includeAlias,\n\t\t\taliasAnnotationObject: request.body.options?.aliasAnnotationObject\n\t\t}\n\t);\n\n\treturn {\n\t\tstatusCode: HttpStatusCode.noContent\n\t};\n}\n\n/**\n * Remove the document from the auditable item graph vertex.\n * @param httpRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function documentManagementRemove(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IDocumentManagementRemoveRequest\n): Promise<INoContentResponse> {\n\tGuards.object<IDocumentManagementRemoveRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IDocumentManagementRemoveRequest[\"pathParams\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.pathParams),\n\t\trequest.pathParams\n\t);\n\tGuards.stringValue(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.pathParams.auditableItemGraphDocumentId),\n\t\trequest.pathParams.auditableItemGraphDocumentId\n\t);\n\tconst revision = Coerce.integer(request.pathParams.revision);\n\tGuards.integer(ROUTES_SOURCE, nameof(revision), revision);\n\n\tconst component = ComponentFactory.get<IDocumentManagementComponent>(componentName);\n\n\tawait component.removeRevision(request.pathParams.auditableItemGraphDocumentId, revision);\n\n\treturn {\n\t\tstatusCode: HttpStatusCode.noContent\n\t};\n}\n\n/**\n * Query the documents from an auditable item graph vertex.\n * @param httpRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function documentManagementQuery(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IDocumentManagementQueryRequest\n): Promise<IDocumentManagementQueryResponse> {\n\tGuards.object<IDocumentManagementQueryRequest>(ROUTES_SOURCE, nameof(request), request);\n\tGuards.object<IDocumentManagementQueryRequest[\"query\"]>(\n\t\tROUTES_SOURCE,\n\t\tnameof(request.query),\n\t\trequest.query\n\t);\n\tGuards.stringValue(ROUTES_SOURCE, nameof(request.query.documentId), request.query.documentId);\n\n\tconst component = ComponentFactory.get<IDocumentManagementComponent>(componentName);\n\n\tconst result = await component.query(\n\t\trequest.query.documentId,\n\t\trequest.query?.cursor,\n\t\tCoerce.integer(request.query?.limit)\n\t);\n\n\tconst headers: IHttpHeaders = {};\n\tHttpHeaderHelper.buildJsonContentType(headers, request.headers);\n\n\tconst contextIds = await ContextIdStore.getContextIds();\n\tHttpHeaderHelper.buildCursor(\n\t\theaders,\n\t\thttpRequestContext.serverRequest.url,\n\t\tcontextIds?.[HttpContextIdKeys.PublicOrigin],\n\t\tresult.cursor\n\t);\n\n\treturn {\n\t\theaders,\n\t\tbody: result.entries\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"documentManagementRoutes.js","sources":["../../src/documentManagementRoutes.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EACN,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EAOb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,0BAA0B,EAC1B,uBAAuB,EACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EACN,gBAAgB,EAChB,aAAa,EAWb,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAqB,SAAS,EAAE,MAAM,aAAa,CAAC;AAExF;;GAEG;AACH,MAAM,aAAa,GAAG,iCAAiC,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAW;IAC7C;QACC,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,wEAAwE;KACrF;CACD,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,oCAAoC,CACnD,aAAqB,EACrB,aAAqB;IAErB,MAAM,6BAA6B,GAG/B;QACH,WAAW,EAAE,uBAAuB;QACpC,OAAO,EACN,yFAAyF;QAC1F,GAAG,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI;QACnC,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,GAAG,aAAa,GAAG;QACzB,SAAS,EAAE,aAAa,CAAC,KAAK;QAC9B,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAC9C,wBAAwB,CAAC,kBAAkB,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,CAAC;QACpF,WAAW,EAAE;YACZ,IAAI,EAAE,kCAAkC;YACxC,QAAQ,EAAE;gBACT;oBACC,EAAE,EAAE,wCAAwC;oBAC5C,OAAO,EAAE;wBACR,IAAI,EAAE;4BACL,QAAQ,EAAE;gCACT,UAAU,EAAE,SAAS;gCACrB,gBAAgB,EAAE,KAAK;gCACvB,YAAY,EAAE,qBAAqB,CAAC,YAAY;gCAChD,gBAAgB,EAAE;oCACjB,UAAU,EAAE,oBAAoB;oCAChC,OAAO,EAAE,iBAAiB;oCAC1B,IAAI,EAAE,YAAY;iCAClB;6BACD;4BACD,IAAI,EAAE,kBAAkB;4BACxB,OAAO,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE;yBACrC;qBACD;iBACD;aACD;SACD;QACD,YAAY,EAAE;YACb;gBACC,IAAI,EAAE,kBAAkB;gBACxB,QAAQ,EAAE;oBACT;wBACC,EAAE,EAAE,yCAAyC;wBAC7C,QAAQ,EAAE;4BACT,UAAU,EAAE,cAAc,CAAC,OAAO;4BAClC,OAAO,EAAE;gCACR,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,cAAc;6BACtC;yBACD;qBACD;iBACD;aACD;SACD;KACD,CAAC;IAEF,MAAM,oCAAoC,GAGtC;QACH,WAAW,EAAE,iCAAiC;QAC9C,OAAO,EACN,oGAAoG;QACrG,GAAG,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI;QACnC,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,GAAG,aAAa,gCAAgC;QACtD,SAAS,EAAE,aAAa,CAAC,KAAK;QAC9B,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAC9C,+BAA+B,CAAC,kBAAkB,EAAE,aAAa,EAAE,OAAO,CAAC;QAC5E,WAAW,EAAE;YACZ,IAAI,EAAE,yCAAyC;YAC/C,QAAQ,EAAE;gBACT;oBACC,EAAE,EAAE,+CAA+C;oBACnD,OAAO,EAAE;wBACR,UAAU,EAAE;4BACX,4BAA4B,EAAE,YAAY;yBAC1C;wBACD,IAAI,EAAE;4BACL,QAAQ,EAAE;gCACT,gBAAgB,EAAE;oCACjB,UAAU,EAAE,oBAAoB;oCAChC,OAAO,EAAE,iBAAiB;oCAC1B,IAAI,EAAE,YAAY;iCAClB;6BACD;4BACD,IAAI,EAAE,kBAAkB;yBACxB;qBACD;iBACD;aACD;SACD;QACD,YAAY,EAAE;YACb;gBACC,IAAI,EAAE,oBAAoB;gBAC1B,QAAQ,EAAE;oBACT;wBACC,EAAE,EAAE,gDAAgD;wBACpD,QAAQ,EAAE;4BACT,UAAU,EAAE,cAAc,CAAC,SAAS;yBACpC;qBACD;iBACD;aACD;SACD;KACD,CAAC;IAEF,MAAM,0BAA0B,GAG5B;QACH,WAAW,EAAE,uBAAuB;QACpC,OAAO,EAAE,sDAAsD;QAC/D,GAAG,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI;QACnC,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,GAAG,aAAa,gCAAgC;QACtD,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAC9C,qBAAqB,CAAC,kBAAkB,EAAE,aAAa,EAAE,OAAO,CAAC;QAClE,WAAW,EAAE;YACZ,IAAI,EAAE,+BAA+B;YACrC,QAAQ,EAAE;gBACT;oBACC,EAAE,EAAE,qCAAqC;oBACzC,OAAO,EAAE;wBACR,UAAU,EAAE;4BACX,4BAA4B,EAAE,YAAY;yBAC1C;qBACD;iBACD;aACD;SACD;QACD,YAAY,EAAE;YACb;gBACC,IAAI,EAAE,gCAAgC;gBACtC,QAAQ,EAAE;oBACT;wBACC,EAAE,EAAE,sCAAsC;wBAC1C,QAAQ,EAAE;4BACT,IAAI,EAAE;gCACL,UAAU,EAAE;oCACX,iBAAiB,CAAC,OAAO;oCACzB,gBAAgB,CAAC,OAAO;oCACxB,gBAAgB,CAAC,aAAa;iCAC9B;gCACD,IAAI,EAAE,cAAc,CAAC,QAAQ;gCAC7B,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE;oCACjC;wCACC,UAAU,EAAE;4CACX,iBAAiB,CAAC,OAAO;4CACzB,gBAAgB,CAAC,OAAO;4CACxB,gBAAgB,CAAC,aAAa;yCAC9B;wCACD,IAAI,EAAE,aAAa,CAAC,QAAQ;wCAC5B,EAAE,EAAE,WAAW;wCACf,UAAU,EAAE,SAAS;wCACrB,gBAAgB,EAAE,KAAK;wCACvB,YAAY,EAAE,qBAAqB,CAAC,YAAY;wCAChD,gBAAgB,EAAE,CAAC;wCACnB,aAAa,EACZ,8EAA8E;wCAC/E,SAAS,EAAE,eAAe;wCAC1B,WAAW,EAAE,sBAAsB;wCACnC,gBAAgB,EAAE;4CACjB,UAAU,EAAE,oBAAoB;4CAChC,OAAO,EAAE,iBAAiB;4CAC1B,IAAI,EAAE,YAAY;yCAClB;wCACD,oBAAoB,EACnB,uFAAuF;wCACxF,YAAY,EACX,uFAAuF;qCACxF;iCACD;6BACD;yBACD;qBACD;iBACD;aACD;YACD;gBACC,IAAI,EAAE,gCAAgC;gBACtC,QAAQ,EAAE,SAAS,CAAC,MAAM;gBAC1B,QAAQ,EAAE;oBACT;wBACC,EAAE,EAAE,sCAAsC;wBAC1C,QAAQ,EAAE;4BACT,IAAI,EAAE;gCACL,UAAU,EAAE;oCACX,iBAAiB,CAAC,OAAO;oCACzB,gBAAgB,CAAC,OAAO;oCACxB,gBAAgB,CAAC,aAAa;iCAC9B;gCACD,IAAI,EAAE,cAAc,CAAC,QAAQ;gCAC7B,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE;oCACjC;wCACC,UAAU,EAAE;4CACX,iBAAiB,CAAC,OAAO;4CACzB,gBAAgB,CAAC,OAAO;4CACxB,gBAAgB,CAAC,aAAa;yCAC9B;wCACD,IAAI,EAAE,aAAa,CAAC,QAAQ;wCAC5B,EAAE,EAAE,WAAW;wCACf,UAAU,EAAE,SAAS;wCACrB,gBAAgB,EAAE,KAAK;wCACvB,YAAY,EAAE,qBAAqB,CAAC,YAAY;wCAChD,gBAAgB,EAAE,CAAC;wCACnB,aAAa,EACZ,8EAA8E;wCAC/E,SAAS,EAAE,eAAe;wCAC1B,WAAW,EAAE,sBAAsB;wCACnC,gBAAgB,EAAE;4CACjB,UAAU,EAAE,oBAAoB;4CAChC,OAAO,EAAE,iBAAiB;4CAC1B,IAAI,EAAE,YAAY;yCAClB;wCACD,oBAAoB,EACnB,uFAAuF;wCACxF,YAAY,EACX,uFAAuF;qCACxF;iCACD;6BACD;yBACD;qBACD;iBACD;aACD;YACD;gBACC,IAAI,EAAE,mBAAmB;aACzB;SACD;KACD,CAAC;IAEF,MAAM,kCAAkC,GAGpC;QACH,WAAW,EAAE,+BAA+B;QAC5C,OAAO,EAAE,+DAA+D;QACxE,GAAG,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI;QACnC,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,GAAG,aAAa,0CAA0C;QAChE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAC9C,6BAA6B,CAAC,kBAAkB,EAAE,aAAa,EAAE,OAAO,CAAC;QAC1E,WAAW,EAAE;YACZ,IAAI,EAAE,+BAA+B;YACrC,QAAQ,EAAE;gBACT;oBACC,EAAE,EAAE,6CAA6C;oBACjD,OAAO,EAAE;wBACR,UAAU,EAAE;4BACX,4BAA4B,EAAE,YAAY;4BAC1C,QAAQ,EAAE,GAAG;yBACb;qBACD;iBACD;aACD;SACD;QACD,YAAY,EAAE;YACb;gBACC,IAAI,EAAE,wCAAwC;gBAC9C,QAAQ,EAAE;oBACT;wBACC,EAAE,EAAE,8CAA8C;wBAClD,QAAQ,EAAE;4BACT,IAAI,EAAE;gCACL,UAAU,EAAE;oCACX,iBAAiB,CAAC,OAAO;oCACzB,gBAAgB,CAAC,OAAO;oCACxB,gBAAgB,CAAC,aAAa;iCAC9B;gCACD,IAAI,EAAE,aAAa,CAAC,QAAQ;gCAC5B,EAAE,EAAE,WAAW;gCACf,UAAU,EAAE,SAAS;gCACrB,gBAAgB,EAAE,KAAK;gCACvB,YAAY,EAAE,qBAAqB,CAAC,YAAY;gCAChD,gBAAgB,EAAE,CAAC;gCACnB,aAAa,EACZ,8EAA8E;gCAC/E,SAAS,EAAE,eAAe;gCAC1B,WAAW,EAAE,sBAAsB;gCACnC,gBAAgB,EAAE;oCACjB,UAAU,EAAE,oBAAoB;oCAChC,OAAO,EAAE,iBAAiB;oCAC1B,IAAI,EAAE,YAAY;iCAClB;gCACD,oBAAoB,EACnB,uFAAuF;gCACxF,YAAY,EACX,uFAAuF;6BACxF;yBACD;qBACD;iBACD;aACD;YACD;gBACC,IAAI,EAAE,wCAAwC;gBAC9C,QAAQ,EAAE,SAAS,CAAC,MAAM;gBAC1B,QAAQ,EAAE;oBACT;wBACC,EAAE,EAAE,8CAA8C;wBAClD,QAAQ,EAAE;4BACT,IAAI,EAAE;gCACL,UAAU,EAAE;oCACX,iBAAiB,CAAC,OAAO;oCACzB,gBAAgB,CAAC,OAAO;oCACxB,gBAAgB,CAAC,aAAa;iCAC9B;gCACD,IAAI,EAAE,aAAa,CAAC,QAAQ;gCAC5B,EAAE,EAAE,WAAW;gCACf,UAAU,EAAE,SAAS;gCACrB,gBAAgB,EAAE,KAAK;gCACvB,YAAY,EAAE,qBAAqB,CAAC,YAAY;gCAChD,gBAAgB,EAAE,CAAC;gCACnB,aAAa,EACZ,8EAA8E;gCAC/E,SAAS,EAAE,eAAe;gCAC1B,WAAW,EAAE,sBAAsB;gCACnC,gBAAgB,EAAE;oCACjB,UAAU,EAAE,oBAAoB;oCAChC,OAAO,EAAE,iBAAiB;oCAC1B,IAAI,EAAE,YAAY;iCAClB;gCACD,oBAAoB,EACnB,uFAAuF;gCACxF,YAAY,EACX,uFAAuF;6BACxF;yBACD;qBACD;iBACD;aACD;YACD;gBACC,IAAI,EAAE,mBAAmB;aACzB;SACD;KACD,CAAC;IAEF,MAAM,qCAAqC,GAGvC;QACH,WAAW,EAAE,0BAA0B;QACvC,OAAO,EAAE,wDAAwD;QACjE,GAAG,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI;QACnC,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,GAAG,aAAa,0CAA0C;QAChE,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAC9C,wBAAwB,CAAC,kBAAkB,EAAE,aAAa,EAAE,OAAO,CAAC;QACrE,WAAW,EAAE;YACZ,IAAI,EAAE,kCAAkC;YACxC,QAAQ,EAAE;gBACT;oBACC,EAAE,EAAE,wCAAwC;oBAC5C,OAAO,EAAE;wBACR,UAAU,EAAE;4BACX,4BAA4B,EAAE,UAAU;4BACxC,QAAQ,EAAE,GAAG;yBACb;qBACD;iBACD;aACD;SACD;QACD,YAAY,EAAE;YACb;gBACC,IAAI,EAAE,oBAAoB;aAC1B;YACD;gBACC,IAAI,EAAE,mBAAmB;aACzB;SACD;KACD,CAAC;IAEF,MAAM,4BAA4B,GAG9B;QACH,WAAW,EAAE,yBAAyB;QACtC,OAAO,EAAE,qDAAqD;QAC9D,GAAG,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI;QACnC,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,GAAG,aAAa,GAAG;QACzB,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,CAC9C,uBAAuB,CAAC,kBAAkB,EAAE,aAAa,EAAE,OAAO,CAAC;QACpE,WAAW,EAAE;YACZ,IAAI,EAAE,iCAAiC;YACvC,QAAQ,EAAE;gBACT;oBACC,EAAE,EAAE,uCAAuC;oBAC3C,OAAO,EAAE;wBACR,KAAK,EAAE;4BACN,UAAU,EAAE,SAAS;yBACrB;qBACD;iBACD;aACD;SACD;QACD,YAAY,EAAE;YACb;gBACC,IAAI,EAAE,kCAAkC;gBACxC,QAAQ,EAAE;oBACT;wBACC,EAAE,EAAE,wCAAwC;wBAC5C,QAAQ,EAAE;4BACT,IAAI,EAAE;gCACL,UAAU,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,0BAA0B,CAAC,OAAO,CAAC;gCAC3E,IAAI,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,uBAAuB,CAAC,UAAU,CAAC;gCACnE,CAAC,cAAc,CAAC,eAAe,CAAC,EAAE;oCACjC;wCACC,UAAU,EAAE;4CACX,0BAA0B,CAAC,OAAO;4CAClC,0BAA0B,CAAC,aAAa;yCACxC;wCACD,EAAE,EAAE,sEAAsE;wCAC1E,IAAI,EAAE,uBAAuB,CAAC,MAAM;wCACpC,WAAW,EAAE,0BAA0B;wCACvC,OAAO,EAAE;4CACR;gDACC,UAAU,EAAE,CAAC,0BAA0B,CAAC,OAAO,CAAC;gDAChD,EAAE,EAAE,WAAW;gDACf,IAAI,EAAE,uBAAuB,CAAC,KAAK;gDACnC,WAAW,EAAE,0BAA0B;6CACvC;yCACD;wCACD,SAAS,EAAE;4CACV;gDACC,UAAU,EAAE,0BAA0B,CAAC,OAAO;gDAC9C,IAAI,EAAE,uBAAuB,CAAC,QAAQ;gDACtC,WAAW,EAAE,0BAA0B;gDACvC,cAAc,EAAE;oDACf,UAAU,EAAE;wDACX,yCAAyC;wDACzC,sCAAsC;wDACtC,oBAAoB;qDACpB;oDACD,IAAI,EAAE,UAAU;oDAChB,EAAE,EAAE,aAAa;oDACjB,UAAU,EAAE,WAAW;oDACvB,YAAY,EAAE,4BAA4B;oDAC1C,gBAAgB,EAAE,CAAC;oDACnB,gBAAgB,EAAE;wDACjB,UAAU,EAAE,oBAAoB;wDAChC,IAAI,EAAE,iBAAiB;wDACvB,IAAI,EAAE,gBAAgB;qDACtB;oDACD,SAAS,EAAE,qDAAqD;oDAChE,aAAa,EACZ,8EAA8E;oDAC/E,WAAW,EAAE,0BAA0B;oDACvC,oBAAoB,EACnB,uFAAuF;oDACxF,YAAY,EACX,uFAAuF;iDACxF;6CACD;yCACD;qCACD;iCACD;6BACD;yBACD;qBACD;iBACD;aACD;SACD;KACD,CAAC;IAEF,OAAO;QACN,6BAA6B;QAC7B,oCAAoC;QACpC,0BAA0B;QAC1B,kCAAkC;QAClC,qCAAqC;QACrC,4BAA4B;KAC5B,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC7C,kBAAuC,EACvC,aAAqB,EACrB,OAAyC,EACzC,aAAqB;IAErB,MAAM,CAAC,MAAM,CAAmC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACnF,MAAM,CAAC,MAAM,CACZ,aAAa,EACb,cAAc,EACd,OAAO,CAAC,IAAI,CACZ,CAAC;IACF,MAAM,CAAC,MAAM,CACZ,aAAa,EACb,uBAAuB,EACvB,OAAO,CAAC,IAAI,CAAC,QAAQ,CACrB,CAAC;IACF,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,mBAAmB,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE1E,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAA+B,aAAa,CAAC,CAAC;IACpF,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,MAAM,CAChC,OAAO,CAAC,IAAI,CAAC,QAAQ,EACrB,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5C,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EACpB,OAAO,CAAC,IAAI,CAAC,uBAAuB,EACpC;QACC,kBAAkB,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB;QAC5D,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY;QAChD,qBAAqB,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB;KAClE,CACD,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,CAAC;IACxD,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAElE,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,gBAAgB,CAAC,OAAO,CACvB,OAAO,EACP,EAAE,EACF,aAAa,CAAC,iBAAiB,CAAC,YAAY,EAAE,GAAG,aAAa,MAAM,CAAC,CACrE,CAAC;IAEF,OAAO;QACN,UAAU,EAAE,cAAc,CAAC,OAAO;QAClC,OAAO;KACP,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAC1C,kBAAuC,EACvC,aAAqB,EACrB,OAAsC;IAEtC,MAAM,CAAC,MAAM,CAAgC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAChF,MAAM,CAAC,MAAM,CACZ,aAAa,EACb,oBAAoB,EACpB,OAAO,CAAC,UAAU,CAClB,CAAC;IACF,MAAM,CAAC,WAAW,CACjB,aAAa,EACb,iDAAiD,EACjD,OAAO,CAAC,UAAU,CAAC,4BAA4B,CAC/C,CAAC;IAEF,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAA+B,aAAa,CAAC,CAAC;IAEpF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CACjC,OAAO,CAAC,UAAU,CAAC,4BAA4B,EAC/C;QACC,0BAA0B,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,0BAA0B,CAAC;QACrF,sBAAsB,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,sBAAsB,CAAC;QAC7E,kBAAkB,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,CAAC;QACrE,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,cAAc,CAAC;QAC7D,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,mBAAmB,CAAC;QACvE,kBAAkB,EAAE,OAAO,CAAC,KAAK,EAAE,kBAAkB;QACrD,eAAe,EAAE,OAAO,CAAC,KAAK,EAAE,eAAe;KAC/C,EACD,OAAO,CAAC,KAAK,EAAE,MAAM,EACrB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CACpC,CAAC;IAEF,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,gBAAgB,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,CAAC;IACxD,gBAAgB,CAAC,WAAW,CAC3B,OAAO,EACP,kBAAkB,CAAC,aAAa,CAAC,GAAG,EACpC,UAAU,EAAE,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAC5C,MAAM,CAAC,MAAM,CACb,CAAC;IAEF,OAAO;QACN,OAAO;QACP,IAAI,EAAE,MAAM,CAAC,OAAO;KACpB,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAClD,kBAAuC,EACvC,aAAqB,EACrB,OAA8C;IAE9C,MAAM,CAAC,MAAM,CAAwC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACxF,MAAM,CAAC,MAAM,CACZ,aAAa,EACb,oBAAoB,EACpB,OAAO,CAAC,UAAU,CAClB,CAAC;IACF,MAAM,CAAC,WAAW,CACjB,aAAa,EACb,iDAAiD,EACjD,OAAO,CAAC,UAAU,CAAC,4BAA4B,CAC/C,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAEpD,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAA+B,aAAa,CAAC,CAAC;IAEpF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CACzC,OAAO,CAAC,UAAU,CAAC,4BAA4B,EAC/C,QAAQ,EACR;QACC,0BAA0B,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,0BAA0B,CAAC;QACrF,sBAAsB,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,sBAAsB,CAAC;QAC7E,kBAAkB,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,CAAC;QACrE,kBAAkB,EAAE,OAAO,CAAC,KAAK,EAAE,kBAAkB;QACrD,eAAe,EAAE,OAAO,CAAC,KAAK,EAAE,eAAe;KAC/C,CACD,CAAC;IAEF,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,gBAAgB,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhE,OAAO;QACN,OAAO;QACP,IAAI,EAAE,MAAM;KACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACpD,kBAAuC,EACvC,aAAqB,EACrB,OAAgD;IAEhD,MAAM,CAAC,MAAM,CAA0C,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAC1F,MAAM,CAAC,MAAM,CACZ,aAAa,EACb,oBAAoB,EACpB,OAAO,CAAC,UAAU,CAClB,CAAC;IACF,MAAM,CAAC,WAAW,CACjB,aAAa,EACb,iDAAiD,EACjD,OAAO,CAAC,UAAU,CAAC,4BAA4B,CAC/C,CAAC;IACF,MAAM,CAAC,MAAM,CACZ,aAAa,EACb,cAAc,EACd,OAAO,CAAC,IAAI,CACZ,CAAC;IAEF,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAA+B,aAAa,CAAC,CAAC;IAEpF,MAAM,SAAS,CAAC,aAAa,CAC5B,OAAO,CAAC,UAAU,CAAC,4BAA4B,EAC/C,OAAO,CAAC,IAAI,CAAC,QAAQ,EACrB,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5C,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EACpB,OAAO,CAAC,IAAI,CAAC,uBAAuB,EACpC;QACC,kBAAkB,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB;QAC5D,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY;QAChD,qBAAqB,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB;KAClE,CACD,CAAC;IAEF,OAAO;QACN,UAAU,EAAE,cAAc,CAAC,SAAS;KACpC,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC7C,kBAAuC,EACvC,aAAqB,EACrB,OAAyC;IAEzC,MAAM,CAAC,MAAM,CAAmC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACnF,MAAM,CAAC,MAAM,CACZ,aAAa,EACb,oBAAoB,EACpB,OAAO,CAAC,UAAU,CAClB,CAAC;IACF,MAAM,CAAC,WAAW,CACjB,aAAa,EACb,iDAAiD,EACjD,OAAO,CAAC,UAAU,CAAC,4BAA4B,CAC/C,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAEpD,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAA+B,aAAa,CAAC,CAAC;IAEpF,MAAM,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAAC;IAE1F,OAAO;QACN,UAAU,EAAE,cAAc,CAAC,SAAS;KACpC,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC5C,kBAAuC,EACvC,aAAqB,EACrB,OAAwC;IAExC,MAAM,CAAC,MAAM,CAAkC,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAClF,MAAM,CAAC,MAAM,CACZ,aAAa,EACb,eAAe,EACf,OAAO,CAAC,KAAK,CACb,CAAC;IACF,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,0BAA0B,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAExF,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAA+B,aAAa,CAAC,CAAC;IAEpF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,CACnC,OAAO,CAAC,KAAK,CAAC,UAAU,EACxB,OAAO,CAAC,KAAK,EAAE,MAAM,EACrB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CACpC,CAAC;IAEF,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,gBAAgB,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,CAAC;IACxD,gBAAgB,CAAC,WAAW,CAC3B,OAAO,EACP,kBAAkB,CAAC,aAAa,CAAC,GAAG,EACpC,UAAU,EAAE,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAC5C,MAAM,CAAC,MAAM,CACb,CAAC;IAEF,OAAO;QACN,OAAO;QACP,IAAI,EAAE,MAAM,CAAC,OAAO;KACpB,CAAC;AACH,CAAC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tHttpBodyLimit,\n\tHttpContextIdKeys,\n\tHttpHeaderHelper,\n\tHttpUrlHelper,\n\ttype ICreatedResponse,\n\ttype IHttpRequestContext,\n\ttype INoContentResponse,\n\ttype INotFoundResponse,\n\ttype IRestRoute,\n\ttype ITag\n} from \"@3sixty/api-models\";\nimport {\n\tAuditableItemGraphContexts,\n\tAuditableItemGraphTypes\n} from \"@3sixty/auditable-item-graph-models\";\nimport { ContextIdStore } from \"@3sixty/context\";\nimport { Coerce, ComponentFactory, Converter, Guards, Is } from \"@3sixty/core\";\nimport {\n\tDocumentContexts,\n\tDocumentTypes,\n\ttype IDocumentManagementComponent,\n\ttype IDocumentManagementCreateRequest,\n\ttype IDocumentManagementGetRequest,\n\ttype IDocumentManagementGetResponse,\n\ttype IDocumentManagementGetRevisionRequest,\n\ttype IDocumentManagementGetRevisionResponse,\n\ttype IDocumentManagementQueryRequest,\n\ttype IDocumentManagementQueryResponse,\n\ttype IDocumentManagementRemoveRequest,\n\ttype IDocumentManagementUpdatePartialRequest\n} from \"@3sixty/document-management-models\";\n\nimport { SchemaOrgContexts, SchemaOrgTypes } from \"@3sixty/standards-schema-org\";\nimport { UneceDocumentCodeList } from \"@3sixty/standards-unece\";\nimport { HeaderTypes, HttpStatusCode, type IHttpHeaders, MimeTypes } from \"@3sixty/web\";\n\n/**\n * The source used when communicating about these routes.\n */\nconst ROUTES_SOURCE = \"documentManagementStorageRoutes\";\n\n/**\n * The tag to associate with the routes.\n */\nexport const tagsDocumentManagement: ITag[] = [\n\t{\n\t\tname: \"Document Management\",\n\t\tdescription: \"Endpoints which are modelled to access a document management contract.\"\n\t}\n];\n\n/**\n * The REST routes for document management.\n * @param baseRouteName Prefix to prepend to the paths.\n * @param componentName The name of the component to use in the routes stored in the ComponentFactory.\n * @returns The generated routes.\n */\nexport function generateRestRoutesDocumentManagement(\n\tbaseRouteName: string,\n\tcomponentName: string\n): IRestRoute[] {\n\tconst documentManagementCreateRoute: IRestRoute<\n\t\tIDocumentManagementCreateRequest,\n\t\tICreatedResponse\n\t> = {\n\t\toperationId: \"DocumentManagementSet\",\n\t\tsummary:\n\t\t\t\"Store a document in an auditable item graph vertex and add its content to blob storage.\",\n\t\ttag: tagsDocumentManagement[0].name,\n\t\tmethod: \"POST\",\n\t\tpath: `${baseRouteName}/`,\n\t\tbodyLimit: HttpBodyLimit.Large,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tdocumentManagementCreate(httpRequestContext, componentName, request, baseRouteName),\n\t\trequestType: {\n\t\t\ttype: \"IDocumentManagementCreateRequest\",\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"DocumentManagementCreateRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\tdocumentId: \"2721000\",\n\t\t\t\t\t\t\t\tdocumentIdFormat: \"bol\",\n\t\t\t\t\t\t\t\tdocumentCode: UneceDocumentCodeList.BillOfLading,\n\t\t\t\t\t\t\t\tannotationObject: {\n\t\t\t\t\t\t\t\t\t\"@context\": \"https://schema.org\",\n\t\t\t\t\t\t\t\t\t\"@type\": \"DigitalDocument\",\n\t\t\t\t\t\t\t\t\tname: \"myfile.pdf\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tblob: \"SGVsbG8gV29ybGQ=\",\n\t\t\t\t\t\t\toptions: { includeAttestation: true }\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: \"ICreatedResponse\",\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"DocumentManagementCreateResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tstatusCode: HttpStatusCode.created,\n\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t[HeaderTypes.Location]: \"aig%3A123456\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t};\n\n\tconst documentManagementUpdatePartialRoute: IRestRoute<\n\t\tIDocumentManagementUpdatePartialRequest,\n\t\tINoContentResponse\n\t> = {\n\t\toperationId: \"DocumentManagementUpdatePartial\",\n\t\tsummary:\n\t\t\t\"Partially update a document in an auditable item graph vertex and add its content to blob storage.\",\n\t\ttag: tagsDocumentManagement[0].name,\n\t\tmethod: \"PATCH\",\n\t\tpath: `${baseRouteName}/:auditableItemGraphDocumentId`,\n\t\tbodyLimit: HttpBodyLimit.Large,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tdocumentManagementUpdatePartial(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: \"IDocumentManagementUpdatePartialRequest\",\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"DocumentManagementUpdatePartialRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tauditableItemGraphDocumentId: \"aig:123456\"\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tdocument: {\n\t\t\t\t\t\t\t\tannotationObject: {\n\t\t\t\t\t\t\t\t\t\"@context\": \"https://schema.org\",\n\t\t\t\t\t\t\t\t\t\"@type\": \"DigitalDocument\",\n\t\t\t\t\t\t\t\t\tname: \"myfile.pdf\"\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tblob: \"SGVsbG8gV29ybGQ=\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: \"INoContentResponse\",\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"DocumentManagementUpdatePartialResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tstatusCode: HttpStatusCode.noContent\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t};\n\n\tconst documentManagementGetRoute: IRestRoute<\n\t\tIDocumentManagementGetRequest,\n\t\tIDocumentManagementGetResponse\n\t> = {\n\t\toperationId: \"DocumentManagementGet\",\n\t\tsummary: \"Get the data for a document from document management\",\n\t\ttag: tagsDocumentManagement[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/:auditableItemGraphDocumentId`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tdocumentManagementGet(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: \"IDocumentManagementGetRequest\",\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"DocumentManagementGetRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tauditableItemGraphDocumentId: \"aig:123456\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: \"IDocumentManagementGetResponse\",\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"DocumentManagementGetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\t\t\t\t\tDocumentContexts.Context,\n\t\t\t\t\t\t\t\t\tDocumentContexts.ContextCommon\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttype: SchemaOrgTypes.ItemList,\n\t\t\t\t\t\t\t\t[SchemaOrgTypes.ItemListElement]: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\t\t\t\t\t\t\tDocumentContexts.Context,\n\t\t\t\t\t\t\t\t\t\t\tDocumentContexts.ContextCommon\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\ttype: DocumentTypes.Document,\n\t\t\t\t\t\t\t\t\t\tid: \"2721000:0\",\n\t\t\t\t\t\t\t\t\t\tdocumentId: \"2721000\",\n\t\t\t\t\t\t\t\t\t\tdocumentIdFormat: \"bol\",\n\t\t\t\t\t\t\t\t\t\tdocumentCode: UneceDocumentCodeList.BillOfLading,\n\t\t\t\t\t\t\t\t\t\tdocumentRevision: 0,\n\t\t\t\t\t\t\t\t\t\tblobStorageId:\n\t\t\t\t\t\t\t\t\t\t\t\"blob-memory:c57d94b088f4c6d2cb32ded014813d0c786aa00134c8ee22f84b1e2545602a70\",\n\t\t\t\t\t\t\t\t\t\tintegrity: \"sha256-123456\",\n\t\t\t\t\t\t\t\t\t\tdateCreated: \"2024-01-01T00:00:00Z\",\n\t\t\t\t\t\t\t\t\t\tannotationObject: {\n\t\t\t\t\t\t\t\t\t\t\t\"@context\": \"https://schema.org\",\n\t\t\t\t\t\t\t\t\t\t\t\"@type\": \"DigitalDocument\",\n\t\t\t\t\t\t\t\t\t\t\tname: \"myfile.pdf\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\torganizationIdentity:\n\t\t\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363\",\n\t\t\t\t\t\t\t\t\t\tuserIdentity:\n\t\t\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"IDocumentManagementGetResponse\",\n\t\t\t\tmimeType: MimeTypes.JsonLd,\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"DocumentManagementGetResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\t\t\t\t\tDocumentContexts.Context,\n\t\t\t\t\t\t\t\t\tDocumentContexts.ContextCommon\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttype: SchemaOrgTypes.ItemList,\n\t\t\t\t\t\t\t\t[SchemaOrgTypes.ItemListElement]: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\t\t\t\t\t\t\tDocumentContexts.Context,\n\t\t\t\t\t\t\t\t\t\t\tDocumentContexts.ContextCommon\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\ttype: DocumentTypes.Document,\n\t\t\t\t\t\t\t\t\t\tid: \"2721000:0\",\n\t\t\t\t\t\t\t\t\t\tdocumentId: \"2721000\",\n\t\t\t\t\t\t\t\t\t\tdocumentIdFormat: \"bol\",\n\t\t\t\t\t\t\t\t\t\tdocumentCode: UneceDocumentCodeList.BillOfLading,\n\t\t\t\t\t\t\t\t\t\tdocumentRevision: 0,\n\t\t\t\t\t\t\t\t\t\tblobStorageId:\n\t\t\t\t\t\t\t\t\t\t\t\"blob-memory:c57d94b088f4c6d2cb32ded014813d0c786aa00134c8ee22f84b1e2545602a70\",\n\t\t\t\t\t\t\t\t\t\tintegrity: \"sha256-123456\",\n\t\t\t\t\t\t\t\t\t\tdateCreated: \"2024-01-01T00:00:00Z\",\n\t\t\t\t\t\t\t\t\t\tannotationObject: {\n\t\t\t\t\t\t\t\t\t\t\t\"@context\": \"https://schema.org\",\n\t\t\t\t\t\t\t\t\t\t\t\"@type\": \"DigitalDocument\",\n\t\t\t\t\t\t\t\t\t\t\tname: \"myfile.pdf\"\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\torganizationIdentity:\n\t\t\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363\",\n\t\t\t\t\t\t\t\t\t\tuserIdentity:\n\t\t\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"INotFoundResponse\"\n\t\t\t}\n\t\t]\n\t};\n\n\tconst documentManagementGetRevisionRoute: IRestRoute<\n\t\tIDocumentManagementGetRevisionRequest,\n\t\tIDocumentManagementGetRevisionResponse\n\t> = {\n\t\toperationId: \"DocumentManagementGetRevision\",\n\t\tsummary: \"Get the data for a document revision from document management\",\n\t\ttag: tagsDocumentManagement[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/:auditableItemGraphDocumentId/:revision`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tdocumentManagementGetRevision(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: \"IDocumentManagementGetRequest\",\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"DocumentManagementGetRevisionRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tauditableItemGraphDocumentId: \"aig:123456\",\n\t\t\t\t\t\t\trevision: \"1\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: \"IDocumentManagementGetRevisionResponse\",\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"DocumentManagementGetRevisionResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\t\t\t\t\tDocumentContexts.Context,\n\t\t\t\t\t\t\t\t\tDocumentContexts.ContextCommon\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttype: DocumentTypes.Document,\n\t\t\t\t\t\t\t\tid: \"2721000:0\",\n\t\t\t\t\t\t\t\tdocumentId: \"2721000\",\n\t\t\t\t\t\t\t\tdocumentIdFormat: \"bol\",\n\t\t\t\t\t\t\t\tdocumentCode: UneceDocumentCodeList.BillOfLading,\n\t\t\t\t\t\t\t\tdocumentRevision: 1,\n\t\t\t\t\t\t\t\tblobStorageId:\n\t\t\t\t\t\t\t\t\t\"blob-memory:c57d94b088f4c6d2cb32ded014813d0c786aa00134c8ee22f84b1e2545602a70\",\n\t\t\t\t\t\t\t\tintegrity: \"sha256-123456\",\n\t\t\t\t\t\t\t\tdateCreated: \"2024-01-01T00:00:00Z\",\n\t\t\t\t\t\t\t\tannotationObject: {\n\t\t\t\t\t\t\t\t\t\"@context\": \"https://schema.org\",\n\t\t\t\t\t\t\t\t\t\"@type\": \"DigitalDocument\",\n\t\t\t\t\t\t\t\t\tname: \"myfile.pdf\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\torganizationIdentity:\n\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363\",\n\t\t\t\t\t\t\t\tuserIdentity:\n\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"IDocumentManagementGetRevisionResponse\",\n\t\t\t\tmimeType: MimeTypes.JsonLd,\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"DocumentManagementGetRevisionResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\t\t\t\t\tDocumentContexts.Context,\n\t\t\t\t\t\t\t\t\tDocumentContexts.ContextCommon\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttype: DocumentTypes.Document,\n\t\t\t\t\t\t\t\tid: \"2721000:0\",\n\t\t\t\t\t\t\t\tdocumentId: \"2721000\",\n\t\t\t\t\t\t\t\tdocumentIdFormat: \"bol\",\n\t\t\t\t\t\t\t\tdocumentCode: UneceDocumentCodeList.BillOfLading,\n\t\t\t\t\t\t\t\tdocumentRevision: 1,\n\t\t\t\t\t\t\t\tblobStorageId:\n\t\t\t\t\t\t\t\t\t\"blob-memory:c57d94b088f4c6d2cb32ded014813d0c786aa00134c8ee22f84b1e2545602a70\",\n\t\t\t\t\t\t\t\tintegrity: \"sha256-123456\",\n\t\t\t\t\t\t\t\tdateCreated: \"2024-01-01T00:00:00Z\",\n\t\t\t\t\t\t\t\tannotationObject: {\n\t\t\t\t\t\t\t\t\t\"@context\": \"https://schema.org\",\n\t\t\t\t\t\t\t\t\t\"@type\": \"DigitalDocument\",\n\t\t\t\t\t\t\t\t\tname: \"myfile.pdf\"\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\torganizationIdentity:\n\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363\",\n\t\t\t\t\t\t\t\tuserIdentity:\n\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x6363636363636363636363636363636363636363636363636363636363636363\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"INotFoundResponse\"\n\t\t\t}\n\t\t]\n\t};\n\n\tconst documentManagementRemoveRevisionRoute: IRestRoute<\n\t\tIDocumentManagementRemoveRequest,\n\t\tINoContentResponse\n\t> = {\n\t\toperationId: \"DocumentManagementRemove\",\n\t\tsummary: \"Remove an document from an auditable item graph vertex\",\n\t\ttag: tagsDocumentManagement[0].name,\n\t\tmethod: \"DELETE\",\n\t\tpath: `${baseRouteName}/:auditableItemGraphDocumentId/:revision`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tdocumentManagementRemove(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: \"IDocumentManagementRemoveRequest\",\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"DocumentManagementRemoveRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tpathParams: {\n\t\t\t\t\t\t\tauditableItemGraphDocumentId: \"aig:1234\",\n\t\t\t\t\t\t\trevision: \"1\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: \"INoContentResponse\"\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"INotFoundResponse\"\n\t\t\t}\n\t\t]\n\t};\n\n\tconst documentManagementQueryRoute: IRestRoute<\n\t\tIDocumentManagementQueryRequest,\n\t\tIDocumentManagementQueryResponse\n\t> = {\n\t\toperationId: \"DocumentManagementQuery\",\n\t\tsummary: \"Query the items from an auditable item graph vertex\",\n\t\ttag: tagsDocumentManagement[0].name,\n\t\tmethod: \"GET\",\n\t\tpath: `${baseRouteName}/`,\n\t\thandler: async (httpRequestContext, request) =>\n\t\t\tdocumentManagementQuery(httpRequestContext, componentName, request),\n\t\trequestType: {\n\t\t\ttype: \"IDocumentManagementQueryRequest\",\n\t\t\texamples: [\n\t\t\t\t{\n\t\t\t\t\tid: \"DocumentManagementQueryRequestExample\",\n\t\t\t\t\trequest: {\n\t\t\t\t\t\tquery: {\n\t\t\t\t\t\t\tdocumentId: \"2721000\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\tresponseType: [\n\t\t\t{\n\t\t\t\ttype: \"IDocumentManagementQueryResponse\",\n\t\t\t\texamples: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid: \"DocumentManagementQueryResponseExample\",\n\t\t\t\t\t\tresponse: {\n\t\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\t\t\"@context\": [SchemaOrgContexts.Context, AuditableItemGraphContexts.Context],\n\t\t\t\t\t\t\t\ttype: [SchemaOrgTypes.ItemList, AuditableItemGraphTypes.VertexList],\n\t\t\t\t\t\t\t\t[SchemaOrgTypes.ItemListElement]: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\t\t\tAuditableItemGraphContexts.Context,\n\t\t\t\t\t\t\t\t\t\t\tAuditableItemGraphContexts.ContextCommon\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\tid: \"aig:c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7\",\n\t\t\t\t\t\t\t\t\t\ttype: AuditableItemGraphTypes.Vertex,\n\t\t\t\t\t\t\t\t\t\tdateCreated: \"2024-08-22T04:13:20.000Z\",\n\t\t\t\t\t\t\t\t\t\taliases: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"@context\": [AuditableItemGraphContexts.Context],\n\t\t\t\t\t\t\t\t\t\t\t\tid: \"test-id-0\",\n\t\t\t\t\t\t\t\t\t\t\t\ttype: AuditableItemGraphTypes.Alias,\n\t\t\t\t\t\t\t\t\t\t\t\tdateCreated: \"2024-08-22T04:13:20.000Z\"\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\tresources: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\t\t\t\t\t\t\t\t\ttype: AuditableItemGraphTypes.Resource,\n\t\t\t\t\t\t\t\t\t\t\t\tdateCreated: \"2024-08-22T04:13:20.000Z\",\n\t\t\t\t\t\t\t\t\t\t\t\tresourceObject: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"https://schema.3sixty.global/documents/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"https://schema.3sixty.global/common/\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"https://schema.org\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"Document\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tid: \"test-id-0:0\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tdocumentId: \"test-id-0\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tdocumentCode: \"unece:DocumentCodeList#705\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tdocumentRevision: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\tannotationObject: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"@context\": \"https://schema.org\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"DigitalDocument\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tname: \"bill-of-lading\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\tintegrity: \"sha256-E3Duqrp6bHojSx+CzDttAToAiP1eFkCDAPBbKLABVGM=\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tblobStorageId:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"blob:memory:1370eeaaba7a6c7a234b1f82cc3b6d013a0088fd5e16408300f05b28b0015463\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tdateCreated: \"2024-08-22T04:13:20.000Z\",\n\t\t\t\t\t\t\t\t\t\t\t\t\torganizationIdentity:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x0101010101010101010101010101010101010101010101010101010101010101\",\n\t\t\t\t\t\t\t\t\t\t\t\t\tuserIdentity:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"did:entity-storage:0x0404040404040404040404040404040404040404040404040404040404040404\"\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t};\n\n\treturn [\n\t\tdocumentManagementCreateRoute,\n\t\tdocumentManagementUpdatePartialRoute,\n\t\tdocumentManagementGetRoute,\n\t\tdocumentManagementGetRevisionRoute,\n\t\tdocumentManagementRemoveRevisionRoute,\n\t\tdocumentManagementQueryRoute\n\t];\n}\n\n/**\n * Create a document as an auditable item graph vertex.\n * @param httpRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @param baseRouteName The base route name for constructing URLs.\n * @returns The response object with additional http response properties.\n */\nexport async function documentManagementCreate(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IDocumentManagementCreateRequest,\n\tbaseRouteName: string\n): Promise<ICreatedResponse> {\n\tGuards.object<IDocumentManagementCreateRequest>(ROUTES_SOURCE, \"request\", request);\n\tGuards.object<IDocumentManagementCreateRequest[\"body\"]>(\n\t\tROUTES_SOURCE,\n\t\t\"request.body\",\n\t\trequest.body\n\t);\n\tGuards.object<IDocumentManagementCreateRequest[\"body\"][\"document\"]>(\n\t\tROUTES_SOURCE,\n\t\t\"request.body.document\",\n\t\trequest.body.document\n\t);\n\tGuards.stringValue(ROUTES_SOURCE, \"request.body.blob\", request.body.blob);\n\n\tconst component = ComponentFactory.get<IDocumentManagementComponent>(componentName);\n\tconst id = await component.create(\n\t\trequest.body.document,\n\t\tIs.stringBase64(request.body.blob)\n\t\t\t? Converter.base64ToBytes(request.body.blob)\n\t\t\t: request.body.blob,\n\t\trequest.body.auditableItemGraphEdges,\n\t\t{\n\t\t\tincludeAttestation: request.body.options?.includeAttestation,\n\t\t\tincludeAlias: request.body.options?.includeAlias,\n\t\t\taliasAnnotationObject: request.body.options?.aliasAnnotationObject\n\t\t}\n\t);\n\n\tconst contextIds = await ContextIdStore.getContextIds();\n\tconst publicOrigin = contextIds?.[HttpContextIdKeys.PublicOrigin];\n\n\tconst headers: IHttpHeaders = {};\n\tHttpHeaderHelper.buildId(\n\t\theaders,\n\t\tid,\n\t\tHttpUrlHelper.combineOriginPath(publicOrigin, `${baseRouteName}/:id`)\n\t);\n\n\treturn {\n\t\tstatusCode: HttpStatusCode.created,\n\t\theaders\n\t};\n}\n\n/**\n * Get the document from the auditable item graph vertex.\n * @param httpRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function documentManagementGet(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IDocumentManagementGetRequest\n): Promise<IDocumentManagementGetResponse> {\n\tGuards.object<IDocumentManagementGetRequest>(ROUTES_SOURCE, \"request\", request);\n\tGuards.object<IDocumentManagementGetRequest[\"pathParams\"]>(\n\t\tROUTES_SOURCE,\n\t\t\"request.pathParams\",\n\t\trequest.pathParams\n\t);\n\tGuards.stringValue(\n\t\tROUTES_SOURCE,\n\t\t\"request.pathParams.auditableItemGraphDocumentId\",\n\t\trequest.pathParams.auditableItemGraphDocumentId\n\t);\n\n\tconst component = ComponentFactory.get<IDocumentManagementComponent>(componentName);\n\n\tconst result = await component.get(\n\t\trequest.pathParams.auditableItemGraphDocumentId,\n\t\t{\n\t\t\tincludeBlobStorageMetadata: Coerce.boolean(request.query?.includeBlobStorageMetadata),\n\t\t\tincludeBlobStorageData: Coerce.boolean(request.query?.includeBlobStorageData),\n\t\t\tincludeAttestation: Coerce.boolean(request.query?.includeAttestation),\n\t\t\tincludeRemoved: Coerce.boolean(request.query?.includeRemoved),\n\t\t\tincludeDeletedEdges: Coerce.boolean(request.query?.includeDeletedEdges),\n\t\t\textractRuleGroupId: request.query?.extractRuleGroupId,\n\t\t\textractMimeType: request.query?.extractMimeType\n\t\t},\n\t\trequest.query?.cursor,\n\t\tCoerce.integer(request.query?.limit)\n\t);\n\n\tconst headers: IHttpHeaders = {};\n\tHttpHeaderHelper.buildJsonContentType(headers, request.headers);\n\n\tconst contextIds = await ContextIdStore.getContextIds();\n\tHttpHeaderHelper.buildCursor(\n\t\theaders,\n\t\thttpRequestContext.serverRequest.url,\n\t\tcontextIds?.[HttpContextIdKeys.PublicOrigin],\n\t\tresult.cursor\n\t);\n\n\treturn {\n\t\theaders,\n\t\tbody: result.entries\n\t};\n}\n\n/**\n * Get the document revision from the auditable item graph vertex.\n * @param httpRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function documentManagementGetRevision(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IDocumentManagementGetRevisionRequest\n): Promise<IDocumentManagementGetRevisionResponse> {\n\tGuards.object<IDocumentManagementGetRevisionRequest>(ROUTES_SOURCE, \"request\", request);\n\tGuards.object<IDocumentManagementGetRevisionRequest[\"pathParams\"]>(\n\t\tROUTES_SOURCE,\n\t\t\"request.pathParams\",\n\t\trequest.pathParams\n\t);\n\tGuards.stringValue(\n\t\tROUTES_SOURCE,\n\t\t\"request.pathParams.auditableItemGraphDocumentId\",\n\t\trequest.pathParams.auditableItemGraphDocumentId\n\t);\n\n\tconst revision = Coerce.integer(request.pathParams.revision);\n\tGuards.integer(ROUTES_SOURCE, \"revision\", revision);\n\n\tconst component = ComponentFactory.get<IDocumentManagementComponent>(componentName);\n\n\tconst result = await component.getRevision(\n\t\trequest.pathParams.auditableItemGraphDocumentId,\n\t\trevision,\n\t\t{\n\t\t\tincludeBlobStorageMetadata: Coerce.boolean(request.query?.includeBlobStorageMetadata),\n\t\t\tincludeBlobStorageData: Coerce.boolean(request.query?.includeBlobStorageData),\n\t\t\tincludeAttestation: Coerce.boolean(request.query?.includeAttestation),\n\t\t\textractRuleGroupId: request.query?.extractRuleGroupId,\n\t\t\textractMimeType: request.query?.extractMimeType\n\t\t}\n\t);\n\n\tconst headers: IHttpHeaders = {};\n\tHttpHeaderHelper.buildJsonContentType(headers, request.headers);\n\n\treturn {\n\t\theaders,\n\t\tbody: result\n\t};\n}\n\n/**\n * Update the document from the auditable item graph vertex.\n * @param httpRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function documentManagementUpdatePartial(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IDocumentManagementUpdatePartialRequest\n): Promise<INoContentResponse> {\n\tGuards.object<IDocumentManagementUpdatePartialRequest>(ROUTES_SOURCE, \"request\", request);\n\tGuards.object<IDocumentManagementUpdatePartialRequest[\"pathParams\"]>(\n\t\tROUTES_SOURCE,\n\t\t\"request.pathParams\",\n\t\trequest.pathParams\n\t);\n\tGuards.stringValue(\n\t\tROUTES_SOURCE,\n\t\t\"request.pathParams.auditableItemGraphDocumentId\",\n\t\trequest.pathParams.auditableItemGraphDocumentId\n\t);\n\tGuards.object<IDocumentManagementUpdatePartialRequest[\"body\"]>(\n\t\tROUTES_SOURCE,\n\t\t\"request.body\",\n\t\trequest.body\n\t);\n\n\tconst component = ComponentFactory.get<IDocumentManagementComponent>(componentName);\n\n\tawait component.updatePartial(\n\t\trequest.pathParams.auditableItemGraphDocumentId,\n\t\trequest.body.document,\n\t\tIs.stringBase64(request.body.blob)\n\t\t\t? Converter.base64ToBytes(request.body.blob)\n\t\t\t: request.body.blob,\n\t\trequest.body.auditableItemGraphEdges,\n\t\t{\n\t\t\tincludeAttestation: request.body.options?.includeAttestation,\n\t\t\tincludeAlias: request.body.options?.includeAlias,\n\t\t\taliasAnnotationObject: request.body.options?.aliasAnnotationObject\n\t\t}\n\t);\n\n\treturn {\n\t\tstatusCode: HttpStatusCode.noContent\n\t};\n}\n\n/**\n * Remove the document from the auditable item graph vertex.\n * @param httpRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function documentManagementRemove(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IDocumentManagementRemoveRequest\n): Promise<INoContentResponse> {\n\tGuards.object<IDocumentManagementRemoveRequest>(ROUTES_SOURCE, \"request\", request);\n\tGuards.object<IDocumentManagementRemoveRequest[\"pathParams\"]>(\n\t\tROUTES_SOURCE,\n\t\t\"request.pathParams\",\n\t\trequest.pathParams\n\t);\n\tGuards.stringValue(\n\t\tROUTES_SOURCE,\n\t\t\"request.pathParams.auditableItemGraphDocumentId\",\n\t\trequest.pathParams.auditableItemGraphDocumentId\n\t);\n\tconst revision = Coerce.integer(request.pathParams.revision);\n\tGuards.integer(ROUTES_SOURCE, \"revision\", revision);\n\n\tconst component = ComponentFactory.get<IDocumentManagementComponent>(componentName);\n\n\tawait component.removeRevision(request.pathParams.auditableItemGraphDocumentId, revision);\n\n\treturn {\n\t\tstatusCode: HttpStatusCode.noContent\n\t};\n}\n\n/**\n * Query the documents from an auditable item graph vertex.\n * @param httpRequestContext The request context for the API.\n * @param componentName The name of the component to use in the routes.\n * @param request The request.\n * @returns The response object with additional http response properties.\n */\nexport async function documentManagementQuery(\n\thttpRequestContext: IHttpRequestContext,\n\tcomponentName: string,\n\trequest: IDocumentManagementQueryRequest\n): Promise<IDocumentManagementQueryResponse> {\n\tGuards.object<IDocumentManagementQueryRequest>(ROUTES_SOURCE, \"request\", request);\n\tGuards.object<IDocumentManagementQueryRequest[\"query\"]>(\n\t\tROUTES_SOURCE,\n\t\t\"request.query\",\n\t\trequest.query\n\t);\n\tGuards.stringValue(ROUTES_SOURCE, \"request.query.documentId\", request.query.documentId);\n\n\tconst component = ComponentFactory.get<IDocumentManagementComponent>(componentName);\n\n\tconst result = await component.query(\n\t\trequest.query.documentId,\n\t\trequest.query?.cursor,\n\t\tCoerce.integer(request.query?.limit)\n\t);\n\n\tconst headers: IHttpHeaders = {};\n\tHttpHeaderHelper.buildJsonContentType(headers, request.headers);\n\n\tconst contextIds = await ContextIdStore.getContextIds();\n\tHttpHeaderHelper.buildCursor(\n\t\theaders,\n\t\thttpRequestContext.serverRequest.url,\n\t\tcontextIds?.[HttpContextIdKeys.PublicOrigin],\n\t\tresult.cursor\n\t);\n\n\treturn {\n\t\theaders,\n\t\tbody: result.entries\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"documentManagementService.js","sourceRoot":"","sources":["../../src/documentManagementService.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tHealthCategory,\n\tHealthStatus,\n\ttype HealthApplicationCallback,\n\ttype IHealth,\n\ttype IHealthProviderComponent\n} from \"@3sixty/api-models\";\nimport type { IAttestationComponent } from \"@3sixty/attestation-models\";\nimport {\n\tAuditableItemGraphContexts,\n\tAuditableItemGraphTypes,\n\ttype IAuditableItemGraphComponent,\n\ttype IAuditableItemGraphEdge,\n\ttype IAuditableItemGraphPartialVertex,\n\ttype IAuditableItemGraphResource,\n\ttype IAuditableItemGraphVertex,\n\ttype IAuditableItemGraphVertexList\n} from \"@3sixty/auditable-item-graph-models\";\nimport type { IBlobStorageComponent } from \"@3sixty/blob-storage-models\";\nimport { BlobStorageContexts } from \"@3sixty/blob-storage-models\";\nimport { ContextIdKeys, ContextIdStore } from \"@3sixty/context\";\nimport {\n\tBaseError,\n\tCoerce,\n\tComponentFactory,\n\tConverter,\n\tGeneralError,\n\tGuards,\n\tIs,\n\tMutex,\n\tNotFoundError,\n\tNumberHelper,\n\tObjectHelper,\n\tRandomHelper,\n\tUrn\n} from \"@3sixty/core\";\nimport { IntegrityAlgorithm, IntegrityHelper, Sha256 } from \"@3sixty/crypto\";\nimport { JsonLdHelper, JsonLdProcessor, type IJsonLdNodeObject } from \"@3sixty/data-json-ld\";\nimport type { IDataProcessingComponent } from \"@3sixty/data-processing-models\";\nimport {\n\tDocumentContexts,\n\tDocumentManagementMetricIds,\n\tDocumentManagementMetrics,\n\tDocumentTypes,\n\ttype IDocument,\n\ttype IDocumentAttestation,\n\ttype IDocumentBase,\n\ttype IDocumentHydrated,\n\ttype IDocumentList,\n\ttype IDocumentManagementComponent,\n\ttype IDocumentManagementEdgeEntry\n} from \"@3sixty/document-management-models\";\nimport { nameof } from \"@3sixty/nameof\";\nimport {\n\tSchemaOrgContexts,\n\tSchemaOrgDataTypes,\n\tSchemaOrgTypes\n} from \"@3sixty/standards-schema-org\";\nimport { UneceDocumentCodeList } from \"@3sixty/standards-unece\";\nimport { MetricHelper, type ITelemetryComponent } from \"@3sixty/telemetry-models\";\nimport { MimeTypes } from \"@3sixty/web\";\nimport type { IDocumentManagementServiceConstructorOptions } from \"./models/IDocumentManagementStorageServiceConstructorOptions.js\";\n\n/**\n * Service for performing document management operations.\n */\nexport class DocumentManagementService\n\timplements IDocumentManagementComponent, IHealthProviderComponent\n{\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<DocumentManagementService>();\n\n\t/**\n\t * Prefix for the mutex key serialising creates of identical content.\n\t * @internal\n\t */\n\tprivate static readonly _BLOB_INTEGRITY_LOCK_PREFIX: string = \"blob-integrity:\";\n\n\t/**\n\t * The component for the auditable item graph.\n\t * @internal\n\t */\n\tprivate readonly _auditableItemGraphComponent: IAuditableItemGraphComponent;\n\n\t/**\n\t * The connector for the blob component.\n\t * @internal\n\t */\n\tprivate readonly _blobStorageComponent: IBlobStorageComponent;\n\n\t/**\n\t * The connector for the attestation.\n\t * @internal\n\t */\n\tprivate readonly _attestationComponent: IAttestationComponent;\n\n\t/**\n\t * The connector for the data processing.\n\t * @internal\n\t */\n\tprivate readonly _dataProcessingComponent: IDataProcessingComponent;\n\n\t/**\n\t * The optional telemetry component used for event metrics.\n\t * @internal\n\t */\n\tprivate readonly _telemetryComponent?: ITelemetryComponent;\n\n\t/**\n\t * The timeout in milliseconds for acquiring a mutex lock.\n\t * @internal\n\t */\n\tprivate readonly _mutexTimeoutMs?: number;\n\n\t/**\n\t * Create a new instance of DocumentManagementService.\n\t * @param options The options for the service.\n\t */\n\tconstructor(options?: IDocumentManagementServiceConstructorOptions) {\n\t\tthis._auditableItemGraphComponent = ComponentFactory.get<IAuditableItemGraphComponent>(\n\t\t\toptions?.auditableItemGraphComponentType ?? \"auditable-item-graph\"\n\t\t);\n\t\tthis._blobStorageComponent = ComponentFactory.get<IBlobStorageComponent>(\n\t\t\toptions?.blobStorageComponentType ?? \"blob-storage\"\n\t\t);\n\t\tthis._attestationComponent = ComponentFactory.get<IAttestationComponent>(\n\t\t\toptions?.attestationComponentType ?? \"attestation\"\n\t\t);\n\t\tthis._dataProcessingComponent = ComponentFactory.get<IDataProcessingComponent>(\n\t\t\toptions?.dataProcessingComponentType ?? \"data-processing\"\n\t\t);\n\t\tthis._telemetryComponent = ComponentFactory.getIfExists<ITelemetryComponent>(\n\t\t\toptions?.telemetryComponentType\n\t\t);\n\t\tthis._mutexTimeoutMs = Coerce.integer(options?.config?.mutexTimeoutMs);\n\n\t\tSchemaOrgDataTypes.registerRedirects();\n\t}\n\n\t/**\n\t * Returns the class name of the component.\n\t * @returns The class name of the component.\n\t */\n\tpublic className(): string {\n\t\treturn DocumentManagementService.CLASS_NAME;\n\t}\n\n\t/**\n\t * Runs a blob lifecycle (create, get, remove) against the blob storage component to verify\n\t * the service is operational.\n\t * @param callback The callback to invoke when a deferred health result is ready.\n\t * @returns The health status of the service.\n\t */\n\tpublic async healthApplication(\n\t\tcallback: HealthApplicationCallback\n\t): Promise<IHealth[] | undefined> {\n\t\tconst contextIds = (await ContextIdStore.getContextIds()) ?? {};\n\t\tconst orgId = contextIds[ContextIdKeys.Organization];\n\t\tif (!Is.stringValue(orgId)) {\n\t\t\treturn [];\n\t\t}\n\t\ttry {\n\t\t\tconst blobId = await this._blobStorageComponent.create(\n\t\t\t\tConverter.bytesToBase64(RandomHelper.generate(32)),\n\t\t\t\tMimeTypes.OctetStream,\n\t\t\t\tundefined,\n\t\t\t\t{\n\t\t\t\t\t\"@context\": \"https://schema.org/\",\n\t\t\t\t\t\"@type\": \"Thing\",\n\t\t\t\t\tdescription: \"health\"\n\t\t\t\t},\n\t\t\t\t{ disableEncryption: true }\n\t\t\t);\n\t\t\tconst entry = await this._blobStorageComponent.get(blobId);\n\t\t\tawait this._blobStorageComponent.remove(blobId);\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tsource: DocumentManagementService.CLASS_NAME,\n\t\t\t\t\tcategory: HealthCategory.Application,\n\t\t\t\t\tstatus: Is.object(entry) ? HealthStatus.Ok : HealthStatus.Error,\n\t\t\t\t\tdescription: \"healthDescription\",\n\t\t\t\t\tmessage: Is.object(entry) ? undefined : \"getBlobFailed\"\n\t\t\t\t}\n\t\t\t];\n\t\t} catch (error) {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tsource: DocumentManagementService.CLASS_NAME,\n\t\t\t\t\tcategory: HealthCategory.Application,\n\t\t\t\t\tstatus: HealthStatus.Error,\n\t\t\t\t\tdescription: \"healthDescription\",\n\t\t\t\t\tmessage: \"getBlobFailed\",\n\t\t\t\t\terror: BaseError.fromError(error)\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\t}\n\n\t/**\n\t * Register all document management metrics with the telemetry component.\n\t * @returns A promise that resolves when metrics have been registered.\n\t */\n\tpublic async start(): Promise<void> {\n\t\tif (Is.undefined(this._telemetryComponent)) {\n\t\t\treturn;\n\t\t}\n\t\tawait MetricHelper.createMetrics(this._telemetryComponent, DocumentManagementMetrics);\n\t}\n\n\t/**\n\t * Store a document as an auditable item graph vertex and add its content to blob storage.\n\t * If the document id already exists and the blob data is different a new revision will be created.\n\t * For any other changes the current revision will be updated.\n\t * @param document The document base properties.\n\t * @param blob The data to create the document with as bytes, or an existing blob storage entry id.\n\t * @param auditableItemGraphEdges The auditable item graph vertices to connect the document to.\n\t * @param options Additional options for the set operation.\n\t * @param options.includeAttestation Flag to include an attestation for the document, defaults to false.\n\t * @param options.includeAlias Flag to add the document id as an alias to the aig vertex, defaults to true.\n\t * @param options.aliasAnnotationObject Annotation object for the alias.\n\t * @returns The auditable item graph vertex created for the document including its revision.\n\t */\n\tpublic async create(\n\t\tdocument: IDocumentBase,\n\t\tblob: Uint8Array | string,\n\t\tauditableItemGraphEdges?: IDocumentManagementEdgeEntry[],\n\t\toptions?: {\n\t\t\tincludeAttestation?: boolean;\n\t\t\tincludeAlias?: boolean;\n\t\t\taliasAnnotationObject?: IJsonLdNodeObject;\n\t\t}\n\t): Promise<string> {\n\t\tGuards.object<IDocumentBase>(DocumentManagementService.CLASS_NAME, nameof(document), document);\n\t\tconst { documentId, documentIdFormat, documentCode, annotationObject } = document;\n\t\tGuards.stringValue(DocumentManagementService.CLASS_NAME, nameof(documentId), documentId);\n\t\tGuards.arrayOneOf(\n\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\tnameof(documentCode),\n\t\t\tdocumentCode,\n\t\t\tObject.values(UneceDocumentCodeList)\n\t\t);\n\t\tif (!Is.uint8Array(blob) && !Is.stringValue(blob)) {\n\t\t\tGuards.uint8Array(DocumentManagementService.CLASS_NAME, nameof(blob), blob);\n\t\t}\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\n\t\t// Serialises creates of identical content, so the rollback below cannot remove a blob\n\t\t// another request has deduplicated onto.\n\t\tlet blobIntegrityLockKey: string | undefined;\n\n\t\ttry {\n\t\t\tconst documentVertex: Omit<IAuditableItemGraphVertex, \"id\"> = {\n\t\t\t\t\"@context\": [AuditableItemGraphContexts.Context, AuditableItemGraphContexts.ContextCommon],\n\t\t\t\ttype: AuditableItemGraphTypes.Vertex\n\t\t\t};\n\n\t\t\tif (options?.includeAlias ?? true) {\n\t\t\t\tdocumentVertex.aliases ??= [];\n\t\t\t\tdocumentVertex.aliases.push({\n\t\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\t\ttype: AuditableItemGraphTypes.Alias,\n\t\t\t\t\tid: documentId,\n\t\t\t\t\taliasFormat: documentIdFormat,\n\t\t\t\t\tannotationObject: options?.aliasAnnotationObject\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Resolve the blob storage id and integrity.\n\t\t\t// If blob is a Uint8Array, upload the bytes; if it is a string, treat it as an\n\t\t\t// existing blobStorageId and fetch the entry's stored integrity.\n\t\t\tconst blobIntegrity = await this.computeBlobIntegrity(blob);\n\n\t\t\tif (Is.uint8Array(blob)) {\n\t\t\t\tconst lockKey = `${DocumentManagementService._BLOB_INTEGRITY_LOCK_PREFIX}${blobIntegrity}`;\n\t\t\t\tawait Mutex.lock(lockKey, {\n\t\t\t\t\tthrowOnTimeout: true,\n\t\t\t\t\ttimeoutMs: this._mutexTimeoutMs\n\t\t\t\t});\n\t\t\t\t// Recorded only once held, so a timeout never releases another caller's key.\n\t\t\t\tblobIntegrityLockKey = lockKey;\n\t\t\t}\n\n\t\t\tlet blobStorageId: string;\n\t\t\tconst blobCreateCorrelationId = Is.uint8Array(blob) ? crypto.randomUUID() : undefined;\n\t\t\tif (Is.uint8Array(blob)) {\n\t\t\t\tblobStorageId = await this._blobStorageComponent.create(\n\t\t\t\t\tConverter.bytesToBase64(blob),\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\t{\n\t\t\t\t\t\t\"@context\": SchemaOrgContexts.Context,\n\t\t\t\t\t\tidentifier: blobCreateCorrelationId\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tblobStorageId = blob;\n\t\t\t}\n\n\t\t\tconst currentRevision: IDocument & IJsonLdNodeObject = {\n\t\t\t\t\"@context\": [\n\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\tDocumentContexts.Context,\n\t\t\t\t\tDocumentContexts.ContextCommon\n\t\t\t\t],\n\t\t\t\ttype: DocumentTypes.Document,\n\t\t\t\tid: this.createDocumentId(documentId, 0),\n\t\t\t\tdocumentId,\n\t\t\t\tdocumentIdFormat,\n\t\t\t\tdocumentCode,\n\t\t\t\tdocumentRevision: 0,\n\t\t\t\tannotationObject,\n\t\t\t\tintegrity: blobIntegrity,\n\t\t\t\tblobStorageId,\n\t\t\t\tdateCreated: new Date(Date.now()).toISOString(),\n\t\t\t\torganizationIdentity: contextIds?.[ContextIdKeys.Organization],\n\t\t\t\tuserIdentity: contextIds?.[ContextIdKeys.User]\n\t\t\t};\n\n\t\t\tif (options?.includeAttestation ?? false) {\n\t\t\t\tcurrentRevision.attestationId = await this.createAttestation(currentRevision);\n\t\t\t}\n\n\t\t\t// Add the new revision in to the vertex\n\t\t\tdocumentVertex.resources ??= [];\n\t\t\tdocumentVertex.resources.push({\n\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\ttype: AuditableItemGraphTypes.Resource,\n\t\t\t\tresourceObject: currentRevision\n\t\t\t});\n\n\t\t\t// Add the outgoing edges from the document vertex to each connected item\n\t\t\tif (Is.arrayValue(auditableItemGraphEdges)) {\n\t\t\t\tdocumentVertex.edges ??= [];\n\t\t\t\tfor (const aigEdge of auditableItemGraphEdges) {\n\t\t\t\t\tdocumentVertex.edges.push({\n\t\t\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\t\t\ttype: AuditableItemGraphTypes.Edge,\n\t\t\t\t\t\ttargetId: aigEdge.targetId,\n\t\t\t\t\t\tedgeRelationships: [\"document\"]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// And create the vertex\n\t\t\tconst vertexId = await this._auditableItemGraphComponent.create(\n\t\t\t\tObjectHelper.removeEmptyProperties(documentVertex)\n\t\t\t);\n\n\t\t\t// Now add the edges to the connected vertices.\n\t\t\t// isCreatePath = true enables fail-fast + rollback if a target vertex is missing.\n\t\t\tconst failingVertexId = await this.updateConnectedEdges(\n\t\t\t\tvertexId,\n\t\t\t\tauditableItemGraphEdges ?? [],\n\t\t\t\t[],\n\t\t\t\tdocumentId,\n\t\t\t\tdocumentIdFormat,\n\t\t\t\ttrue\n\t\t\t);\n\n\t\t\tif (Is.stringValue(failingVertexId)) {\n\t\t\t\t// At least one connected vertex was missing. Back-edges already written have been\n\t\t\t\t// rolled back by updateConnectedEdges. Best-effort cleanup: remove the blob only\n\t\t\t\t// if this request can prove ownership via a create correlation id in blob\n\t\t\t\t// metadata, which the integrity lock keeps exclusive, then soft-delete the\n\t\t\t\t// document resource so the vertex is left empty.\n\t\t\t\tif (Is.stringValue(blobCreateCorrelationId)) {\n\t\t\t\t\tawait this.removeBlobIfCreatedByRequest(blobStorageId, blobCreateCorrelationId);\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this._auditableItemGraphComponent.updatePartial({\n\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\tAuditableItemGraphContexts.Context,\n\t\t\t\t\t\t\tAuditableItemGraphContexts.ContextCommon\n\t\t\t\t\t\t],\n\t\t\t\t\t\tid: vertexId,\n\t\t\t\t\t\tresourcePatches: { remove: [currentRevision.id] }\n\t\t\t\t\t});\n\t\t\t\t} catch {}\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\t\t\"connectedVertexNotFound\",\n\t\t\t\t\tfailingVertexId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tDocumentManagementMetricIds.DocumentsCreated,\n\t\t\t\t{ hasAttestation: Is.stringValue(currentRevision.attestationId) }\n\t\t\t);\n\n\t\t\treturn vertexId;\n\t\t} catch (error) {\n\t\t\tif (BaseError.someErrorName(error, nameof<NotFoundError>())) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new GeneralError(\n\t\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\t\"createFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tif (Is.stringValue(blobIntegrityLockKey)) {\n\t\t\t\tMutex.unlock(blobIntegrityLockKey);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Update a document as an auditable item graph vertex and add its content to blob storage.\n\t * If the blob data is different a new revision will be created.\n\t * For any other changes the current revision will be updated.\n\t * @param auditableItemGraphDocumentId The auditable item graph vertex id which contains the document.\n\t * @param document The document base properties to update. Only annotationObject is applied; other fields are ignored.\n\t * @param blob The data to update the document with as bytes, or an existing blob storage entry id.\n\t * @param auditableItemGraphEdges Explicit edge delta to apply. If undefined, existing connections\n\t * are retained unchanged. Use `add` to create new connections and `remove` to disconnect existing\n\t * ones by their target vertex id. To update alias metadata on an already-connected vertex, include\n\t * it in `add` with the updated `aliasAnnotationObject` - AIG's alias patch is an upsert, so the\n\t * alias is updated in place without creating a duplicate back-edge.\n\t * @param auditableItemGraphEdges.add Connections to add; each creates a back-edge on the connected vertex.\n\t * @param auditableItemGraphEdges.remove Target vertex IDs to disconnect; their back-edges are removed.\n\t * @param options Additional options for the update operation.\n\t * @param options.includeAttestation Set to true to include an attestation for the document, or false to remove the existing attestation. Omit (undefined) to leave attestation state unchanged.\n\t * @param options.includeAlias Set to true to add the document id as an alias on the aig vertex, or false to remove it. Omit to leave alias state unchanged.\n\t * @param options.aliasAnnotationObject Annotation object for the alias when adding.\n\t * @returns A promise that resolves when the document has been updated.\n\t */\n\tpublic async updatePartial(\n\t\tauditableItemGraphDocumentId: string,\n\t\tdocument?: Partial<\n\t\t\tPick<IDocumentBase, \"annotationObject\" | \"documentIdFormat\" | \"documentCode\">\n\t\t>,\n\t\tblob?: Uint8Array | string,\n\t\tauditableItemGraphEdges?: {\n\t\t\tadd?: IDocumentManagementEdgeEntry[];\n\t\t\tremove?: string[];\n\t\t},\n\t\toptions?: {\n\t\t\tincludeAttestation?: boolean;\n\t\t\tincludeAlias?: boolean;\n\t\t\taliasAnnotationObject?: IJsonLdNodeObject;\n\t\t}\n\t): Promise<void> {\n\t\tUrn.guard(\n\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\tnameof(auditableItemGraphDocumentId),\n\t\t\tauditableItemGraphDocumentId\n\t\t);\n\n\t\tawait Mutex.lock(auditableItemGraphDocumentId, {\n\t\t\tthrowOnTimeout: true,\n\t\t\ttimeoutMs: this._mutexTimeoutMs\n\t\t});\n\t\ttry {\n\t\t\tconst documentVertex = await this._auditableItemGraphComponent.get(\n\t\t\t\tauditableItemGraphDocumentId,\n\t\t\t\t{ includeDeleted: true }\n\t\t\t);\n\n\t\t\tif (Is.empty(documentVertex.resources)) {\n\t\t\t\tthrow new NotFoundError(DocumentManagementService.CLASS_NAME, \"documentRevisionNone\");\n\t\t\t}\n\n\t\t\tconst documents = await this.getDocumentsFromVertex(documentVertex, undefined, undefined, 1);\n\t\t\tconst latestRevision: IDocument | undefined = documents.entries.itemListElement[0];\n\n\t\t\tdocumentVertex.resources = documentVertex.resources.filter(r => Is.empty(r.dateDeleted));\n\n\t\t\tif (Is.empty(latestRevision)) {\n\t\t\t\tthrow new NotFoundError(DocumentManagementService.CLASS_NAME, \"documentRevisionNone\");\n\t\t\t}\n\n\t\t\tconst { annotationObject, documentIdFormat, documentCode } = document ?? {};\n\n\t\t\t// If auditableItemGraphEdges is undefined we are not updating the edges\n\t\t\t// an empty array can be passed to remove all edges\n\n\t\t\tconst resourcePatchesAdd: IAuditableItemGraphResource[] = [];\n\t\t\tlet blobRevisionCreated = false;\n\t\t\tlet newRevisionHasAttestation = false;\n\n\t\t\t// If the blob is set and its hash has changed then we create a new revision.\n\t\t\t// blob may be raw bytes (Uint8Array) to upload, or a string treated as an existing\n\t\t\t// blobStorageId whose integrity is fetched from the blob storage entry.\n\t\t\tif (Is.uint8Array(blob) || Is.stringValue(blob)) {\n\t\t\t\t// Short-circuit: same blobStorageId reference on a live revision means the blob is\n\t\t\t\t// unchanged - skip the network GET inside computeBlobIntegrity.\n\t\t\t\tconst blobUnchanged =\n\t\t\t\t\tIs.stringValue(blob) &&\n\t\t\t\t\tblob === latestRevision.blobStorageId &&\n\t\t\t\t\tIs.empty(latestRevision.dateDeleted);\n\t\t\t\tconst newIntegrity = blobUnchanged\n\t\t\t\t\t? latestRevision.integrity\n\t\t\t\t\t: await this.computeBlobIntegrity(blob);\n\n\t\t\t\tif (latestRevision.integrity !== newIntegrity) {\n\t\t\t\t\tlet blobStorageId: string;\n\t\t\t\t\tif (Is.stringValue(blob)) {\n\t\t\t\t\t\tblobStorageId = blob;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tblobStorageId = await this._blobStorageComponent.create(Converter.bytesToBase64(blob));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst newRevision = ObjectHelper.clone(latestRevision);\n\n\t\t\t\t\tnewRevision.documentRevision++;\n\t\t\t\t\tnewRevision.id = this.createDocumentId(\n\t\t\t\t\t\tnewRevision.documentId,\n\t\t\t\t\t\tnewRevision.documentRevision\n\t\t\t\t\t);\n\t\t\t\t\tnewRevision.integrity = newIntegrity;\n\t\t\t\t\tnewRevision.blobStorageId = blobStorageId;\n\t\t\t\t\tthis.applyDocumentFieldPatch(newRevision, document);\n\n\t\t\t\t\tif (options?.includeAttestation === false) {\n\t\t\t\t\t\tif (Is.stringValue(newRevision.attestationId)) {\n\t\t\t\t\t\t\tawait this._attestationComponent.destroy(newRevision.attestationId);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdelete newRevision.attestationId;\n\t\t\t\t\t} else if (Is.stringValue(latestRevision.attestationId) || options?.includeAttestation) {\n\t\t\t\t\t\tnewRevision.attestationId = await this.createAttestation(newRevision);\n\t\t\t\t\t}\n\n\t\t\t\t\tresourcePatchesAdd.push({\n\t\t\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\t\t\ttype: AuditableItemGraphTypes.Resource,\n\t\t\t\t\t\tresourceObject: JsonLdHelper.toNodeObject(newRevision)\n\t\t\t\t\t});\n\n\t\t\t\t\tnewRevisionHasAttestation = Is.stringValue(newRevision.attestationId);\n\t\t\t\t\tblobRevisionCreated = true;\n\t\t\t\t} else if (Is.stringValue(latestRevision.dateDeleted)) {\n\t\t\t\t\t// Same content as the most recent (soft-deleted) revision - restore it.\n\t\t\t\t\tconst restoredRevision = ObjectHelper.clone(latestRevision);\n\t\t\t\t\tdelete restoredRevision.dateDeleted;\n\t\t\t\t\tthis.applyDocumentFieldPatch(restoredRevision, document);\n\n\t\t\t\t\tif (options?.includeAttestation === false) {\n\t\t\t\t\t\tif (Is.stringValue(restoredRevision.attestationId)) {\n\t\t\t\t\t\t\tawait this._attestationComponent.destroy(restoredRevision.attestationId);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdelete restoredRevision.attestationId;\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tIs.stringValue(restoredRevision.attestationId) ||\n\t\t\t\t\t\toptions?.includeAttestation\n\t\t\t\t\t) {\n\t\t\t\t\t\trestoredRevision.attestationId = await this.createAttestation(restoredRevision);\n\t\t\t\t\t}\n\t\t\t\t\tresourcePatchesAdd.push({\n\t\t\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\t\t\ttype: AuditableItemGraphTypes.Resource,\n\t\t\t\t\t\tresourceObject: JsonLdHelper.toNodeObject(restoredRevision)\n\t\t\t\t\t});\n\t\t\t\t\tnewRevisionHasAttestation = Is.stringValue(restoredRevision.attestationId);\n\t\t\t\t\tblobRevisionCreated = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If no new revision was created, apply in-place updates to the current revision:\n\t\t\t// annotation changes and/or adding first-time attestation.\n\t\t\t// Undefined annotationObject means \"no change\" in patch semantics - it does not clear it.\n\t\t\tif (!blobRevisionCreated) {\n\t\t\t\tconst annotationChanged =\n\t\t\t\t\t!Is.empty(annotationObject) &&\n\t\t\t\t\t!ObjectHelper.equal(latestRevision.annotationObject, annotationObject);\n\t\t\t\tconst documentIdFormatChanged =\n\t\t\t\t\t!Is.empty(documentIdFormat) && latestRevision.documentIdFormat !== documentIdFormat;\n\t\t\t\tconst documentCodeChanged =\n\t\t\t\t\t!Is.empty(documentCode) && latestRevision.documentCode !== documentCode;\n\t\t\t\tconst addingAttestation =\n\t\t\t\t\toptions?.includeAttestation === true && !Is.stringValue(latestRevision.attestationId);\n\t\t\t\tconst removingAttestation =\n\t\t\t\t\toptions?.includeAttestation === false && Is.stringValue(latestRevision.attestationId);\n\n\t\t\t\tif (\n\t\t\t\t\tannotationChanged ||\n\t\t\t\t\tdocumentIdFormatChanged ||\n\t\t\t\t\tdocumentCodeChanged ||\n\t\t\t\t\taddingAttestation ||\n\t\t\t\t\tremovingAttestation\n\t\t\t\t) {\n\t\t\t\t\tif (annotationChanged) {\n\t\t\t\t\t\tlatestRevision.annotationObject = annotationObject;\n\t\t\t\t\t}\n\t\t\t\t\tif (documentIdFormatChanged) {\n\t\t\t\t\t\tlatestRevision.documentIdFormat = documentIdFormat;\n\t\t\t\t\t}\n\t\t\t\t\tif (documentCodeChanged) {\n\t\t\t\t\t\tlatestRevision.documentCode = documentCode;\n\t\t\t\t\t}\n\t\t\t\t\tif (addingAttestation) {\n\t\t\t\t\t\tlatestRevision.attestationId = await this.createAttestation(latestRevision);\n\t\t\t\t\t}\n\t\t\t\t\tif (removingAttestation && Is.stringValue(latestRevision.attestationId)) {\n\t\t\t\t\t\tawait this._attestationComponent.destroy(latestRevision.attestationId);\n\t\t\t\t\t\tdelete latestRevision.attestationId;\n\t\t\t\t\t}\n\t\t\t\t\tlatestRevision.dateModified = new Date(Date.now()).toISOString();\n\t\t\t\t\tresourcePatchesAdd.push(\n\t\t\t\t\t\tObjectHelper.removeEmptyProperties({\n\t\t\t\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\t\t\t\ttype: AuditableItemGraphTypes.Resource,\n\t\t\t\t\t\t\tresourceObject: JsonLdHelper.toNodeObject(latestRevision)\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Build document-vertex edge patches directly from the explicit delta.\n\t\t\tconst edgesToAdd = auditableItemGraphEdges?.add ?? [];\n\t\t\tconst edgeTargetIdsToRemove = auditableItemGraphEdges?.remove ?? [];\n\t\t\tconst hasEdgeChanges =\n\t\t\t\t!Is.empty(auditableItemGraphEdges) &&\n\t\t\t\t(edgesToAdd.length > 0 || edgeTargetIdsToRemove.length > 0);\n\n\t\t\tconst addingAlias = options?.includeAlias === true;\n\t\t\tconst removingAlias = options?.includeAlias === false;\n\t\t\tconst hasAliasChange = addingAlias || removingAlias;\n\n\t\t\tconst documentEdgePatchesAdd: IAuditableItemGraphEdge[] = edgesToAdd.map(aigEdge => ({\n\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\ttype: AuditableItemGraphTypes.Edge,\n\t\t\t\ttargetId: aigEdge.targetId,\n\t\t\t\tedgeRelationships: [\"document\"]\n\t\t\t}));\n\n\t\t\t// Resolve remove targetIds to stored edge IDs for the document vertex patch.\n\t\t\tconst documentEdgePatchesRemove: string[] = edgeTargetIdsToRemove\n\t\t\t\t.map(\n\t\t\t\t\ttargetId =>\n\t\t\t\t\t\tdocumentVertex.edges?.find(e => e.targetId === targetId && Is.empty(e.dateDeleted))?.id\n\t\t\t\t)\n\t\t\t\t.filter((id): id is string => Is.stringValue(id));\n\n\t\t\tif (resourcePatchesAdd.length > 0 || hasEdgeChanges || hasAliasChange) {\n\t\t\t\tconst partial: IAuditableItemGraphPartialVertex = {\n\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\tAuditableItemGraphContexts.Context,\n\t\t\t\t\t\tAuditableItemGraphContexts.ContextCommon\n\t\t\t\t\t],\n\t\t\t\t\tid: auditableItemGraphDocumentId\n\t\t\t\t};\n\t\t\t\tif (resourcePatchesAdd.length > 0) {\n\t\t\t\t\tpartial.resourcePatches = { add: resourcePatchesAdd };\n\t\t\t\t}\n\t\t\t\tif (hasEdgeChanges) {\n\t\t\t\t\tpartial.edgePatches = {\n\t\t\t\t\t\tadd: documentEdgePatchesAdd.length > 0 ? documentEdgePatchesAdd : undefined,\n\t\t\t\t\t\tremove: documentEdgePatchesRemove.length > 0 ? documentEdgePatchesRemove : undefined\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (addingAlias) {\n\t\t\t\t\tpartial.aliasPatches = {\n\t\t\t\t\t\tadd: [\n\t\t\t\t\t\t\tObjectHelper.removeEmptyProperties({\n\t\t\t\t\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\t\t\t\t\ttype: AuditableItemGraphTypes.Alias,\n\t\t\t\t\t\t\t\tid: latestRevision.documentId,\n\t\t\t\t\t\t\t\taliasFormat: latestRevision.documentIdFormat,\n\t\t\t\t\t\t\t\tannotationObject: options?.aliasAnnotationObject\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t]\n\t\t\t\t\t};\n\t\t\t\t} else if (removingAlias) {\n\t\t\t\t\tpartial.aliasPatches = { remove: [latestRevision.documentId] };\n\t\t\t\t}\n\t\t\t\tawait this._auditableItemGraphComponent.updatePartial(partial);\n\t\t\t}\n\n\t\t\tif (hasEdgeChanges) {\n\t\t\t\tawait this.updateConnectedEdges(\n\t\t\t\t\tauditableItemGraphDocumentId,\n\t\t\t\t\tedgesToAdd,\n\t\t\t\t\tedgeTargetIdsToRemove,\n\t\t\t\t\tlatestRevision.documentId,\n\t\t\t\t\tlatestRevision.documentIdFormat\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst updatedVertex = resourcePatchesAdd.length > 0 || hasEdgeChanges || hasAliasChange;\n\t\t\tif (blobRevisionCreated) {\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tDocumentManagementMetricIds.RevisionsCreated,\n\t\t\t\t\t{ hasAttestation: newRevisionHasAttestation }\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (updatedVertex) {\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tDocumentManagementMetricIds.DocumentsUpdated,\n\t\t\t\t\t{ hasNewRevision: blobRevisionCreated }\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (BaseError.someErrorName(error, nameof<NotFoundError>())) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new GeneralError(\n\t\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\t\"updateFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tMutex.unlock(auditableItemGraphDocumentId);\n\t\t}\n\t}\n\n\t/**\n\t * Get a document using it's auditable item graph vertex id and optional revision.\n\t * @param auditableItemGraphDocumentId The auditable item graph vertex id which contains the document.\n\t * @param options Additional options for the get operation.\n\t * @param options.includeBlobStorageMetadata Flag to include the blob storage metadata for the document, defaults to false.\n\t * @param options.includeBlobStorageData Flag to include the blob storage data for the document, defaults to false.\n\t * @param options.includeAttestation Flag to include the attestation information for the document, defaults to false.\n\t * @param options.includeRemoved Flag to include deleted documents, defaults to false.\n\t * @param options.includeDeletedEdges Flag to include soft-deleted edges in the response, defaults to false.\n\t * @param options.extractRuleGroupId If provided will extract data from the document using the specified rule group id.\n\t * @param options.extractMimeType By default extraction will auto detect the mime type of the document, this can be used to override the detection.\n\t * @param cursor The cursor to get the next chunk of revisions.\n\t * @param limit Limit the number of items to return, defaults to 1 so only most recent is returned.\n\t * @returns The documents and revisions if requested, ordered by revision descending, cursor is set if there are more document revisions.\n\t */\n\tpublic async get(\n\t\tauditableItemGraphDocumentId: string,\n\t\toptions?: {\n\t\t\tincludeBlobStorageMetadata?: boolean;\n\t\t\tincludeBlobStorageData?: boolean;\n\t\t\tincludeAttestation?: boolean;\n\t\t\tincludeRemoved?: boolean;\n\t\t\tincludeDeletedEdges?: boolean;\n\t\t\textractRuleGroupId?: string;\n\t\t\textractMimeType?: string;\n\t\t},\n\t\tcursor?: string,\n\t\tlimit?: number\n\t): Promise<{\n\t\tentries: IDocumentList;\n\t\tcursor?: string;\n\t}> {\n\t\tUrn.guard(\n\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\tnameof(auditableItemGraphDocumentId),\n\t\t\tauditableItemGraphDocumentId\n\t\t);\n\n\t\ttry {\n\t\t\tconst documentVertex = await this._auditableItemGraphComponent.get(\n\t\t\t\tauditableItemGraphDocumentId,\n\t\t\t\t{\n\t\t\t\t\tincludeDeleted:\n\t\t\t\t\t\t(options?.includeRemoved ?? false) || (options?.includeDeletedEdges ?? false)\n\t\t\t\t}\n\t\t\t);\n\n\t\t\t// If we fetched deleted items to expose edges but the caller did not ask for deleted\n\t\t\t// documents, strip the deleted resources so they don't appear in the output.\n\t\t\tif ((options?.includeDeletedEdges ?? false) && !(options?.includeRemoved ?? false)) {\n\t\t\t\tdocumentVertex.resources = documentVertex.resources?.filter(r => Is.empty(r.dateDeleted));\n\t\t\t}\n\n\t\t\t// Populate the document and revisions with the options set\n\t\t\tconst documents = await this.getDocumentsFromVertex(documentVertex, options, cursor, limit);\n\n\t\t\tconst result = await JsonLdProcessor.compact(\n\t\t\t\tdocuments.entries,\n\t\t\t\tdocuments.entries[\"@context\"],\n\t\t\t\t{ compactArrays: false }\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tentries: result,\n\t\t\t\tcursor: documents.cursor\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tif (BaseError.someErrorName(error, nameof<NotFoundError>())) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new GeneralError(DocumentManagementService.CLASS_NAME, \"getFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Get a document revision using it's auditable item graph vertex id.\n\t * @param auditableItemGraphDocumentId The auditable item graph vertex id which contains the document.\n\t * @param revision The revision id for the document.\n\t * @param options Additional options for the get operation.\n\t * @param options.includeBlobStorageMetadata Flag to include the blob storage metadata for the document, defaults to false.\n\t * @param options.includeBlobStorageData Flag to include the blob storage data for the document, defaults to false.\n\t * @param options.includeAttestation Flag to include the attestation information for the document, defaults to false.\n\t * @param options.extractRuleGroupId If provided will extract data from the document using the specified rule group id.\n\t * @param options.extractMimeType By default extraction will auto detect the mime type of the document, this can be used to override the detection.\n\t * @returns The document for the specified revision.\n\t */\n\tpublic async getRevision(\n\t\tauditableItemGraphDocumentId: string,\n\t\trevision: number,\n\t\toptions?: {\n\t\t\tincludeBlobStorageMetadata?: boolean;\n\t\t\tincludeBlobStorageData?: boolean;\n\t\t\tincludeAttestation?: boolean;\n\t\t\textractRuleGroupId?: string;\n\t\t\textractMimeType?: string;\n\t\t}\n\t): Promise<IDocumentHydrated> {\n\t\tUrn.guard(\n\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\tnameof(auditableItemGraphDocumentId),\n\t\t\tauditableItemGraphDocumentId\n\t\t);\n\t\tGuards.integer(DocumentManagementService.CLASS_NAME, nameof(revision), revision);\n\n\t\ttry {\n\t\t\tconst documentVertex = await this._auditableItemGraphComponent.get(\n\t\t\t\tauditableItemGraphDocumentId,\n\t\t\t\t{ includeDeleted: true }\n\t\t\t);\n\n\t\t\tif (Is.empty(documentVertex.resources)) {\n\t\t\t\tthrow new NotFoundError(DocumentManagementService.CLASS_NAME, \"documentRevisionNone\");\n\t\t\t}\n\n\t\t\tdocumentVertex.resources = documentVertex.resources.filter(\n\t\t\t\td => d.resourceObject?.documentRevision === revision\n\t\t\t);\n\n\t\t\tif (documentVertex.resources.length === 0) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\t\t\"documentRevisionNotFound\",\n\t\t\t\t\trevision.toString()\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Populate the document and revisions with the options set\n\t\t\tconst docList = await this.getDocumentsFromVertex(documentVertex, options);\n\n\t\t\tconst result = await JsonLdProcessor.compact(\n\t\t\t\tdocList.entries.itemListElement[0],\n\t\t\t\tdocList.entries.itemListElement[0][\"@context\"],\n\t\t\t\t{ compactArrays: false }\n\t\t\t);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (BaseError.someErrorName(error, nameof<NotFoundError>())) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new GeneralError(\n\t\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\t\"getRevisionFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Remove an auditable item graph vertex using it's id.\n\t * The document dateDeleted will be set, but can still be queried with the includeRemoved flag.\n\t * @param auditableItemGraphDocumentId The auditable item graph vertex id which contains the document.\n\t * @param revision The revision of the document to remove.\n\t * @returns A promise that resolves when the revision has been removed.\n\t */\n\tpublic async removeRevision(\n\t\tauditableItemGraphDocumentId: string,\n\t\trevision: number\n\t): Promise<void> {\n\t\tUrn.guard(\n\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\tnameof(auditableItemGraphDocumentId),\n\t\t\tauditableItemGraphDocumentId\n\t\t);\n\t\tGuards.integer(DocumentManagementService.CLASS_NAME, nameof(revision), revision);\n\n\t\tawait Mutex.lock(auditableItemGraphDocumentId, {\n\t\t\tthrowOnTimeout: true,\n\t\t\ttimeoutMs: this._mutexTimeoutMs\n\t\t});\n\t\ttry {\n\t\t\tconst documentVertex = await this._auditableItemGraphComponent.get(\n\t\t\t\tauditableItemGraphDocumentId\n\t\t\t);\n\n\t\t\tif (Is.empty(documentVertex.resources)) {\n\t\t\t\tthrow new NotFoundError(DocumentManagementService.CLASS_NAME, \"documentRevisionNone\");\n\t\t\t}\n\n\t\t\tconst docRevisionIndex = documentVertex.resources.findIndex(\n\t\t\t\td => d.resourceObject?.documentRevision === revision\n\t\t\t);\n\n\t\t\tif (docRevisionIndex === -1) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\t\t\"documentRevisionNotFound\",\n\t\t\t\t\trevision.toString()\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst revisionResourceId =\n\t\t\t\t(documentVertex.resources[docRevisionIndex].resourceObject?.id as string | undefined) ??\n\t\t\t\t(documentVertex.resources[docRevisionIndex].resourceObject?.[\"@id\"] as string | undefined);\n\n\t\t\tif (!Is.stringValue(revisionResourceId)) {\n\t\t\t\t// The revision exists but its stored resource-id is unresolvable - integrity anomaly.\n\t\t\t\tthrow new GeneralError(DocumentManagementService.CLASS_NAME, \"documentRevisionMissingId\", {\n\t\t\t\t\trevision\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tawait this._auditableItemGraphComponent.updatePartial({\n\t\t\t\t\"@context\": [AuditableItemGraphContexts.Context, AuditableItemGraphContexts.ContextCommon],\n\t\t\t\tid: auditableItemGraphDocumentId,\n\t\t\t\tresourcePatches: { remove: [revisionResourceId] }\n\t\t\t});\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tDocumentManagementMetricIds.RevisionsRemoved\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (BaseError.someErrorName(error, nameof<NotFoundError>())) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new GeneralError(\n\t\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\t\"removeRevisionFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tMutex.unlock(auditableItemGraphDocumentId);\n\t\t}\n\t}\n\n\t/**\n\t * Find all the document with a specific id.\n\t * @param documentId The document id to find in the graph.\n\t * @param cursor The cursor to get the next chunk of documents.\n\t * @param limit The limit to get the next chunk of documents.\n\t * @returns The graph vertices that contain documents referencing the specified document id.\n\t */\n\tpublic async query(\n\t\tdocumentId: string,\n\t\tcursor?: string,\n\t\tlimit?: number\n\t): Promise<{\n\t\tentries: IAuditableItemGraphVertexList;\n\t\tcursor?: string;\n\t}> {\n\t\tGuards.stringValue(DocumentManagementService.CLASS_NAME, nameof(documentId), documentId);\n\n\t\ttry {\n\t\t\tconst result = await this._auditableItemGraphComponent.query(\n\t\t\t\t{\n\t\t\t\t\tid: documentId,\n\t\t\t\t\tidMode: \"both\",\n\t\t\t\t\tresourceTypes: [DocumentTypes.Document]\n\t\t\t\t},\n\t\t\t\tundefined,\n\t\t\t\tundefined,\n\t\t\t\tundefined,\n\t\t\t\t[\"id\", \"dateCreated\", \"dateModified\", \"aliases\", \"annotationObject\", \"resources\", \"edges\"],\n\t\t\t\tcursor,\n\t\t\t\tlimit\n\t\t\t);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (BaseError.someErrorName(error, nameof<NotFoundError>())) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new GeneralError(DocumentManagementService.CLASS_NAME, \"queryFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Update the edges on connected vertices using non-destructive patch operations.\n\t * Uses updatePartial so AIG's per-vertex Mutex serialises concurrent callers.\n\t *\n\t * On the **create path** (`isCreatePath = true`) the method is fail-fast:\n\t * if any back-edge write fails (target vertex does not exist), all back-edges\n\t * already written in this call are removed (best-effort rollback) and the\n\t * failing target vertex ID is returned so the caller can surface a meaningful error.\n\t *\n\t * On the **update path** each missing vertex is caught individually; the remaining\n\t * updates continue and `undefined` is always returned.\n\t * @param auditableItemGraphDocumentId The document id to use.\n\t * @param edgesToAdd Connections to add - each connected vertex receives a new back-edge.\n\t * @param edgeTargetIdsToRemove Target vertex IDs to disconnect - their back-edges are removed.\n\t * @param documentId The document identifier.\n\t * @param documentIdFormat The format of the document identifier.\n\t * @param isCreatePath When true, enables fail-fast + rollback semantics.\n\t * @returns The failing target vertex ID when `isCreatePath` is true and a write fails;\n\t * `undefined` on success or when called from the update path.\n\t * @internal\n\t */\n\tprivate async updateConnectedEdges(\n\t\tauditableItemGraphDocumentId: string,\n\t\tedgesToAdd: IDocumentManagementEdgeEntry[],\n\t\tedgeTargetIdsToRemove: string[],\n\t\tdocumentId: string,\n\t\tdocumentIdFormat: string | undefined,\n\t\tisCreatePath: boolean = false\n\t): Promise<string | undefined> {\n\t\t// Track which target IDs received a successful back-edge write so we can roll back\n\t\t// if a later write fails (create path only).\n\t\tconst writtenTargetIds: string[] = [];\n\n\t\t// Add back-edges to each newly connected vertex.\n\t\tfor (const aigEdge of edgesToAdd) {\n\t\t\tconst partial: IAuditableItemGraphPartialVertex = {\n\t\t\t\t\"@context\": [AuditableItemGraphContexts.Context, AuditableItemGraphContexts.ContextCommon],\n\t\t\t\tid: aigEdge.targetId,\n\t\t\t\tedgePatches: {\n\t\t\t\t\tadd: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\t\t\t\ttype: AuditableItemGraphTypes.Edge,\n\t\t\t\t\t\t\ttargetId: auditableItemGraphDocumentId,\n\t\t\t\t\t\t\tedgeRelationships: [\"document\"]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (aigEdge.includeAlias) {\n\t\t\t\tpartial.aliasPatches = {\n\t\t\t\t\tadd: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\t\t\t\ttype: AuditableItemGraphTypes.Alias,\n\t\t\t\t\t\t\tid: documentId,\n\t\t\t\t\t\t\taliasFormat: documentIdFormat,\n\t\t\t\t\t\t\tannotationObject: aigEdge.aliasAnnotationObject\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (isCreatePath) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this._auditableItemGraphComponent.updatePartial(partial);\n\t\t\t\t\twrittenTargetIds.push(aigEdge.targetId);\n\t\t\t\t} catch {\n\t\t\t\t\t// Rollback all back-edges already written before this failure.\n\t\t\t\t\tawait this.rollbackConnectedEdges(\n\t\t\t\t\t\tauditableItemGraphDocumentId,\n\t\t\t\t\t\twrittenTargetIds,\n\t\t\t\t\t\tdocumentId\n\t\t\t\t\t);\n\t\t\t\t\treturn aigEdge.targetId;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tawait this._auditableItemGraphComponent.updatePartial(partial);\n\t\t\t\t} catch {\n\t\t\t\t\t// Best-effort on the update path - swallow to avoid interrupting remaining back-edge writes.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove back-edges from disconnected vertices.\n\t\tfor (const staleTargetId of edgeTargetIdsToRemove) {\n\t\t\tawait this.removeBackEdgeFromVertex(staleTargetId, auditableItemGraphDocumentId, documentId);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Best-effort removal of back-edges that were written during a failed create operation.\n\t * Errors are silently swallowed to avoid masking the original failure.\n\t * @param auditableItemGraphDocumentId The document vertex whose back-edges should be removed.\n\t * @param targetIds The connected vertex IDs that received a back-edge.\n\t * @param documentId The document identifier used for alias cleanup.\n\t * @internal\n\t */\n\tprivate async rollbackConnectedEdges(\n\t\tauditableItemGraphDocumentId: string,\n\t\ttargetIds: string[],\n\t\tdocumentId: string\n\t): Promise<void> {\n\t\tfor (const targetId of targetIds) {\n\t\t\ttry {\n\t\t\t\tawait this.removeBackEdgeFromVertex(targetId, auditableItemGraphDocumentId, documentId);\n\t\t\t} catch {\n\t\t\t\t// Best-effort - do not let cleanup errors mask the original failure.\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Remove the back-edge and alias that a connected vertex holds pointing at the document vertex.\n\t * Fetches the connected vertex to resolve the stored edge ID, then issues a single updatePartial.\n\t * No-ops silently if neither edge nor alias is found.\n\t * @param targetId The connected vertex to patch.\n\t * @param documentVertexId The document vertex whose back-edge should be removed.\n\t * @param documentId The document id used for alias cleanup.\n\t * @internal\n\t */\n\tprivate async removeBackEdgeFromVertex(\n\t\ttargetId: string,\n\t\tdocumentVertexId: string,\n\t\tdocumentId: string\n\t): Promise<void> {\n\t\tconst connected = await this._auditableItemGraphComponent.get(targetId);\n\n\t\tconst edgeId = connected.edges?.find(\n\t\t\te => Is.empty(e.dateDeleted) && e.targetId === documentVertexId\n\t\t)?.id;\n\n\t\tconst hasAlias =\n\t\t\tIs.arrayValue(connected.aliases) &&\n\t\t\tconnected.aliases.some(a => Is.empty(a.dateDeleted) && a.id === documentId);\n\n\t\tconst partial: IAuditableItemGraphPartialVertex = {\n\t\t\t\"@context\": [AuditableItemGraphContexts.Context, AuditableItemGraphContexts.ContextCommon],\n\t\t\tid: targetId\n\t\t};\n\n\t\tif (hasAlias) {\n\t\t\tpartial.aliasPatches = { remove: [documentId] };\n\t\t}\n\n\t\tif (Is.stringValue(edgeId)) {\n\t\t\tpartial.edgePatches = { remove: [edgeId] };\n\t\t}\n\n\t\tif (hasAlias || Is.stringValue(edgeId)) {\n\t\t\tawait this._auditableItemGraphComponent.updatePartial(partial);\n\t\t}\n\t}\n\n\t/**\n\t * Get the documents from the auditable item graph vertex.\n\t * @param documentVertex The vertex containing the documents.\n\t * @param options Additional options for the get operation.\n\t * @param options.includeBlobStorageMetadata Flag to include the blob storage metadata for the document, defaults to false.\n\t * @param options.includeBlobStorageData Flag to include the blob storage data for the document, defaults to false.\n\t * @param options.includeAttestation Flag to include the attestation information for the document, defaults to false.\n\t * @param options.includeDeletedEdges Flag to include soft-deleted edges in the response, defaults to false.\n\t * @param options.extractRuleGroupId If provided will extract data from the document using the specified rule group id.\n\t * @param options.extractMimeType By default extraction will auto detect the mime type of the document, this can be used to override the detection.\n\t * @param cursor The cursor to get the next chunk of revisions.\n\t * @param limit Limit the number of items to return, defaults to 1 so only most recent is returned.\n\t * @returns The finalised list of documents.\n\t * @internal\n\t */\n\tprivate async getDocumentsFromVertex(\n\t\tdocumentVertex: IAuditableItemGraphVertex,\n\t\toptions?: {\n\t\t\tincludeBlobStorageMetadata?: boolean;\n\t\t\tincludeBlobStorageData?: boolean;\n\t\t\tincludeAttestation?: boolean;\n\t\t\tincludeDeletedEdges?: boolean;\n\t\t\textractRuleGroupId?: string;\n\t\t\textractMimeType?: string;\n\t\t},\n\t\tcursor?: string,\n\t\tlimit?: number\n\t): Promise<{\n\t\tentries: IDocumentList;\n\t\tcursor?: string;\n\t}> {\n\t\tconst docList: IDocumentList = {\n\t\t\t\"@context\": [\n\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\tDocumentContexts.Context,\n\t\t\t\tDocumentContexts.ContextCommon\n\t\t\t],\n\t\t\ttype: SchemaOrgTypes.ItemList,\n\t\t\t[SchemaOrgTypes.ItemListElement]: []\n\t\t};\n\n\t\tlet nextCursor: string | undefined;\n\n\t\tif (Is.arrayValue(documentVertex.resources)) {\n\t\t\t// Sort by newest revision first\n\t\t\tdocumentVertex.resources.sort(\n\t\t\t\t(a, b) =>\n\t\t\t\t\t(Coerce.number(b.resourceObject?.documentRevision) ?? 0) -\n\t\t\t\t\t(Coerce.number(a.resourceObject?.documentRevision) ?? 0)\n\t\t\t);\n\n\t\t\tconst startIndex = Coerce.integer(cursor) ?? 0;\n\t\t\tconst safeLimit = NumberHelper.clamp(limit ?? 1, 1);\n\t\t\tconst endIndex = Math.min(startIndex + safeLimit, documentVertex.resources.length);\n\t\t\tconst slicedResources = documentVertex.resources.slice(startIndex, endIndex);\n\t\t\tnextCursor = documentVertex.resources.length > endIndex ? endIndex.toString() : undefined;\n\n\t\t\tconst includeBlobStorageMetadata = options?.includeBlobStorageMetadata ?? false;\n\t\t\tconst includeBlobStorageData = options?.includeBlobStorageData ?? false;\n\t\t\tconst includeAttestation = options?.includeAttestation ?? false;\n\t\t\tconst extractData = Is.stringValue(options?.extractRuleGroupId);\n\n\t\t\tfor (let i = 0; i < slicedResources.length; i++) {\n\t\t\t\tconst document = slicedResources[i].resourceObject as unknown as IDocumentHydrated;\n\t\t\t\tif (Is.object(document) && document.type === DocumentTypes.Document) {\n\t\t\t\t\tdocument.dateDeleted = slicedResources[i].dateDeleted;\n\n\t\t\t\t\tdocList[SchemaOrgTypes.ItemListElement].push(document);\n\n\t\t\t\t\tconst blobRequired = includeBlobStorageMetadata || includeBlobStorageData;\n\t\t\t\t\tif (blobRequired || extractData) {\n\t\t\t\t\t\tconst blobEntry = await this._blobStorageComponent.get(document.blobStorageId, {\n\t\t\t\t\t\t\tincludeContent: includeBlobStorageData || extractData\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (blobRequired) {\n\t\t\t\t\t\t\tdocument.blobStorageEntry = blobEntry;\n\t\t\t\t\t\t\tif (Is.object(document.blobStorageEntry)) {\n\t\t\t\t\t\t\t\tObjectHelper.propertyDelete(document.blobStorageEntry, \"@context\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!docList[\"@context\"].includes(BlobStorageContexts.Context)) {\n\t\t\t\t\t\t\t\tdocList[\"@context\"].push(BlobStorageContexts.Context);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (Is.stringValue(options?.extractRuleGroupId) && Is.stringValue(blobEntry.blob)) {\n\t\t\t\t\t\t\tconst binaryBlob = Converter.base64ToBytes(blobEntry.blob);\n\t\t\t\t\t\t\tdocument.extractedData = await this._dataProcessingComponent.extract(\n\t\t\t\t\t\t\t\toptions.extractRuleGroupId,\n\t\t\t\t\t\t\t\tbinaryBlob,\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\toptions?.extractMimeType\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If we have the blob data due to extraction but we weren't asked for it\n\t\t\t\t\t\t// then we remove it from the document\n\t\t\t\t\t\tif (!blobRequired) {\n\t\t\t\t\t\t\tdelete document.blobStorageEntry;\n\t\t\t\t\t\t} else if (!includeBlobStorageData) {\n\t\t\t\t\t\t\tdelete document.blobStorageEntry?.blob;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (includeAttestation && Is.stringValue(document.attestationId)) {\n\t\t\t\t\t\tconst attestationInformation = await this._attestationComponent.get(\n\t\t\t\t\t\t\tdocument.attestationId\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdocument.attestationInformation = attestationInformation;\n\t\t\t\t\t\tif (Is.object(document.attestationInformation)) {\n\t\t\t\t\t\t\tObjectHelper.propertyDelete(document.attestationInformation, \"@context\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Is.arrayValue(documentVertex.edges)) {\n\t\t\tdocList.edges ??= [];\n\n\t\t\tfor (const edge of documentVertex.edges) {\n\t\t\t\tif (\n\t\t\t\t\tIs.object(edge) &&\n\t\t\t\t\t((options?.includeDeletedEdges ?? false) || Is.empty(edge.dateDeleted))\n\t\t\t\t) {\n\t\t\t\t\tdocList.edges.push(edge.targetId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tentries: docList,\n\t\t\tcursor: nextCursor\n\t\t};\n\t}\n\n\t/**\n\t * Compute the integrity hash for a blob.\n\t * For a Uint8Array the hash is computed locally; for a string blobStorageId the stored\n\t * integrity is fetched from blob storage (one network call, no content download).\n\t * @param blob The blob bytes or an existing blob storage entry id.\n\t * @returns The SHA-256 integrity string.\n\t * @internal\n\t */\n\tprivate async computeBlobIntegrity(blob: Uint8Array | string): Promise<string> {\n\t\tif (Is.uint8Array(blob)) {\n\t\t\treturn IntegrityHelper.generate(IntegrityAlgorithm.Sha256, blob);\n\t\t}\n\t\tconst blobEntry = await this._blobStorageComponent.get(blob, { includeContent: false });\n\t\treturn blobEntry.integrity;\n\t}\n\n\t/**\n\t * Remove a blob on rollback only when its metadata proves this request created it.\n\t * Uses the create-correlation identifier set during blob upload.\n\t * @param blobStorageId The blob id to check and potentially remove.\n\t * @param correlationId The request correlation id to match against blob metadata.\n\t * @internal\n\t */\n\tprivate async removeBlobIfCreatedByRequest(\n\t\tblobStorageId: string,\n\t\tcorrelationId: string\n\t): Promise<void> {\n\t\ttry {\n\t\t\tconst blobEntry = await this._blobStorageComponent.get(blobStorageId, {\n\t\t\t\tincludeContent: false\n\t\t\t});\n\t\t\tconst metadataIdentifier = (blobEntry.metadata as { identifier?: unknown } | undefined)\n\t\t\t\t?.identifier;\n\n\t\t\tif (Is.stringValue(metadataIdentifier) && metadataIdentifier === correlationId) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this._blobStorageComponent.remove(blobStorageId);\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Best-effort cleanup only.\n\t\t}\n\t}\n\n\t/**\n\t * Apply a partial document field patch in-place to a revision object.\n\t * Only non-empty values overwrite the existing fields; undefined means no change.\n\t * @param revision The revision to mutate.\n\t * @param patch The field values to apply.\n\t * @internal\n\t */\n\tprivate applyDocumentFieldPatch(\n\t\trevision: IDocument,\n\t\tpatch?: Partial<Pick<IDocumentBase, \"annotationObject\" | \"documentIdFormat\" | \"documentCode\">>\n\t): void {\n\t\tconst { annotationObject, documentIdFormat, documentCode } = patch ?? {};\n\t\tif (!Is.empty(annotationObject)) {\n\t\t\trevision.annotationObject = annotationObject;\n\t\t}\n\t\tif (!Is.empty(documentIdFormat)) {\n\t\t\trevision.documentIdFormat = documentIdFormat;\n\t\t}\n\t\tif (!Is.empty(documentCode)) {\n\t\t\trevision.documentCode = documentCode;\n\t\t}\n\t}\n\n\t/**\n\t * Create an attestation for the document.\n\t * @param document The document to create the attestation for.\n\t * @returns The attestation identifier.\n\t * @internal\n\t */\n\tprivate async createAttestation(document: IDocument): Promise<string> {\n\t\tconst documentAttestation: IDocumentAttestation & IJsonLdNodeObject = {\n\t\t\t\"@context\": [\n\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\tDocumentContexts.Context,\n\t\t\t\tDocumentContexts.ContextCommon\n\t\t\t],\n\t\t\ttype: DocumentTypes.DocumentAttestation,\n\t\t\tid: document.id,\n\t\t\tdocumentId: document.documentId,\n\t\t\tdocumentCode: document.documentCode,\n\t\t\tdocumentRevision: document.documentRevision,\n\t\t\tdateCreated: document.dateCreated,\n\t\t\tintegrity: document.integrity\n\t\t};\n\t\tconst attestationId = await this._attestationComponent.create(documentAttestation);\n\t\tawait MetricHelper.metricIncrement(\n\t\t\tthis._telemetryComponent,\n\t\t\tDocumentManagementMetricIds.AttestationsCreated\n\t\t);\n\t\treturn attestationId;\n\t}\n\n\t/**\n\t * Create a document id from the document id and revision.\n\t * @param documentId The document id to create.\n\t * @param revision The revision of the document.\n\t * @returns The document id.\n\t * @internal\n\t */\n\tprivate createDocumentId(documentId: string, revision: number): string {\n\t\tconst documentIdHash = Converter.bytesToBase64Url(\n\t\t\tSha256.sum256(Converter.utf8ToBytes(documentId))\n\t\t);\n\t\treturn `document:${documentIdHash}:${revision}`;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"documentManagementService.js","sources":["../../src/documentManagementService.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tHealthCategory,\n\tHealthStatus,\n\ttype HealthApplicationCallback,\n\ttype IHealth,\n\ttype IHealthProviderComponent\n} from \"@3sixty/api-models\";\nimport type { IAttestationComponent } from \"@3sixty/attestation-models\";\nimport {\n\tAuditableItemGraphContexts,\n\tAuditableItemGraphTypes,\n\ttype IAuditableItemGraphComponent,\n\ttype IAuditableItemGraphEdge,\n\ttype IAuditableItemGraphPartialVertex,\n\ttype IAuditableItemGraphResource,\n\ttype IAuditableItemGraphVertex,\n\ttype IAuditableItemGraphVertexList\n} from \"@3sixty/auditable-item-graph-models\";\nimport type { IBlobStorageComponent } from \"@3sixty/blob-storage-models\";\nimport { BlobStorageContexts } from \"@3sixty/blob-storage-models\";\nimport { ContextIdKeys, ContextIdStore } from \"@3sixty/context\";\nimport {\n\tBaseError,\n\tCoerce,\n\tComponentFactory,\n\tConverter,\n\tGeneralError,\n\tGuards,\n\tIs,\n\tMutex,\n\tNotFoundError,\n\tNumberHelper,\n\tObjectHelper,\n\tRandomHelper,\n\tUrn\n} from \"@3sixty/core\";\nimport { IntegrityAlgorithm, IntegrityHelper, Sha256 } from \"@3sixty/crypto\";\nimport { JsonLdHelper, JsonLdProcessor, type IJsonLdNodeObject } from \"@3sixty/data-json-ld\";\nimport type { IDataProcessingComponent } from \"@3sixty/data-processing-models\";\nimport {\n\tDocumentContexts,\n\tDocumentManagementMetricIds,\n\tDocumentManagementMetrics,\n\tDocumentTypes,\n\ttype IDocument,\n\ttype IDocumentAttestation,\n\ttype IDocumentBase,\n\ttype IDocumentHydrated,\n\ttype IDocumentList,\n\ttype IDocumentManagementComponent,\n\ttype IDocumentManagementEdgeEntry\n} from \"@3sixty/document-management-models\";\n\nimport {\n\tSchemaOrgContexts,\n\tSchemaOrgDataTypes,\n\tSchemaOrgTypes\n} from \"@3sixty/standards-schema-org\";\nimport { UneceDocumentCodeList } from \"@3sixty/standards-unece\";\nimport { MetricHelper, type ITelemetryComponent } from \"@3sixty/telemetry-models\";\nimport { MimeTypes } from \"@3sixty/web\";\nimport type { IDocumentManagementServiceConstructorOptions } from \"./models/IDocumentManagementStorageServiceConstructorOptions.js\";\n\n/**\n * Service for performing document management operations.\n */\nexport class DocumentManagementService\n\timplements IDocumentManagementComponent, IHealthProviderComponent\n{\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = \"DocumentManagementService\";\n\n\t/**\n\t * Prefix for the mutex key serialising creates of identical content.\n\t * @internal\n\t */\n\tprivate static readonly _BLOB_INTEGRITY_LOCK_PREFIX: string = \"blob-integrity:\";\n\n\t/**\n\t * The component for the auditable item graph.\n\t * @internal\n\t */\n\tprivate readonly _auditableItemGraphComponent: IAuditableItemGraphComponent;\n\n\t/**\n\t * The connector for the blob component.\n\t * @internal\n\t */\n\tprivate readonly _blobStorageComponent: IBlobStorageComponent;\n\n\t/**\n\t * The connector for the attestation.\n\t * @internal\n\t */\n\tprivate readonly _attestationComponent: IAttestationComponent;\n\n\t/**\n\t * The connector for the data processing.\n\t * @internal\n\t */\n\tprivate readonly _dataProcessingComponent: IDataProcessingComponent;\n\n\t/**\n\t * The optional telemetry component used for event metrics.\n\t * @internal\n\t */\n\tprivate readonly _telemetryComponent?: ITelemetryComponent;\n\n\t/**\n\t * The timeout in milliseconds for acquiring a mutex lock.\n\t * @internal\n\t */\n\tprivate readonly _mutexTimeoutMs?: number;\n\n\t/**\n\t * Create a new instance of DocumentManagementService.\n\t * @param options The options for the service.\n\t */\n\tconstructor(options?: IDocumentManagementServiceConstructorOptions) {\n\t\tthis._auditableItemGraphComponent = ComponentFactory.get<IAuditableItemGraphComponent>(\n\t\t\toptions?.auditableItemGraphComponentType ?? \"auditable-item-graph\"\n\t\t);\n\t\tthis._blobStorageComponent = ComponentFactory.get<IBlobStorageComponent>(\n\t\t\toptions?.blobStorageComponentType ?? \"blob-storage\"\n\t\t);\n\t\tthis._attestationComponent = ComponentFactory.get<IAttestationComponent>(\n\t\t\toptions?.attestationComponentType ?? \"attestation\"\n\t\t);\n\t\tthis._dataProcessingComponent = ComponentFactory.get<IDataProcessingComponent>(\n\t\t\toptions?.dataProcessingComponentType ?? \"data-processing\"\n\t\t);\n\t\tthis._telemetryComponent = ComponentFactory.getIfExists<ITelemetryComponent>(\n\t\t\toptions?.telemetryComponentType\n\t\t);\n\t\tthis._mutexTimeoutMs = Coerce.integer(options?.config?.mutexTimeoutMs);\n\n\t\tSchemaOrgDataTypes.registerRedirects();\n\t}\n\n\t/**\n\t * Returns the class name of the component.\n\t * @returns The class name of the component.\n\t */\n\tpublic className(): string {\n\t\treturn DocumentManagementService.CLASS_NAME;\n\t}\n\n\t/**\n\t * Runs a blob lifecycle (create, get, remove) against the blob storage component to verify\n\t * the service is operational.\n\t * @param callback The callback to invoke when a deferred health result is ready.\n\t * @returns The health status of the service.\n\t */\n\tpublic async healthApplication(\n\t\tcallback: HealthApplicationCallback\n\t): Promise<IHealth[] | undefined> {\n\t\tconst contextIds = (await ContextIdStore.getContextIds()) ?? {};\n\t\tconst orgId = contextIds[ContextIdKeys.Organization];\n\t\tif (!Is.stringValue(orgId)) {\n\t\t\treturn [];\n\t\t}\n\t\ttry {\n\t\t\tconst blobId = await this._blobStorageComponent.create(\n\t\t\t\tConverter.bytesToBase64(RandomHelper.generate(32)),\n\t\t\t\tMimeTypes.OctetStream,\n\t\t\t\tundefined,\n\t\t\t\t{\n\t\t\t\t\t\"@context\": \"https://schema.org/\",\n\t\t\t\t\t\"@type\": \"Thing\",\n\t\t\t\t\tdescription: \"health\"\n\t\t\t\t},\n\t\t\t\t{ disableEncryption: true }\n\t\t\t);\n\t\t\tconst entry = await this._blobStorageComponent.get(blobId);\n\t\t\tawait this._blobStorageComponent.remove(blobId);\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tsource: DocumentManagementService.CLASS_NAME,\n\t\t\t\t\tcategory: HealthCategory.Application,\n\t\t\t\t\tstatus: Is.object(entry) ? HealthStatus.Ok : HealthStatus.Error,\n\t\t\t\t\tdescription: \"healthDescription\",\n\t\t\t\t\tmessage: Is.object(entry) ? undefined : \"getBlobFailed\"\n\t\t\t\t}\n\t\t\t];\n\t\t} catch (error) {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tsource: DocumentManagementService.CLASS_NAME,\n\t\t\t\t\tcategory: HealthCategory.Application,\n\t\t\t\t\tstatus: HealthStatus.Error,\n\t\t\t\t\tdescription: \"healthDescription\",\n\t\t\t\t\tmessage: \"getBlobFailed\",\n\t\t\t\t\terror: BaseError.fromError(error)\n\t\t\t\t}\n\t\t\t];\n\t\t}\n\t}\n\n\t/**\n\t * Register all document management metrics with the telemetry component.\n\t * @returns A promise that resolves when metrics have been registered.\n\t */\n\tpublic async start(): Promise<void> {\n\t\tif (Is.undefined(this._telemetryComponent)) {\n\t\t\treturn;\n\t\t}\n\t\tawait MetricHelper.createMetrics(this._telemetryComponent, DocumentManagementMetrics);\n\t}\n\n\t/**\n\t * Store a document as an auditable item graph vertex and add its content to blob storage.\n\t * If the document id already exists and the blob data is different a new revision will be created.\n\t * For any other changes the current revision will be updated.\n\t * @param document The document base properties.\n\t * @param blob The data to create the document with as bytes, or an existing blob storage entry id.\n\t * @param auditableItemGraphEdges The auditable item graph vertices to connect the document to.\n\t * @param options Additional options for the set operation.\n\t * @param options.includeAttestation Flag to include an attestation for the document, defaults to false.\n\t * @param options.includeAlias Flag to add the document id as an alias to the aig vertex, defaults to true.\n\t * @param options.aliasAnnotationObject Annotation object for the alias.\n\t * @returns The auditable item graph vertex created for the document including its revision.\n\t */\n\tpublic async create(\n\t\tdocument: IDocumentBase,\n\t\tblob: Uint8Array | string,\n\t\tauditableItemGraphEdges?: IDocumentManagementEdgeEntry[],\n\t\toptions?: {\n\t\t\tincludeAttestation?: boolean;\n\t\t\tincludeAlias?: boolean;\n\t\t\taliasAnnotationObject?: IJsonLdNodeObject;\n\t\t}\n\t): Promise<string> {\n\t\tGuards.object<IDocumentBase>(DocumentManagementService.CLASS_NAME, \"document\", document);\n\t\tconst { documentId, documentIdFormat, documentCode, annotationObject } = document;\n\t\tGuards.stringValue(DocumentManagementService.CLASS_NAME, \"documentId\", documentId);\n\t\tGuards.arrayOneOf(\n\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\"documentCode\",\n\t\t\tdocumentCode,\n\t\t\tObject.values(UneceDocumentCodeList)\n\t\t);\n\t\tif (!Is.uint8Array(blob) && !Is.stringValue(blob)) {\n\t\t\tGuards.uint8Array(DocumentManagementService.CLASS_NAME, \"blob\", blob);\n\t\t}\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\n\t\t// Serialises creates of identical content, so the rollback below cannot remove a blob\n\t\t// another request has deduplicated onto.\n\t\tlet blobIntegrityLockKey: string | undefined;\n\n\t\ttry {\n\t\t\tconst documentVertex: Omit<IAuditableItemGraphVertex, \"id\"> = {\n\t\t\t\t\"@context\": [AuditableItemGraphContexts.Context, AuditableItemGraphContexts.ContextCommon],\n\t\t\t\ttype: AuditableItemGraphTypes.Vertex\n\t\t\t};\n\n\t\t\tif (options?.includeAlias ?? true) {\n\t\t\t\tdocumentVertex.aliases ??= [];\n\t\t\t\tdocumentVertex.aliases.push({\n\t\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\t\ttype: AuditableItemGraphTypes.Alias,\n\t\t\t\t\tid: documentId,\n\t\t\t\t\taliasFormat: documentIdFormat,\n\t\t\t\t\tannotationObject: options?.aliasAnnotationObject\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Resolve the blob storage id and integrity.\n\t\t\t// If blob is a Uint8Array, upload the bytes; if it is a string, treat it as an\n\t\t\t// existing blobStorageId and fetch the entry's stored integrity.\n\t\t\tconst blobIntegrity = await this.computeBlobIntegrity(blob);\n\n\t\t\tif (Is.uint8Array(blob)) {\n\t\t\t\tconst lockKey = `${DocumentManagementService._BLOB_INTEGRITY_LOCK_PREFIX}${blobIntegrity}`;\n\t\t\t\tawait Mutex.lock(lockKey, {\n\t\t\t\t\tthrowOnTimeout: true,\n\t\t\t\t\ttimeoutMs: this._mutexTimeoutMs\n\t\t\t\t});\n\t\t\t\t// Recorded only once held, so a timeout never releases another caller's key.\n\t\t\t\tblobIntegrityLockKey = lockKey;\n\t\t\t}\n\n\t\t\tlet blobStorageId: string;\n\t\t\tconst blobCreateCorrelationId = Is.uint8Array(blob) ? crypto.randomUUID() : undefined;\n\t\t\tif (Is.uint8Array(blob)) {\n\t\t\t\tblobStorageId = await this._blobStorageComponent.create(\n\t\t\t\t\tConverter.bytesToBase64(blob),\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\t{\n\t\t\t\t\t\t\"@context\": SchemaOrgContexts.Context,\n\t\t\t\t\t\tidentifier: blobCreateCorrelationId\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tblobStorageId = blob;\n\t\t\t}\n\n\t\t\tconst currentRevision: IDocument & IJsonLdNodeObject = {\n\t\t\t\t\"@context\": [\n\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\tDocumentContexts.Context,\n\t\t\t\t\tDocumentContexts.ContextCommon\n\t\t\t\t],\n\t\t\t\ttype: DocumentTypes.Document,\n\t\t\t\tid: this.createDocumentId(documentId, 0),\n\t\t\t\tdocumentId,\n\t\t\t\tdocumentIdFormat,\n\t\t\t\tdocumentCode,\n\t\t\t\tdocumentRevision: 0,\n\t\t\t\tannotationObject,\n\t\t\t\tintegrity: blobIntegrity,\n\t\t\t\tblobStorageId,\n\t\t\t\tdateCreated: new Date(Date.now()).toISOString(),\n\t\t\t\torganizationIdentity: contextIds?.[ContextIdKeys.Organization],\n\t\t\t\tuserIdentity: contextIds?.[ContextIdKeys.User]\n\t\t\t};\n\n\t\t\tif (options?.includeAttestation ?? false) {\n\t\t\t\tcurrentRevision.attestationId = await this.createAttestation(currentRevision);\n\t\t\t}\n\n\t\t\t// Add the new revision in to the vertex\n\t\t\tdocumentVertex.resources ??= [];\n\t\t\tdocumentVertex.resources.push({\n\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\ttype: AuditableItemGraphTypes.Resource,\n\t\t\t\tresourceObject: currentRevision\n\t\t\t});\n\n\t\t\t// Add the outgoing edges from the document vertex to each connected item\n\t\t\tif (Is.arrayValue(auditableItemGraphEdges)) {\n\t\t\t\tdocumentVertex.edges ??= [];\n\t\t\t\tfor (const aigEdge of auditableItemGraphEdges) {\n\t\t\t\t\tdocumentVertex.edges.push({\n\t\t\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\t\t\ttype: AuditableItemGraphTypes.Edge,\n\t\t\t\t\t\ttargetId: aigEdge.targetId,\n\t\t\t\t\t\tedgeRelationships: [\"document\"]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// And create the vertex\n\t\t\tconst vertexId = await this._auditableItemGraphComponent.create(\n\t\t\t\tObjectHelper.removeEmptyProperties(documentVertex)\n\t\t\t);\n\n\t\t\t// Now add the edges to the connected vertices.\n\t\t\t// isCreatePath = true enables fail-fast + rollback if a target vertex is missing.\n\t\t\tconst failingVertexId = await this.updateConnectedEdges(\n\t\t\t\tvertexId,\n\t\t\t\tauditableItemGraphEdges ?? [],\n\t\t\t\t[],\n\t\t\t\tdocumentId,\n\t\t\t\tdocumentIdFormat,\n\t\t\t\ttrue\n\t\t\t);\n\n\t\t\tif (Is.stringValue(failingVertexId)) {\n\t\t\t\t// At least one connected vertex was missing. Back-edges already written have been\n\t\t\t\t// rolled back by updateConnectedEdges. Best-effort cleanup: remove the blob only\n\t\t\t\t// if this request can prove ownership via a create correlation id in blob\n\t\t\t\t// metadata, which the integrity lock keeps exclusive, then soft-delete the\n\t\t\t\t// document resource so the vertex is left empty.\n\t\t\t\tif (Is.stringValue(blobCreateCorrelationId)) {\n\t\t\t\t\tawait this.removeBlobIfCreatedByRequest(blobStorageId, blobCreateCorrelationId);\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tawait this._auditableItemGraphComponent.updatePartial({\n\t\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\t\tAuditableItemGraphContexts.Context,\n\t\t\t\t\t\t\tAuditableItemGraphContexts.ContextCommon\n\t\t\t\t\t\t],\n\t\t\t\t\t\tid: vertexId,\n\t\t\t\t\t\tresourcePatches: { remove: [currentRevision.id] }\n\t\t\t\t\t});\n\t\t\t\t} catch {}\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\t\t\"connectedVertexNotFound\",\n\t\t\t\t\tfailingVertexId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tDocumentManagementMetricIds.DocumentsCreated,\n\t\t\t\t{ hasAttestation: Is.stringValue(currentRevision.attestationId) }\n\t\t\t);\n\n\t\t\treturn vertexId;\n\t\t} catch (error) {\n\t\t\tif (BaseError.someErrorName(error, \"NotFoundError\")) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new GeneralError(\n\t\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\t\"createFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tif (Is.stringValue(blobIntegrityLockKey)) {\n\t\t\t\tMutex.unlock(blobIntegrityLockKey);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Update a document as an auditable item graph vertex and add its content to blob storage.\n\t * If the blob data is different a new revision will be created.\n\t * For any other changes the current revision will be updated.\n\t * @param auditableItemGraphDocumentId The auditable item graph vertex id which contains the document.\n\t * @param document The document base properties to update. Only annotationObject is applied; other fields are ignored.\n\t * @param blob The data to update the document with as bytes, or an existing blob storage entry id.\n\t * @param auditableItemGraphEdges Explicit edge delta to apply. If undefined, existing connections\n\t * are retained unchanged. Use `add` to create new connections and `remove` to disconnect existing\n\t * ones by their target vertex id. To update alias metadata on an already-connected vertex, include\n\t * it in `add` with the updated `aliasAnnotationObject` - AIG's alias patch is an upsert, so the\n\t * alias is updated in place without creating a duplicate back-edge.\n\t * @param auditableItemGraphEdges.add Connections to add; each creates a back-edge on the connected vertex.\n\t * @param auditableItemGraphEdges.remove Target vertex IDs to disconnect; their back-edges are removed.\n\t * @param options Additional options for the update operation.\n\t * @param options.includeAttestation Set to true to include an attestation for the document, or false to remove the existing attestation. Omit (undefined) to leave attestation state unchanged.\n\t * @param options.includeAlias Set to true to add the document id as an alias on the aig vertex, or false to remove it. Omit to leave alias state unchanged.\n\t * @param options.aliasAnnotationObject Annotation object for the alias when adding.\n\t * @returns A promise that resolves when the document has been updated.\n\t */\n\tpublic async updatePartial(\n\t\tauditableItemGraphDocumentId: string,\n\t\tdocument?: Partial<\n\t\t\tPick<IDocumentBase, \"annotationObject\" | \"documentIdFormat\" | \"documentCode\">\n\t\t>,\n\t\tblob?: Uint8Array | string,\n\t\tauditableItemGraphEdges?: {\n\t\t\tadd?: IDocumentManagementEdgeEntry[];\n\t\t\tremove?: string[];\n\t\t},\n\t\toptions?: {\n\t\t\tincludeAttestation?: boolean;\n\t\t\tincludeAlias?: boolean;\n\t\t\taliasAnnotationObject?: IJsonLdNodeObject;\n\t\t}\n\t): Promise<void> {\n\t\tUrn.guard(\n\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\"auditableItemGraphDocumentId\",\n\t\t\tauditableItemGraphDocumentId\n\t\t);\n\n\t\tawait Mutex.lock(auditableItemGraphDocumentId, {\n\t\t\tthrowOnTimeout: true,\n\t\t\ttimeoutMs: this._mutexTimeoutMs\n\t\t});\n\t\ttry {\n\t\t\tconst documentVertex = await this._auditableItemGraphComponent.get(\n\t\t\t\tauditableItemGraphDocumentId,\n\t\t\t\t{ includeDeleted: true }\n\t\t\t);\n\n\t\t\tif (Is.empty(documentVertex.resources)) {\n\t\t\t\tthrow new NotFoundError(DocumentManagementService.CLASS_NAME, \"documentRevisionNone\");\n\t\t\t}\n\n\t\t\tconst documents = await this.getDocumentsFromVertex(documentVertex, undefined, undefined, 1);\n\t\t\tconst latestRevision: IDocument | undefined = documents.entries.itemListElement[0];\n\n\t\t\tdocumentVertex.resources = documentVertex.resources.filter(r => Is.empty(r.dateDeleted));\n\n\t\t\tif (Is.empty(latestRevision)) {\n\t\t\t\tthrow new NotFoundError(DocumentManagementService.CLASS_NAME, \"documentRevisionNone\");\n\t\t\t}\n\n\t\t\tconst { annotationObject, documentIdFormat, documentCode } = document ?? {};\n\n\t\t\t// If auditableItemGraphEdges is undefined we are not updating the edges\n\t\t\t// an empty array can be passed to remove all edges\n\n\t\t\tconst resourcePatchesAdd: IAuditableItemGraphResource[] = [];\n\t\t\tlet blobRevisionCreated = false;\n\t\t\tlet newRevisionHasAttestation = false;\n\n\t\t\t// If the blob is set and its hash has changed then we create a new revision.\n\t\t\t// blob may be raw bytes (Uint8Array) to upload, or a string treated as an existing\n\t\t\t// blobStorageId whose integrity is fetched from the blob storage entry.\n\t\t\tif (Is.uint8Array(blob) || Is.stringValue(blob)) {\n\t\t\t\t// Short-circuit: same blobStorageId reference on a live revision means the blob is\n\t\t\t\t// unchanged - skip the network GET inside computeBlobIntegrity.\n\t\t\t\tconst blobUnchanged =\n\t\t\t\t\tIs.stringValue(blob) &&\n\t\t\t\t\tblob === latestRevision.blobStorageId &&\n\t\t\t\t\tIs.empty(latestRevision.dateDeleted);\n\t\t\t\tconst newIntegrity = blobUnchanged\n\t\t\t\t\t? latestRevision.integrity\n\t\t\t\t\t: await this.computeBlobIntegrity(blob);\n\n\t\t\t\tif (latestRevision.integrity !== newIntegrity) {\n\t\t\t\t\tlet blobStorageId: string;\n\t\t\t\t\tif (Is.stringValue(blob)) {\n\t\t\t\t\t\tblobStorageId = blob;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tblobStorageId = await this._blobStorageComponent.create(Converter.bytesToBase64(blob));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst newRevision = ObjectHelper.clone(latestRevision);\n\n\t\t\t\t\tnewRevision.documentRevision++;\n\t\t\t\t\tnewRevision.id = this.createDocumentId(\n\t\t\t\t\t\tnewRevision.documentId,\n\t\t\t\t\t\tnewRevision.documentRevision\n\t\t\t\t\t);\n\t\t\t\t\tnewRevision.integrity = newIntegrity;\n\t\t\t\t\tnewRevision.blobStorageId = blobStorageId;\n\t\t\t\t\tthis.applyDocumentFieldPatch(newRevision, document);\n\n\t\t\t\t\tif (options?.includeAttestation === false) {\n\t\t\t\t\t\tif (Is.stringValue(newRevision.attestationId)) {\n\t\t\t\t\t\t\tawait this._attestationComponent.destroy(newRevision.attestationId);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdelete newRevision.attestationId;\n\t\t\t\t\t} else if (Is.stringValue(latestRevision.attestationId) || options?.includeAttestation) {\n\t\t\t\t\t\tnewRevision.attestationId = await this.createAttestation(newRevision);\n\t\t\t\t\t}\n\n\t\t\t\t\tresourcePatchesAdd.push({\n\t\t\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\t\t\ttype: AuditableItemGraphTypes.Resource,\n\t\t\t\t\t\tresourceObject: JsonLdHelper.toNodeObject(newRevision)\n\t\t\t\t\t});\n\n\t\t\t\t\tnewRevisionHasAttestation = Is.stringValue(newRevision.attestationId);\n\t\t\t\t\tblobRevisionCreated = true;\n\t\t\t\t} else if (Is.stringValue(latestRevision.dateDeleted)) {\n\t\t\t\t\t// Same content as the most recent (soft-deleted) revision - restore it.\n\t\t\t\t\tconst restoredRevision = ObjectHelper.clone(latestRevision);\n\t\t\t\t\tdelete restoredRevision.dateDeleted;\n\t\t\t\t\tthis.applyDocumentFieldPatch(restoredRevision, document);\n\n\t\t\t\t\tif (options?.includeAttestation === false) {\n\t\t\t\t\t\tif (Is.stringValue(restoredRevision.attestationId)) {\n\t\t\t\t\t\t\tawait this._attestationComponent.destroy(restoredRevision.attestationId);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdelete restoredRevision.attestationId;\n\t\t\t\t\t} else if (\n\t\t\t\t\t\tIs.stringValue(restoredRevision.attestationId) ||\n\t\t\t\t\t\toptions?.includeAttestation\n\t\t\t\t\t) {\n\t\t\t\t\t\trestoredRevision.attestationId = await this.createAttestation(restoredRevision);\n\t\t\t\t\t}\n\t\t\t\t\tresourcePatchesAdd.push({\n\t\t\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\t\t\ttype: AuditableItemGraphTypes.Resource,\n\t\t\t\t\t\tresourceObject: JsonLdHelper.toNodeObject(restoredRevision)\n\t\t\t\t\t});\n\t\t\t\t\tnewRevisionHasAttestation = Is.stringValue(restoredRevision.attestationId);\n\t\t\t\t\tblobRevisionCreated = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// If no new revision was created, apply in-place updates to the current revision:\n\t\t\t// annotation changes and/or adding first-time attestation.\n\t\t\t// Undefined annotationObject means \"no change\" in patch semantics - it does not clear it.\n\t\t\tif (!blobRevisionCreated) {\n\t\t\t\tconst annotationChanged =\n\t\t\t\t\t!Is.empty(annotationObject) &&\n\t\t\t\t\t!ObjectHelper.equal(latestRevision.annotationObject, annotationObject);\n\t\t\t\tconst documentIdFormatChanged =\n\t\t\t\t\t!Is.empty(documentIdFormat) && latestRevision.documentIdFormat !== documentIdFormat;\n\t\t\t\tconst documentCodeChanged =\n\t\t\t\t\t!Is.empty(documentCode) && latestRevision.documentCode !== documentCode;\n\t\t\t\tconst addingAttestation =\n\t\t\t\t\toptions?.includeAttestation === true && !Is.stringValue(latestRevision.attestationId);\n\t\t\t\tconst removingAttestation =\n\t\t\t\t\toptions?.includeAttestation === false && Is.stringValue(latestRevision.attestationId);\n\n\t\t\t\tif (\n\t\t\t\t\tannotationChanged ||\n\t\t\t\t\tdocumentIdFormatChanged ||\n\t\t\t\t\tdocumentCodeChanged ||\n\t\t\t\t\taddingAttestation ||\n\t\t\t\t\tremovingAttestation\n\t\t\t\t) {\n\t\t\t\t\tif (annotationChanged) {\n\t\t\t\t\t\tlatestRevision.annotationObject = annotationObject;\n\t\t\t\t\t}\n\t\t\t\t\tif (documentIdFormatChanged) {\n\t\t\t\t\t\tlatestRevision.documentIdFormat = documentIdFormat;\n\t\t\t\t\t}\n\t\t\t\t\tif (documentCodeChanged) {\n\t\t\t\t\t\tlatestRevision.documentCode = documentCode;\n\t\t\t\t\t}\n\t\t\t\t\tif (addingAttestation) {\n\t\t\t\t\t\tlatestRevision.attestationId = await this.createAttestation(latestRevision);\n\t\t\t\t\t}\n\t\t\t\t\tif (removingAttestation && Is.stringValue(latestRevision.attestationId)) {\n\t\t\t\t\t\tawait this._attestationComponent.destroy(latestRevision.attestationId);\n\t\t\t\t\t\tdelete latestRevision.attestationId;\n\t\t\t\t\t}\n\t\t\t\t\tlatestRevision.dateModified = new Date(Date.now()).toISOString();\n\t\t\t\t\tresourcePatchesAdd.push(\n\t\t\t\t\t\tObjectHelper.removeEmptyProperties({\n\t\t\t\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\t\t\t\ttype: AuditableItemGraphTypes.Resource,\n\t\t\t\t\t\t\tresourceObject: JsonLdHelper.toNodeObject(latestRevision)\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Build document-vertex edge patches directly from the explicit delta.\n\t\t\tconst edgesToAdd = auditableItemGraphEdges?.add ?? [];\n\t\t\tconst edgeTargetIdsToRemove = auditableItemGraphEdges?.remove ?? [];\n\t\t\tconst hasEdgeChanges =\n\t\t\t\t!Is.empty(auditableItemGraphEdges) &&\n\t\t\t\t(edgesToAdd.length > 0 || edgeTargetIdsToRemove.length > 0);\n\n\t\t\tconst addingAlias = options?.includeAlias === true;\n\t\t\tconst removingAlias = options?.includeAlias === false;\n\t\t\tconst hasAliasChange = addingAlias || removingAlias;\n\n\t\t\tconst documentEdgePatchesAdd: IAuditableItemGraphEdge[] = edgesToAdd.map(aigEdge => ({\n\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\ttype: AuditableItemGraphTypes.Edge,\n\t\t\t\ttargetId: aigEdge.targetId,\n\t\t\t\tedgeRelationships: [\"document\"]\n\t\t\t}));\n\n\t\t\t// Resolve remove targetIds to stored edge IDs for the document vertex patch.\n\t\t\tconst documentEdgePatchesRemove: string[] = edgeTargetIdsToRemove\n\t\t\t\t.map(\n\t\t\t\t\ttargetId =>\n\t\t\t\t\t\tdocumentVertex.edges?.find(e => e.targetId === targetId && Is.empty(e.dateDeleted))?.id\n\t\t\t\t)\n\t\t\t\t.filter((id): id is string => Is.stringValue(id));\n\n\t\t\tif (resourcePatchesAdd.length > 0 || hasEdgeChanges || hasAliasChange) {\n\t\t\t\tconst partial: IAuditableItemGraphPartialVertex = {\n\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\tAuditableItemGraphContexts.Context,\n\t\t\t\t\t\tAuditableItemGraphContexts.ContextCommon\n\t\t\t\t\t],\n\t\t\t\t\tid: auditableItemGraphDocumentId\n\t\t\t\t};\n\t\t\t\tif (resourcePatchesAdd.length > 0) {\n\t\t\t\t\tpartial.resourcePatches = { add: resourcePatchesAdd };\n\t\t\t\t}\n\t\t\t\tif (hasEdgeChanges) {\n\t\t\t\t\tpartial.edgePatches = {\n\t\t\t\t\t\tadd: documentEdgePatchesAdd.length > 0 ? documentEdgePatchesAdd : undefined,\n\t\t\t\t\t\tremove: documentEdgePatchesRemove.length > 0 ? documentEdgePatchesRemove : undefined\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (addingAlias) {\n\t\t\t\t\tpartial.aliasPatches = {\n\t\t\t\t\t\tadd: [\n\t\t\t\t\t\t\tObjectHelper.removeEmptyProperties({\n\t\t\t\t\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\t\t\t\t\ttype: AuditableItemGraphTypes.Alias,\n\t\t\t\t\t\t\t\tid: latestRevision.documentId,\n\t\t\t\t\t\t\t\taliasFormat: latestRevision.documentIdFormat,\n\t\t\t\t\t\t\t\tannotationObject: options?.aliasAnnotationObject\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t]\n\t\t\t\t\t};\n\t\t\t\t} else if (removingAlias) {\n\t\t\t\t\tpartial.aliasPatches = { remove: [latestRevision.documentId] };\n\t\t\t\t}\n\t\t\t\tawait this._auditableItemGraphComponent.updatePartial(partial);\n\t\t\t}\n\n\t\t\tif (hasEdgeChanges) {\n\t\t\t\tawait this.updateConnectedEdges(\n\t\t\t\t\tauditableItemGraphDocumentId,\n\t\t\t\t\tedgesToAdd,\n\t\t\t\t\tedgeTargetIdsToRemove,\n\t\t\t\t\tlatestRevision.documentId,\n\t\t\t\t\tlatestRevision.documentIdFormat\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst updatedVertex = resourcePatchesAdd.length > 0 || hasEdgeChanges || hasAliasChange;\n\t\t\tif (blobRevisionCreated) {\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tDocumentManagementMetricIds.RevisionsCreated,\n\t\t\t\t\t{ hasAttestation: newRevisionHasAttestation }\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (updatedVertex) {\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tDocumentManagementMetricIds.DocumentsUpdated,\n\t\t\t\t\t{ hasNewRevision: blobRevisionCreated }\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (BaseError.someErrorName(error, \"NotFoundError\")) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new GeneralError(\n\t\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\t\"updateFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tMutex.unlock(auditableItemGraphDocumentId);\n\t\t}\n\t}\n\n\t/**\n\t * Get a document using it's auditable item graph vertex id and optional revision.\n\t * @param auditableItemGraphDocumentId The auditable item graph vertex id which contains the document.\n\t * @param options Additional options for the get operation.\n\t * @param options.includeBlobStorageMetadata Flag to include the blob storage metadata for the document, defaults to false.\n\t * @param options.includeBlobStorageData Flag to include the blob storage data for the document, defaults to false.\n\t * @param options.includeAttestation Flag to include the attestation information for the document, defaults to false.\n\t * @param options.includeRemoved Flag to include deleted documents, defaults to false.\n\t * @param options.includeDeletedEdges Flag to include soft-deleted edges in the response, defaults to false.\n\t * @param options.extractRuleGroupId If provided will extract data from the document using the specified rule group id.\n\t * @param options.extractMimeType By default extraction will auto detect the mime type of the document, this can be used to override the detection.\n\t * @param cursor The cursor to get the next chunk of revisions.\n\t * @param limit Limit the number of items to return, defaults to 1 so only most recent is returned.\n\t * @returns The documents and revisions if requested, ordered by revision descending, cursor is set if there are more document revisions.\n\t */\n\tpublic async get(\n\t\tauditableItemGraphDocumentId: string,\n\t\toptions?: {\n\t\t\tincludeBlobStorageMetadata?: boolean;\n\t\t\tincludeBlobStorageData?: boolean;\n\t\t\tincludeAttestation?: boolean;\n\t\t\tincludeRemoved?: boolean;\n\t\t\tincludeDeletedEdges?: boolean;\n\t\t\textractRuleGroupId?: string;\n\t\t\textractMimeType?: string;\n\t\t},\n\t\tcursor?: string,\n\t\tlimit?: number\n\t): Promise<{\n\t\tentries: IDocumentList;\n\t\tcursor?: string;\n\t}> {\n\t\tUrn.guard(\n\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\"auditableItemGraphDocumentId\",\n\t\t\tauditableItemGraphDocumentId\n\t\t);\n\n\t\ttry {\n\t\t\tconst documentVertex = await this._auditableItemGraphComponent.get(\n\t\t\t\tauditableItemGraphDocumentId,\n\t\t\t\t{\n\t\t\t\t\tincludeDeleted:\n\t\t\t\t\t\t(options?.includeRemoved ?? false) || (options?.includeDeletedEdges ?? false)\n\t\t\t\t}\n\t\t\t);\n\n\t\t\t// If we fetched deleted items to expose edges but the caller did not ask for deleted\n\t\t\t// documents, strip the deleted resources so they don't appear in the output.\n\t\t\tif ((options?.includeDeletedEdges ?? false) && !(options?.includeRemoved ?? false)) {\n\t\t\t\tdocumentVertex.resources = documentVertex.resources?.filter(r => Is.empty(r.dateDeleted));\n\t\t\t}\n\n\t\t\t// Populate the document and revisions with the options set\n\t\t\tconst documents = await this.getDocumentsFromVertex(documentVertex, options, cursor, limit);\n\n\t\t\tconst result = await JsonLdProcessor.compact(\n\t\t\t\tdocuments.entries,\n\t\t\t\tdocuments.entries[\"@context\"],\n\t\t\t\t{ compactArrays: false }\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tentries: result,\n\t\t\t\tcursor: documents.cursor\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tif (BaseError.someErrorName(error, \"NotFoundError\")) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new GeneralError(DocumentManagementService.CLASS_NAME, \"getFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Get a document revision using it's auditable item graph vertex id.\n\t * @param auditableItemGraphDocumentId The auditable item graph vertex id which contains the document.\n\t * @param revision The revision id for the document.\n\t * @param options Additional options for the get operation.\n\t * @param options.includeBlobStorageMetadata Flag to include the blob storage metadata for the document, defaults to false.\n\t * @param options.includeBlobStorageData Flag to include the blob storage data for the document, defaults to false.\n\t * @param options.includeAttestation Flag to include the attestation information for the document, defaults to false.\n\t * @param options.extractRuleGroupId If provided will extract data from the document using the specified rule group id.\n\t * @param options.extractMimeType By default extraction will auto detect the mime type of the document, this can be used to override the detection.\n\t * @returns The document for the specified revision.\n\t */\n\tpublic async getRevision(\n\t\tauditableItemGraphDocumentId: string,\n\t\trevision: number,\n\t\toptions?: {\n\t\t\tincludeBlobStorageMetadata?: boolean;\n\t\t\tincludeBlobStorageData?: boolean;\n\t\t\tincludeAttestation?: boolean;\n\t\t\textractRuleGroupId?: string;\n\t\t\textractMimeType?: string;\n\t\t}\n\t): Promise<IDocumentHydrated> {\n\t\tUrn.guard(\n\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\"auditableItemGraphDocumentId\",\n\t\t\tauditableItemGraphDocumentId\n\t\t);\n\t\tGuards.integer(DocumentManagementService.CLASS_NAME, \"revision\", revision);\n\n\t\ttry {\n\t\t\tconst documentVertex = await this._auditableItemGraphComponent.get(\n\t\t\t\tauditableItemGraphDocumentId,\n\t\t\t\t{ includeDeleted: true }\n\t\t\t);\n\n\t\t\tif (Is.empty(documentVertex.resources)) {\n\t\t\t\tthrow new NotFoundError(DocumentManagementService.CLASS_NAME, \"documentRevisionNone\");\n\t\t\t}\n\n\t\t\tdocumentVertex.resources = documentVertex.resources.filter(\n\t\t\t\td => d.resourceObject?.documentRevision === revision\n\t\t\t);\n\n\t\t\tif (documentVertex.resources.length === 0) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\t\t\"documentRevisionNotFound\",\n\t\t\t\t\trevision.toString()\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Populate the document and revisions with the options set\n\t\t\tconst docList = await this.getDocumentsFromVertex(documentVertex, options);\n\n\t\t\tconst result = await JsonLdProcessor.compact(\n\t\t\t\tdocList.entries.itemListElement[0],\n\t\t\t\tdocList.entries.itemListElement[0][\"@context\"],\n\t\t\t\t{ compactArrays: false }\n\t\t\t);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (BaseError.someErrorName(error, \"NotFoundError\")) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new GeneralError(\n\t\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\t\"getRevisionFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Remove an auditable item graph vertex using it's id.\n\t * The document dateDeleted will be set, but can still be queried with the includeRemoved flag.\n\t * @param auditableItemGraphDocumentId The auditable item graph vertex id which contains the document.\n\t * @param revision The revision of the document to remove.\n\t * @returns A promise that resolves when the revision has been removed.\n\t */\n\tpublic async removeRevision(\n\t\tauditableItemGraphDocumentId: string,\n\t\trevision: number\n\t): Promise<void> {\n\t\tUrn.guard(\n\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\"auditableItemGraphDocumentId\",\n\t\t\tauditableItemGraphDocumentId\n\t\t);\n\t\tGuards.integer(DocumentManagementService.CLASS_NAME, \"revision\", revision);\n\n\t\tawait Mutex.lock(auditableItemGraphDocumentId, {\n\t\t\tthrowOnTimeout: true,\n\t\t\ttimeoutMs: this._mutexTimeoutMs\n\t\t});\n\t\ttry {\n\t\t\tconst documentVertex = await this._auditableItemGraphComponent.get(\n\t\t\t\tauditableItemGraphDocumentId\n\t\t\t);\n\n\t\t\tif (Is.empty(documentVertex.resources)) {\n\t\t\t\tthrow new NotFoundError(DocumentManagementService.CLASS_NAME, \"documentRevisionNone\");\n\t\t\t}\n\n\t\t\tconst docRevisionIndex = documentVertex.resources.findIndex(\n\t\t\t\td => d.resourceObject?.documentRevision === revision\n\t\t\t);\n\n\t\t\tif (docRevisionIndex === -1) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\t\t\"documentRevisionNotFound\",\n\t\t\t\t\trevision.toString()\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst revisionResourceId =\n\t\t\t\t(documentVertex.resources[docRevisionIndex].resourceObject?.id as string | undefined) ??\n\t\t\t\t(documentVertex.resources[docRevisionIndex].resourceObject?.[\"@id\"] as string | undefined);\n\n\t\t\tif (!Is.stringValue(revisionResourceId)) {\n\t\t\t\t// The revision exists but its stored resource-id is unresolvable - integrity anomaly.\n\t\t\t\tthrow new GeneralError(DocumentManagementService.CLASS_NAME, \"documentRevisionMissingId\", {\n\t\t\t\t\trevision\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tawait this._auditableItemGraphComponent.updatePartial({\n\t\t\t\t\"@context\": [AuditableItemGraphContexts.Context, AuditableItemGraphContexts.ContextCommon],\n\t\t\t\tid: auditableItemGraphDocumentId,\n\t\t\t\tresourcePatches: { remove: [revisionResourceId] }\n\t\t\t});\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tDocumentManagementMetricIds.RevisionsRemoved\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (BaseError.someErrorName(error, \"NotFoundError\")) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new GeneralError(\n\t\t\t\tDocumentManagementService.CLASS_NAME,\n\t\t\t\t\"removeRevisionFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tMutex.unlock(auditableItemGraphDocumentId);\n\t\t}\n\t}\n\n\t/**\n\t * Find all the document with a specific id.\n\t * @param documentId The document id to find in the graph.\n\t * @param cursor The cursor to get the next chunk of documents.\n\t * @param limit The limit to get the next chunk of documents.\n\t * @returns The graph vertices that contain documents referencing the specified document id.\n\t */\n\tpublic async query(\n\t\tdocumentId: string,\n\t\tcursor?: string,\n\t\tlimit?: number\n\t): Promise<{\n\t\tentries: IAuditableItemGraphVertexList;\n\t\tcursor?: string;\n\t}> {\n\t\tGuards.stringValue(DocumentManagementService.CLASS_NAME, \"documentId\", documentId);\n\n\t\ttry {\n\t\t\tconst result = await this._auditableItemGraphComponent.query(\n\t\t\t\t{\n\t\t\t\t\tid: documentId,\n\t\t\t\t\tidMode: \"both\",\n\t\t\t\t\tresourceTypes: [DocumentTypes.Document]\n\t\t\t\t},\n\t\t\t\tundefined,\n\t\t\t\tundefined,\n\t\t\t\tundefined,\n\t\t\t\t[\"id\", \"dateCreated\", \"dateModified\", \"aliases\", \"annotationObject\", \"resources\", \"edges\"],\n\t\t\t\tcursor,\n\t\t\t\tlimit\n\t\t\t);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (BaseError.someErrorName(error, \"NotFoundError\")) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow new GeneralError(DocumentManagementService.CLASS_NAME, \"queryFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Update the edges on connected vertices using non-destructive patch operations.\n\t * Uses updatePartial so AIG's per-vertex Mutex serialises concurrent callers.\n\t *\n\t * On the **create path** (`isCreatePath = true`) the method is fail-fast:\n\t * if any back-edge write fails (target vertex does not exist), all back-edges\n\t * already written in this call are removed (best-effort rollback) and the\n\t * failing target vertex ID is returned so the caller can surface a meaningful error.\n\t *\n\t * On the **update path** each missing vertex is caught individually; the remaining\n\t * updates continue and `undefined` is always returned.\n\t * @param auditableItemGraphDocumentId The document id to use.\n\t * @param edgesToAdd Connections to add - each connected vertex receives a new back-edge.\n\t * @param edgeTargetIdsToRemove Target vertex IDs to disconnect - their back-edges are removed.\n\t * @param documentId The document identifier.\n\t * @param documentIdFormat The format of the document identifier.\n\t * @param isCreatePath When true, enables fail-fast + rollback semantics.\n\t * @returns The failing target vertex ID when `isCreatePath` is true and a write fails;\n\t * `undefined` on success or when called from the update path.\n\t * @internal\n\t */\n\tprivate async updateConnectedEdges(\n\t\tauditableItemGraphDocumentId: string,\n\t\tedgesToAdd: IDocumentManagementEdgeEntry[],\n\t\tedgeTargetIdsToRemove: string[],\n\t\tdocumentId: string,\n\t\tdocumentIdFormat: string | undefined,\n\t\tisCreatePath: boolean = false\n\t): Promise<string | undefined> {\n\t\t// Track which target IDs received a successful back-edge write so we can roll back\n\t\t// if a later write fails (create path only).\n\t\tconst writtenTargetIds: string[] = [];\n\n\t\t// Add back-edges to each newly connected vertex.\n\t\tfor (const aigEdge of edgesToAdd) {\n\t\t\tconst partial: IAuditableItemGraphPartialVertex = {\n\t\t\t\t\"@context\": [AuditableItemGraphContexts.Context, AuditableItemGraphContexts.ContextCommon],\n\t\t\t\tid: aigEdge.targetId,\n\t\t\t\tedgePatches: {\n\t\t\t\t\tadd: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\t\t\t\ttype: AuditableItemGraphTypes.Edge,\n\t\t\t\t\t\t\ttargetId: auditableItemGraphDocumentId,\n\t\t\t\t\t\t\tedgeRelationships: [\"document\"]\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (aigEdge.includeAlias) {\n\t\t\t\tpartial.aliasPatches = {\n\t\t\t\t\tadd: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"@context\": AuditableItemGraphContexts.Context,\n\t\t\t\t\t\t\ttype: AuditableItemGraphTypes.Alias,\n\t\t\t\t\t\t\tid: documentId,\n\t\t\t\t\t\t\taliasFormat: documentIdFormat,\n\t\t\t\t\t\t\tannotationObject: aigEdge.aliasAnnotationObject\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (isCreatePath) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this._auditableItemGraphComponent.updatePartial(partial);\n\t\t\t\t\twrittenTargetIds.push(aigEdge.targetId);\n\t\t\t\t} catch {\n\t\t\t\t\t// Rollback all back-edges already written before this failure.\n\t\t\t\t\tawait this.rollbackConnectedEdges(\n\t\t\t\t\t\tauditableItemGraphDocumentId,\n\t\t\t\t\t\twrittenTargetIds,\n\t\t\t\t\t\tdocumentId\n\t\t\t\t\t);\n\t\t\t\t\treturn aigEdge.targetId;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tawait this._auditableItemGraphComponent.updatePartial(partial);\n\t\t\t\t} catch {\n\t\t\t\t\t// Best-effort on the update path - swallow to avoid interrupting remaining back-edge writes.\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove back-edges from disconnected vertices.\n\t\tfor (const staleTargetId of edgeTargetIdsToRemove) {\n\t\t\tawait this.removeBackEdgeFromVertex(staleTargetId, auditableItemGraphDocumentId, documentId);\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Best-effort removal of back-edges that were written during a failed create operation.\n\t * Errors are silently swallowed to avoid masking the original failure.\n\t * @param auditableItemGraphDocumentId The document vertex whose back-edges should be removed.\n\t * @param targetIds The connected vertex IDs that received a back-edge.\n\t * @param documentId The document identifier used for alias cleanup.\n\t * @internal\n\t */\n\tprivate async rollbackConnectedEdges(\n\t\tauditableItemGraphDocumentId: string,\n\t\ttargetIds: string[],\n\t\tdocumentId: string\n\t): Promise<void> {\n\t\tfor (const targetId of targetIds) {\n\t\t\ttry {\n\t\t\t\tawait this.removeBackEdgeFromVertex(targetId, auditableItemGraphDocumentId, documentId);\n\t\t\t} catch {\n\t\t\t\t// Best-effort - do not let cleanup errors mask the original failure.\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Remove the back-edge and alias that a connected vertex holds pointing at the document vertex.\n\t * Fetches the connected vertex to resolve the stored edge ID, then issues a single updatePartial.\n\t * No-ops silently if neither edge nor alias is found.\n\t * @param targetId The connected vertex to patch.\n\t * @param documentVertexId The document vertex whose back-edge should be removed.\n\t * @param documentId The document id used for alias cleanup.\n\t * @internal\n\t */\n\tprivate async removeBackEdgeFromVertex(\n\t\ttargetId: string,\n\t\tdocumentVertexId: string,\n\t\tdocumentId: string\n\t): Promise<void> {\n\t\tconst connected = await this._auditableItemGraphComponent.get(targetId);\n\n\t\tconst edgeId = connected.edges?.find(\n\t\t\te => Is.empty(e.dateDeleted) && e.targetId === documentVertexId\n\t\t)?.id;\n\n\t\tconst hasAlias =\n\t\t\tIs.arrayValue(connected.aliases) &&\n\t\t\tconnected.aliases.some(a => Is.empty(a.dateDeleted) && a.id === documentId);\n\n\t\tconst partial: IAuditableItemGraphPartialVertex = {\n\t\t\t\"@context\": [AuditableItemGraphContexts.Context, AuditableItemGraphContexts.ContextCommon],\n\t\t\tid: targetId\n\t\t};\n\n\t\tif (hasAlias) {\n\t\t\tpartial.aliasPatches = { remove: [documentId] };\n\t\t}\n\n\t\tif (Is.stringValue(edgeId)) {\n\t\t\tpartial.edgePatches = { remove: [edgeId] };\n\t\t}\n\n\t\tif (hasAlias || Is.stringValue(edgeId)) {\n\t\t\tawait this._auditableItemGraphComponent.updatePartial(partial);\n\t\t}\n\t}\n\n\t/**\n\t * Get the documents from the auditable item graph vertex.\n\t * @param documentVertex The vertex containing the documents.\n\t * @param options Additional options for the get operation.\n\t * @param options.includeBlobStorageMetadata Flag to include the blob storage metadata for the document, defaults to false.\n\t * @param options.includeBlobStorageData Flag to include the blob storage data for the document, defaults to false.\n\t * @param options.includeAttestation Flag to include the attestation information for the document, defaults to false.\n\t * @param options.includeDeletedEdges Flag to include soft-deleted edges in the response, defaults to false.\n\t * @param options.extractRuleGroupId If provided will extract data from the document using the specified rule group id.\n\t * @param options.extractMimeType By default extraction will auto detect the mime type of the document, this can be used to override the detection.\n\t * @param cursor The cursor to get the next chunk of revisions.\n\t * @param limit Limit the number of items to return, defaults to 1 so only most recent is returned.\n\t * @returns The finalised list of documents.\n\t * @internal\n\t */\n\tprivate async getDocumentsFromVertex(\n\t\tdocumentVertex: IAuditableItemGraphVertex,\n\t\toptions?: {\n\t\t\tincludeBlobStorageMetadata?: boolean;\n\t\t\tincludeBlobStorageData?: boolean;\n\t\t\tincludeAttestation?: boolean;\n\t\t\tincludeDeletedEdges?: boolean;\n\t\t\textractRuleGroupId?: string;\n\t\t\textractMimeType?: string;\n\t\t},\n\t\tcursor?: string,\n\t\tlimit?: number\n\t): Promise<{\n\t\tentries: IDocumentList;\n\t\tcursor?: string;\n\t}> {\n\t\tconst docList: IDocumentList = {\n\t\t\t\"@context\": [\n\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\tDocumentContexts.Context,\n\t\t\t\tDocumentContexts.ContextCommon\n\t\t\t],\n\t\t\ttype: SchemaOrgTypes.ItemList,\n\t\t\t[SchemaOrgTypes.ItemListElement]: []\n\t\t};\n\n\t\tlet nextCursor: string | undefined;\n\n\t\tif (Is.arrayValue(documentVertex.resources)) {\n\t\t\t// Sort by newest revision first\n\t\t\tdocumentVertex.resources.sort(\n\t\t\t\t(a, b) =>\n\t\t\t\t\t(Coerce.number(b.resourceObject?.documentRevision) ?? 0) -\n\t\t\t\t\t(Coerce.number(a.resourceObject?.documentRevision) ?? 0)\n\t\t\t);\n\n\t\t\tconst startIndex = Coerce.integer(cursor) ?? 0;\n\t\t\tconst safeLimit = NumberHelper.clamp(limit ?? 1, 1);\n\t\t\tconst endIndex = Math.min(startIndex + safeLimit, documentVertex.resources.length);\n\t\t\tconst slicedResources = documentVertex.resources.slice(startIndex, endIndex);\n\t\t\tnextCursor = documentVertex.resources.length > endIndex ? endIndex.toString() : undefined;\n\n\t\t\tconst includeBlobStorageMetadata = options?.includeBlobStorageMetadata ?? false;\n\t\t\tconst includeBlobStorageData = options?.includeBlobStorageData ?? false;\n\t\t\tconst includeAttestation = options?.includeAttestation ?? false;\n\t\t\tconst extractData = Is.stringValue(options?.extractRuleGroupId);\n\n\t\t\tfor (let i = 0; i < slicedResources.length; i++) {\n\t\t\t\tconst document = slicedResources[i].resourceObject as unknown as IDocumentHydrated;\n\t\t\t\tif (Is.object(document) && document.type === DocumentTypes.Document) {\n\t\t\t\t\tdocument.dateDeleted = slicedResources[i].dateDeleted;\n\n\t\t\t\t\tdocList[SchemaOrgTypes.ItemListElement].push(document);\n\n\t\t\t\t\tconst blobRequired = includeBlobStorageMetadata || includeBlobStorageData;\n\t\t\t\t\tif (blobRequired || extractData) {\n\t\t\t\t\t\tconst blobEntry = await this._blobStorageComponent.get(document.blobStorageId, {\n\t\t\t\t\t\t\tincludeContent: includeBlobStorageData || extractData\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (blobRequired) {\n\t\t\t\t\t\t\tdocument.blobStorageEntry = blobEntry;\n\t\t\t\t\t\t\tif (Is.object(document.blobStorageEntry)) {\n\t\t\t\t\t\t\t\tObjectHelper.propertyDelete(document.blobStorageEntry, \"@context\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!docList[\"@context\"].includes(BlobStorageContexts.Context)) {\n\t\t\t\t\t\t\t\tdocList[\"@context\"].push(BlobStorageContexts.Context);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (Is.stringValue(options?.extractRuleGroupId) && Is.stringValue(blobEntry.blob)) {\n\t\t\t\t\t\t\tconst binaryBlob = Converter.base64ToBytes(blobEntry.blob);\n\t\t\t\t\t\t\tdocument.extractedData = await this._dataProcessingComponent.extract(\n\t\t\t\t\t\t\t\toptions.extractRuleGroupId,\n\t\t\t\t\t\t\t\tbinaryBlob,\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\toptions?.extractMimeType\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If we have the blob data due to extraction but we weren't asked for it\n\t\t\t\t\t\t// then we remove it from the document\n\t\t\t\t\t\tif (!blobRequired) {\n\t\t\t\t\t\t\tdelete document.blobStorageEntry;\n\t\t\t\t\t\t} else if (!includeBlobStorageData) {\n\t\t\t\t\t\t\tdelete document.blobStorageEntry?.blob;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (includeAttestation && Is.stringValue(document.attestationId)) {\n\t\t\t\t\t\tconst attestationInformation = await this._attestationComponent.get(\n\t\t\t\t\t\t\tdocument.attestationId\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdocument.attestationInformation = attestationInformation;\n\t\t\t\t\t\tif (Is.object(document.attestationInformation)) {\n\t\t\t\t\t\t\tObjectHelper.propertyDelete(document.attestationInformation, \"@context\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Is.arrayValue(documentVertex.edges)) {\n\t\t\tdocList.edges ??= [];\n\n\t\t\tfor (const edge of documentVertex.edges) {\n\t\t\t\tif (\n\t\t\t\t\tIs.object(edge) &&\n\t\t\t\t\t((options?.includeDeletedEdges ?? false) || Is.empty(edge.dateDeleted))\n\t\t\t\t) {\n\t\t\t\t\tdocList.edges.push(edge.targetId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tentries: docList,\n\t\t\tcursor: nextCursor\n\t\t};\n\t}\n\n\t/**\n\t * Compute the integrity hash for a blob.\n\t * For a Uint8Array the hash is computed locally; for a string blobStorageId the stored\n\t * integrity is fetched from blob storage (one network call, no content download).\n\t * @param blob The blob bytes or an existing blob storage entry id.\n\t * @returns The SHA-256 integrity string.\n\t * @internal\n\t */\n\tprivate async computeBlobIntegrity(blob: Uint8Array | string): Promise<string> {\n\t\tif (Is.uint8Array(blob)) {\n\t\t\treturn IntegrityHelper.generate(IntegrityAlgorithm.Sha256, blob);\n\t\t}\n\t\tconst blobEntry = await this._blobStorageComponent.get(blob, { includeContent: false });\n\t\treturn blobEntry.integrity;\n\t}\n\n\t/**\n\t * Remove a blob on rollback only when its metadata proves this request created it.\n\t * Uses the create-correlation identifier set during blob upload.\n\t * @param blobStorageId The blob id to check and potentially remove.\n\t * @param correlationId The request correlation id to match against blob metadata.\n\t * @internal\n\t */\n\tprivate async removeBlobIfCreatedByRequest(\n\t\tblobStorageId: string,\n\t\tcorrelationId: string\n\t): Promise<void> {\n\t\ttry {\n\t\t\tconst blobEntry = await this._blobStorageComponent.get(blobStorageId, {\n\t\t\t\tincludeContent: false\n\t\t\t});\n\t\t\tconst metadataIdentifier = (blobEntry.metadata as { identifier?: unknown } | undefined)\n\t\t\t\t?.identifier;\n\n\t\t\tif (Is.stringValue(metadataIdentifier) && metadataIdentifier === correlationId) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this._blobStorageComponent.remove(blobStorageId);\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Best-effort cleanup only.\n\t\t}\n\t}\n\n\t/**\n\t * Apply a partial document field patch in-place to a revision object.\n\t * Only non-empty values overwrite the existing fields; undefined means no change.\n\t * @param revision The revision to mutate.\n\t * @param patch The field values to apply.\n\t * @internal\n\t */\n\tprivate applyDocumentFieldPatch(\n\t\trevision: IDocument,\n\t\tpatch?: Partial<Pick<IDocumentBase, \"annotationObject\" | \"documentIdFormat\" | \"documentCode\">>\n\t): void {\n\t\tconst { annotationObject, documentIdFormat, documentCode } = patch ?? {};\n\t\tif (!Is.empty(annotationObject)) {\n\t\t\trevision.annotationObject = annotationObject;\n\t\t}\n\t\tif (!Is.empty(documentIdFormat)) {\n\t\t\trevision.documentIdFormat = documentIdFormat;\n\t\t}\n\t\tif (!Is.empty(documentCode)) {\n\t\t\trevision.documentCode = documentCode;\n\t\t}\n\t}\n\n\t/**\n\t * Create an attestation for the document.\n\t * @param document The document to create the attestation for.\n\t * @returns The attestation identifier.\n\t * @internal\n\t */\n\tprivate async createAttestation(document: IDocument): Promise<string> {\n\t\tconst documentAttestation: IDocumentAttestation & IJsonLdNodeObject = {\n\t\t\t\"@context\": [\n\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\tDocumentContexts.Context,\n\t\t\t\tDocumentContexts.ContextCommon\n\t\t\t],\n\t\t\ttype: DocumentTypes.DocumentAttestation,\n\t\t\tid: document.id,\n\t\t\tdocumentId: document.documentId,\n\t\t\tdocumentCode: document.documentCode,\n\t\t\tdocumentRevision: document.documentRevision,\n\t\t\tdateCreated: document.dateCreated,\n\t\t\tintegrity: document.integrity\n\t\t};\n\t\tconst attestationId = await this._attestationComponent.create(documentAttestation);\n\t\tawait MetricHelper.metricIncrement(\n\t\t\tthis._telemetryComponent,\n\t\t\tDocumentManagementMetricIds.AttestationsCreated\n\t\t);\n\t\treturn attestationId;\n\t}\n\n\t/**\n\t * Create a document id from the document id and revision.\n\t * @param documentId The document id to create.\n\t * @param revision The revision of the document.\n\t * @returns The document id.\n\t * @internal\n\t */\n\tprivate createDocumentId(documentId: string, revision: number): string {\n\t\tconst documentIdHash = Converter.bytesToBase64Url(\n\t\t\tSha256.sum256(Converter.utf8ToBytes(documentId))\n\t\t);\n\t\treturn `document:${documentIdHash}:${revision}`;\n\t}\n}\n"]}
|
package/dist/es/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8CAA8C,CAAC;AAC7D,cAAc,iEAAiE,CAAC;AAChF,cAAc,sBAAsB,CAAC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nexport * from \"./documentManagementRoutes.js\";\nexport * from \"./documentManagementService.js\";\nexport * from \"./models/IDocumentManagementServiceConfig.js\";\nexport * from \"./models/IDocumentManagementStorageServiceConstructorOptions.js\";\nexport * from \"./restEntryPoints.js\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IDocumentManagementServiceConfig.js","
|
|
1
|
+
{"version":3,"file":"IDocumentManagementServiceConfig.js","sources":["../../../src/models/IDocumentManagementServiceConfig.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n\n/**\n * Configuration for the document management service.\n */\nexport interface IDocumentManagementServiceConfig {\n\t/**\n\t * The timeout in milliseconds for acquiring a mutex lock.\n\t */\n\tmutexTimeoutMs?: number;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IDocumentManagementStorageServiceConstructorOptions.js","
|
|
1
|
+
{"version":3,"file":"IDocumentManagementStorageServiceConstructorOptions.js","sources":["../../../src/models/IDocumentManagementStorageServiceConstructorOptions.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IDocumentManagementServiceConfig } from \"./IDocumentManagementServiceConfig.js\";\n\n/**\n * Options for the document management Service constructor.\n */\nexport interface IDocumentManagementServiceConstructorOptions {\n\t/**\n\t * The type of the auditable item graph component.\n\t * @default auditable-item-graph\n\t */\n\tauditableItemGraphComponentType?: string;\n\n\t/**\n\t * The type of the blob storage component.\n\t * @default blob-storage\n\t */\n\tblobStorageComponentType?: string;\n\n\t/**\n\t * The type of the attestation component.\n\t * @default attestation\n\t */\n\tattestationComponentType?: string;\n\n\t/**\n\t * The type of the data processing component.\n\t * @default data-processing\n\t */\n\tdataProcessingComponentType?: string;\n\n\t/**\n\t * The type of the telemetry component used for event metrics.\n\t */\n\ttelemetryComponentType?: string;\n\n\t/**\n\t * The configuration for the service.\n\t */\n\tconfig?: IDocumentManagementServiceConfig;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restEntryPoints.js","
|
|
1
|
+
{"version":3,"file":"restEntryPoints.js","sources":["../../src/restEntryPoints.ts"],"names":[],"mappings":"AAGA,OAAO,EACN,oCAAoC,EACpC,sBAAsB,EACtB,MAAM,+BAA+B,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAA2B;IACtD;QACC,IAAI,EAAE,qBAAqB;QAC3B,gBAAgB,EAAE,qBAAqB;QACvC,IAAI,EAAE,sBAAsB;QAC5B,cAAc,EAAE,oCAAoC;KACpD;CACD,CAAC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IRestRouteEntryPoint } from \"@3sixty/api-models\";\nimport {\n\tgenerateRestRoutesDocumentManagement,\n\ttagsDocumentManagement\n} from \"./documentManagementRoutes.js\";\n\n/**\n * REST entry points for the document management service.\n */\nexport const restEntryPoints: IRestRouteEntryPoint[] = [\n\t{\n\t\tname: \"document-management\",\n\t\tdefaultBaseRoute: \"document-management\",\n\t\ttags: tagsDocumentManagement,\n\t\tgenerateRoutes: generateRestRoutesDocumentManagement\n\t}\n];\n"]}
|
package/docs/changelog.md
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [0.20.0-next.1](https://github.com/3sixtyglobal/document-management/compare/document-management-service-v0.20.0-next.0...document-management-service-v0.20.0-next.1) (2026-10-23)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* publish packages under the [@3sixty](https://github.com/3sixty) namespace ([43b64db](https://github.com/3sixtyglobal/document-management/commit/43b64db2a8397c4dfae45c435ce9c14b5c1a6618))
|
|
9
|
+
* remove verifiable storage requirements in tests ([436772a](https://github.com/3sixtyglobal/document-management/commit/436772a3e5ac281d6eca76ff95d12ea35e515c41))
|
|
10
|
+
* updated ts compile ([9c2594e](https://github.com/3sixtyglobal/document-management/commit/9c2594ef363773f154286845bca15e69d380dc07))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Dependencies
|
|
14
|
+
|
|
15
|
+
* The following workspace dependencies were updated
|
|
16
|
+
* dependencies
|
|
17
|
+
* @3sixty/document-management-models bumped from 0.20.0-next.0 to 0.20.0-next.1
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@3sixty/document-management-service",
|
|
3
|
-
"version": "0.20.0-next.
|
|
3
|
+
"version": "0.20.0-next.1",
|
|
4
4
|
"description": "Service-side document lifecycle operations and REST route generation for server integrations.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"@3sixty/crypto": "next",
|
|
24
24
|
"@3sixty/data-json-ld": "next",
|
|
25
25
|
"@3sixty/data-processing-models": "next",
|
|
26
|
-
"@3sixty/document-management-models": "0.20.0-next.
|
|
26
|
+
"@3sixty/document-management-models": "0.20.0-next.1",
|
|
27
27
|
"@3sixty/entity": "next",
|
|
28
28
|
"@3sixty/nameof": "next",
|
|
29
29
|
"@3sixty/standards-schema-org": "next",
|