@twin.org/auditable-item-graph-service 0.0.3-next.2 → 0.0.3-next.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/es/auditableItemGraphRoutes.js +609 -44
- package/dist/es/auditableItemGraphRoutes.js.map +1 -1
- package/dist/es/auditableItemGraphService.js +714 -159
- package/dist/es/auditableItemGraphService.js.map +1 -1
- package/dist/es/entities/auditableItemGraphAlias.js +8 -0
- package/dist/es/entities/auditableItemGraphAlias.js.map +1 -1
- package/dist/es/entities/auditableItemGraphChangeset.js +8 -0
- package/dist/es/entities/auditableItemGraphChangeset.js.map +1 -1
- package/dist/es/entities/auditableItemGraphVertex.js +8 -0
- package/dist/es/entities/auditableItemGraphVertex.js.map +1 -1
- package/dist/es/models/IAuditableItemGraphServiceConstructorOptions.js.map +1 -1
- package/dist/types/auditableItemGraphRoutes.d.ts +42 -2
- package/dist/types/auditableItemGraphService.d.ts +81 -55
- package/dist/types/entities/auditableItemGraphAlias.d.ts +4 -0
- package/dist/types/entities/auditableItemGraphChangeset.d.ts +4 -0
- package/dist/types/entities/auditableItemGraphVertex.d.ts +4 -0
- package/dist/types/models/IAuditableItemGraphServiceConstructorOptions.d.ts +4 -0
- package/docs/changelog.md +370 -71
- package/docs/examples.md +241 -1
- package/docs/open-api/spec.json +1218 -220
- package/docs/reference/classes/AuditableItemGraphAlias.md +18 -10
- package/docs/reference/classes/AuditableItemGraphChangeset.md +16 -8
- package/docs/reference/classes/AuditableItemGraphEdge.md +10 -10
- package/docs/reference/classes/AuditableItemGraphPatch.md +6 -6
- package/docs/reference/classes/AuditableItemGraphResource.md +9 -9
- package/docs/reference/classes/AuditableItemGraphService.md +221 -59
- package/docs/reference/classes/AuditableItemGraphVertex.md +26 -18
- package/docs/reference/functions/auditableItemGraphChangesetGet.md +31 -0
- package/docs/reference/functions/auditableItemGraphChangesetList.md +31 -0
- package/docs/reference/functions/auditableItemGraphUpdate.md +1 -1
- package/docs/reference/functions/auditableItemGraphUpdatePartial.md +31 -0
- package/docs/reference/functions/auditableItemGraphVersionGet.md +31 -0
- package/docs/reference/functions/auditableItemGraphVersionList.md +31 -0
- package/docs/reference/index.md +5 -0
- package/docs/reference/interfaces/IAuditableItemGraphServiceConstructorOptions.md +18 -10
- package/locales/en.json +7 -2
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auditableItemGraphService.js","sourceRoot":"","sources":["../../src/auditableItemGraphService.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tAuditableItemGraphContexts,\n\tAuditableItemGraphTopics,\n\tAuditableItemGraphTypes,\n\tVerifyDepth,\n\ttype IAuditableItemGraphAlias,\n\ttype IAuditableItemGraphChangeset,\n\ttype IAuditableItemGraphComponent,\n\ttype IAuditableItemGraphEdge,\n\ttype IAuditableItemGraphEventBusVertexCreated,\n\ttype IAuditableItemGraphEventBusVertexUpdated,\n\ttype IAuditableItemGraphResource,\n\ttype IAuditableItemGraphVertex,\n\ttype IAuditableItemGraphVertexList\n} from \"@twin.org/auditable-item-graph-models\";\nimport { ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport {\n\tArrayHelper,\n\tComponentFactory,\n\tConverter,\n\tGeneralError,\n\tGuards,\n\tIs,\n\tJsonHelper,\n\tNotFoundError,\n\tObjectHelper,\n\tRandomHelper,\n\tStringHelper,\n\tUrn,\n\tValidation,\n\ttype IPatchOperation,\n\ttype IValidationFailure\n} from \"@twin.org/core\";\nimport { JsonLdHelper, JsonLdProcessor, type IJsonLdNodeObject } from \"@twin.org/data-json-ld\";\nimport {\n\tComparisonOperator,\n\tLogicalOperator,\n\tSortDirection,\n\ttype IComparator\n} from \"@twin.org/entity\";\nimport {\n\tEntityStorageConnectorFactory,\n\ttype IEntityStorageConnector\n} from \"@twin.org/entity-storage-models\";\nimport type { IEventBusComponent } from \"@twin.org/event-bus-models\";\nimport {\n\tImmutableProofContexts,\n\tImmutableProofFailure,\n\tImmutableProofTypes,\n\ttype IImmutableProofComponent\n} from \"@twin.org/immutable-proof-models\";\nimport { nameof, nameofKebabCase } from \"@twin.org/nameof\";\nimport {\n\tSchemaOrgContexts,\n\tSchemaOrgDataTypes,\n\tSchemaOrgTypes\n} from \"@twin.org/standards-schema-org\";\nimport type { AuditableItemGraphAlias } from \"./entities/auditableItemGraphAlias.js\";\nimport type { AuditableItemGraphChangeset } from \"./entities/auditableItemGraphChangeset.js\";\nimport type { AuditableItemGraphEdge } from \"./entities/auditableItemGraphEdge.js\";\nimport type { AuditableItemGraphResource } from \"./entities/auditableItemGraphResource.js\";\nimport type { AuditableItemGraphVertex } from \"./entities/auditableItemGraphVertex.js\";\nimport type { IAuditableItemGraphServiceConstructorOptions } from \"./models/IAuditableItemGraphServiceConstructorOptions.js\";\nimport type { IAuditableItemGraphServiceContext } from \"./models/IAuditableItemGraphServiceContext.js\";\n\n/**\n * Class for performing auditable item graph operations.\n */\nexport class AuditableItemGraphService implements IAuditableItemGraphComponent {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<AuditableItemGraphService>();\n\n\t/**\n\t * The namespace for the service.\n\t * @internal\n\t */\n\tpublic static readonly NAMESPACE: string = \"aig\";\n\n\t/**\n\t * The namespace for the service changeset.\n\t */\n\tpublic static readonly NAMESPACE_CHANGESET: string = \"changeset\";\n\n\t/**\n\t * The namespace for the service edge.\n\t */\n\tpublic static readonly NAMESPACE_EDGE: string = \"edge\";\n\n\t/**\n\t * The keys to pick when creating the proof for the stream.\n\t * @internal\n\t */\n\tprivate static readonly _PROOF_KEYS_CHANGESET: (keyof AuditableItemGraphChangeset)[] = [\n\t\t\"id\",\n\t\t\"vertexId\",\n\t\t\"userIdentity\",\n\t\t\"dateCreated\",\n\t\t\"patches\"\n\t];\n\n\t/**\n\t * The immutable proof component.\n\t * @internal\n\t */\n\tprivate readonly _immutableProofComponent: IImmutableProofComponent;\n\n\t/**\n\t * The entity storage for vertices.\n\t * @internal\n\t */\n\tprivate readonly _vertexStorage: IEntityStorageConnector<AuditableItemGraphVertex>;\n\n\t/**\n\t * The entity storage for changesets.\n\t * @internal\n\t */\n\tprivate readonly _changesetStorage: IEntityStorageConnector<AuditableItemGraphChangeset>;\n\n\t/**\n\t * The event bus component.\n\t * @internal\n\t */\n\tprivate readonly _eventBusComponent?: IEventBusComponent;\n\n\t/**\n\t * Create a new instance of AuditableItemGraphService.\n\t * @param options The dependencies for the auditable item graph connector.\n\t */\n\tconstructor(options?: IAuditableItemGraphServiceConstructorOptions) {\n\t\tthis._immutableProofComponent = ComponentFactory.get(\n\t\t\toptions?.immutableProofComponentType ?? \"immutable-proof\"\n\t\t);\n\n\t\tthis._vertexStorage = EntityStorageConnectorFactory.get(\n\t\t\toptions?.vertexEntityStorageType ?? nameofKebabCase<AuditableItemGraphVertex>()\n\t\t);\n\n\t\tthis._changesetStorage = EntityStorageConnectorFactory.get(\n\t\t\toptions?.changesetEntityStorageType ?? nameofKebabCase<AuditableItemGraphChangeset>()\n\t\t);\n\n\t\tif (Is.stringValue(options?.eventBusComponentType)) {\n\t\t\tthis._eventBusComponent = ComponentFactory.get(options.eventBusComponentType);\n\t\t}\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 AuditableItemGraphService.CLASS_NAME;\n\t}\n\n\t/**\n\t * Create a new graph vertex.\n\t * @param vertex The vertex to create.\n\t * @param vertex.annotationObject The annotation object for the vertex as JSON-LD.\n\t * @param vertex.aliases Alternative aliases that can be used to identify the vertex.\n\t * @param vertex.resources The resources attached to the vertex.\n\t * @param vertex.edges The edges connected to the vertex.\n\t * @returns The id of the new graph item.\n\t */\n\tpublic async create(vertex: {\n\t\tannotationObject?: IJsonLdNodeObject;\n\t\taliases?: {\n\t\t\tid: string;\n\t\t\taliasFormat?: string;\n\t\t\tunique?: boolean;\n\t\t\tannotationObject?: IJsonLdNodeObject;\n\t\t}[];\n\t\tresources?: {\n\t\t\tid?: string;\n\t\t\tresourceObject?: IJsonLdNodeObject;\n\t\t}[];\n\t\tedges?: {\n\t\t\ttargetId: string;\n\t\t\tedgeRelationships: string[];\n\t\t\tannotationObject?: IJsonLdNodeObject;\n\t\t}[];\n\t}): Promise<string> {\n\t\tGuards.object(AuditableItemGraphService.CLASS_NAME, nameof(vertex), vertex);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\n\t\ttry {\n\t\t\tif (Is.object(vertex.annotationObject)) {\n\t\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\t\tawait JsonLdHelper.validate(vertex.annotationObject, validationFailures);\n\t\t\t\tValidation.asValidationError(\n\t\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\t\tnameof(vertex.annotationObject),\n\t\t\t\t\tvalidationFailures\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst id = Converter.bytesToHex(RandomHelper.generate(32), false);\n\n\t\t\tconst context: IAuditableItemGraphServiceContext = {\n\t\t\t\tnow: new Date(Date.now()).toISOString(),\n\t\t\t\tcontextIds\n\t\t\t};\n\n\t\t\tconst vertexModel: AuditableItemGraphVertex = {\n\t\t\t\tid,\n\t\t\t\torganizationIdentity: contextIds?.[ContextIdKeys.Organization],\n\t\t\t\tdateCreated: context.now\n\t\t\t};\n\t\t\tconst originalEntity = ObjectHelper.clone(vertexModel);\n\n\t\t\tvertexModel.annotationObject = vertex.annotationObject;\n\n\t\t\tawait this.updateAliasList(context, vertexModel, vertex.aliases);\n\t\t\tawait this.updateResourceList(context, vertexModel, vertex.resources);\n\t\t\tawait this.updateEdgeList(context, vertexModel, vertex.edges);\n\n\t\t\tdelete originalEntity.aliasIndex;\n\t\t\tdelete originalEntity.resourceTypeIndex;\n\t\t\tawait this.addChangeset(context, originalEntity, vertexModel, true);\n\n\t\t\tawait this._vertexStorage.set({\n\t\t\t\t...vertexModel,\n\t\t\t\t...this.buildIndexes(vertexModel)\n\t\t\t});\n\n\t\t\tconst fullId = new Urn(AuditableItemGraphService.NAMESPACE, id).toString();\n\n\t\t\tawait this._eventBusComponent?.publish<IAuditableItemGraphEventBusVertexCreated>(\n\t\t\t\tAuditableItemGraphTopics.VertexCreated,\n\t\t\t\t{ id: fullId }\n\t\t\t);\n\n\t\t\treturn fullId;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemGraphService.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}\n\t}\n\n\t/**\n\t * Get a graph vertex.\n\t * @param id The id of the vertex to get.\n\t * @param options Additional options for the get operation.\n\t * @param options.includeDeleted Whether to include deleted/updated aliases, resource, edges, defaults to false.\n\t * @param options.includeChangesets Whether to include the changesets of the vertex, defaults to false.\n\t * @param options.verifySignatureDepth How many signatures to verify, defaults to \"none\".\n\t * @returns The vertex if found.\n\t * @throws NotFoundError if the vertex is not found.\n\t */\n\tpublic async get(\n\t\tid: string,\n\t\toptions?: {\n\t\t\tincludeDeleted?: boolean;\n\t\t\tincludeChangesets?: boolean;\n\t\t\tverifySignatureDepth?: VerifyDepth;\n\t\t}\n\t): Promise<IAuditableItemGraphVertex> {\n\t\tGuards.stringValue(AuditableItemGraphService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemGraphService.NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemGraphService.NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst vertexId = urnParsed.namespaceSpecific(0);\n\n\t\t\tconst vertexEntity = await this._vertexStorage.get(vertexId);\n\n\t\t\tif (Is.empty(vertexEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemGraphService.CLASS_NAME, \"vertexNotFound\", id);\n\t\t\t}\n\n\t\t\tconst vertexModel = this.vertexEntityToJsonLd(vertexEntity);\n\n\t\t\tconst includeChangesets = options?.includeChangesets ?? false;\n\t\t\tconst verifySignatureDepth = options?.verifySignatureDepth ?? \"none\";\n\n\t\t\tlet verified: boolean | undefined;\n\t\t\tlet changesets: IAuditableItemGraphChangeset[] | undefined;\n\n\t\t\tif (\n\t\t\t\tverifySignatureDepth === VerifyDepth.Current ||\n\t\t\t\tverifySignatureDepth === VerifyDepth.All ||\n\t\t\t\tincludeChangesets\n\t\t\t) {\n\t\t\t\tconst verifyResult = await this.verifyChangesets(vertexModel, verifySignatureDepth);\n\t\t\t\tverified = verifyResult.verified;\n\t\t\t\tchangesets = verifyResult.changesets;\n\t\t\t\tvertexModel[\"@context\"].push(ImmutableProofContexts.Namespace);\n\t\t\t}\n\n\t\t\tif (!(options?.includeDeleted ?? false)) {\n\t\t\t\tif (Is.arrayValue(vertexModel.aliases)) {\n\t\t\t\t\tvertexModel.aliases = vertexModel.aliases.filter(a => Is.undefined(a.dateDeleted));\n\t\t\t\t\tif (vertexModel.aliases.length === 0) {\n\t\t\t\t\t\tdelete vertexModel.aliases;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (Is.arrayValue(vertexModel.resources)) {\n\t\t\t\t\tvertexModel.resources = vertexModel.resources.filter(r => Is.undefined(r.dateDeleted));\n\t\t\t\t\tif (vertexModel.resources.length === 0) {\n\t\t\t\t\t\tdelete vertexModel.resources;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (Is.arrayValue(vertexModel.edges)) {\n\t\t\t\t\tvertexModel.edges = vertexModel.edges.filter(r => Is.undefined(r.dateDeleted));\n\t\t\t\t\tif (vertexModel.edges.length === 0) {\n\t\t\t\t\t\tdelete vertexModel.edges;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (includeChangesets) {\n\t\t\t\tvertexModel.changesets = changesets;\n\t\t\t}\n\n\t\t\tif (verifySignatureDepth !== VerifyDepth.None) {\n\t\t\t\tvertexModel.verified = verified;\n\t\t\t}\n\n\t\t\tconst result = await JsonLdProcessor.compact(vertexModel, vertexModel[\"@context\"]);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"getFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Update a graph vertex.\n\t * @param vertex The vertex to update.\n\t * @param vertex.id The id of the vertex to update.\n\t * @param vertex.annotationObject The annotation object for the vertex as JSON-LD.\n\t * @param vertex.aliases Alternative aliases that can be used to identify the vertex.\n\t * @param vertex.resources The resources attached to the vertex.\n\t * @param vertex.edges The edges connected to the vertex.\n\t * @returns Nothing.\n\t */\n\tpublic async update(vertex: {\n\t\tid: string;\n\t\tannotationObject?: IJsonLdNodeObject;\n\t\taliases?: {\n\t\t\tid: string;\n\t\t\taliasFormat?: string;\n\t\t\tannotationObject?: IJsonLdNodeObject;\n\t\t}[];\n\t\tresources?: {\n\t\t\tid?: string;\n\t\t\tresourceObject?: IJsonLdNodeObject;\n\t\t}[];\n\t\tedges?: {\n\t\t\tid?: string;\n\t\t\ttargetId: string;\n\t\t\tedgeRelationships: string[];\n\t\t\tannotationObject?: IJsonLdNodeObject;\n\t\t}[];\n\t}): Promise<void> {\n\t\tGuards.object(AuditableItemGraphService.CLASS_NAME, nameof(vertex), vertex);\n\t\tGuards.stringValue(AuditableItemGraphService.CLASS_NAME, nameof(vertex.id), vertex.id);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\n\t\tconst urnParsed = Urn.fromValidString(vertex.id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemGraphService.NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemGraphService.NAMESPACE,\n\t\t\t\tid: vertex.id\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst vertexId = urnParsed.namespaceSpecific(0);\n\t\t\tconst vertexEntity = await this._vertexStorage.get(vertexId);\n\n\t\t\tif (Is.empty(vertexEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemGraphService.CLASS_NAME, \"vertexNotFound\", vertex.id);\n\t\t\t}\n\n\t\t\tif (Is.object(vertex.annotationObject)) {\n\t\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\t\tawait JsonLdHelper.validate(vertex.annotationObject, validationFailures);\n\t\t\t\tValidation.asValidationError(\n\t\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\t\tnameof(vertex.annotationObject),\n\t\t\t\t\tvalidationFailures\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst context: IAuditableItemGraphServiceContext = {\n\t\t\t\tnow: new Date(Date.now()).toISOString(),\n\t\t\t\tcontextIds\n\t\t\t};\n\n\t\t\tdelete vertexEntity.aliasIndex;\n\t\t\tconst originalEntity = ObjectHelper.clone(vertexEntity);\n\t\t\tconst newEntity = ObjectHelper.clone(vertexEntity);\n\n\t\t\tnewEntity.annotationObject = vertex.annotationObject;\n\n\t\t\tawait this.updateAliasList(context, newEntity, vertex.aliases);\n\t\t\tawait this.updateResourceList(context, newEntity, vertex.resources);\n\t\t\tawait this.updateEdgeList(context, newEntity, vertex.edges);\n\n\t\t\tconst patches = await this.addChangeset(context, originalEntity, newEntity, false);\n\t\t\tif (patches.length > 0) {\n\t\t\t\tnewEntity.dateModified = context.now;\n\n\t\t\t\tconst indexes = this.buildIndexes(newEntity);\n\n\t\t\t\tawait this._vertexStorage.set({\n\t\t\t\t\t...newEntity,\n\t\t\t\t\t...indexes\n\t\t\t\t});\n\n\t\t\t\tawait this._eventBusComponent?.publish<IAuditableItemGraphEventBusVertexUpdated>(\n\t\t\t\t\tAuditableItemGraphTopics.VertexUpdated,\n\t\t\t\t\t{ id: vertex.id, patches }\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\t\"updatingFailed\",\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 the verifiable storage for an item.\n\t * @param id The id of the vertex to get.\n\t * @returns Nothing.\n\t * @throws NotFoundError if the vertex is not found.\n\t */\n\tpublic async removeVerifiable(id: string): Promise<void> {\n\t\tGuards.stringValue(AuditableItemGraphService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemGraphService.NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemGraphService.NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst vertexId = urnParsed.namespaceSpecific(0);\n\t\t\tconst vertexEntity = await this._vertexStorage.get(vertexId);\n\n\t\t\tif (Is.empty(vertexEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemGraphService.CLASS_NAME, \"vertexNotFound\", id);\n\t\t\t}\n\n\t\t\tlet changesetsResult;\n\t\t\tdo {\n\t\t\t\tchangesetsResult = await this._changesetStorage.query(\n\t\t\t\t\t{\n\t\t\t\t\t\tproperty: \"vertexId\",\n\t\t\t\t\t\tvalue: vertexId,\n\t\t\t\t\t\tcomparison: ComparisonOperator.Equals\n\t\t\t\t\t},\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tproperty: \"dateCreated\",\n\t\t\t\t\t\t\tsortDirection: SortDirection.Ascending\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\tundefined,\n\t\t\t\t\tchangesetsResult?.cursor\n\t\t\t\t);\n\n\t\t\t\tfor (const changeset of changesetsResult.entities) {\n\t\t\t\t\tif (Is.stringValue(changeset.proofId)) {\n\t\t\t\t\t\tawait this._immutableProofComponent.removeVerifiable(changeset.proofId);\n\t\t\t\t\t\tdelete changeset.proofId;\n\t\t\t\t\t\tawait this._changesetStorage.set(changeset as AuditableItemGraphChangeset);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} while (Is.stringValue(changesetsResult.cursor));\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\t\"removeVerifiableFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Query the graph for vertices.\n\t * @param options The query options.\n\t * @param options.id The optional id to look for.\n\t * @param options.idMode Look in id, alias or both, defaults to both.\n\t * @param options.idExact Find only exact matches, default to false meaning partial matching.\n\t * @param options.includesResourceTypes Include vertices with specific resource types.\n\t * @param conditions Conditions to use in the query.\n\t * @param orderBy The order for the results, defaults to created.\n\t * @param orderByDirection The direction for the order, defaults to desc.\n\t * @param properties The properties to return, if not provided defaults to id, created, aliases and object.\n\t * @param cursor The cursor to request the next chunk of entities.\n\t * @param limit Limit the number of entities to return.\n\t * @returns The entities, which can be partial if a limited keys list was provided.\n\t */\n\tpublic async query(\n\t\toptions?: {\n\t\t\tid?: string;\n\t\t\tidMode?: \"id\" | \"alias\" | \"both\";\n\t\t\tidExact?: boolean;\n\t\t\tincludesResourceTypes?: string[];\n\t\t},\n\t\tconditions?: IComparator[],\n\t\torderBy?: keyof Pick<IAuditableItemGraphVertex, \"dateCreated\" | \"dateModified\">,\n\t\torderByDirection?: SortDirection,\n\t\tproperties?: (keyof IAuditableItemGraphVertex)[],\n\t\tcursor?: string,\n\t\tlimit?: number\n\t): Promise<IAuditableItemGraphVertexList> {\n\t\ttry {\n\t\t\tconst propertiesToReturn: (keyof IAuditableItemGraphVertex)[] = properties ?? [\n\t\t\t\t\"id\",\n\t\t\t\t\"dateCreated\",\n\t\t\t\t\"dateModified\",\n\t\t\t\t\"aliases\",\n\t\t\t\t\"annotationObject\"\n\t\t\t];\n\t\t\tconst combinedConditions = conditions ?? [];\n\t\t\tconst orderProperty = orderBy ?? \"dateCreated\";\n\t\t\tconst orderDirection = orderByDirection ?? SortDirection.Descending;\n\t\t\tconst idExact = options?.idExact ?? false;\n\n\t\t\tconst idOrAlias = options?.id;\n\t\t\tif (Is.stringValue(idOrAlias)) {\n\t\t\t\tconst idMode = options?.idMode ?? \"both\";\n\t\t\t\tif (idMode === \"id\" || idMode === \"both\") {\n\t\t\t\t\tcombinedConditions.push({\n\t\t\t\t\t\tproperty: \"id\",\n\t\t\t\t\t\tcomparison: idExact ? ComparisonOperator.Equals : ComparisonOperator.Includes,\n\t\t\t\t\t\tvalue: idOrAlias\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (idMode === \"alias\" || idMode === \"both\") {\n\t\t\t\t\tcombinedConditions.push({\n\t\t\t\t\t\tproperty: \"aliasIndex\",\n\t\t\t\t\t\tcomparison: ComparisonOperator.Includes,\n\t\t\t\t\t\tvalue: idExact ? `||${idOrAlias.toLowerCase()}||` : idOrAlias.toLowerCase()\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (Is.arrayValue(options?.includesResourceTypes)) {\n\t\t\t\tfor (const resourceType of options.includesResourceTypes) {\n\t\t\t\t\tcombinedConditions.push({\n\t\t\t\t\t\tproperty: \"resourceTypeIndex\",\n\t\t\t\t\t\tcomparison: ComparisonOperator.Includes,\n\t\t\t\t\t\tvalue: `||${resourceType.toLowerCase()}||`\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!propertiesToReturn.includes(\"id\")) {\n\t\t\t\tpropertiesToReturn.unshift(\"id\");\n\t\t\t}\n\n\t\t\tconst results = await this._vertexStorage.query(\n\t\t\t\tcombinedConditions.length > 0\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tconditions: combinedConditions,\n\t\t\t\t\t\t\tlogicalOperator: LogicalOperator.Or\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tproperty: orderProperty,\n\t\t\t\t\t\tsortDirection: orderDirection\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tpropertiesToReturn as (keyof AuditableItemGraphVertex)[],\n\t\t\t\tcursor,\n\t\t\t\tlimit\n\t\t\t);\n\n\t\t\tconst models: IAuditableItemGraphVertex[] = results.entities.map(e =>\n\t\t\t\tthis.vertexEntityToJsonLd(e as AuditableItemGraphVertex)\n\t\t\t);\n\n\t\t\tconst vertexList: IAuditableItemGraphVertexList = {\n\t\t\t\t\"@context\": [\n\t\t\t\t\tSchemaOrgContexts.Namespace,\n\t\t\t\t\tAuditableItemGraphContexts.Namespace,\n\t\t\t\t\tAuditableItemGraphContexts.NamespaceCommon\n\t\t\t\t],\n\t\t\t\ttype: [SchemaOrgTypes.ItemList, AuditableItemGraphTypes.VertexList],\n\t\t\t\t[SchemaOrgTypes.ItemListElement]: models,\n\t\t\t\t[SchemaOrgTypes.NextItem]: results.cursor\n\t\t\t};\n\n\t\t\tconst result = await JsonLdProcessor.compact(vertexList, vertexList[\"@context\"]);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\t\"queryingFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Map the vertex entity to JSON-LD.\n\t * @param vertexEntity The vertex entity.\n\t * @returns The model.\n\t * @internal\n\t */\n\tprivate vertexEntityToJsonLd(vertexEntity: AuditableItemGraphVertex): IAuditableItemGraphVertex {\n\t\tconst model: IAuditableItemGraphVertex = {\n\t\t\t\"@context\": [\n\t\t\t\tAuditableItemGraphContexts.Namespace,\n\t\t\t\tAuditableItemGraphContexts.NamespaceCommon,\n\t\t\t\tSchemaOrgContexts.Namespace\n\t\t\t],\n\t\t\ttype: AuditableItemGraphTypes.Vertex,\n\t\t\tid: new Urn(AuditableItemGraphService.NAMESPACE, vertexEntity.id).toString(),\n\t\t\tdateCreated: vertexEntity.dateCreated,\n\t\t\tdateModified: vertexEntity.dateModified,\n\t\t\torganizationIdentity: vertexEntity.organizationIdentity,\n\t\t\tannotationObject: vertexEntity.annotationObject\n\t\t};\n\n\t\tif (Is.arrayValue(vertexEntity.aliases)) {\n\t\t\tmodel.aliases ??= [];\n\t\t\tfor (const aliasEntity of vertexEntity.aliases) {\n\t\t\t\tconst aliasModel: IAuditableItemGraphAlias = {\n\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\tAuditableItemGraphContexts.Namespace,\n\t\t\t\t\t\tAuditableItemGraphContexts.NamespaceCommon,\n\t\t\t\t\t\tSchemaOrgContexts.Namespace\n\t\t\t\t\t],\n\t\t\t\t\ttype: AuditableItemGraphTypes.Alias,\n\t\t\t\t\tid: aliasEntity.id,\n\t\t\t\t\taliasFormat: aliasEntity.aliasFormat,\n\t\t\t\t\tdateCreated: aliasEntity.dateCreated,\n\t\t\t\t\tdateModified: aliasEntity.dateModified,\n\t\t\t\t\tdateDeleted: aliasEntity.dateDeleted,\n\t\t\t\t\tannotationObject: aliasEntity.annotationObject\n\t\t\t\t};\n\t\t\t\tmodel.aliases.push(aliasModel);\n\t\t\t}\n\t\t}\n\n\t\tif (Is.arrayValue(vertexEntity.resources)) {\n\t\t\tmodel.resources ??= [];\n\t\t\tfor (const resourceEntity of vertexEntity.resources) {\n\t\t\t\tconst resourceModel: IAuditableItemGraphResource = {\n\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\tAuditableItemGraphContexts.Namespace,\n\t\t\t\t\t\tAuditableItemGraphContexts.NamespaceCommon,\n\t\t\t\t\t\tSchemaOrgContexts.Namespace\n\t\t\t\t\t],\n\t\t\t\t\ttype: AuditableItemGraphTypes.Resource,\n\t\t\t\t\tid: resourceEntity.id,\n\t\t\t\t\tdateCreated: resourceEntity.dateCreated,\n\t\t\t\t\tdateModified: resourceEntity.dateModified,\n\t\t\t\t\tdateDeleted: resourceEntity.dateDeleted,\n\t\t\t\t\tresourceObject: resourceEntity.resourceObject\n\t\t\t\t};\n\t\t\t\tmodel.resources.push(resourceModel);\n\t\t\t}\n\t\t}\n\n\t\tif (Is.arrayValue(vertexEntity.edges)) {\n\t\t\tmodel.edges ??= [];\n\t\t\tfor (const edgeEntity of vertexEntity.edges) {\n\t\t\t\tconst edgeModel: IAuditableItemGraphEdge = {\n\t\t\t\t\t\"@context\": [\n\t\t\t\t\t\tAuditableItemGraphContexts.Namespace,\n\t\t\t\t\t\tAuditableItemGraphContexts.NamespaceCommon,\n\t\t\t\t\t\tSchemaOrgContexts.Namespace\n\t\t\t\t\t],\n\t\t\t\t\ttype: AuditableItemGraphTypes.Edge,\n\t\t\t\t\tid: this.fullEdgeId(vertexEntity.id, edgeEntity.id),\n\t\t\t\t\ttargetId: edgeEntity.targetId,\n\t\t\t\t\tdateCreated: edgeEntity.dateCreated,\n\t\t\t\t\tdateModified: edgeEntity.dateModified,\n\t\t\t\t\tdateDeleted: edgeEntity.dateDeleted,\n\t\t\t\t\tedgeRelationships: edgeEntity.edgeRelationships,\n\t\t\t\t\tannotationObject: edgeEntity.annotationObject\n\t\t\t\t};\n\t\t\t\tmodel.edges.push(edgeModel);\n\t\t\t}\n\t\t}\n\n\t\treturn model;\n\t}\n\n\t/**\n\t * Map the changeset entity to a JSON-LD.\n\t * @param vertexId The id of the vertex the changeset belongs to.\n\t * @param changesetEntity The changeset entity.\n\t * @returns The model.\n\t * @internal\n\t */\n\tprivate changesetEntityToJsonLd(\n\t\tvertexId: string,\n\t\tchangesetEntity: AuditableItemGraphChangeset\n\t): IAuditableItemGraphChangeset {\n\t\tconst model: IAuditableItemGraphChangeset = {\n\t\t\t\"@context\": [\n\t\t\t\tAuditableItemGraphContexts.Namespace,\n\t\t\t\tAuditableItemGraphContexts.NamespaceCommon,\n\t\t\t\tSchemaOrgContexts.Namespace\n\t\t\t],\n\t\t\ttype: AuditableItemGraphTypes.Changeset,\n\t\t\tid: new Urn(AuditableItemGraphService.NAMESPACE, [\n\t\t\t\tvertexId,\n\t\t\t\tAuditableItemGraphService.NAMESPACE_CHANGESET,\n\t\t\t\tchangesetEntity.id\n\t\t\t]).toString(),\n\t\t\tdateCreated: changesetEntity.dateCreated,\n\t\t\tuserIdentity: changesetEntity.userIdentity,\n\t\t\tpatches: changesetEntity.patches.map(p => ({\n\t\t\t\t\"@context\": [\n\t\t\t\t\tAuditableItemGraphContexts.Namespace,\n\t\t\t\t\tAuditableItemGraphContexts.NamespaceCommon,\n\t\t\t\t\tSchemaOrgContexts.Namespace\n\t\t\t\t],\n\t\t\t\ttype: AuditableItemGraphTypes.PatchOperation,\n\t\t\t\tpatchOperation: p.op,\n\t\t\t\tpatchPath: p.path,\n\t\t\t\tpatchFrom: p.from,\n\t\t\t\tpatchValue: p.value\n\t\t\t})),\n\t\t\tproofId: changesetEntity.proofId\n\t\t};\n\n\t\treturn model;\n\t}\n\n\t/**\n\t * Update the aliases of a vertex model.\n\t * @param context The context for the operation.\n\t * @param vertex The vertex.\n\t * @param aliases The aliases to update.\n\t * @internal\n\t */\n\tprivate async updateAliasList(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\tvertex: AuditableItemGraphVertex,\n\t\taliases?: {\n\t\t\tid: string;\n\t\t\taliasFormat?: string;\n\t\t\tannotationObject?: IJsonLdNodeObject;\n\t\t}[]\n\t): Promise<void> {\n\t\tconst active = vertex.aliases?.filter(a => Is.empty(a.dateDeleted)) ?? [];\n\n\t\t// The active aliases that are not in the update list should be marked as deleted.\n\t\tif (Is.arrayValue(active)) {\n\t\t\tfor (const alias of active) {\n\t\t\t\tif (!aliases?.find(a => a.id === alias.id)) {\n\t\t\t\t\talias.dateDeleted = context.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Is.arrayValue(aliases)) {\n\t\t\tfor (const alias of aliases) {\n\t\t\t\tawait this.updateAlias(context, vertex, alias);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Update an alias in the vertex.\n\t * @param context The context for the operation.\n\t * @param vertex The vertex.\n\t * @param alias The alias.\n\t * @internal\n\t */\n\tprivate async updateAlias(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\tvertex: AuditableItemGraphVertex,\n\t\talias: {\n\t\t\tid: string;\n\t\t\taliasFormat?: string;\n\t\t\tunique?: boolean;\n\t\t\tannotationObject?: IJsonLdNodeObject;\n\t\t}\n\t): Promise<void> {\n\t\tGuards.object(AuditableItemGraphService.CLASS_NAME, nameof(alias), alias);\n\t\tGuards.stringValue(AuditableItemGraphService.CLASS_NAME, nameof(alias.id), alias.id);\n\n\t\tif (alias.unique ?? false) {\n\t\t\tconst existingVertices = await this.findMatchingVertices(context, vertex.id, alias.id);\n\t\t\tif (existingVertices) {\n\t\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"aliasNotUnique\", {\n\t\t\t\t\taliasId: alias.id\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (Is.object(alias.annotationObject)) {\n\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\tawait JsonLdHelper.validate(alias.annotationObject, validationFailures);\n\t\t\tValidation.asValidationError(\n\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\tnameof(alias.annotationObject),\n\t\t\t\tvalidationFailures\n\t\t\t);\n\t\t}\n\n\t\t// Try to find an existing alias with the same id.\n\t\tconst existing = vertex.aliases?.find(a => a.id === alias.id);\n\n\t\tif (Is.empty(existing) || !Is.empty(existing?.dateDeleted)) {\n\t\t\t// Did not find a matching item, or found one which is deleted.\n\t\t\tvertex.aliases ??= [];\n\n\t\t\tconst model: AuditableItemGraphAlias = {\n\t\t\t\tid: alias.id,\n\t\t\t\taliasFormat: alias.aliasFormat,\n\t\t\t\tdateCreated: context.now,\n\t\t\t\tannotationObject: alias.annotationObject\n\t\t\t};\n\n\t\t\tvertex.aliases.push(model);\n\t\t} else if (\n\t\t\texisting.aliasFormat !== alias.aliasFormat ||\n\t\t\t!ObjectHelper.equal(existing.annotationObject, alias.annotationObject, false)\n\t\t) {\n\t\t\t// Existing alias found, update the annotationObject.\n\t\t\texisting.dateModified = context.now;\n\t\t\texisting.aliasFormat = alias.aliasFormat;\n\t\t\texisting.annotationObject = alias.annotationObject;\n\t\t}\n\t}\n\n\t/**\n\t * Update the resources of a vertex.\n\t * @param context The context for the operation.\n\t * @param vertex The vertex.\n\t * @param resources The resources to update.\n\t * @internal\n\t */\n\tprivate async updateResourceList(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\tvertex: AuditableItemGraphVertex,\n\t\tresources?: {\n\t\t\tid?: string;\n\t\t\tresourceObject?: IJsonLdNodeObject;\n\t\t}[]\n\t): Promise<void> {\n\t\tif (Is.arrayValue(resources)) {\n\t\t\tfor (let i = 0; i < resources.length; i++) {\n\t\t\t\tconst id = this.getResourceId(resources[i]);\n\t\t\t\tif (Is.empty(id)) {\n\t\t\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"resourceIdMissing\", {\n\t\t\t\t\t\tindex: i\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst active = vertex.resources?.filter(r => Is.empty(r.dateDeleted)) ?? [];\n\n\t\t// The active resources that are not in the update list should be marked as deleted.\n\t\tif (Is.arrayValue(active)) {\n\t\t\tfor (const resource of active) {\n\t\t\t\tif (!resources?.find(a => this.getResourceId(a) === this.getResourceId(resource))) {\n\t\t\t\t\tresource.dateDeleted = context.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Is.arrayValue(resources)) {\n\t\t\tfor (const resource of resources) {\n\t\t\t\tawait this.updateResource(context, vertex, resource);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Add a resource to the vertex.\n\t * @param context The context for the operation.\n\t * @param vertex The vertex.\n\t * @param resource The resource.\n\t * @internal\n\t */\n\tprivate async updateResource(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\tvertex: AuditableItemGraphVertex,\n\t\tresource: {\n\t\t\tid?: string;\n\t\t\tresourceObject?: IJsonLdNodeObject;\n\t\t}\n\t): Promise<void> {\n\t\tGuards.object(AuditableItemGraphService.CLASS_NAME, nameof(resource), resource);\n\n\t\tif (Is.object(resource.resourceObject)) {\n\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\tawait JsonLdHelper.validate(resource.resourceObject, validationFailures);\n\t\t\tValidation.asValidationError(\n\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\tnameof(resource.resourceObject),\n\t\t\t\tvalidationFailures\n\t\t\t);\n\t\t}\n\n\t\t// Try to find an existing resource with the same id.\n\t\tconst existing = vertex.resources?.find(\n\t\t\tr => this.getResourceId(r) === this.getResourceId(resource)\n\t\t);\n\n\t\tif (Is.empty(existing) || !Is.empty(existing?.dateDeleted)) {\n\t\t\t// Did not find a matching item, or found one which is deleted.\n\t\t\tvertex.resources ??= [];\n\n\t\t\tconst model: AuditableItemGraphResource = {\n\t\t\t\tid: resource.id,\n\t\t\t\tdateCreated: context.now,\n\t\t\t\tresourceObject: resource.resourceObject\n\t\t\t};\n\n\t\t\tvertex.resources.push(model);\n\t\t} else if (!ObjectHelper.equal(existing.resourceObject, resource.resourceObject, false)) {\n\t\t\t// Existing resource found, update the resourceObject.\n\t\t\texisting.dateModified = context.now;\n\t\t\texisting.resourceObject = resource.resourceObject;\n\t\t}\n\t}\n\n\t/**\n\t * Update the edges of a vertex.\n\t * @param context The context for the operation.\n\t * @param vertex The vertex.\n\t * @param edges The edges to update.\n\t * @internal\n\t */\n\tprivate async updateEdgeList(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\tvertex: AuditableItemGraphVertex,\n\t\tedges?: {\n\t\t\tid?: string;\n\t\t\ttargetId: string;\n\t\t\tedgeRelationships: string[];\n\t\t\tannotationObject?: IJsonLdNodeObject;\n\t\t}[]\n\t): Promise<void> {\n\t\tconst active = vertex.edges?.filter(e => Is.empty(e.dateDeleted)) ?? [];\n\n\t\t// The active edges that are not in the update list should be marked as deleted.\n\t\tif (Is.arrayValue(active)) {\n\t\t\tfor (const edge of active) {\n\t\t\t\tif (!edges?.find(e => Is.stringValue(e.id) && this.reduceEdgeId(e.id) === edge.id)) {\n\t\t\t\t\tedge.dateDeleted = context.now;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Is.arrayValue(edges)) {\n\t\t\tfor (const edge of edges) {\n\t\t\t\tawait this.updateEdge(context, vertex, edge);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Add an edge to the vertex.\n\t * @param context The context for the operation.\n\t * @param vertex The vertex.\n\t * @param edge The edge.\n\t * @internal\n\t */\n\tprivate async updateEdge(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\tvertex: AuditableItemGraphVertex,\n\t\tedge: {\n\t\t\tid?: string;\n\t\t\ttargetId: string;\n\t\t\tedgeRelationships: string[];\n\t\t\tannotationObject?: IJsonLdNodeObject;\n\t\t}\n\t): Promise<void> {\n\t\tGuards.object(AuditableItemGraphService.CLASS_NAME, nameof(edge), edge);\n\t\tGuards.stringValue(AuditableItemGraphService.CLASS_NAME, nameof(edge.targetId), edge.targetId);\n\t\tGuards.arrayValue(\n\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\tnameof(edge.edgeRelationships),\n\t\t\tedge.edgeRelationships\n\t\t);\n\n\t\tconst validationFailures: IValidationFailure[] = [];\n\t\tif (edge.targetId === vertex.id) {\n\t\t\tvalidationFailures.push({\n\t\t\t\tproperty: \"id\",\n\t\t\t\treason: `validation.${StringHelper.camelCase(AuditableItemGraphService.CLASS_NAME)}.edgeIdSameAsVertexId`,\n\t\t\t\tproperties: {\n\t\t\t\t\ttargetId: edge.targetId\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (Is.object(edge.annotationObject)) {\n\t\t\tawait JsonLdHelper.validate(edge.annotationObject, validationFailures);\n\t\t}\n\t\tValidation.asValidationError(\n\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\tnameof(edge.annotationObject),\n\t\t\tvalidationFailures\n\t\t);\n\n\t\tlet findId = Is.stringValue(edge.id) ? this.reduceEdgeId(edge.id) : undefined;\n\t\tif (Is.empty(findId)) {\n\t\t\tfindId = Converter.bytesToHex(RandomHelper.generate(32), false);\n\t\t}\n\n\t\t// Try to find an existing edge with the same id.\n\t\tconst existing = vertex.edges?.find(r => r.id === findId);\n\n\t\tif (Is.empty(existing) || !Is.empty(existing?.dateDeleted)) {\n\t\t\t// Did not find a matching item, or found one which is deleted.\n\t\t\tvertex.edges ??= [];\n\n\t\t\tconst model: AuditableItemGraphEdge = {\n\t\t\t\tid: findId,\n\t\t\t\ttargetId: edge.targetId,\n\t\t\t\tdateCreated: context.now,\n\t\t\t\tannotationObject: edge.annotationObject,\n\t\t\t\tedgeRelationships: edge.edgeRelationships\n\t\t\t};\n\n\t\t\tvertex.edges.push(model);\n\t\t} else if (\n\t\t\texisting.targetId !== edge.targetId ||\n\t\t\t!ArrayHelper.matches(existing.edgeRelationships, edge.edgeRelationships) ||\n\t\t\t!ObjectHelper.equal(existing.annotationObject, edge.annotationObject, false)\n\t\t) {\n\t\t\t// Existing edge found, update the properties.\n\t\t\texisting.targetId = edge.targetId;\n\t\t\texisting.dateModified = context.now;\n\t\t\texisting.edgeRelationships = edge.edgeRelationships;\n\t\t\texisting.annotationObject = edge.annotationObject;\n\t\t}\n\t}\n\n\t/**\n\t * Add a changeset to the vertex and generate the associated verifications.\n\t * @param context The context for the operation.\n\t * @param original The original vertex.\n\t * @param updated The updated vertex.\n\t * @param isNew Whether this is a new item.\n\t * @returns True if there were changes.\n\t * @internal\n\t */\n\tprivate async addChangeset(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\toriginal: AuditableItemGraphVertex,\n\t\tupdated: AuditableItemGraphVertex,\n\t\tisNew: boolean\n\t): Promise<IPatchOperation[]> {\n\t\tconst patches = JsonHelper.diff(original, updated);\n\n\t\t// If there is a diff set or this is the first time the item is created.\n\t\tif (patches.length > 0 || isNew) {\n\t\t\tconst changesetEntity: AuditableItemGraphChangeset = {\n\t\t\t\tid: Converter.bytesToHex(RandomHelper.generate(32), false),\n\t\t\t\tvertexId: updated.id,\n\t\t\t\tdateCreated: context.now,\n\t\t\t\tuserIdentity: context.contextIds?.[ContextIdKeys.User],\n\t\t\t\tpatches\n\t\t\t};\n\n\t\t\t// Create the JSON-LD object we want to use for the proof\n\t\t\t// this is a subset of fixed properties from the changeset object.\n\t\t\tconst reducedChangesetJsonLd = this.changesetEntityToJsonLd(\n\t\t\t\toriginal.id,\n\t\t\t\tObjectHelper.pick(\n\t\t\t\t\tchangesetEntity,\n\t\t\t\t\tAuditableItemGraphService._PROOF_KEYS_CHANGESET\n\t\t\t\t) as AuditableItemGraphChangeset\n\t\t\t);\n\n\t\t\t// Create the proof for the changeset object\n\t\t\tchangesetEntity.proofId = await this._immutableProofComponent.create(\n\t\t\t\treducedChangesetJsonLd as unknown as IJsonLdNodeObject\n\t\t\t);\n\n\t\t\t// Link the verifiable storage id to the changeset\n\t\t\tawait this._changesetStorage.set(changesetEntity);\n\n\t\t\treturn patches;\n\t\t}\n\n\t\treturn [];\n\t}\n\n\t/**\n\t * Verify the changesets of a vertex.\n\t * @param vertex The vertex to verify.\n\t * @param verifySignatureDepth How many signatures to verify.\n\t * @param contextIds The context ids to perform the operation with.\n\t * @internal\n\t */\n\tprivate async verifyChangesets(\n\t\tvertex: IAuditableItemGraphVertex,\n\t\tverifySignatureDepth: VerifyDepth,\n\t\tpartitionKey?: string\n\t): Promise<{\n\t\tverified: boolean;\n\t\tchangesets: IAuditableItemGraphChangeset[];\n\t}> {\n\t\tconst changesets: IAuditableItemGraphChangeset[] = [];\n\n\t\tlet changesetsResult;\n\t\tlet verified = true;\n\n\t\tconst vertexId = Urn.fromValidString(vertex.id);\n\n\t\tdo {\n\t\t\tchangesetsResult = await this._changesetStorage.query(\n\t\t\t\t{\n\t\t\t\t\tproperty: \"vertexId\",\n\t\t\t\t\tvalue: vertexId.namespaceSpecific(),\n\t\t\t\t\tcomparison: ComparisonOperator.Equals\n\t\t\t\t},\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tproperty: \"dateCreated\",\n\t\t\t\t\t\tsortDirection: SortDirection.Ascending\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tundefined,\n\t\t\t\tchangesetsResult?.cursor\n\t\t\t);\n\n\t\t\tconst storedChangesets = changesetsResult.entities as AuditableItemGraphChangeset[];\n\t\t\tif (Is.arrayValue(storedChangesets)) {\n\t\t\t\tfor (let i = 0; i < storedChangesets.length; i++) {\n\t\t\t\t\tconst storedChangeset = storedChangesets[i];\n\n\t\t\t\t\tconst storedChangesetJsonLd = this.changesetEntityToJsonLd(\n\t\t\t\t\t\tvertexId.namespaceSpecific(),\n\t\t\t\t\t\tstoredChangeset\n\t\t\t\t\t);\n\t\t\t\t\tchangesets.push(storedChangesetJsonLd);\n\n\t\t\t\t\t// If we are verifying all signatures\n\t\t\t\t\t// or this is the last changeset (cursor is empty)\n\t\t\t\t\t// and the changeset has a proofId, then verify the proof.\n\t\t\t\t\tif (\n\t\t\t\t\t\tverifySignatureDepth === VerifyDepth.All ||\n\t\t\t\t\t\t(verifySignatureDepth === VerifyDepth.Current &&\n\t\t\t\t\t\t\t!Is.stringValue(changesetsResult.cursor) &&\n\t\t\t\t\t\t\ti === storedChangesets.length - 1)\n\t\t\t\t\t) {\n\t\t\t\t\t\tif (!Is.stringValue(storedChangeset.proofId)) {\n\t\t\t\t\t\t\tverified = false;\n\t\t\t\t\t\t\tstoredChangesetJsonLd.verification = {\n\t\t\t\t\t\t\t\t\"@context\": ImmutableProofContexts.Namespace,\n\t\t\t\t\t\t\t\ttype: ImmutableProofTypes.ImmutableProofVerification,\n\t\t\t\t\t\t\t\tverified: false,\n\t\t\t\t\t\t\t\tfailure: ImmutableProofFailure.ProofMissing\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Verify the proof for the changeset object\n\t\t\t\t\t\t\tstoredChangesetJsonLd.verification = await this._immutableProofComponent.verify(\n\t\t\t\t\t\t\t\tstoredChangeset.proofId\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif (!storedChangesetJsonLd.verification.verified) {\n\t\t\t\t\t\t\t\tverified = false;\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} while (Is.stringValue(changesetsResult.cursor));\n\n\t\treturn {\n\t\t\tverified,\n\t\t\tchangesets\n\t\t};\n\t}\n\n\t/**\n\t * Get the resource id from a resource object.\n\t * @param resource The resource.\n\t * @param resource.id The id of the resource.\n\t * @param resource.resourceObject The resource object.\n\t * @returns The resource id if it can find one.\n\t */\n\tprivate getResourceId(resource: {\n\t\tid?: string;\n\t\tresourceObject?: IJsonLdNodeObject;\n\t}): string | undefined {\n\t\treturn (\n\t\t\tresource.id ??\n\t\t\tObjectHelper.extractProperty<string>(resource.resourceObject, [\"id\", \"@id\"], false)\n\t\t);\n\t}\n\n\t/**\n\t * Build the indexes for the vertex.\n\t * @param vertex The vertex to build the indexes for.\n\t * @returns The indexes.\n\t * @internal\n\t */\n\tprivate buildIndexes(vertex: AuditableItemGraphVertex): {\n\t\taliasIndex?: string;\n\t\tresourceTypeIndex?: string;\n\t} {\n\t\tconst aliasIndex = vertex.aliases\n\t\t\t?.filter(a => Is.empty(a.dateDeleted))\n\t\t\t.map(a => a.id)\n\t\t\t.join(\"||\")\n\t\t\t.toLowerCase();\n\n\t\tconst resourceTypes: string[] = [];\n\t\tif (Is.arrayValue(vertex.resources)) {\n\t\t\tfor (const resource of vertex.resources) {\n\t\t\t\tconst resourceType = ObjectHelper.extractProperty<string>(\n\t\t\t\t\tresource.resourceObject,\n\t\t\t\t\t[\"@type\", \"type\"],\n\t\t\t\t\tfalse\n\t\t\t\t);\n\n\t\t\t\tif (Is.stringValue(resourceType) && !resourceTypes.includes(resourceType)) {\n\t\t\t\t\tresourceTypes.push(resourceType);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst resourceTypeIndex = resourceTypes.join(\"||\").toLowerCase();\n\n\t\treturn {\n\t\t\taliasIndex: Is.stringValue(aliasIndex) ? `||${aliasIndex}||` : undefined,\n\t\t\tresourceTypeIndex: Is.stringValue(resourceTypeIndex) ? `||${resourceTypeIndex}||` : undefined\n\t\t};\n\t}\n\n\t/**\n\t * Find vertices with matching aliases.\n\t * @param context The context for the operation.\n\t * @param vertexId The id of the vertex to exclude from the search.\n\t * @param aliasId The alias id to try and find.\n\t * @returns True if any other vertices have matching aliases.\n\t * @internal\n\t */\n\tprivate async findMatchingVertices(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\tvertexId: string,\n\t\taliasId: string\n\t): Promise<boolean> {\n\t\tconst results = await this._vertexStorage.query({\n\t\t\tconditions: [\n\t\t\t\t{\n\t\t\t\t\tproperty: \"aliasIndex\",\n\t\t\t\t\tcomparison: ComparisonOperator.Includes,\n\t\t\t\t\tvalue: `||${aliasId.toLowerCase()}||`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tproperty: \"id\",\n\t\t\t\t\tvalue: vertexId,\n\t\t\t\t\tcomparison: ComparisonOperator.NotEquals\n\t\t\t\t}\n\t\t\t],\n\t\t\tlogicalOperator: LogicalOperator.And\n\t\t});\n\n\t\treturn results.entities.length > 0;\n\t}\n\n\t/**\n\t * Reduce the edge ID from a URN.\n\t * @param urn The URN to reduce.\n\t * @returns The edge ID.\n\t * @throws GeneralError if the URN is not valid or not an edge URN.\n\t * @internal\n\t */\n\tprivate reduceEdgeId(urn: string): string {\n\t\tconst urnParsed = Urn.fromValidString(urn);\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemGraphService.NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemGraphService.NAMESPACE,\n\t\t\t\tid: urn\n\t\t\t});\n\t\t}\n\t\tif (urnParsed.namespaceSpecificParts().length !== 3) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"invalidEdgeId\", {\n\t\t\t\tedgeId: urn\n\t\t\t});\n\t\t}\n\t\tif (urnParsed.namespaceSpecificParts()[1] !== AuditableItemGraphService.NAMESPACE_EDGE) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"invalidEdgeId\", {\n\t\t\t\tedgeId: urn\n\t\t\t});\n\t\t}\n\t\treturn urnParsed.namespaceSpecificParts()[2];\n\t}\n\n\t/**\n\t * Create a full edge ID URN from a vertex ID and edge ID.\n\t * @param vertexId The vertex id the edge belongs to.\n\t * @param edgeId The edge id.\n\t * @returns The full edge ID URN.\n\t * @internal\n\t */\n\tprivate fullEdgeId(vertexId: string, edgeId: string): string {\n\t\treturn new Urn(AuditableItemGraphService.NAMESPACE, [\n\t\t\tvertexId,\n\t\t\tAuditableItemGraphService.NAMESPACE_EDGE,\n\t\t\tedgeId\n\t\t]).toString();\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"auditableItemGraphService.js","sourceRoot":"","sources":["../../src/auditableItemGraphService.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tAuditableItemGraphContexts,\n\tAuditableItemGraphDataTypes,\n\tAuditableItemGraphMetricIds,\n\tAuditableItemGraphMetrics,\n\tAuditableItemGraphTopics,\n\tAuditableItemGraphTypes,\n\tVerifyDepth,\n\ttype IAuditableItemGraphAlias,\n\ttype IAuditableItemGraphChangeset,\n\ttype IAuditableItemGraphChangesetList,\n\ttype IAuditableItemGraphComponent,\n\ttype IAuditableItemGraphEdge,\n\ttype IAuditableItemGraphEventBusVertexCreated,\n\ttype IAuditableItemGraphEventBusVertexUpdated,\n\ttype IAuditableItemGraphListPatch,\n\ttype IAuditableItemGraphPartialVertex,\n\ttype IAuditableItemGraphResource,\n\ttype IAuditableItemGraphVertex,\n\ttype IAuditableItemGraphVertexList,\n\ttype IAuditableItemGraphVertexVersionList\n} from \"@twin.org/auditable-item-graph-models\";\nimport { ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport {\n\tArrayHelper,\n\tCoerce,\n\tComponentFactory,\n\tGeneralError,\n\tGuards,\n\tIs,\n\tJsonHelper,\n\tMutex,\n\tNotFoundError,\n\tObjectHelper,\n\tRandomHelper,\n\tStringHelper,\n\tUrn,\n\tValidation,\n\ttype IPatchOperation,\n\ttype IValidationFailure\n} from \"@twin.org/core\";\nimport { DataTypeHelper } from \"@twin.org/data-core\";\nimport {\n\tJsonLdDataTypes,\n\tJsonLdHelper,\n\tJsonLdProcessor,\n\ttype IJsonLdNodeObject\n} from \"@twin.org/data-json-ld\";\nimport {\n\tComparisonOperator,\n\tLogicalOperator,\n\tSortDirection,\n\ttype IComparator\n} from \"@twin.org/entity\";\nimport {\n\tEntityStorageConnectorFactory,\n\ttype IEntityStorageConnector\n} from \"@twin.org/entity-storage-models\";\nimport type { IEventBusComponent } from \"@twin.org/event-bus-models\";\nimport {\n\tImmutableProofContexts,\n\tImmutableProofFailure,\n\tImmutableProofTypes,\n\ttype IImmutableProofComponent,\n\ttype IImmutableProofVerification\n} from \"@twin.org/immutable-proof-models\";\nimport { nameof, nameofKebabCase } from \"@twin.org/nameof\";\nimport {\n\tSchemaOrgContexts,\n\tSchemaOrgDataTypes,\n\tSchemaOrgTypes\n} from \"@twin.org/standards-schema-org\";\nimport { MetricHelper, type ITelemetryComponent } from \"@twin.org/telemetry-models\";\nimport type { AuditableItemGraphAlias } from \"./entities/auditableItemGraphAlias.js\";\nimport type { AuditableItemGraphChangeset } from \"./entities/auditableItemGraphChangeset.js\";\nimport type { AuditableItemGraphEdge } from \"./entities/auditableItemGraphEdge.js\";\nimport type { AuditableItemGraphResource } from \"./entities/auditableItemGraphResource.js\";\nimport type { AuditableItemGraphVertex } from \"./entities/auditableItemGraphVertex.js\";\nimport type { IAuditableItemGraphServiceConstructorOptions } from \"./models/IAuditableItemGraphServiceConstructorOptions.js\";\nimport type { IAuditableItemGraphServiceContext } from \"./models/IAuditableItemGraphServiceContext.js\";\n\n/**\n * Class for performing auditable item graph operations.\n */\nexport class AuditableItemGraphService implements IAuditableItemGraphComponent {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<AuditableItemGraphService>();\n\n\t/**\n\t * The namespace for the service.\n\t * @internal\n\t */\n\tpublic static readonly NAMESPACE: string = \"aig\";\n\n\t/**\n\t * The namespace for the service changeset.\n\t */\n\tpublic static readonly NAMESPACE_CHANGESET: string = \"changeset\";\n\n\t/**\n\t * The namespace for the service edge.\n\t */\n\tpublic static readonly NAMESPACE_EDGE: string = \"edge\";\n\n\t/**\n\t * The keys to pick when creating the proof for the stream.\n\t * @internal\n\t */\n\tprivate static readonly _PROOF_KEYS_CHANGESET: (keyof AuditableItemGraphChangeset)[] = [\n\t\t\"id\",\n\t\t\"vertexId\",\n\t\t\"userIdentity\",\n\t\t\"dateCreated\",\n\t\t\"patches\"\n\t];\n\n\t/**\n\t * The immutable proof component.\n\t * @internal\n\t */\n\tprivate readonly _immutableProofComponent: IImmutableProofComponent;\n\n\t/**\n\t * The entity storage for vertices.\n\t * @internal\n\t */\n\tprivate readonly _vertexStorage: IEntityStorageConnector<AuditableItemGraphVertex>;\n\n\t/**\n\t * The entity storage for changesets.\n\t * @internal\n\t */\n\tprivate readonly _changesetStorage: IEntityStorageConnector<AuditableItemGraphChangeset>;\n\n\t/**\n\t * The event bus component.\n\t * @internal\n\t */\n\tprivate readonly _eventBusComponent?: IEventBusComponent;\n\n\t/**\n\t * The telemetry component.\n\t * @internal\n\t */\n\tprivate readonly _telemetryComponent?: ITelemetryComponent;\n\n\t/**\n\t * Create a new instance of AuditableItemGraphService.\n\t * @param options The dependencies for the auditable item graph connector.\n\t */\n\tconstructor(options?: IAuditableItemGraphServiceConstructorOptions) {\n\t\tthis._immutableProofComponent = ComponentFactory.get(\n\t\t\toptions?.immutableProofComponentType ?? \"immutable-proof\"\n\t\t);\n\n\t\tthis._vertexStorage = EntityStorageConnectorFactory.get(\n\t\t\toptions?.vertexEntityStorageType ?? nameofKebabCase<AuditableItemGraphVertex>()\n\t\t);\n\n\t\tthis._changesetStorage = EntityStorageConnectorFactory.get(\n\t\t\toptions?.changesetEntityStorageType ?? nameofKebabCase<AuditableItemGraphChangeset>()\n\t\t);\n\n\t\tthis._eventBusComponent = ComponentFactory.getIfExists<IEventBusComponent>(\n\t\t\toptions?.eventBusComponentType\n\t\t);\n\n\t\tthis._telemetryComponent = ComponentFactory.getIfExists<ITelemetryComponent>(\n\t\t\toptions?.telemetryComponentType\n\t\t);\n\n\t\tSchemaOrgDataTypes.registerRedirects();\n\t\tAuditableItemGraphDataTypes.registerTypes();\n\t\tJsonLdDataTypes.registerTypes();\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 AuditableItemGraphService.CLASS_NAME;\n\t}\n\n\t/**\n\t * Register all AIG metrics with the telemetry component.\n\t */\n\tpublic async start(): Promise<void> {\n\t\tif (Is.undefined(this._telemetryComponent)) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait MetricHelper.createMetrics(this._telemetryComponent, AuditableItemGraphMetrics);\n\t}\n\n\t/**\n\t * Create a new graph vertex.\n\t * @param vertex The vertex to create.\n\t * @param vertex.annotationObject The annotation object for the vertex as JSON-LD.\n\t * @param vertex.aliases Alternative aliases that can be used to identify the vertex.\n\t * @param vertex.resources The resources attached to the vertex.\n\t * @param vertex.edges The edges connected to the vertex.\n\t * @returns The id of the new graph item.\n\t */\n\tpublic async create(vertex: Omit<IAuditableItemGraphVertex, \"id\">): Promise<string> {\n\t\tGuards.object(AuditableItemGraphService.CLASS_NAME, nameof(vertex), vertex);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\n\t\ttry {\n\t\t\tconst id = RandomHelper.generateUuidV7(\"compact\");\n\n\t\t\tconst schemaValidationFailures: IValidationFailure[] = [];\n\t\t\tawait DataTypeHelper.validate(\n\t\t\t\tnameof(vertex),\n\t\t\t\t`${AuditableItemGraphContexts.Namespace}${AuditableItemGraphTypes.Vertex}`,\n\t\t\t\t{\n\t\t\t\t\t...vertex,\n\t\t\t\t\tid\n\t\t\t\t},\n\t\t\t\tschemaValidationFailures\n\t\t\t);\n\t\t\tValidation.asValidationError(\n\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\tnameof(vertex),\n\t\t\t\tschemaValidationFailures\n\t\t\t);\n\n\t\t\tif (Is.object(vertex.annotationObject)) {\n\t\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\t\tawait JsonLdHelper.validate(vertex.annotationObject, validationFailures);\n\t\t\t\tValidation.asValidationError(\n\t\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\t\tnameof(vertex.annotationObject),\n\t\t\t\t\tvalidationFailures\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst context: IAuditableItemGraphServiceContext = {\n\t\t\t\tnow: new Date(Date.now()).toISOString(),\n\t\t\t\tcontextIds\n\t\t\t};\n\n\t\t\tconst vertexModel: AuditableItemGraphVertex = {\n\t\t\t\tid,\n\t\t\t\torganizationIdentity: contextIds?.[ContextIdKeys.Organization],\n\t\t\t\tdateCreated: context.now\n\t\t\t};\n\t\t\tconst originalEntity = ObjectHelper.clone(vertexModel);\n\n\t\t\tvertexModel.annotationObject = vertex.annotationObject;\n\n\t\t\tawait this.updateAliasList(context, vertexModel, vertex.aliases);\n\t\t\tawait this.updateResourceList(context, vertexModel, vertex.resources);\n\t\t\tawait this.updateEdgeList(context, vertexModel, vertex.edges);\n\n\t\t\tdelete originalEntity.aliasIndex;\n\t\t\tdelete originalEntity.resourceTypeIndex;\n\t\t\tawait this.addChangeset(context, originalEntity, vertexModel, true, 0);\n\n\t\t\tvertexModel.version = 0;\n\n\t\t\tawait this._vertexStorage.set({\n\t\t\t\t...vertexModel,\n\t\t\t\t...this.buildIndexes(vertexModel)\n\t\t\t});\n\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemGraphMetricIds.VerticesCreated\n\t\t\t);\n\n\t\t\tconst fullId = new Urn(AuditableItemGraphService.NAMESPACE, id).toString();\n\n\t\t\tawait this._eventBusComponent?.publish<IAuditableItemGraphEventBusVertexCreated>(\n\t\t\t\tAuditableItemGraphTopics.VertexCreated,\n\t\t\t\t{ id: fullId }\n\t\t\t);\n\n\t\t\treturn fullId;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemGraphService.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}\n\t}\n\n\t/**\n\t * Update a graph vertex (PUT — full replacement of vertex state).\n\t * Concurrent updates for the same vertex are serialized via `Mutex` on the vertex id.\n\t * @param vertex The vertex to update.\n\t * @returns Nothing.\n\t */\n\tpublic async update(vertex: IAuditableItemGraphVertex): Promise<void> {\n\t\tGuards.object(AuditableItemGraphService.CLASS_NAME, nameof(vertex), vertex);\n\t\tGuards.stringValue(AuditableItemGraphService.CLASS_NAME, nameof(vertex.id), vertex.id);\n\n\t\tconst vertexId = this.parseVertexId(vertex.id);\n\n\t\tawait Mutex.lock(vertexId, { throwOnTimeout: true });\n\t\ttry {\n\t\t\tconst contextIds = await ContextIdStore.getContextIds();\n\n\t\t\ttry {\n\t\t\t\tconst schemaValidationFailures: IValidationFailure[] = [];\n\t\t\t\tawait DataTypeHelper.validate(\n\t\t\t\t\tnameof(vertex),\n\t\t\t\t\t`${AuditableItemGraphContexts.Namespace}${AuditableItemGraphTypes.Vertex}`,\n\t\t\t\t\tvertex,\n\t\t\t\t\tschemaValidationFailures\n\t\t\t\t);\n\t\t\t\tValidation.asValidationError(\n\t\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\t\tnameof(vertex),\n\t\t\t\t\tschemaValidationFailures\n\t\t\t\t);\n\n\t\t\t\tconst vertexEntity = await this._vertexStorage.get(vertexId);\n\n\t\t\t\tif (Is.empty(vertexEntity)) {\n\t\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\t\t\t\"vertexNotFound\",\n\t\t\t\t\t\tvertex.id\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (Is.object(vertex.annotationObject)) {\n\t\t\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\t\t\tawait JsonLdHelper.validate(vertex.annotationObject, validationFailures);\n\t\t\t\t\tValidation.asValidationError(\n\t\t\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\t\t\tnameof(vertex.annotationObject),\n\t\t\t\t\t\tvalidationFailures\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst context: IAuditableItemGraphServiceContext = {\n\t\t\t\t\tnow: new Date(Date.now()).toISOString(),\n\t\t\t\t\tcontextIds\n\t\t\t\t};\n\n\t\t\t\tdelete vertexEntity.aliasIndex;\n\t\t\t\tconst originalEntity = ObjectHelper.clone(vertexEntity);\n\t\t\t\tconst newEntity = ObjectHelper.clone(vertexEntity);\n\n\t\t\t\t// Capture org from context if vertex doesn't have one yet.\n\t\t\t\t// Enables ownership transition: when an authenticated user first\n\t\t\t\t// interacts with a vertex that was received without an org, the org\n\t\t\t\t// is set here and recorded as a patch in the changeset proof.\n\t\t\t\tif (!Is.stringValue(newEntity.organizationIdentity)) {\n\t\t\t\t\tnewEntity.organizationIdentity = context.contextIds?.[ContextIdKeys.Organization];\n\t\t\t\t}\n\n\t\t\t\tnewEntity.annotationObject = vertex.annotationObject;\n\t\t\t\tawait this.updateAliasList(context, newEntity, vertex.aliases);\n\t\t\t\tawait this.updateResourceList(context, newEntity, vertex.resources);\n\t\t\t\tawait this.updateEdgeList(context, newEntity, vertex.edges);\n\n\t\t\t\tawait this.persistVertexChanges(context, vertexId, vertex.id, originalEntity, newEntity);\n\t\t\t} catch (error) {\n\t\t\t\tthrow new GeneralError(\n\t\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\t\t\"updatingFailed\",\n\t\t\t\t\tundefined,\n\t\t\t\t\terror\n\t\t\t\t);\n\t\t\t}\n\t\t} finally {\n\t\t\tMutex.unlock(vertexId);\n\t\t}\n\t}\n\n\t/**\n\t * Partially update a graph vertex (PATCH — explicit list patches; only defined properties applied).\n\t * Serialized with `update` via `Mutex` on the same vertex id within this instance.\n\t * @param partial The partial vertex update.\n\t * @returns Nothing.\n\t */\n\tpublic async updatePartial(partial: IAuditableItemGraphPartialVertex): Promise<void> {\n\t\tGuards.object<IAuditableItemGraphPartialVertex>(\n\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\tnameof(partial),\n\t\t\tpartial\n\t\t);\n\t\tGuards.stringValue(AuditableItemGraphService.CLASS_NAME, nameof(partial.id), partial.id);\n\n\t\tconst vertexId = this.parseVertexId(partial.id);\n\n\t\tawait Mutex.lock(vertexId, { throwOnTimeout: true });\n\n\t\ttry {\n\t\t\tconst contextIds = await ContextIdStore.getContextIds();\n\n\t\t\ttry {\n\t\t\t\tconst vertexEntity = await this._vertexStorage.get(vertexId);\n\n\t\t\t\tif (Is.empty(vertexEntity)) {\n\t\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\t\t\t\"vertexNotFound\",\n\t\t\t\t\t\tpartial.id\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (partial.annotationObject !== undefined && Is.object(partial.annotationObject)) {\n\t\t\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\t\t\tawait JsonLdHelper.validate(partial.annotationObject, validationFailures);\n\t\t\t\t\tValidation.asValidationError(\n\t\t\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\t\t\tnameof(partial.annotationObject),\n\t\t\t\t\t\tvalidationFailures\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst context: IAuditableItemGraphServiceContext = {\n\t\t\t\t\tnow: new Date(Date.now()).toISOString(),\n\t\t\t\t\tcontextIds\n\t\t\t\t};\n\n\t\t\t\tdelete vertexEntity.aliasIndex;\n\t\t\t\tconst originalEntity = ObjectHelper.clone(vertexEntity);\n\t\t\t\tconst newEntity = ObjectHelper.clone(vertexEntity);\n\n\t\t\t\t// Capture org from context if vertex doesn't have one yet.\n\t\t\t\tif (!Is.stringValue(newEntity.organizationIdentity)) {\n\t\t\t\t\tnewEntity.organizationIdentity = context.contextIds?.[ContextIdKeys.Organization];\n\t\t\t\t}\n\n\t\t\t\tif (partial.annotationObject !== undefined) {\n\t\t\t\t\tnewEntity.annotationObject = partial.annotationObject;\n\t\t\t\t}\n\t\t\t\tif (partial.aliasPatches !== undefined) {\n\t\t\t\t\tconst aliasPatch = this.validateListPatch<IAuditableItemGraphAlias>(\n\t\t\t\t\t\tnameof(partial.aliasPatches),\n\t\t\t\t\t\tpartial.aliasPatches\n\t\t\t\t\t);\n\t\t\t\t\tawait this.applyAliasPatch(context, newEntity, aliasPatch);\n\t\t\t\t}\n\t\t\t\tif (partial.resourcePatches !== undefined) {\n\t\t\t\t\tconst resourcePatch = this.validateListPatch<IAuditableItemGraphResource>(\n\t\t\t\t\t\tnameof(partial.resourcePatches),\n\t\t\t\t\t\tpartial.resourcePatches\n\t\t\t\t\t);\n\t\t\t\t\tawait this.applyResourcePatch(context, newEntity, resourcePatch);\n\t\t\t\t}\n\t\t\t\tif (partial.edgePatches !== undefined) {\n\t\t\t\t\tconst edgePatch = this.validateListPatch<IAuditableItemGraphEdge>(\n\t\t\t\t\t\tnameof(partial.edgePatches),\n\t\t\t\t\t\tpartial.edgePatches\n\t\t\t\t\t);\n\t\t\t\t\tawait this.applyEdgePatch(context, newEntity, edgePatch);\n\t\t\t\t}\n\n\t\t\t\tawait this.persistVertexChanges(context, vertexId, partial.id, originalEntity, newEntity);\n\t\t\t} catch (error) {\n\t\t\t\tthrow new GeneralError(\n\t\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\t\t\"updatingFailed\",\n\t\t\t\t\tundefined,\n\t\t\t\t\terror\n\t\t\t\t);\n\t\t\t}\n\t\t} finally {\n\t\t\tMutex.unlock(vertexId);\n\t\t}\n\t}\n\n\t/**\n\t * Get a graph vertex.\n\t * @param id The id of the vertex to get.\n\t * @param options Additional options for the get operation.\n\t * @param options.includeDeleted Whether to include deleted/updated aliases, resource, edges, defaults to false.\n\t * @param options.verifySignatureDepth How many signatures to verify, defaults to \"none\".\n\t * @returns The vertex if found.\n\t * @throws NotFoundError if the vertex is not found.\n\t */\n\tpublic async get(\n\t\tid: string,\n\t\toptions?: {\n\t\t\tincludeDeleted?: boolean;\n\t\t\tverifySignatureDepth?: VerifyDepth;\n\t\t}\n\t): Promise<IAuditableItemGraphVertex> {\n\t\tGuards.stringValue(AuditableItemGraphService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemGraphService.NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemGraphService.NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst vertexId = urnParsed.namespaceSpecific(0);\n\n\t\t\tconst vertexEntity = await this._vertexStorage.get(vertexId);\n\n\t\t\tif (Is.empty(vertexEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemGraphService.CLASS_NAME, \"vertexNotFound\", id);\n\t\t\t}\n\n\t\t\tconst vertexModel = this.vertexEntityToJsonLd(vertexEntity);\n\n\t\t\tconst verifySignatureDepth = options?.verifySignatureDepth ?? VerifyDepth.None;\n\n\t\t\tlet verified: boolean | undefined;\n\n\t\t\tif (\n\t\t\t\tverifySignatureDepth === VerifyDepth.Current ||\n\t\t\t\tverifySignatureDepth === VerifyDepth.All\n\t\t\t) {\n\t\t\t\tconst verifyResult = await this.verifyChangesets(vertexModel, verifySignatureDepth);\n\t\t\t\tverified = verifyResult.verified;\n\t\t\t\tvertexModel[\"@context\"].push(ImmutableProofContexts.Context);\n\t\t\t}\n\n\t\t\tif (!(options?.includeDeleted ?? false)) {\n\t\t\t\tif (Is.arrayValue(vertexModel.aliases)) {\n\t\t\t\t\tvertexModel.aliases = vertexModel.aliases.filter(a => Is.undefined(a.dateDeleted));\n\t\t\t\t\tif (vertexModel.aliases.length === 0) {\n\t\t\t\t\t\tdelete vertexModel.aliases;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (Is.arrayValue(vertexModel.resources)) {\n\t\t\t\t\tvertexModel.resources = vertexModel.resources.filter(r => Is.undefined(r.dateDeleted));\n\t\t\t\t\tif (vertexModel.resources.length === 0) {\n\t\t\t\t\t\tdelete vertexModel.resources;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (Is.arrayValue(vertexModel.edges)) {\n\t\t\t\t\tvertexModel.edges = vertexModel.edges.filter(r => Is.undefined(r.dateDeleted));\n\t\t\t\t\tif (vertexModel.edges.length === 0) {\n\t\t\t\t\t\tdelete vertexModel.edges;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (verifySignatureDepth !== VerifyDepth.None) {\n\t\t\t\tvertexModel.verified = verified;\n\t\t\t}\n\n\t\t\tconst result = await JsonLdProcessor.compact(vertexModel, vertexModel[\"@context\"]);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"getFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Get a graph vertex changeset list.\n\t * @param id The id of the vertex to get.\n\t * @param cursor The optional cursor to get next chunk.\n\t * @param limit Limit the number of entities to return.\n\t * @param options Additional options for the get operation.\n\t * @param options.verifySignatureDepth How many signatures to verify, defaults to \"none\".\n\t * @returns The vertex if found.\n\t * @throws NotFoundError if the vertex is not found.\n\t */\n\tpublic async getChangesets(\n\t\tid: string,\n\t\tcursor?: string,\n\t\tlimit?: number,\n\t\toptions?: {\n\t\t\tverifySignatureDepth?: VerifyDepth;\n\t\t}\n\t): Promise<{\n\t\tchangesets: IAuditableItemGraphChangesetList;\n\t\tcursor?: string;\n\t}> {\n\t\tGuards.stringValue(AuditableItemGraphService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemGraphService.NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemGraphService.NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst vertexId = urnParsed.namespaceSpecific(0);\n\n\t\t\tconst vertexEntity = await this._vertexStorage.get(vertexId);\n\n\t\t\tif (Is.empty(vertexEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemGraphService.CLASS_NAME, \"vertexNotFound\", id);\n\t\t\t}\n\n\t\t\tconst chunk = await this.verifyChangesetChunk(\n\t\t\t\tvertexId,\n\t\t\t\toptions?.verifySignatureDepth ?? VerifyDepth.None,\n\t\t\t\tcursor,\n\t\t\t\tlimit\n\t\t\t);\n\n\t\t\tif ((options?.verifySignatureDepth ?? VerifyDepth.None) !== VerifyDepth.None) {\n\t\t\t\tif (chunk.verified) {\n\t\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\t\tAuditableItemGraphMetricIds.VerificationsSucceeded\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\t\tAuditableItemGraphMetricIds.VerificationsFailed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst changesetList: IAuditableItemGraphChangesetList = {\n\t\t\t\t\"@context\": [\n\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\tAuditableItemGraphContexts.Context,\n\t\t\t\t\tAuditableItemGraphContexts.ContextCommon\n\t\t\t\t],\n\t\t\t\ttype: [SchemaOrgTypes.ItemList, AuditableItemGraphTypes.ChangesetList],\n\t\t\t\t[SchemaOrgTypes.ItemListElement]: chunk.changesets\n\t\t\t};\n\n\t\t\tconst result = await JsonLdProcessor.compact(changesetList, changesetList[\"@context\"]);\n\t\t\treturn {\n\t\t\t\tchangesets: result,\n\t\t\t\tcursor: chunk.cursor\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"getFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Get a graph vertex changeset.\n\t * @param id The id of the vertex to get.\n\t * @param options Additional options for the get operation.\n\t * @param options.verifySignatureDepth How many signatures to verify, defaults to \"none\".\n\t * @returns The vertex if found.\n\t * @throws NotFoundError if the vertex is not found.\n\t */\n\tpublic async getChangeset(\n\t\tid: string,\n\t\toptions?: {\n\t\t\tverifySignatureDepth?: VerifyDepth;\n\t\t}\n\t): Promise<IAuditableItemGraphChangeset> {\n\t\tGuards.stringValue(AuditableItemGraphService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemGraphService.NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemGraphService.NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst namespaceSpecificParts = urnParsed.namespaceSpecificParts();\n\t\t\tconst vertexId = namespaceSpecificParts[0];\n\t\t\tconst changesetId = namespaceSpecificParts[2];\n\n\t\t\tconst vertexEntity = await this._vertexStorage.get(vertexId);\n\t\t\tif (Is.empty(vertexEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemGraphService.CLASS_NAME, \"vertexNotFound\", id);\n\t\t\t}\n\n\t\t\tconst changesetEntity = await this._changesetStorage.get(changesetId);\n\t\t\tif (Is.empty(changesetEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemGraphService.CLASS_NAME, \"changesetNotFound\", id);\n\t\t\t}\n\n\t\t\tconst changesetModel = this.changesetEntityToJsonLd(vertexId, changesetEntity);\n\n\t\t\tconst verifySignatureDepth = options?.verifySignatureDepth ?? VerifyDepth.None;\n\t\t\tif (verifySignatureDepth !== VerifyDepth.None) {\n\t\t\t\tchangesetModel[\"@context\"]?.push(ImmutableProofContexts.Context);\n\t\t\t\tchangesetModel.verification = await this.verifyChangesetSignature(changesetModel);\n\t\t\t\tif (changesetModel.verification?.verified) {\n\t\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\t\tAuditableItemGraphMetricIds.VerificationsSucceeded\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\t\tAuditableItemGraphMetricIds.VerificationsFailed,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfailureReason: changesetModel.verification?.failure\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\tconst result = await JsonLdProcessor.compact(changesetModel, changesetModel[\"@context\"]);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"getFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Get a graph vertex at a specific version.\n\t * @param id The id of the vertex.\n\t * @param version The version number to retrieve.\n\t * @returns The vertex reconstructed at that version.\n\t * @throws NotFoundError if the vertex or version is not found.\n\t */\n\tpublic async getVersion(id: string, version: number): Promise<IAuditableItemGraphVertex> {\n\t\tGuards.stringValue(AuditableItemGraphService.CLASS_NAME, nameof(id), id);\n\t\tGuards.integer(AuditableItemGraphService.CLASS_NAME, nameof(version), version);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemGraphService.NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemGraphService.NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst vertexId = urnParsed.namespaceSpecific(0);\n\n\t\t\tconst vertexEntity = await this._vertexStorage.get(vertexId);\n\t\t\tif (Is.empty(vertexEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemGraphService.CLASS_NAME, \"vertexNotFound\", id);\n\t\t\t}\n\n\t\t\tconst currentVersion = vertexEntity.version ?? 0;\n\t\t\tif (version > currentVersion || version < 0) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\t\t\"versionNotFound\",\n\t\t\t\t\tversion.toString()\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Short circuit if requesting the current version to avoid unnecessary changeset retrieval and patching\n\t\t\tif (version === currentVersion) {\n\t\t\t\tconst vertexModel = this.vertexEntityToJsonLd(vertexEntity);\n\t\t\t\tvertexModel.version = version;\n\t\t\t\treturn await JsonLdProcessor.compact(vertexModel, vertexModel[\"@context\"]);\n\t\t\t}\n\n\t\t\tconst changesets = await this.internalGetChangesets(vertexId, {\n\t\t\t\tmaxVersion: version\n\t\t\t});\n\n\t\t\tlet entityState: AuditableItemGraphVertex = {\n\t\t\t\tid: vertexEntity.id,\n\t\t\t\tdateCreated: vertexEntity.dateCreated,\n\t\t\t\torganizationIdentity: vertexEntity.organizationIdentity\n\t\t\t};\n\t\t\tfor (const changeset of changesets) {\n\t\t\t\tentityState = JsonHelper.patch(entityState, changeset.patches);\n\t\t\t}\n\n\t\t\tconst vertexModel = this.vertexEntityToJsonLd(entityState);\n\t\t\tvertexModel.version = version;\n\n\t\t\tconst result = await JsonLdProcessor.compact(vertexModel, vertexModel[\"@context\"]);\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\t\"getVersionFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Get all versions of a graph vertex.\n\t * @param id The id of the vertex.\n\t * @param options Additional options for the operation.\n\t * @param options.after Only return versions created after this ISO 8601 timestamp (exclusive).\n\t * @param options.before Only return versions created before this ISO 8601 timestamp (exclusive).\n\t * @returns The list of vertex versions.\n\t * @throws NotFoundError if the vertex is not found.\n\t */\n\tpublic async getVersions(\n\t\tid: string,\n\t\toptions?: {\n\t\t\tafter?: string;\n\t\t\tbefore?: string;\n\t\t}\n\t): Promise<IAuditableItemGraphVertexVersionList> {\n\t\tGuards.stringValue(AuditableItemGraphService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemGraphService.NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemGraphService.NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst vertexId = urnParsed.namespaceSpecific(0);\n\n\t\t\tconst vertexEntity = await this._vertexStorage.get(vertexId);\n\t\t\tif (Is.empty(vertexEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemGraphService.CLASS_NAME, \"vertexNotFound\", id);\n\t\t\t}\n\n\t\t\tconst beforeDate = Coerce.dateTime(options?.before);\n\t\t\tconst afterDate = Coerce.dateTime(options?.after);\n\n\t\t\tconst allChangesets = await this.internalGetChangesets(vertexId, {\n\t\t\t\tbefore: beforeDate?.toISOString()\n\t\t\t});\n\n\t\t\tconst versions: { version: number; dateCreated: string }[] = [];\n\t\t\tfor (const changeset of allChangesets) {\n\t\t\t\tconst changesetDate = Coerce.dateTime(changeset.dateCreated);\n\t\t\t\tconst afterExcluded =\n\t\t\t\t\t!Is.empty(afterDate) && !Is.empty(changesetDate) && changesetDate <= afterDate;\n\n\t\t\t\tif (!afterExcluded) {\n\t\t\t\t\tversions.push({\n\t\t\t\t\t\tversion: changeset.version ?? 0,\n\t\t\t\t\t\tdateCreated: changeset.dateCreated\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst versionList: IAuditableItemGraphVertexVersionList = {\n\t\t\t\t\"@context\": [\n\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\tAuditableItemGraphContexts.Context,\n\t\t\t\t\tAuditableItemGraphContexts.ContextCommon\n\t\t\t\t],\n\t\t\t\ttype: [SchemaOrgTypes.ItemList, AuditableItemGraphTypes.VertexVersionList],\n\t\t\t\t[SchemaOrgTypes.ItemListElement]: versions\n\t\t\t};\n\n\t\t\treturn await JsonLdProcessor.compact(versionList, versionList[\"@context\"]);\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\t\"getVersionsFailed\",\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 the proof for an item.\n\t * @param id The id of the vertex to remove the proof from.\n\t * @returns Nothing.\n\t * @throws NotFoundError if the vertex is not found.\n\t */\n\tpublic async removeProof(id: string): Promise<void> {\n\t\tGuards.stringValue(AuditableItemGraphService.CLASS_NAME, nameof(id), id);\n\n\t\tconst vertexId = this.parseVertexId(id);\n\n\t\tawait Mutex.lock(vertexId, { throwOnTimeout: true });\n\n\t\ttry {\n\t\t\tconst vertexEntity = await this._vertexStorage.get(vertexId);\n\n\t\t\tif (Is.empty(vertexEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemGraphService.CLASS_NAME, \"vertexNotFound\", id);\n\t\t\t}\n\n\t\t\tlet changesetsResult;\n\t\t\tdo {\n\t\t\t\tchangesetsResult = await this._changesetStorage.query(\n\t\t\t\t\t{\n\t\t\t\t\t\tproperty: \"vertexId\",\n\t\t\t\t\t\tvalue: vertexId,\n\t\t\t\t\t\tcomparison: ComparisonOperator.Equals\n\t\t\t\t\t},\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tproperty: \"dateCreated\",\n\t\t\t\t\t\t\tsortDirection: SortDirection.Ascending\n\t\t\t\t\t\t}\n\t\t\t\t\t],\n\t\t\t\t\tundefined,\n\t\t\t\t\tchangesetsResult?.cursor\n\t\t\t\t);\n\n\t\t\t\tfor (const changeset of changesetsResult.entities) {\n\t\t\t\t\tif (Is.stringValue(changeset.proofId)) {\n\t\t\t\t\t\tawait this._immutableProofComponent.removeNotarization(changeset.proofId);\n\t\t\t\t\t\tdelete changeset.proofId;\n\t\t\t\t\t\tawait this._changesetStorage.set(changeset as AuditableItemGraphChangeset);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} while (Is.stringValue(changesetsResult.cursor));\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\t\"removeProofFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tMutex.unlock(vertexId);\n\t\t}\n\t}\n\n\t/**\n\t * Query the graph for vertices.\n\t * @param options The query options.\n\t * @param options.id The optional id to look for.\n\t * @param options.idMode Look in id, alias or both, defaults to both.\n\t * @param options.idExact Find only exact matches, default to false meaning partial matching.\n\t * @param options.resourceTypes Include vertices with specific resource types.\n\t * @param conditions Conditions to use in the query.\n\t * @param orderBy The order for the results, defaults to created.\n\t * @param orderByDirection The direction for the order, defaults to desc.\n\t * @param properties The properties to return, if not provided defaults to id, created, aliases and object.\n\t * @param cursor The cursor to request the next chunk of entities.\n\t * @param limit Limit the number of entities to return.\n\t * @returns The entities, which can be partial if a limited keys list was provided.\n\t */\n\tpublic async query(\n\t\toptions?: {\n\t\t\tid?: string;\n\t\t\tidMode?: \"id\" | \"alias\" | \"both\";\n\t\t\tidExact?: boolean;\n\t\t\tresourceTypes?: string[];\n\t\t},\n\t\tconditions?: IComparator[],\n\t\torderBy?: keyof Pick<IAuditableItemGraphVertex, \"dateCreated\" | \"dateModified\">,\n\t\torderByDirection?: SortDirection,\n\t\tproperties?: (keyof IAuditableItemGraphVertex)[],\n\t\tcursor?: string,\n\t\tlimit?: number\n\t): Promise<{\n\t\tentries: IAuditableItemGraphVertexList;\n\t\tcursor?: string;\n\t}> {\n\t\ttry {\n\t\t\tconst propertiesToReturn: (keyof IAuditableItemGraphVertex)[] = properties ?? [\n\t\t\t\t\"id\",\n\t\t\t\t\"dateCreated\",\n\t\t\t\t\"dateModified\",\n\t\t\t\t\"aliases\",\n\t\t\t\t\"annotationObject\"\n\t\t\t];\n\t\t\tconst combinedConditions = conditions ?? [];\n\t\t\tconst orderProperty = orderBy ?? \"dateCreated\";\n\t\t\tconst orderDirection = orderByDirection ?? SortDirection.Descending;\n\t\t\tconst idExact = options?.idExact ?? false;\n\n\t\t\tconst idOrAlias = options?.id;\n\t\t\tif (Is.stringValue(idOrAlias)) {\n\t\t\t\tconst idMode = options?.idMode ?? \"both\";\n\t\t\t\tif (idMode === \"id\" || idMode === \"both\") {\n\t\t\t\t\tcombinedConditions.push({\n\t\t\t\t\t\tproperty: \"id\",\n\t\t\t\t\t\tcomparison: idExact ? ComparisonOperator.Equals : ComparisonOperator.Includes,\n\t\t\t\t\t\tvalue: idOrAlias\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (idMode === \"alias\" || idMode === \"both\") {\n\t\t\t\t\tcombinedConditions.push({\n\t\t\t\t\t\tproperty: \"aliasIndex\",\n\t\t\t\t\t\tcomparison: ComparisonOperator.Includes,\n\t\t\t\t\t\tvalue: idExact ? `||${idOrAlias.toLowerCase()}||` : idOrAlias.toLowerCase()\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (Is.arrayValue(options?.resourceTypes)) {\n\t\t\t\tfor (const resourceType of options.resourceTypes) {\n\t\t\t\t\tcombinedConditions.push({\n\t\t\t\t\t\tproperty: \"resourceTypeIndex\",\n\t\t\t\t\t\tcomparison: ComparisonOperator.Includes,\n\t\t\t\t\t\tvalue: `||${resourceType.toLowerCase()}||`\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!propertiesToReturn.includes(\"id\")) {\n\t\t\t\tpropertiesToReturn.unshift(\"id\");\n\t\t\t}\n\n\t\t\tconst results = await this._vertexStorage.query(\n\t\t\t\tcombinedConditions.length > 0\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tconditions: combinedConditions,\n\t\t\t\t\t\t\tlogicalOperator: LogicalOperator.Or\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tproperty: orderProperty,\n\t\t\t\t\t\tsortDirection: orderDirection\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tpropertiesToReturn as (keyof AuditableItemGraphVertex)[],\n\t\t\t\tcursor,\n\t\t\t\tlimit\n\t\t\t);\n\n\t\t\tconst models: IAuditableItemGraphVertex[] = results.entities.map(e =>\n\t\t\t\tthis.vertexEntityToJsonLd(e as AuditableItemGraphVertex)\n\t\t\t);\n\n\t\t\tconst vertexList: IAuditableItemGraphVertexList = {\n\t\t\t\t\"@context\": [\n\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\tAuditableItemGraphContexts.Context,\n\t\t\t\t\tAuditableItemGraphContexts.ContextCommon\n\t\t\t\t],\n\t\t\t\ttype: [SchemaOrgTypes.ItemList, AuditableItemGraphTypes.VertexList],\n\t\t\t\t[SchemaOrgTypes.ItemListElement]: models\n\t\t\t};\n\n\t\t\tconst result = await JsonLdProcessor.compact(vertexList, vertexList[\"@context\"]);\n\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemGraphMetricIds.QueriesExecuted,\n\t\t\t\t{\n\t\t\t\t\tresultCount: models.length,\n\t\t\t\t\thasMore: Is.stringValue(results.cursor)\n\t\t\t\t}\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tentries: result,\n\t\t\t\tcursor: results.cursor\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\t\"queryingFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Parse and validate a vertex URN; return the compact storage id.\n\t * @param id The vertex URN.\n\t * @returns The compact vertex id.\n\t * @internal\n\t */\n\tprivate parseVertexId(id: string): string {\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemGraphService.NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemGraphService.NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\treturn urnParsed.namespaceSpecific(0);\n\t}\n\n\t/**\n\t * Validate that a PATCH sub-list value is a list patch object, not a bare array.\n\t * @param propertyName The property name for error reporting.\n\t * @param patch The patch value.\n\t * @returns The validated list patch.\n\t * @internal\n\t */\n\tprivate validateListPatch<TItem>(\n\t\tpropertyName: string,\n\t\tpatch: unknown\n\t): IAuditableItemGraphListPatch<TItem> {\n\t\tif (Is.array(patch)) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"listPatchInvalidFormat\", {\n\t\t\t\tproperty: propertyName\n\t\t\t});\n\t\t}\n\n\t\tGuards.object<IAuditableItemGraphListPatch<TItem>>(\n\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\tpropertyName,\n\t\t\tpatch\n\t\t);\n\n\t\treturn patch;\n\t}\n\n\t/**\n\t * Persist vertex changes after update or partial update.\n\t * @param context The context for the operation.\n\t * @param vertexId The compact vertex id.\n\t * @param vertexUrn The vertex URN for events.\n\t * @param originalEntity The entity before changes.\n\t * @param newEntity The entity after changes.\n\t * @internal\n\t */\n\tprivate async persistVertexChanges(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\tvertexId: string,\n\t\tvertexUrn: string,\n\t\toriginalEntity: AuditableItemGraphVertex,\n\t\tnewEntity: AuditableItemGraphVertex\n\t): Promise<void> {\n\t\tconst nextVersion = Is.empty(originalEntity.version)\n\t\t\t? (await this.internalGetChangesets(vertexId)).length\n\t\t\t: originalEntity.version + 1;\n\t\tconst patches = await this.addChangeset(context, originalEntity, newEntity, false, nextVersion);\n\t\tif (patches.length > 0) {\n\t\t\tnewEntity.dateModified = context.now;\n\t\t\tnewEntity.version = nextVersion;\n\n\t\t\tconst indexes = this.buildIndexes(newEntity);\n\n\t\t\tawait this._vertexStorage.set({\n\t\t\t\t...newEntity,\n\t\t\t\t...indexes\n\t\t\t});\n\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemGraphMetricIds.VerticesUpdated,\n\t\t\t\t{\n\t\t\t\t\tpatchCount: patches.length\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tawait this._eventBusComponent?.publish<IAuditableItemGraphEventBusVertexUpdated>(\n\t\t\t\tAuditableItemGraphTopics.VertexUpdated,\n\t\t\t\t{ id: vertexUrn, patches }\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Map the vertex entity to JSON-LD.\n\t * @param vertexEntity The vertex entity.\n\t * @returns The model.\n\t * @internal\n\t */\n\tprivate vertexEntityToJsonLd(vertexEntity: AuditableItemGraphVertex): IAuditableItemGraphVertex {\n\t\tconst model: IAuditableItemGraphVertex = {\n\t\t\t\"@context\": [\n\t\t\t\tAuditableItemGraphContexts.Context,\n\t\t\t\tAuditableItemGraphContexts.ContextCommon,\n\t\t\t\tSchemaOrgContexts.Context\n\t\t\t],\n\t\t\ttype: AuditableItemGraphTypes.Vertex,\n\t\t\tid: new Urn(AuditableItemGraphService.NAMESPACE, vertexEntity.id).toString(),\n\t\t\tdateCreated: vertexEntity.dateCreated,\n\t\t\tdateModified: vertexEntity.dateModified,\n\t\t\torganizationIdentity: vertexEntity.organizationIdentity,\n\t\t\tannotationObject: vertexEntity.annotationObject\n\t\t};\n\n\t\tif (Is.arrayValue(vertexEntity.aliases)) {\n\t\t\tmodel.aliases ??= [];\n\t\t\tfor (const aliasEntity of vertexEntity.aliases) {\n\t\t\t\tconst aliasModel: IAuditableItemGraphAlias = {\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\tSchemaOrgContexts.Context\n\t\t\t\t\t],\n\t\t\t\t\ttype: AuditableItemGraphTypes.Alias,\n\t\t\t\t\tid: aliasEntity.id,\n\t\t\t\t\taliasFormat: aliasEntity.aliasFormat,\n\t\t\t\t\tdateCreated: aliasEntity.dateCreated,\n\t\t\t\t\tdateModified: aliasEntity.dateModified,\n\t\t\t\t\tdateDeleted: aliasEntity.dateDeleted,\n\t\t\t\t\tannotationObject: aliasEntity.annotationObject\n\t\t\t\t};\n\t\t\t\tmodel.aliases.push(aliasModel);\n\t\t\t}\n\t\t}\n\n\t\tif (Is.arrayValue(vertexEntity.resources)) {\n\t\t\tmodel.resources ??= [];\n\t\t\tfor (const resourceEntity of vertexEntity.resources) {\n\t\t\t\tconst resourceModel: IAuditableItemGraphResource = {\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\tSchemaOrgContexts.Context\n\t\t\t\t\t],\n\t\t\t\t\ttype: AuditableItemGraphTypes.Resource,\n\t\t\t\t\tid: resourceEntity.id,\n\t\t\t\t\tdateCreated: resourceEntity.dateCreated,\n\t\t\t\t\tdateModified: resourceEntity.dateModified,\n\t\t\t\t\tdateDeleted: resourceEntity.dateDeleted,\n\t\t\t\t\tresourceObject: resourceEntity.resourceObject\n\t\t\t\t};\n\t\t\t\tmodel.resources.push(resourceModel);\n\t\t\t}\n\t\t}\n\n\t\tif (Is.arrayValue(vertexEntity.edges)) {\n\t\t\tmodel.edges ??= [];\n\t\t\tfor (const edgeEntity of vertexEntity.edges) {\n\t\t\t\tconst edgeModel: IAuditableItemGraphEdge = {\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\tSchemaOrgContexts.Context\n\t\t\t\t\t],\n\t\t\t\t\ttype: AuditableItemGraphTypes.Edge,\n\t\t\t\t\tid: this.fullEdgeId(vertexEntity.id, edgeEntity.id),\n\t\t\t\t\ttargetId: edgeEntity.targetId,\n\t\t\t\t\tdateCreated: edgeEntity.dateCreated,\n\t\t\t\t\tdateModified: edgeEntity.dateModified,\n\t\t\t\t\tdateDeleted: edgeEntity.dateDeleted,\n\t\t\t\t\tedgeRelationships: edgeEntity.edgeRelationships,\n\t\t\t\t\tannotationObject: edgeEntity.annotationObject\n\t\t\t\t};\n\t\t\t\tmodel.edges.push(edgeModel);\n\t\t\t}\n\t\t}\n\n\t\treturn model;\n\t}\n\n\t/**\n\t * Map the changeset entity to a JSON-LD.\n\t * @param vertexId The id of the vertex the changeset belongs to.\n\t * @param changesetEntity The changeset entity.\n\t * @returns The model.\n\t * @internal\n\t */\n\tprivate changesetEntityToJsonLd(\n\t\tvertexId: string,\n\t\tchangesetEntity: AuditableItemGraphChangeset\n\t): IAuditableItemGraphChangeset {\n\t\tconst model: IAuditableItemGraphChangeset = {\n\t\t\t\"@context\": [\n\t\t\t\tAuditableItemGraphContexts.Context,\n\t\t\t\tAuditableItemGraphContexts.ContextCommon,\n\t\t\t\tSchemaOrgContexts.Context\n\t\t\t],\n\t\t\ttype: AuditableItemGraphTypes.Changeset,\n\t\t\tid: new Urn(AuditableItemGraphService.NAMESPACE, [\n\t\t\t\tvertexId,\n\t\t\t\tAuditableItemGraphService.NAMESPACE_CHANGESET,\n\t\t\t\tchangesetEntity.id\n\t\t\t]).toString(),\n\t\t\tdateCreated: changesetEntity.dateCreated,\n\t\t\tuserIdentity: changesetEntity.userIdentity,\n\t\t\tpatches: changesetEntity.patches.map(p => ({\n\t\t\t\t\"@context\": [\n\t\t\t\t\tAuditableItemGraphContexts.Context,\n\t\t\t\t\tAuditableItemGraphContexts.ContextCommon,\n\t\t\t\t\tSchemaOrgContexts.Context\n\t\t\t\t],\n\t\t\t\ttype: AuditableItemGraphTypes.PatchOperation,\n\t\t\t\tpatchOperation: p.op,\n\t\t\t\tpatchPath: p.path,\n\t\t\t\tpatchFrom: p.from,\n\t\t\t\tpatchValue: p.value\n\t\t\t})),\n\t\t\tproofId: changesetEntity.proofId,\n\t\t\tversion: changesetEntity.version\n\t\t};\n\n\t\treturn model;\n\t}\n\n\t/**\n\t * Fetch all changesets for a vertex in ascending date order.\n\t * @param vertexId The internal vertex id.\n\t * @param options Optional filtering options.\n\t * @param options.before Only fetch changesets created strictly before this ISO 8601 timestamp.\n\t * @param options.maxVersion Only fetch changesets with version <= this value.\n\t * @returns All changeset entities sorted ascending by dateCreated.\n\t * @internal\n\t */\n\tprivate async internalGetChangesets(\n\t\tvertexId: string,\n\t\toptions?: { before?: string; maxVersion?: number }\n\t): Promise<AuditableItemGraphChangeset[]> {\n\t\tconst all: AuditableItemGraphChangeset[] = [];\n\t\tlet cursor: string | undefined;\n\n\t\tconst conditions: IComparator[] = [\n\t\t\t{ property: \"vertexId\", value: vertexId, comparison: ComparisonOperator.Equals }\n\t\t];\n\t\tif (Is.stringValue(options?.before)) {\n\t\t\tconditions.push({\n\t\t\t\tproperty: \"dateCreated\",\n\t\t\t\tvalue: options.before,\n\t\t\t\tcomparison: ComparisonOperator.LessThan\n\t\t\t});\n\t\t}\n\t\tif (!Is.empty(options?.maxVersion)) {\n\t\t\tconditions.push({\n\t\t\t\tproperty: \"version\",\n\t\t\t\tvalue: options.maxVersion,\n\t\t\t\tcomparison: ComparisonOperator.LessThanOrEqual\n\t\t\t});\n\t\t}\n\n\t\tdo {\n\t\t\tconst result = await this._changesetStorage.query(\n\t\t\t\t{ conditions, logicalOperator: LogicalOperator.And },\n\t\t\t\t[{ property: \"dateCreated\", sortDirection: SortDirection.Ascending }],\n\t\t\t\tundefined,\n\t\t\t\tcursor\n\t\t\t);\n\t\t\tall.push(...(result.entities as AuditableItemGraphChangeset[]));\n\t\t\tcursor = result.cursor;\n\t\t} while (Is.stringValue(cursor));\n\n\t\treturn all;\n\t}\n\n\t/**\n\t * Replace the aliases of a vertex model (PUT).\n\t * @param context The context for the operation.\n\t * @param vertex The vertex.\n\t * @param aliases The new active alias set.\n\t * @internal\n\t */\n\tprivate async updateAliasList(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\tvertex: AuditableItemGraphVertex,\n\t\taliases?: IAuditableItemGraphAlias[]\n\t): Promise<void> {\n\t\tconst active = vertex.aliases?.filter(a => Is.empty(a.dateDeleted)) ?? [];\n\n\t\tif (Is.arrayValue(active)) {\n\t\t\tfor (const alias of active) {\n\t\t\t\tif (!aliases?.find(a => a.id === alias.id)) {\n\t\t\t\t\talias.dateDeleted = context.now;\n\t\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\t\tAuditableItemGraphMetricIds.AliasesDeleted\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Is.arrayValue(aliases)) {\n\t\t\tfor (const alias of aliases) {\n\t\t\t\tawait this.updateAlias(context, vertex, alias);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Apply alias patch operations (PATCH).\n\t * @param context The context for the operation.\n\t * @param vertex The vertex.\n\t * @param patch The alias patch.\n\t * @internal\n\t */\n\tprivate async applyAliasPatch(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\tvertex: AuditableItemGraphVertex,\n\t\tpatch: IAuditableItemGraphListPatch<IAuditableItemGraphAlias>\n\t): Promise<void> {\n\t\tif (Is.arrayValue(patch.remove)) {\n\t\t\tfor (const removeId of patch.remove) {\n\t\t\t\tGuards.stringValue(AuditableItemGraphService.CLASS_NAME, nameof(removeId), removeId);\n\t\t\t\tconst alias = vertex.aliases?.find(a => a.id === removeId && Is.empty(a.dateDeleted));\n\t\t\t\tif (!Is.empty(alias)) {\n\t\t\t\t\talias.dateDeleted = context.now;\n\t\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\t\tAuditableItemGraphMetricIds.AliasesDeleted\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Is.arrayValue(patch.add)) {\n\t\t\tfor (const alias of patch.add) {\n\t\t\t\tawait this.updateAlias(context, vertex, alias);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Update an alias in the vertex.\n\t * @param context The context for the operation.\n\t * @param vertex The vertex.\n\t * @param alias The alias.\n\t * @internal\n\t */\n\tprivate async updateAlias(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\tvertex: AuditableItemGraphVertex,\n\t\talias: IAuditableItemGraphAlias\n\t): Promise<void> {\n\t\tGuards.object(AuditableItemGraphService.CLASS_NAME, nameof(alias), alias);\n\t\tGuards.stringValue(AuditableItemGraphService.CLASS_NAME, nameof(alias.id), alias.id);\n\n\t\tif (alias.unique ?? false) {\n\t\t\tconst existingVertices = await this.findMatchingVertices(vertex.id, alias.id);\n\t\t\tif (existingVertices) {\n\t\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"aliasNotUnique\", {\n\t\t\t\t\taliasId: alias.id\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (Is.object(alias.annotationObject)) {\n\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\tawait JsonLdHelper.validate(alias.annotationObject, validationFailures);\n\t\t\tValidation.asValidationError(\n\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\tnameof(alias.annotationObject),\n\t\t\t\tvalidationFailures\n\t\t\t);\n\t\t}\n\n\t\t// Try to find an existing alias with the same id.\n\t\tconst existing = vertex.aliases?.find(a => a.id === alias.id);\n\n\t\tif (Is.empty(existing) || !Is.empty(existing?.dateDeleted)) {\n\t\t\t// Did not find a matching item, or found one which is deleted.\n\t\t\tvertex.aliases ??= [];\n\n\t\t\tconst model: AuditableItemGraphAlias = {\n\t\t\t\tid: alias.id,\n\t\t\t\taliasFormat: alias.aliasFormat,\n\t\t\t\tdateCreated: context.now,\n\t\t\t\tannotationObject: alias.annotationObject,\n\t\t\t\tunique: alias.unique\n\t\t\t};\n\n\t\t\tvertex.aliases.push(model);\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemGraphMetricIds.AliasesAdded\n\t\t\t);\n\t\t} else if (\n\t\t\texisting.aliasFormat !== alias.aliasFormat ||\n\t\t\t!ObjectHelper.equal(existing.annotationObject, alias.annotationObject, false) ||\n\t\t\texisting.unique !== alias.unique\n\t\t) {\n\t\t\t// Existing alias found, update the annotationObject.\n\t\t\texisting.dateModified = context.now;\n\t\t\texisting.aliasFormat = alias.aliasFormat;\n\t\t\texisting.annotationObject = alias.annotationObject;\n\t\t\texisting.unique = alias.unique;\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemGraphMetricIds.AliasesModified\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Replace the resources of a vertex (PUT).\n\t * @param context The context for the operation.\n\t * @param vertex The vertex.\n\t * @param resources The new active resource set.\n\t * @internal\n\t */\n\tprivate async updateResourceList(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\tvertex: AuditableItemGraphVertex,\n\t\tresources?: IAuditableItemGraphResource[]\n\t): Promise<void> {\n\t\tif (Is.arrayValue(resources)) {\n\t\t\tfor (let i = 0; i < resources.length; i++) {\n\t\t\t\tconst id = this.getResourceId(resources[i]);\n\t\t\t\tif (Is.empty(id)) {\n\t\t\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"resourceIdMissing\", {\n\t\t\t\t\t\tindex: i\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst active = vertex.resources?.filter(r => Is.empty(r.dateDeleted)) ?? [];\n\n\t\tif (Is.arrayValue(active)) {\n\t\t\tfor (const resource of active) {\n\t\t\t\tif (!resources?.find(a => this.getResourceId(a) === this.getResourceId(resource))) {\n\t\t\t\t\tresource.dateDeleted = context.now;\n\t\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\t\tAuditableItemGraphMetricIds.ResourcesDeleted\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Is.arrayValue(resources)) {\n\t\t\tfor (const resource of resources) {\n\t\t\t\tawait this.updateResource(context, vertex, resource);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Apply resource patch operations (PATCH).\n\t * @param context The context for the operation.\n\t * @param vertex The vertex.\n\t * @param patch The resource patch.\n\t * @internal\n\t */\n\tprivate async applyResourcePatch(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\tvertex: AuditableItemGraphVertex,\n\t\tpatch: IAuditableItemGraphListPatch<IAuditableItemGraphResource>\n\t): Promise<void> {\n\t\tif (Is.arrayValue(patch.remove)) {\n\t\t\tfor (const removeId of patch.remove) {\n\t\t\t\tGuards.stringValue(AuditableItemGraphService.CLASS_NAME, nameof(removeId), removeId);\n\t\t\t\tconst resource = vertex.resources?.find(\n\t\t\t\t\tr => this.getResourceId(r) === removeId && Is.empty(r.dateDeleted)\n\t\t\t\t);\n\t\t\t\tif (!Is.empty(resource)) {\n\t\t\t\t\tresource.dateDeleted = context.now;\n\t\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\t\tAuditableItemGraphMetricIds.ResourcesDeleted\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Is.arrayValue(patch.add)) {\n\t\t\tfor (const resource of patch.add) {\n\t\t\t\tawait this.updateResource(context, vertex, resource);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Add a resource to the vertex.\n\t * @param context The context for the operation.\n\t * @param vertex The vertex.\n\t * @param resource The resource.\n\t * @internal\n\t */\n\tprivate async updateResource(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\tvertex: AuditableItemGraphVertex,\n\t\tresource: IAuditableItemGraphResource\n\t): Promise<void> {\n\t\tGuards.object(AuditableItemGraphService.CLASS_NAME, nameof(resource), resource);\n\n\t\tif (Is.object(resource.resourceObject)) {\n\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\tawait JsonLdHelper.validate(resource.resourceObject, validationFailures);\n\t\t\tValidation.asValidationError(\n\t\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\t\tnameof(resource.resourceObject),\n\t\t\t\tvalidationFailures\n\t\t\t);\n\t\t}\n\n\t\t// Try to find an existing resource with the same id.\n\t\tconst existing = vertex.resources?.find(\n\t\t\tr => this.getResourceId(r) === this.getResourceId(resource)\n\t\t);\n\n\t\tif (Is.empty(existing) || !Is.empty(existing?.dateDeleted)) {\n\t\t\t// Did not find a matching item, or found one which is deleted.\n\t\t\tvertex.resources ??= [];\n\n\t\t\tconst model: AuditableItemGraphResource = {\n\t\t\t\tid: resource.id,\n\t\t\t\tdateCreated: context.now,\n\t\t\t\tresourceObject: resource.resourceObject\n\t\t\t};\n\n\t\t\tvertex.resources.push(model);\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemGraphMetricIds.ResourcesAdded\n\t\t\t);\n\t\t} else if (!ObjectHelper.equal(existing.resourceObject, resource.resourceObject, false)) {\n\t\t\t// Existing resource found, update the resourceObject.\n\t\t\texisting.dateModified = context.now;\n\t\t\texisting.resourceObject = resource.resourceObject;\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemGraphMetricIds.ResourcesModified\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Replace the edges of a vertex (PUT).\n\t * @param context The context for the operation.\n\t * @param vertex The vertex.\n\t * @param edges The new active edge set.\n\t * @internal\n\t */\n\tprivate async updateEdgeList(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\tvertex: AuditableItemGraphVertex,\n\t\tedges?: IAuditableItemGraphEdge[]\n\t): Promise<void> {\n\t\t// `active` shares element refs with `vertex.edges` (the cloned newEntity); mutating `edge` below is intended.\n\t\tconst active = vertex.edges?.filter(e => Is.empty(e.dateDeleted)) ?? [];\n\n\t\tif (Is.arrayValue(active)) {\n\t\t\tfor (const edge of active) {\n\t\t\t\tif (\n\t\t\t\t\t!edges?.find(\n\t\t\t\t\t\te =>\n\t\t\t\t\t\t\tthis.edgeMatchesStoredEdge(e, edge.id) ||\n\t\t\t\t\t\t\tthis.edgeMatchesActiveEdgeByRelationship(e, edge)\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tedge.dateDeleted = context.now;\n\t\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\t\tAuditableItemGraphMetricIds.EdgesDeleted\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Is.arrayValue(edges)) {\n\t\t\tfor (const edge of edges) {\n\t\t\t\tawait this.updateEdge(context, vertex, edge);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Apply edge patch operations (PATCH).\n\t * @param context The context for the operation.\n\t * @param vertex The vertex.\n\t * @param patch The edge patch.\n\t * @internal\n\t */\n\tprivate async applyEdgePatch(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\tvertex: AuditableItemGraphVertex,\n\t\tpatch: IAuditableItemGraphListPatch<IAuditableItemGraphEdge>\n\t): Promise<void> {\n\t\tif (Is.arrayValue(patch.remove)) {\n\t\t\tfor (const removeId of patch.remove) {\n\t\t\t\tGuards.stringValue(AuditableItemGraphService.CLASS_NAME, nameof(removeId), removeId);\n\t\t\t\tconst edge = vertex.edges?.find(\n\t\t\t\t\te => Is.empty(e.dateDeleted) && this.edgeRemoveIdMatches(e.id, removeId)\n\t\t\t\t);\n\t\t\t\tif (!Is.empty(edge)) {\n\t\t\t\t\tedge.dateDeleted = context.now;\n\t\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\t\tAuditableItemGraphMetricIds.EdgesDeleted\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Is.arrayValue(patch.add)) {\n\t\t\tfor (const edge of patch.add) {\n\t\t\t\tawait this.updateEdge(context, vertex, edge);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Add an edge to the vertex.\n\t * @param context The context for the operation.\n\t * @param vertex The vertex.\n\t * @param edge The edge.\n\t * @internal\n\t */\n\tprivate async updateEdge(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\tvertex: AuditableItemGraphVertex,\n\t\tedge: IAuditableItemGraphEdge\n\t): Promise<void> {\n\t\tGuards.object(AuditableItemGraphService.CLASS_NAME, nameof(edge), edge);\n\t\tGuards.stringValue(AuditableItemGraphService.CLASS_NAME, nameof(edge.targetId), edge.targetId);\n\t\tGuards.arrayValue(\n\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\tnameof(edge.edgeRelationships),\n\t\t\tedge.edgeRelationships\n\t\t);\n\n\t\tconst validationFailures: IValidationFailure[] = [];\n\t\tif (edge.targetId === vertex.id) {\n\t\t\tvalidationFailures.push({\n\t\t\t\tproperty: \"id\",\n\t\t\t\treason: `validation.${StringHelper.camelCase(AuditableItemGraphService.CLASS_NAME)}.edgeIdSameAsVertexId`,\n\t\t\t\tproperties: {\n\t\t\t\t\ttargetId: edge.targetId\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tif (Is.object(edge.annotationObject)) {\n\t\t\tawait JsonLdHelper.validate(edge.annotationObject, validationFailures);\n\t\t}\n\t\tValidation.asValidationError(\n\t\t\tAuditableItemGraphService.CLASS_NAME,\n\t\t\tnameof(edge.annotationObject),\n\t\t\tvalidationFailures\n\t\t);\n\n\t\tlet findId = Is.stringValue(edge.id) ? this.reduceEdgeId(edge.id) : undefined;\n\t\tif (Is.empty(findId)) {\n\t\t\tconst existingActive = vertex.edges?.find(\n\t\t\t\te =>\n\t\t\t\t\tIs.empty(e.dateDeleted) &&\n\t\t\t\t\te.targetId === edge.targetId &&\n\t\t\t\t\tArrayHelper.matches(e.edgeRelationships, edge.edgeRelationships)\n\t\t\t);\n\t\t\tfindId = existingActive?.id ?? RandomHelper.generateUuidV7(\"compact\");\n\t\t}\n\n\t\t// Try to find an existing edge with the same id.\n\t\tconst existing = vertex.edges?.find(r => r.id === findId);\n\n\t\tif (Is.empty(existing) || !Is.empty(existing?.dateDeleted)) {\n\t\t\t// Did not find a matching item, or found one which is deleted.\n\t\t\tvertex.edges ??= [];\n\n\t\t\tconst model: AuditableItemGraphEdge = {\n\t\t\t\tid: findId,\n\t\t\t\ttargetId: edge.targetId,\n\t\t\t\tdateCreated: context.now,\n\t\t\t\tannotationObject: edge.annotationObject,\n\t\t\t\tedgeRelationships: edge.edgeRelationships\n\t\t\t};\n\n\t\t\tvertex.edges.push(model);\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemGraphMetricIds.EdgesAdded\n\t\t\t);\n\t\t} else if (\n\t\t\texisting.targetId !== edge.targetId ||\n\t\t\t!ArrayHelper.matches(existing.edgeRelationships, edge.edgeRelationships) ||\n\t\t\t!ObjectHelper.equal(existing.annotationObject, edge.annotationObject, false)\n\t\t) {\n\t\t\t// Existing edge found, update the properties.\n\t\t\texisting.targetId = edge.targetId;\n\t\t\texisting.dateModified = context.now;\n\t\t\texisting.edgeRelationships = edge.edgeRelationships;\n\t\t\texisting.annotationObject = edge.annotationObject;\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemGraphMetricIds.EdgesModified\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Add a changeset to the vertex and generate the associated verifications.\n\t * @param context The context for the operation.\n\t * @param original The original vertex.\n\t * @param updated The updated vertex.\n\t * @param isNew Whether this is a new item.\n\t * @param version The version number of the vertex after this changeset.\n\t * @returns True if there were changes.\n\t * @internal\n\t */\n\tprivate async addChangeset(\n\t\tcontext: IAuditableItemGraphServiceContext,\n\t\toriginal: AuditableItemGraphVertex,\n\t\tupdated: AuditableItemGraphVertex,\n\t\tisNew: boolean,\n\t\tversion: number\n\t): Promise<IPatchOperation[]> {\n\t\tconst patches = JsonHelper.diff(original, updated);\n\n\t\t// If there is a diff set or this is the first time the item is created.\n\t\tif (patches.length > 0 || isNew) {\n\t\t\tconst changesetEntity: AuditableItemGraphChangeset = {\n\t\t\t\tid: RandomHelper.generateUuidV7(\"compact\"),\n\t\t\t\tvertexId: updated.id,\n\t\t\t\tdateCreated: context.now,\n\t\t\t\tuserIdentity: context.contextIds?.[ContextIdKeys.User],\n\t\t\t\tpatches,\n\t\t\t\tversion\n\t\t\t};\n\n\t\t\t// Create the JSON-LD object we want to use for the proof\n\t\t\t// this is a subset of fixed properties from the changeset object.\n\t\t\tconst reducedChangesetJsonLd = this.changesetEntityToJsonLd(\n\t\t\t\toriginal.id,\n\t\t\t\tObjectHelper.pick(changesetEntity, AuditableItemGraphService._PROOF_KEYS_CHANGESET)\n\t\t\t);\n\n\t\t\t// Create the proof for the changeset object only when the vertex has\n\t\t\t// an owning organisation. Vertices created by inbound unauthenticated\n\t\t\t// activities (e.g. DSP push via skipAuth inbox) have no org context at\n\t\t\t// creation time and must not require a proof until a local org claims\n\t\t\t// ownership through an authenticated interaction.\n\t\t\tif (Is.stringValue(updated.organizationIdentity)) {\n\t\t\t\tchangesetEntity.proofId = await this._immutableProofComponent.create(\n\t\t\t\t\tJsonLdHelper.toNodeObject(reducedChangesetJsonLd)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Link the storage id to the changeset\n\t\t\tawait this._changesetStorage.set(changesetEntity);\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemGraphMetricIds.ChangesetsCreated\n\t\t\t);\n\n\t\t\treturn patches;\n\t\t}\n\n\t\treturn [];\n\t}\n\n\t/**\n\t * Verify the changesets of a vertex.\n\t * @param vertex The vertex to verify.\n\t * @param verifySignatureDepth How many signatures to verify.\n\t * @internal\n\t */\n\tprivate async verifyChangesets(\n\t\tvertex: IAuditableItemGraphVertex,\n\t\tverifySignatureDepth: VerifyDepth\n\t): Promise<{\n\t\tverified: boolean;\n\t\tchangesets: IAuditableItemGraphChangeset[];\n\t}> {\n\t\tconst changesets: IAuditableItemGraphChangeset[] = [];\n\n\t\tlet verified = true;\n\n\t\tconst vertexIdUrn = Urn.fromValidString(vertex.id);\n\t\tconst vertexId = vertexIdUrn.namespaceSpecific();\n\t\tlet cursor;\n\n\t\tdo {\n\t\t\tconst chunk = await this.verifyChangesetChunk(vertexId, verifySignatureDepth, cursor);\n\t\t\tcursor = chunk.cursor;\n\t\t\tif (!chunk.verified) {\n\t\t\t\tverified = false;\n\t\t\t}\n\t\t\tchangesets.push(...chunk.changesets);\n\t\t} while (Is.stringValue(cursor));\n\n\t\tif (verified) {\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemGraphMetricIds.VerificationsSucceeded\n\t\t\t);\n\t\t} else {\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemGraphMetricIds.VerificationsFailed\n\t\t\t);\n\t\t}\n\n\t\treturn {\n\t\t\tverified,\n\t\t\tchangesets\n\t\t};\n\t}\n\n\t/**\n\t * Verify a chunk of changesets for a vertex.\n\t * @param vertexId The id of the vertex to verify the changesets for.\n\t * @param verifySignatureDepth How many signatures to verify.\n\t * @param cursor The cursor to request the next chunk of changesets.\n\t * @param limit The maximum number of changesets to verify in this chunk.\n\t * @returns The changesets and whether they were verified.\n\t * @internal\n\t */\n\tprivate async verifyChangesetChunk(\n\t\tvertexId: string,\n\t\tverifySignatureDepth: string,\n\t\tcursor?: string,\n\t\tlimit?: number\n\t): Promise<{\n\t\tchangesets: IAuditableItemGraphChangeset[];\n\t\tverified: boolean;\n\t\tcursor?: string;\n\t}> {\n\t\tconst changesets: IAuditableItemGraphChangeset[] = [];\n\t\tlet verified = true;\n\n\t\tconst changesetsResult = await this._changesetStorage.query(\n\t\t\t{\n\t\t\t\tproperty: \"vertexId\",\n\t\t\t\tvalue: vertexId,\n\t\t\t\tcomparison: ComparisonOperator.Equals\n\t\t\t},\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tproperty: \"dateCreated\",\n\t\t\t\t\tsortDirection: SortDirection.Ascending\n\t\t\t\t}\n\t\t\t],\n\t\t\tundefined,\n\t\t\tcursor,\n\t\t\tlimit\n\t\t);\n\n\t\tconst storedChangesets = changesetsResult.entities as AuditableItemGraphChangeset[];\n\t\tif (Is.arrayValue(storedChangesets)) {\n\t\t\tfor (let i = 0; i < storedChangesets.length; i++) {\n\t\t\t\tconst storedChangeset = storedChangesets[i];\n\n\t\t\t\tconst storedChangesetJsonLd = this.changesetEntityToJsonLd(vertexId, storedChangeset);\n\t\t\t\tchangesets.push(storedChangesetJsonLd);\n\n\t\t\t\t// If we are verifying all signatures\n\t\t\t\t// or this is the last changeset (cursor is empty)\n\t\t\t\t// and the changeset has a proofId, then verify the proof.\n\t\t\t\tif (\n\t\t\t\t\tverifySignatureDepth === VerifyDepth.All ||\n\t\t\t\t\t(verifySignatureDepth === VerifyDepth.Current &&\n\t\t\t\t\t\t!Is.stringValue(changesetsResult.cursor) &&\n\t\t\t\t\t\ti === storedChangesets.length - 1)\n\t\t\t\t) {\n\t\t\t\t\tstoredChangesetJsonLd.verification =\n\t\t\t\t\t\tawait this.verifyChangesetSignature(storedChangesetJsonLd);\n\t\t\t\t\tif (storedChangesetJsonLd.verification?.verified !== true) {\n\t\t\t\t\t\tverified = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn { changesets, verified, cursor: changesetsResult.cursor };\n\t}\n\n\t/**\n\t * Verify the signature of a changeset and add the verification result to the changeset JSON-LD.\n\t * @param storedChangeset The changeset to verify.\n\t * @returns Whether the changeset is verified.\n\t */\n\tprivate async verifyChangesetSignature(\n\t\tstoredChangeset: IAuditableItemGraphChangeset\n\t): Promise<IImmutableProofVerification | undefined> {\n\t\tlet verification: IImmutableProofVerification | undefined;\n\t\tif (!Is.stringValue(storedChangeset.proofId)) {\n\t\t\tverification = {\n\t\t\t\t\"@context\": ImmutableProofContexts.Context,\n\t\t\t\ttype: ImmutableProofTypes.ImmutableProofVerification,\n\t\t\t\tverified: false,\n\t\t\t\tfailure: ImmutableProofFailure.ProofMissing\n\t\t\t};\n\t\t} else {\n\t\t\t// Verify the proof for the changeset object\n\t\t\tverification = await this._immutableProofComponent.verify(storedChangeset.proofId);\n\t\t}\n\t\treturn verification;\n\t}\n\n\t/**\n\t * Get the resource id from a resource object.\n\t * @param resource The resource.\n\t * @param resource.id The id of the resource.\n\t * @param resource.resourceObject The resource object.\n\t * @returns The resource id if it can find one.\n\t */\n\tprivate getResourceId(resource: {\n\t\tid?: string;\n\t\tresourceObject?: IJsonLdNodeObject;\n\t}): string | undefined {\n\t\treturn (\n\t\t\tresource.id ??\n\t\t\tObjectHelper.extractProperty<string>(resource.resourceObject, [\"id\", \"@id\"], false)\n\t\t);\n\t}\n\n\t/**\n\t * Build the indexes for the vertex.\n\t * @param vertex The vertex to build the indexes for.\n\t * @returns The indexes.\n\t * @internal\n\t */\n\tprivate buildIndexes(vertex: AuditableItemGraphVertex): {\n\t\taliasIndex?: string;\n\t\tresourceTypeIndex?: string;\n\t} {\n\t\tconst aliasIndex = vertex.aliases\n\t\t\t?.filter(a => Is.empty(a.dateDeleted))\n\t\t\t.map(a => a.id)\n\t\t\t.join(\"||\")\n\t\t\t.toLowerCase();\n\n\t\tconst resourceTypes: string[] = [];\n\t\tif (Is.arrayValue(vertex.resources)) {\n\t\t\tfor (const resource of vertex.resources) {\n\t\t\t\tconst resourceType = ObjectHelper.extractProperty<string>(\n\t\t\t\t\tresource.resourceObject,\n\t\t\t\t\t[\"@type\", \"type\"],\n\t\t\t\t\tfalse\n\t\t\t\t);\n\n\t\t\t\tif (Is.stringValue(resourceType) && !resourceTypes.includes(resourceType)) {\n\t\t\t\t\tresourceTypes.push(resourceType);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst resourceTypeIndex = resourceTypes.join(\"||\").toLowerCase();\n\n\t\treturn {\n\t\t\taliasIndex: Is.stringValue(aliasIndex) ? `||${aliasIndex}||` : undefined,\n\t\t\tresourceTypeIndex: Is.stringValue(resourceTypeIndex) ? `||${resourceTypeIndex}||` : undefined\n\t\t};\n\t}\n\n\t/**\n\t * Find vertices with matching aliases.\n\t * @param context The context for the operation.\n\t * @param vertexId The id of the vertex to exclude from the search.\n\t * @param aliasId The alias id to try and find.\n\t * @returns True if any other vertices have matching aliases.\n\t * @internal\n\t */\n\tprivate async findMatchingVertices(vertexId: string, aliasId: string): Promise<boolean> {\n\t\tconst results = await this._vertexStorage.query({\n\t\t\tconditions: [\n\t\t\t\t{\n\t\t\t\t\tproperty: \"aliasIndex\",\n\t\t\t\t\tcomparison: ComparisonOperator.Includes,\n\t\t\t\t\tvalue: `||${aliasId.toLowerCase()}||`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tproperty: \"id\",\n\t\t\t\t\tvalue: vertexId,\n\t\t\t\t\tcomparison: ComparisonOperator.NotEquals\n\t\t\t\t}\n\t\t\t],\n\t\t\tlogicalOperator: LogicalOperator.And\n\t\t});\n\n\t\treturn results.entities.length > 0;\n\t}\n\n\t/**\n\t * Whether an incoming edge matches a stored edge id.\n\t * @param incoming The incoming edge.\n\t * @param storedEdgeId The compact stored edge id.\n\t * @returns True if the incoming edge matches the stored edge id.\n\t * @internal\n\t */\n\tprivate edgeMatchesStoredEdge(incoming: IAuditableItemGraphEdge, storedEdgeId: string): boolean {\n\t\treturn Is.stringValue(incoming.id) && this.reduceEdgeId(incoming.id) === storedEdgeId;\n\t}\n\n\t/**\n\t * Whether a PATCH remove id matches a stored compact edge id (full URN or compact).\n\t * @param storedEdgeId The compact stored edge id.\n\t * @param removeId The id from the patch remove list.\n\t * @returns True if the remove id identifies the stored edge.\n\t * @internal\n\t */\n\tprivate edgeRemoveIdMatches(storedEdgeId: string, removeId: string): boolean {\n\t\tif (storedEdgeId === removeId) {\n\t\t\treturn true;\n\t\t}\n\n\t\ttry {\n\t\t\treturn this.reduceEdgeId(removeId) === storedEdgeId;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * Whether an incoming id-less edge matches an active stored edge by target and relationships.\n\t * @param incoming The incoming edge.\n\t * @param stored The stored edge.\n\t * @returns True if they match.\n\t * @internal\n\t */\n\tprivate edgeMatchesActiveEdgeByRelationship(\n\t\tincoming: IAuditableItemGraphEdge,\n\t\tstored: AuditableItemGraphEdge\n\t): boolean {\n\t\treturn (\n\t\t\tIs.empty(incoming.id) &&\n\t\t\tIs.empty(stored.dateDeleted) &&\n\t\t\tincoming.targetId === stored.targetId &&\n\t\t\tArrayHelper.matches(incoming.edgeRelationships, stored.edgeRelationships)\n\t\t);\n\t}\n\n\t/**\n\t * Reduce the edge ID from a URN.\n\t * @param urn The URN to reduce.\n\t * @returns The edge ID.\n\t * @throws GeneralError if the URN is not valid or not an edge URN.\n\t * @internal\n\t */\n\tprivate reduceEdgeId(urn: string): string {\n\t\tconst urnParsed = Urn.fromValidString(urn);\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemGraphService.NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemGraphService.NAMESPACE,\n\t\t\t\tid: urn\n\t\t\t});\n\t\t}\n\t\tif (urnParsed.namespaceSpecificParts().length !== 3) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"invalidEdgeId\", {\n\t\t\t\tedgeId: urn\n\t\t\t});\n\t\t}\n\t\tif (urnParsed.namespaceSpecificParts()[1] !== AuditableItemGraphService.NAMESPACE_EDGE) {\n\t\t\tthrow new GeneralError(AuditableItemGraphService.CLASS_NAME, \"invalidEdgeId\", {\n\t\t\t\tedgeId: urn\n\t\t\t});\n\t\t}\n\t\treturn urnParsed.namespaceSpecificParts()[2];\n\t}\n\n\t/**\n\t * Create a full edge ID URN from a vertex ID and edge ID.\n\t * @param vertexId The vertex id the edge belongs to.\n\t * @param edgeId The edge id.\n\t * @returns The full edge ID URN.\n\t * @internal\n\t */\n\tprivate fullEdgeId(vertexId: string, edgeId: string): string {\n\t\treturn new Urn(AuditableItemGraphService.NAMESPACE, [\n\t\t\tvertexId,\n\t\t\tAuditableItemGraphService.NAMESPACE_EDGE,\n\t\t\tedgeId\n\t\t]).toString();\n\t}\n}\n"]}
|
|
@@ -30,6 +30,10 @@ let AuditableItemGraphAlias = class AuditableItemGraphAlias {
|
|
|
30
30
|
* Object to associate with the alias as JSON-LD.
|
|
31
31
|
*/
|
|
32
32
|
annotationObject;
|
|
33
|
+
/**
|
|
34
|
+
* Whether the alias should be unique across the graph, meaning that no other vertex can have the same alias. Defaults to false.
|
|
35
|
+
*/
|
|
36
|
+
unique;
|
|
33
37
|
};
|
|
34
38
|
__decorate([
|
|
35
39
|
property({ type: "string" }),
|
|
@@ -55,6 +59,10 @@ __decorate([
|
|
|
55
59
|
property({ type: "object", itemTypeRef: JsonLdTypes.NodeObject, optional: true }),
|
|
56
60
|
__metadata("design:type", Object)
|
|
57
61
|
], AuditableItemGraphAlias.prototype, "annotationObject", void 0);
|
|
62
|
+
__decorate([
|
|
63
|
+
property({ type: "boolean", optional: true }),
|
|
64
|
+
__metadata("design:type", Boolean)
|
|
65
|
+
], AuditableItemGraphAlias.prototype, "unique", void 0);
|
|
58
66
|
AuditableItemGraphAlias = __decorate([
|
|
59
67
|
entity()
|
|
60
68
|
], AuditableItemGraphAlias);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auditableItemGraphAlias.js","sourceRoot":"","sources":["../../../src/entities/auditableItemGraphAlias.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EAAE,WAAW,EAA0B,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AAEI,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IACnC;;OAEG;IAEI,EAAE,CAAU;IAEnB;;OAEG;IAEI,WAAW,CAAU;IAE5B;;OAEG;IAEI,WAAW,CAAU;IAE5B;;OAEG;IAEI,YAAY,CAAU;IAE7B;;OAEG;IAEI,WAAW,CAAU;IAE5B;;OAEG;IAEI,gBAAgB,CAAqB;
|
|
1
|
+
{"version":3,"file":"auditableItemGraphAlias.js","sourceRoot":"","sources":["../../../src/entities/auditableItemGraphAlias.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EAAE,WAAW,EAA0B,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AAEI,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IACnC;;OAEG;IAEI,EAAE,CAAU;IAEnB;;OAEG;IAEI,WAAW,CAAU;IAE5B;;OAEG;IAEI,WAAW,CAAU;IAE5B;;OAEG;IAEI,YAAY,CAAU;IAE7B;;OAEG;IAEI,WAAW,CAAU;IAE5B;;OAEG;IAEI,gBAAgB,CAAqB;IAE5C;;OAEG;IAEI,MAAM,CAAW;CACxB,CAAA;AArCO;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;mDACV;AAMZ;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4DACjB;AAMrB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;;4DACtB;AAMrB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6DACrC;AAMtB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4DACtC;AAMrB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iEACtC;AAMrC;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uDACtB;AAzCZ,uBAAuB;IADnC,MAAM,EAAE;GACI,uBAAuB,CA0CnC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { JsonLdTypes, type IJsonLdNodeObject } from \"@twin.org/data-json-ld\";\nimport { entity, property } from \"@twin.org/entity\";\n\n/**\n * Class describing the auditable item graph alias.\n */\n@entity()\nexport class AuditableItemGraphAlias {\n\t/**\n\t * The alternative alias for the vertex.\n\t */\n\t@property({ type: \"string\" })\n\tpublic id!: string;\n\n\t/**\n\t * The format of the alias for the vertex.\n\t */\n\t@property({ type: \"string\", optional: true })\n\tpublic aliasFormat?: string;\n\n\t/**\n\t * The date/time of when the alias was created.\n\t */\n\t@property({ type: \"string\", format: \"date-time\" })\n\tpublic dateCreated!: string;\n\n\t/**\n\t * The date/time of when the alias was last modified.\n\t */\n\t@property({ type: \"string\", format: \"date-time\", optional: true })\n\tpublic dateModified?: string;\n\n\t/**\n\t * The timestamp of when the alias was deleted, as we never actually remove items.\n\t */\n\t@property({ type: \"string\", format: \"date-time\", optional: true })\n\tpublic dateDeleted?: string;\n\n\t/**\n\t * Object to associate with the alias as JSON-LD.\n\t */\n\t@property({ type: \"object\", itemTypeRef: JsonLdTypes.NodeObject, optional: true })\n\tpublic annotationObject?: IJsonLdNodeObject;\n\n\t/**\n\t * Whether the alias should be unique across the graph, meaning that no other vertex can have the same alias. Defaults to false.\n\t */\n\t@property({ type: \"boolean\", optional: true })\n\tpublic unique?: boolean;\n}\n"]}
|
|
@@ -29,6 +29,10 @@ let AuditableItemGraphChangeset = class AuditableItemGraphChangeset {
|
|
|
29
29
|
* The immutable proof id which contains the signature for this changeset.
|
|
30
30
|
*/
|
|
31
31
|
proofId;
|
|
32
|
+
/**
|
|
33
|
+
* The version number of the vertex after this changeset was applied.
|
|
34
|
+
*/
|
|
35
|
+
version;
|
|
32
36
|
};
|
|
33
37
|
__decorate([
|
|
34
38
|
property({ type: "string", isPrimary: true }),
|
|
@@ -54,6 +58,10 @@ __decorate([
|
|
|
54
58
|
property({ type: "string", optional: true }),
|
|
55
59
|
__metadata("design:type", String)
|
|
56
60
|
], AuditableItemGraphChangeset.prototype, "proofId", void 0);
|
|
61
|
+
__decorate([
|
|
62
|
+
property({ type: "integer", optional: true, isSecondary: true }),
|
|
63
|
+
__metadata("design:type", Number)
|
|
64
|
+
], AuditableItemGraphChangeset.prototype, "version", void 0);
|
|
57
65
|
AuditableItemGraphChangeset = __decorate([
|
|
58
66
|
entity()
|
|
59
67
|
], AuditableItemGraphChangeset);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auditableItemGraphChangeset.js","sourceRoot":"","sources":["../../../src/entities/auditableItemGraphChangeset.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGnE;;GAEG;AAEI,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IACvC;;OAEG;IAEI,EAAE,CAAU;IAEnB;;OAEG;IAEI,QAAQ,CAAU;IAEzB;;OAEG;IAEI,WAAW,CAAU;IAE5B;;OAEG;IAEI,YAAY,CAAU;IAE7B;;OAEG;IAEI,OAAO,CAA6B;IAE3C;;OAEG;IAEI,OAAO,CAAU;CACxB,CAAA;
|
|
1
|
+
{"version":3,"file":"auditableItemGraphChangeset.js","sourceRoot":"","sources":["../../../src/entities/auditableItemGraphChangeset.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGnE;;GAEG;AAEI,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IACvC;;OAEG;IAEI,EAAE,CAAU;IAEnB;;OAEG;IAEI,QAAQ,CAAU;IAEzB;;OAEG;IAEI,WAAW,CAAU;IAE5B;;OAEG;IAEI,YAAY,CAAU;IAE7B;;OAEG;IAEI,OAAO,CAA6B;IAE3C;;OAEG;IAEI,OAAO,CAAU;IAExB;;OAEG;IAEI,OAAO,CAAU;CACxB,CAAA;AArCO;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;;uDAC3B;AAMZ;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;;6DACvB;AAMlB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,UAAU,EAAE,CAAC;;gEAC/D;AAMrB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iEAChB;AAMtB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC;;4DACzB;AAMpC;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4DACrB;AAMjB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;;4DACzC;AAzCZ,2BAA2B;IADvC,MAAM,EAAE;GACI,2BAA2B,CA0CvC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { entity, property, SortDirection } from \"@twin.org/entity\";\nimport type { AuditableItemGraphPatch } from \"./auditableItemGraphPatch.js\";\n\n/**\n * Class describing a set of updates to the vertex.\n */\n@entity()\nexport class AuditableItemGraphChangeset {\n\t/**\n\t * The id of the changeset.\n\t */\n\t@property({ type: \"string\", isPrimary: true })\n\tpublic id!: string;\n\n\t/**\n\t * The vertex the changeset belongs to.\n\t */\n\t@property({ type: \"string\", isSecondary: true })\n\tpublic vertexId!: string;\n\n\t/**\n\t * The date/time of when the changeset was created.\n\t */\n\t@property({ type: \"string\", format: \"date-time\", sortDirection: SortDirection.Descending })\n\tpublic dateCreated!: string;\n\n\t/**\n\t * The identity of the user who made the changeset.\n\t */\n\t@property({ type: \"string\", optional: true })\n\tpublic userIdentity?: string;\n\n\t/**\n\t * The patches in the changeset.\n\t */\n\t@property({ type: \"array\", itemTypeRef: \"AuditableItemGraphPatch\" })\n\tpublic patches!: AuditableItemGraphPatch[];\n\n\t/**\n\t * The immutable proof id which contains the signature for this changeset.\n\t */\n\t@property({ type: \"string\", optional: true })\n\tpublic proofId?: string;\n\n\t/**\n\t * The version number of the vertex after this changeset was applied.\n\t */\n\t@property({ type: \"integer\", optional: true, isSecondary: true })\n\tpublic version?: number;\n}\n"]}
|
|
@@ -46,6 +46,10 @@ let AuditableItemGraphVertex = class AuditableItemGraphVertex {
|
|
|
46
46
|
* Edges connected to the vertex.
|
|
47
47
|
*/
|
|
48
48
|
edges;
|
|
49
|
+
/**
|
|
50
|
+
* The current version of the vertex, incremented on each changeset.
|
|
51
|
+
*/
|
|
52
|
+
version;
|
|
49
53
|
};
|
|
50
54
|
__decorate([
|
|
51
55
|
property({ type: "string", isPrimary: true }),
|
|
@@ -92,6 +96,10 @@ __decorate([
|
|
|
92
96
|
property({ type: "array", itemTypeRef: "AuditableItemGraphEdge", optional: true }),
|
|
93
97
|
__metadata("design:type", Array)
|
|
94
98
|
], AuditableItemGraphVertex.prototype, "edges", void 0);
|
|
99
|
+
__decorate([
|
|
100
|
+
property({ type: "integer", optional: true }),
|
|
101
|
+
__metadata("design:type", Number)
|
|
102
|
+
], AuditableItemGraphVertex.prototype, "version", void 0);
|
|
95
103
|
AuditableItemGraphVertex = __decorate([
|
|
96
104
|
entity()
|
|
97
105
|
], AuditableItemGraphVertex);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auditableItemGraphVertex.js","sourceRoot":"","sources":["../../../src/entities/auditableItemGraphVertex.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EAAE,WAAW,EAA0B,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKnE;;GAEG;AAEI,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACpC;;OAEG;IAEI,EAAE,CAAU;IAEnB;;OAEG;IAEI,oBAAoB,CAAU;IAErC;;OAEG;IAEI,WAAW,CAAU;IAE5B;;OAEG;IAOI,YAAY,CAAU;IAE7B;;OAEG;IAEI,UAAU,CAAU;IAE3B;;OAEG;IAEI,iBAAiB,CAAU;IAElC;;OAEG;IAEI,gBAAgB,CAAqB;IAE5C;;OAEG;IAEI,OAAO,CAA6B;IAE3C;;OAEG;IAEI,SAAS,CAAgC;IAEhD;;OAEG;IAEI,KAAK,CAA4B;
|
|
1
|
+
{"version":3,"file":"auditableItemGraphVertex.js","sourceRoot":"","sources":["../../../src/entities/auditableItemGraphVertex.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EAAE,WAAW,EAA0B,MAAM,wBAAwB,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKnE;;GAEG;AAEI,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACpC;;OAEG;IAEI,EAAE,CAAU;IAEnB;;OAEG;IAEI,oBAAoB,CAAU;IAErC;;OAEG;IAEI,WAAW,CAAU;IAE5B;;OAEG;IAOI,YAAY,CAAU;IAE7B;;OAEG;IAEI,UAAU,CAAU;IAE3B;;OAEG;IAEI,iBAAiB,CAAU;IAElC;;OAEG;IAEI,gBAAgB,CAAqB;IAE5C;;OAEG;IAEI,OAAO,CAA6B;IAE3C;;OAEG;IAEI,SAAS,CAAgC;IAEhD;;OAEG;IAEI,KAAK,CAA4B;IAExC;;OAEG;IAEI,OAAO,CAAU;CACxB,CAAA;AAlEO;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;;oDAC3B;AAMZ;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;sEACR;AAM9B;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,UAAU,EAAE,CAAC;;6DAC/D;AAWrB;IANN,QAAQ,CAAC;QACT,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,WAAW;QACnB,aAAa,EAAE,aAAa,CAAC,UAAU;QACvC,QAAQ,EAAE,IAAI;KACd,CAAC;;8DAC2B;AAMtB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4DACrC;AAMpB;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mEAC9B;AAM3B;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;kEACtC;AAMrC;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yDACrB;AAMpC;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,4BAA4B,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2DACvC;AAMzC;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;uDAC3C;AAMjC;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yDACtB;AAtEZ,wBAAwB;IADpC,MAAM,EAAE;GACI,wBAAwB,CAuEpC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { JsonLdTypes, type IJsonLdNodeObject } from \"@twin.org/data-json-ld\";\nimport { entity, property, SortDirection } from \"@twin.org/entity\";\nimport type { AuditableItemGraphAlias } from \"./auditableItemGraphAlias.js\";\nimport type { AuditableItemGraphEdge } from \"./auditableItemGraphEdge.js\";\nimport type { AuditableItemGraphResource } from \"./auditableItemGraphResource.js\";\n\n/**\n * Class describing the auditable item graph vertex.\n */\n@entity()\nexport class AuditableItemGraphVertex {\n\t/**\n\t * The id of the vertex.\n\t */\n\t@property({ type: \"string\", isPrimary: true })\n\tpublic id!: string;\n\n\t/**\n\t * The identity of the organization which controls the vertex.\n\t */\n\t@property({ type: \"string\", optional: true })\n\tpublic organizationIdentity?: string;\n\n\t/**\n\t * The date/time of when the vertex was created.\n\t */\n\t@property({ type: \"string\", format: \"date-time\", sortDirection: SortDirection.Descending })\n\tpublic dateCreated!: string;\n\n\t/**\n\t * The date/time of when the vertex was last modified.\n\t */\n\t@property({\n\t\ttype: \"string\",\n\t\tformat: \"date-time\",\n\t\tsortDirection: SortDirection.Descending,\n\t\toptional: true\n\t})\n\tpublic dateModified?: string;\n\n\t/**\n\t * Combined alias index for the vertex used for querying.\n\t */\n\t@property({ type: \"string\", isSecondary: true, optional: true })\n\tpublic aliasIndex?: string;\n\n\t/**\n\t * Combined resource type index for the vertex used for querying.\n\t */\n\t@property({ type: \"string\", isSecondary: true, optional: true })\n\tpublic resourceTypeIndex?: string;\n\n\t/**\n\t * Object to associate with the vertex as JSON-LD.\n\t */\n\t@property({ type: \"object\", itemTypeRef: JsonLdTypes.NodeObject, optional: true })\n\tpublic annotationObject?: IJsonLdNodeObject;\n\n\t/**\n\t * Alternative aliases that can be used to identify the vertex.\n\t */\n\t@property({ type: \"array\", itemType: \"string\", optional: true })\n\tpublic aliases?: AuditableItemGraphAlias[];\n\n\t/**\n\t * The resources attached to the vertex.\n\t */\n\t@property({ type: \"array\", itemTypeRef: \"AuditableItemGraphResource\", optional: true })\n\tpublic resources?: AuditableItemGraphResource[];\n\n\t/**\n\t * Edges connected to the vertex.\n\t */\n\t@property({ type: \"array\", itemTypeRef: \"AuditableItemGraphEdge\", optional: true })\n\tpublic edges?: AuditableItemGraphEdge[];\n\n\t/**\n\t * The current version of the vertex, incremented on each changeset.\n\t */\n\t@property({ type: \"integer\", optional: true })\n\tpublic version?: number;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IAuditableItemGraphServiceConstructorOptions.js","sourceRoot":"","sources":["../../../src/models/IAuditableItemGraphServiceConstructorOptions.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IAuditableItemGraphServiceConfig } from \"./IAuditableItemGraphServiceConfig.js\";\n\n/**\n * Options for the constructor of the auditable item graph service.\n */\nexport interface IAuditableItemGraphServiceConstructorOptions {\n\t/**\n\t * The immutable proof component type.\n\t * @default immutable-proof\n\t */\n\timmutableProofComponentType?: string;\n\n\t/**\n\t * The entity storage for vertices.\n\t * @default auditable-item-graph-vertex\n\t */\n\tvertexEntityStorageType?: string;\n\n\t/**\n\t * The entity storage for changesets.\n\t * @default auditable-item-graph-changeset\n\t */\n\tchangesetEntityStorageType?: string;\n\n\t/**\n\t * The event bus component type, defaults to no event bus.\n\t */\n\teventBusComponentType?: string;\n\n\t/**\n\t * The configuration for the service.\n\t */\n\tconfig?: IAuditableItemGraphServiceConfig;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"IAuditableItemGraphServiceConstructorOptions.js","sourceRoot":"","sources":["../../../src/models/IAuditableItemGraphServiceConstructorOptions.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IAuditableItemGraphServiceConfig } from \"./IAuditableItemGraphServiceConfig.js\";\n\n/**\n * Options for the constructor of the auditable item graph service.\n */\nexport interface IAuditableItemGraphServiceConstructorOptions {\n\t/**\n\t * The immutable proof component type.\n\t * @default immutable-proof\n\t */\n\timmutableProofComponentType?: string;\n\n\t/**\n\t * The entity storage for vertices.\n\t * @default auditable-item-graph-vertex\n\t */\n\tvertexEntityStorageType?: string;\n\n\t/**\n\t * The entity storage for changesets.\n\t * @default auditable-item-graph-changeset\n\t */\n\tchangesetEntityStorageType?: string;\n\n\t/**\n\t * The event bus component type, defaults to no event bus.\n\t */\n\teventBusComponentType?: string;\n\n\t/**\n\t * The component type for the optional telemetry component used for event metrics, defaults to no telemetry.\n\t */\n\ttelemetryComponentType?: string;\n\n\t/**\n\t * The configuration for the service.\n\t */\n\tconfig?: IAuditableItemGraphServiceConfig;\n}\n"]}
|