@twin.org/auditable-item-stream-service 0.0.3-next.21 → 0.0.3-next.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/auditableItemStreamRoutes.js +21 -20
- package/dist/es/auditableItemStreamRoutes.js.map +1 -1
- package/dist/es/auditableItemStreamService.js +8 -7
- package/dist/es/auditableItemStreamService.js.map +1 -1
- package/dist/es/restEntryPoints.js +3 -0
- package/dist/es/restEntryPoints.js.map +1 -1
- package/dist/types/auditableItemStreamRoutes.d.ts +6 -6
- package/dist/types/auditableItemStreamService.d.ts +7 -6
- package/dist/types/restEntryPoints.d.ts +3 -0
- package/docs/changelog.md +22 -0
- package/docs/open-api/spec.json +2 -2
- package/docs/reference/classes/AuditableItemStreamService.md +8 -6
- package/docs/reference/functions/auditableItemStreamDeleteEntry.md +1 -1
- package/docs/reference/functions/auditableItemStreamList.md +1 -1
- package/docs/reference/functions/auditableItemStreamListEntries.md +1 -1
- package/docs/reference/functions/auditableItemStreamListEntriesNoStream.md +1 -1
- package/docs/reference/functions/auditableItemStreamListEntryObjects.md +1 -1
- package/docs/reference/functions/auditableItemStreamListEntryObjectsNoStream.md +1 -1
- package/docs/reference/variables/restEntryPoints.md +2 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auditableItemStreamService.js","sourceRoot":"","sources":["../../src/auditableItemStreamService.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tAuditableItemStreamContexts,\n\tAuditableItemStreamDataTypes,\n\tAuditableItemStreamMetricIds,\n\tAuditableItemStreamMetrics,\n\tAuditableItemStreamModes,\n\tAuditableItemStreamTopics,\n\tAuditableItemStreamTypes,\n\ttype IAuditableItemStream,\n\ttype IAuditableItemStreamBase,\n\ttype IAuditableItemStreamComponent,\n\ttype IAuditableItemStreamEntry,\n\ttype IAuditableItemStreamEntryList,\n\ttype IAuditableItemStreamEntryObjectList,\n\ttype IAuditableItemStreamEventBusStreamCreated,\n\ttype IAuditableItemStreamEventBusStreamDeleted,\n\ttype IAuditableItemStreamEventBusStreamEntryCreated,\n\ttype IAuditableItemStreamEventBusStreamEntryDeleted,\n\ttype IAuditableItemStreamEventBusStreamEntryUpdated,\n\ttype IAuditableItemStreamEventBusStreamUpdated,\n\ttype IAuditableItemStreamList\n} from \"@twin.org/auditable-item-stream-models\";\nimport { ContextIdHelper, ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport {\n\tCoerce,\n\tComponentFactory,\n\tGeneralError,\n\tGuards,\n\tIs,\n\tMutex,\n\tNotFoundError,\n\tObjectHelper,\n\tRandomHelper,\n\tUrn,\n\tValidation,\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\ttype IComparatorGroup\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\tImmutableProofDataTypes,\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 { AuditableItemStream } from \"./entities/auditableItemStream.js\";\nimport type { AuditableItemStreamEntry } from \"./entities/auditableItemStreamEntry.js\";\nimport type { IAuditableItemStreamServiceConfig } from \"./models/IAuditableItemStreamServiceConfig.js\";\nimport type { IAuditableItemStreamServiceConstructorOptions } from \"./models/IAuditableItemStreamServiceConstructorOptions.js\";\nimport type { IAuditableItemStreamServiceContext } from \"./models/IAuditableItemStreamServiceContext.js\";\n\n/**\n * Class for performing auditable item stream operations.\n */\nexport class AuditableItemStreamService implements IAuditableItemStreamComponent {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<AuditableItemStreamService>();\n\n\t/**\n\t * The namespace for the service.\n\t * @internal\n\t */\n\tprivate static readonly _NAMESPACE: string = \"ais\";\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_STREAM: (keyof AuditableItemStream)[] = [\n\t\t\"id\",\n\t\t\"organizationIdentity\",\n\t\t\"userIdentity\",\n\t\t\"dateCreated\"\n\t];\n\n\t/**\n\t * The keys to pick when creating the proof for the stream entry.\n\t * @internal\n\t */\n\tprivate static readonly _PROOF_KEYS_STREAM_ENTRY: (keyof AuditableItemStreamEntry)[] = [\n\t\t\"id\",\n\t\t\"streamId\",\n\t\t\"userIdentity\",\n\t\t\"dateCreated\",\n\t\t\"entryObject\",\n\t\t\"index\"\n\t];\n\n\t/**\n\t * The configuration for the connector.\n\t * @internal\n\t */\n\tprivate readonly _config: IAuditableItemStreamServiceConfig;\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 streams.\n\t * @internal\n\t */\n\tprivate readonly _streamStorage: IEntityStorageConnector<AuditableItemStream>;\n\n\t/**\n\t * The entity storage for stream entries.\n\t * @internal\n\t */\n\tprivate readonly _streamEntryStorage: IEntityStorageConnector<AuditableItemStreamEntry>;\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 * The default interval for the integrity checks.\n\t * @internal\n\t */\n\tprivate readonly _defaultImmutableInterval: number;\n\n\t/**\n\t * Create a new instance of AuditableItemStreamService.\n\t * @param options The dependencies for the auditable item stream connector.\n\t */\n\tconstructor(options?: IAuditableItemStreamServiceConstructorOptions) {\n\t\tthis._immutableProofComponent = ComponentFactory.get(\n\t\t\toptions?.immutableProofComponentType ?? \"immutable-proof\"\n\t\t);\n\n\t\tthis._streamStorage = EntityStorageConnectorFactory.get(\n\t\t\toptions?.streamEntityStorageType ?? nameofKebabCase<AuditableItemStream>()\n\t\t);\n\n\t\tthis._streamEntryStorage = EntityStorageConnectorFactory.get(\n\t\t\toptions?.streamEntryEntityStorageType ?? nameofKebabCase<AuditableItemStreamEntry>()\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\tthis._telemetryComponent = ComponentFactory.getIfExists<ITelemetryComponent>(\n\t\t\toptions?.telemetryComponentType\n\t\t);\n\n\t\tthis._config = options?.config ?? {};\n\t\tthis._defaultImmutableInterval = this._config.defaultImmutableInterval ?? 10;\n\n\t\tSchemaOrgDataTypes.registerRedirects();\n\t\tAuditableItemStreamDataTypes.registerTypes();\n\t\tJsonLdDataTypes.registerTypes();\n\t\tImmutableProofDataTypes.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 AuditableItemStreamService.CLASS_NAME;\n\t}\n\n\t/**\n\t * Register all AIS 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\t\tawait MetricHelper.createMetrics(this._telemetryComponent, AuditableItemStreamMetrics);\n\t}\n\n\t/**\n\t * Create a new stream.\n\t * @param stream The stream to create.\n\t * @returns The id of the new stream item.\n\t */\n\tpublic async create(stream: IAuditableItemStreamBase): Promise<string> {\n\t\tGuards.object(AuditableItemStreamService.CLASS_NAME, nameof(stream), stream);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\t\ttry {\n\t\t\tconst ownerOrganizationId =\n\t\t\t\tcontextIds[ContextIdKeys.UserOrganization] ?? contextIds[ContextIdKeys.Organization];\n\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(stream),\n\t\t\t\t`${AuditableItemStreamContexts.Namespace}${AuditableItemStreamTypes.Stream}Base`,\n\t\t\t\tstream,\n\t\t\t\tschemaValidationFailures\n\t\t\t);\n\t\t\tValidation.asValidationError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\tnameof(stream),\n\t\t\t\tschemaValidationFailures\n\t\t\t);\n\n\t\t\tif (stream.closed && !Is.arrayValue(stream.entries?.[SchemaOrgTypes.ItemListElement])) {\n\t\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"closedRequiresEntries\");\n\t\t\t}\n\n\t\t\tif (Is.object(stream.annotationObject)) {\n\t\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\t\tawait JsonLdHelper.validate(stream.annotationObject, validationFailures);\n\t\t\t\tValidation.asValidationError(\n\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\tnameof(stream.annotationObject),\n\t\t\t\t\tvalidationFailures\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst context: IAuditableItemStreamServiceContext = {\n\t\t\t\tnow: new Date(Date.now()).toISOString(),\n\t\t\t\tcontextIds,\n\t\t\t\tindexCounter: 0,\n\t\t\t\timmutableInterval: stream?.immutableInterval ?? this._defaultImmutableInterval,\n\t\t\t\torganizationIdentity: ownerOrganizationId\n\t\t\t};\n\n\t\t\tconst streamEntity: AuditableItemStream = {\n\t\t\t\tid,\n\t\t\t\torganizationIdentity: ownerOrganizationId,\n\t\t\t\tuserIdentity: contextIds?.[ContextIdKeys.User],\n\t\t\t\tdateCreated: context.now,\n\t\t\t\timmutableInterval: context.immutableInterval,\n\t\t\t\tclosed: stream.closed,\n\t\t\t\tmode: stream.mode,\n\t\t\t\tnumberOfItems: 0\n\t\t\t};\n\n\t\t\tconst streamUrn = await this.createStreamProof(streamEntity, context.immutableInterval);\n\n\t\t\tif (Is.arrayValue(stream.entries?.[SchemaOrgTypes.ItemListElement])) {\n\t\t\t\tfor (const entry of stream.entries[SchemaOrgTypes.ItemListElement]) {\n\t\t\t\t\tawait this.setEntry(context, id, entry);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add these dynamic properties to the stream object after the proof has been created.\n\t\t\tstreamEntity.dateModified = context.now;\n\t\t\tstreamEntity.annotationObject = stream.annotationObject;\n\t\t\tstreamEntity.numberOfItems = context.indexCounter;\n\n\t\t\tawait this._streamStorage.set(streamEntity);\n\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemStreamMetricIds.StreamsCreated,\n\t\t\t\t{\n\t\t\t\t\tmode: streamEntity.mode ?? AuditableItemStreamModes.Default,\n\t\t\t\t\timmutableInterval: context.immutableInterval\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tawait this._eventBusComponent?.publish<IAuditableItemStreamEventBusStreamCreated>(\n\t\t\t\tAuditableItemStreamTopics.StreamCreated,\n\t\t\t\t{ id: streamUrn }\n\t\t\t);\n\n\t\t\treturn streamUrn;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.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 * Close a stream.\n\t * @param id The id of the stream to close.\n\t * @returns Nothing.\n\t */\n\tpublic async close(id: string): Promise<void> {\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\tconst streamId = urnParsed.namespaceSpecific(0);\n\t\tawait Mutex.lock(streamId, { throwOnTimeout: true });\n\t\ttry {\n\t\t\tconst streamEntity = await this._streamStorage.get(streamId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemStreamService.CLASS_NAME, \"streamNotFound\", id);\n\t\t\t}\n\n\t\t\tif (!streamEntity.closed) {\n\t\t\t\tstreamEntity.closed = true;\n\t\t\t\tstreamEntity.dateModified = new Date(Date.now()).toISOString();\n\n\t\t\t\tawait this._streamStorage.set(streamEntity);\n\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tAuditableItemStreamMetricIds.StreamsClosed\n\t\t\t\t);\n\n\t\t\t\tawait this._eventBusComponent?.publish<IAuditableItemStreamEventBusStreamUpdated>(\n\t\t\t\t\tAuditableItemStreamTopics.StreamUpdated,\n\t\t\t\t\t{ id }\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\"closeFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tMutex.unlock(streamId);\n\t\t}\n\t}\n\n\t/**\n\t * Update a stream.\n\t * @param stream The stream to update, does not update entries.\n\t * @returns Nothing.\n\t */\n\tpublic async update(\n\t\tstream: Pick<IAuditableItemStream, \"@context\" | \"type\" | \"id\" | \"annotationObject\">\n\t): Promise<void> {\n\t\tGuards.object(AuditableItemStreamService.CLASS_NAME, nameof(stream), stream);\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(stream.id), stream.id);\n\n\t\tconst urnParsed = Urn.fromValidString(stream.id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: stream.id\n\t\t\t});\n\t\t}\n\n\t\tconst streamId = urnParsed.namespaceSpecific(0);\n\t\tawait Mutex.lock(streamId, { throwOnTimeout: true });\n\t\ttry {\n\t\t\tconst schemaValidationFailures: IValidationFailure[] = [];\n\t\t\tawait DataTypeHelper.validate(\n\t\t\t\tnameof(stream),\n\t\t\t\t`${AuditableItemStreamContexts.Namespace}${AuditableItemStreamTypes.Stream}`,\n\t\t\t\tstream,\n\t\t\t\tschemaValidationFailures\n\t\t\t);\n\t\t\tValidation.asValidationError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\tnameof(stream),\n\t\t\t\tschemaValidationFailures\n\t\t\t);\n\n\t\t\tconst streamEntity = await this._streamStorage.get(streamId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemStreamService.CLASS_NAME, \"streamNotFound\", stream.id);\n\t\t\t}\n\n\t\t\tif (Is.object(stream.annotationObject)) {\n\t\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\t\tawait JsonLdHelper.validate(stream.annotationObject, validationFailures);\n\t\t\t\tValidation.asValidationError(\n\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\tnameof(stream.annotationObject),\n\t\t\t\t\tvalidationFailures\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tlet changed = false;\n\n\t\t\tif (!ObjectHelper.equal(streamEntity.annotationObject, stream.annotationObject, false)) {\n\t\t\t\tstreamEntity.annotationObject = stream.annotationObject;\n\t\t\t\tchanged = true;\n\t\t\t}\n\n\t\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\t\tconst ownerOrganizationId =\n\t\t\t\tcontextIds?.[ContextIdKeys.UserOrganization] ?? contextIds?.[ContextIdKeys.Organization];\n\t\t\tif (\n\t\t\t\t!Is.stringValue(streamEntity.organizationIdentity) &&\n\t\t\t\tIs.stringValue(ownerOrganizationId)\n\t\t\t) {\n\t\t\t\tstreamEntity.organizationIdentity = ownerOrganizationId;\n\t\t\t\tchanged = true;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!Is.stringValue(streamEntity.proofId) &&\n\t\t\t\tIs.stringValue(streamEntity.organizationIdentity)\n\t\t\t) {\n\t\t\t\tawait this.createStreamProof(\n\t\t\t\t\tstreamEntity,\n\t\t\t\t\tstreamEntity.immutableInterval ?? this._defaultImmutableInterval\n\t\t\t\t);\n\t\t\t\tif (Is.stringValue(streamEntity.proofId)) {\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (changed) {\n\t\t\t\tstreamEntity.dateModified = new Date(Date.now()).toISOString();\n\n\t\t\t\tawait this._streamStorage.set(streamEntity);\n\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tAuditableItemStreamMetricIds.StreamsUpdated\n\t\t\t\t);\n\n\t\t\t\tawait this._eventBusComponent?.publish<IAuditableItemStreamEventBusStreamUpdated>(\n\t\t\t\t\tAuditableItemStreamTopics.StreamUpdated,\n\t\t\t\t\t{ id: stream.id }\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.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} finally {\n\t\t\tMutex.unlock(streamId);\n\t\t}\n\t}\n\n\t/**\n\t * Get a stream header without the entries.\n\t * @param id The id of the stream to get.\n\t * @param cursor Cursor to use for next chunk of entries.\n\t * @param limit Limit the number of entries to return, only applicable if includeEntries is true.\n\t * @param options Additional options for the get operation.\n\t * @param options.includeEntries Whether to include the entries, defaults to false.\n\t * @param options.includeDeleted Whether to include deleted entries, defaults to false.\n\t * @param options.verifyStream Should the stream be verified, defaults to false.\n\t * @param options.verifyEntries Should the entries be verified, defaults to false.\n\t * @returns The stream and entries if found.\n\t * @throws NotFoundError if the stream is not found\n\t */\n\tpublic async get(\n\t\tid: string,\n\t\tcursor?: string,\n\t\tlimit?: number,\n\t\toptions?: {\n\t\t\tincludeEntries?: boolean;\n\t\t\tincludeDeleted?: boolean;\n\t\t\tverifyStream?: boolean;\n\t\t\tverifyEntries?: boolean;\n\t\t}\n\t): Promise<{\n\t\tstream: IAuditableItemStream;\n\t\tcursor?: string;\n\t}> {\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst streamId = urnParsed.namespaceSpecific(0);\n\n\t\t\tconst streamEntity = await this._streamStorage.get(streamId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemStreamService.CLASS_NAME, \"streamNotFound\", id);\n\t\t\t}\n\n\t\t\tconst verifyStream = options?.verifyStream ?? false;\n\t\t\tconst verifyEntries = options?.verifyEntries ?? false;\n\n\t\t\tconst streamModel = this.streamEntityToJsonLd(streamEntity);\n\t\t\tlet returnCursor;\n\n\t\t\tif (options?.includeEntries) {\n\t\t\t\tconst result = await this.findEntries(\n\t\t\t\t\tstreamId,\n\t\t\t\t\toptions?.includeDeleted,\n\t\t\t\t\tverifyEntries,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tlimit,\n\t\t\t\t\tcursor\n\t\t\t\t);\n\t\t\t\tstreamModel.entries = {\n\t\t\t\t\ttype: SchemaOrgTypes.ItemList,\n\t\t\t\t\t[SchemaOrgTypes.ItemListElement]: result.entries\n\t\t\t\t};\n\t\t\t\treturnCursor = result.cursor;\n\t\t\t}\n\n\t\t\tif (verifyStream && Is.stringValue(streamEntity.proofId)) {\n\t\t\t\tstreamModel.verification = await this._immutableProofComponent.verify(streamEntity.proofId);\n\t\t\t}\n\n\t\t\tif (verifyStream || verifyEntries) {\n\t\t\t\tstreamModel[\"@context\"].push(ImmutableProofContexts.Context);\n\t\t\t}\n\n\t\t\tconst result = await JsonLdProcessor.compact(streamModel, streamModel[\"@context\"]);\n\t\t\treturn {\n\t\t\t\tstream: result,\n\t\t\t\tcursor: returnCursor\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"getFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Delete the stream.\n\t * @param id The id of the stream to remove.\n\t * @returns Nothing.\n\t */\n\tpublic async remove(id: string): Promise<void> {\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\tconst streamId = urnParsed.namespaceSpecific(0);\n\t\tawait Mutex.lock(streamId, { throwOnTimeout: true });\n\n\t\ttry {\n\t\t\tconst streamEntity = await this._streamStorage.get(streamId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemStreamService.CLASS_NAME, \"streamNotFound\", id);\n\t\t\t}\n\n\t\t\tawait this.internalRemoveEntries(streamEntity, false);\n\n\t\t\tawait this._streamStorage.remove(streamEntity.id);\n\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemStreamMetricIds.StreamsDeleted\n\t\t\t);\n\n\t\t\tawait this._eventBusComponent?.publish<IAuditableItemStreamEventBusStreamDeleted>(\n\t\t\t\tAuditableItemStreamTopics.StreamDeleted,\n\t\t\t\t{ id }\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\"removingFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tMutex.unlock(streamId);\n\t\t}\n\t}\n\n\t/**\n\t * Query all the streams, will not return entries.\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 descending.\n\t * @param properties The properties to return, if not provided defaults to id, created 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\tconditions?: IComparator[],\n\t\torderBy?: keyof Pick<IAuditableItemStream, \"dateCreated\" | \"dateModified\">,\n\t\torderByDirection?: SortDirection,\n\t\tproperties?: (keyof IAuditableItemStream)[],\n\t\tcursor?: string,\n\t\tlimit?: number\n\t): Promise<{\n\t\tentries: IAuditableItemStreamList;\n\t\tcursor?: string;\n\t}> {\n\t\ttry {\n\t\t\tlet propertiesToReturn: (keyof IAuditableItemStream)[] = properties ?? [\n\t\t\t\t\"id\",\n\t\t\t\t\"dateCreated\",\n\t\t\t\t\"dateModified\",\n\t\t\t\t\"annotationObject\"\n\t\t\t];\n\t\t\tconst orderProperty: keyof IAuditableItemStream = orderBy ?? \"dateCreated\";\n\t\t\tconst orderDirection = orderByDirection ?? SortDirection.Descending;\n\n\t\t\t// We never return entries from this method as this would involve a lot of lookups\n\t\t\t// and we want to keep this method fast.\n\t\t\tif (propertiesToReturn.includes(\"entries\")) {\n\t\t\t\tpropertiesToReturn = propertiesToReturn.filter(p => p !== \"entries\");\n\t\t\t}\n\n\t\t\tconditions ??= [];\n\n\t\t\tconst results = await this._streamStorage.query(\n\t\t\t\tconditions.length > 0\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tconditions,\n\t\t\t\t\t\t\tlogicalOperator: LogicalOperator.And\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 AuditableItemStream)[],\n\t\t\t\tcursor,\n\t\t\t\tlimit\n\t\t\t);\n\n\t\t\tconst list: IAuditableItemStreamList = {\n\t\t\t\t\"@context\": [\n\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\tAuditableItemStreamContexts.Context,\n\t\t\t\t\tAuditableItemStreamContexts.ContextCommon\n\t\t\t\t],\n\t\t\t\ttype: [SchemaOrgTypes.ItemList, AuditableItemStreamTypes.StreamList],\n\t\t\t\t[SchemaOrgTypes.ItemListElement]: (results.entities as AuditableItemStream[]).map(e =>\n\t\t\t\t\tthis.streamEntityToJsonLd(e)\n\t\t\t\t)\n\t\t\t};\n\n\t\t\tconst result = await JsonLdProcessor.compact(list, list[\"@context\"]);\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\tAuditableItemStreamService.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 * Create an entry in the stream.\n\t * @param streamId The id of the stream to update.\n\t * @param entryObject The object for the stream as JSON-LD.\n\t * @returns The id of the created entry, if not provided.\n\t */\n\tpublic async createEntry(streamId: string, entryObject: IJsonLdNodeObject): Promise<string> {\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(streamId), streamId);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\n\t\tconst urnParsed = Urn.fromValidString(streamId);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: streamId\n\t\t\t});\n\t\t}\n\n\t\tconst streamIdParts = urnParsed.namespaceSpecific(0);\n\t\tawait Mutex.lock(streamIdParts, { throwOnTimeout: true });\n\t\ttry {\n\t\t\tconst streamEntity = await this._streamStorage.get(streamIdParts);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\t\"streamNotFound\",\n\t\t\t\t\tstreamIdParts\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (streamEntity.closed) {\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tAuditableItemStreamMetricIds.ClosedStreamRejections,\n\t\t\t\t\t{ operation: \"createEntry\" }\n\t\t\t\t);\n\t\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"streamClosed\", {\n\t\t\t\t\tid: streamId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst context: IAuditableItemStreamServiceContext = {\n\t\t\t\tnow: new Date(Date.now()).toISOString(),\n\t\t\t\tcontextIds,\n\t\t\t\tindexCounter: streamEntity.numberOfItems,\n\t\t\t\timmutableInterval: streamEntity.immutableInterval,\n\t\t\t\torganizationIdentity:\n\t\t\t\t\tstreamEntity.organizationIdentity ?? contextIds?.[ContextIdKeys.Organization]\n\t\t\t};\n\n\t\t\tconst createdId = await this.setEntry(context, streamEntity.id, {\n\t\t\t\tentryObject\n\t\t\t});\n\n\t\t\tstreamEntity.dateModified = context.now;\n\t\t\tstreamEntity.numberOfItems = context.indexCounter;\n\n\t\t\tawait this._streamStorage.set(streamEntity);\n\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemStreamMetricIds.EntriesCreated,\n\t\t\t\t{\n\t\t\t\t\thasProof:\n\t\t\t\t\t\tcontext.immutableInterval > 0 &&\n\t\t\t\t\t\t(context.indexCounter - 1) % context.immutableInterval === 0\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tconst fullId = new Urn(AuditableItemStreamService._NAMESPACE, [\n\t\t\t\tstreamEntity.id,\n\t\t\t\tcreatedId\n\t\t\t]).toString();\n\n\t\t\tawait this._eventBusComponent?.publish<IAuditableItemStreamEventBusStreamEntryCreated>(\n\t\t\t\tAuditableItemStreamTopics.StreamEntryCreated,\n\t\t\t\t{ id: streamId, entryId: 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\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\"creatingEntryFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tMutex.unlock(streamIdParts);\n\t\t}\n\t}\n\n\t/**\n\t * Get the entry from the stream.\n\t * @param streamId The id of the stream to get.\n\t * @param entryId The id of the stream entry to get.\n\t * @param options Additional options for the get operation.\n\t * @param options.verifyEntry Should the entry be verified, defaults to false.\n\t * @returns The stream and entries if found.\n\t * @throws NotFoundError if the stream is not found.\n\t */\n\tpublic async getEntry(\n\t\tstreamId: string,\n\t\tentryId: string,\n\t\toptions?: {\n\t\t\tverifyEntry?: boolean;\n\t\t}\n\t): Promise<IAuditableItemStreamEntry> {\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(streamId), streamId);\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(entryId), entryId);\n\n\t\tconst urnParsed = Urn.fromValidString(streamId);\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: streamId\n\t\t\t});\n\t\t}\n\n\t\tconst urnParsedEntry = Urn.fromValidString(entryId);\n\t\tif (urnParsedEntry.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: entryId\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst streamNamespaceId = urnParsed.namespaceSpecific(0);\n\n\t\t\tconst streamEntity = await this._streamStorage.get(streamNamespaceId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemStreamService.CLASS_NAME, \"streamNotFound\", streamId);\n\t\t\t}\n\n\t\t\tconst verifyEntry = options?.verifyEntry ?? false;\n\n\t\t\tconst entryNamespaceId = urnParsedEntry.namespaceSpecific(1);\n\t\t\tconst result = await this.findEntry(streamEntity.id, entryNamespaceId, verifyEntry);\n\t\t\tif (Is.empty(result)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\t\"streamEntryNotFound\",\n\t\t\t\t\tentryId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst entry = this.streamEntryEntityToJsonLd(result.entity);\n\n\t\t\tif (verifyEntry) {\n\t\t\t\tentry[\"@context\"] = JsonLdProcessor.combineContexts(\n\t\t\t\t\tentry[\"@context\"],\n\t\t\t\t\tImmutableProofContexts.Context\n\t\t\t\t) as IAuditableItemStreamEntry[\"@context\"];\n\t\t\t\tentry.verification = result.verification;\n\t\t\t}\n\n\t\t\tconst result2 = await JsonLdProcessor.compact(entry, entry[\"@context\"]);\n\t\t\treturn result2;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\"gettingEntryFailed\",\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 the entry object from the stream.\n\t * @param streamId The id of the stream to get.\n\t * @param entryId The id of the stream entry to get.\n\t * @returns The stream and entries if found.\n\t * @throws NotFoundError if the stream is not found.\n\t */\n\tpublic async getEntryObject(streamId: string, entryId: string): Promise<IJsonLdNodeObject> {\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(streamId), streamId);\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(entryId), entryId);\n\n\t\tconst urnParsed = Urn.fromValidString(streamId);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: streamId\n\t\t\t});\n\t\t}\n\n\t\tconst urnParsedEntry = Urn.fromValidString(entryId);\n\n\t\tif (urnParsedEntry.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: entryId\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst streamNamespaceId = urnParsed.namespaceSpecific(0);\n\n\t\t\tconst streamEntity = await this._streamStorage.get(streamNamespaceId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemStreamService.CLASS_NAME, \"streamNotFound\", streamId);\n\t\t\t}\n\n\t\t\tconst entryNamespaceId = urnParsedEntry.namespaceSpecific(1);\n\t\t\tconst result = await this.findEntry(streamEntity.id, entryNamespaceId);\n\t\t\tif (Is.empty(result)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\t\"streamEntryNotFound\",\n\t\t\t\t\tentryId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn result.entity.entryObject;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\"gettingEntryObjectFailed\",\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 an entry in the stream.\n\t * @param streamId The id of the stream to update.\n\t * @param entryId The id of the entry to update.\n\t * @param entryObject The object for the entry as JSON-LD.\n\t * @returns Nothing.\n\t */\n\tpublic async updateEntry(\n\t\tstreamId: string,\n\t\tentryId: string,\n\t\tentryObject: IJsonLdNodeObject\n\t): Promise<void> {\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(streamId), streamId);\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(entryId), entryId);\n\n\t\tconst urnParsed = Urn.fromValidString(streamId);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: streamId\n\t\t\t});\n\t\t}\n\n\t\tconst urnParsedEntry = Urn.fromValidString(entryId);\n\n\t\tif (urnParsedEntry.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: entryId\n\t\t\t});\n\t\t}\n\n\t\tconst streamNamespaceId = urnParsed.namespaceSpecific(0);\n\t\tawait Mutex.lock(streamNamespaceId, { throwOnTimeout: true });\n\t\ttry {\n\t\t\tconst streamEntryNamespaceId = urnParsedEntry.namespaceMethod();\n\n\t\t\tif (streamNamespaceId !== streamEntryNamespaceId) {\n\t\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\t\tnamespace: streamNamespaceId,\n\t\t\t\t\tid: streamEntryNamespaceId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst streamEntity = await this._streamStorage.get(streamNamespaceId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemStreamService.CLASS_NAME, \"streamNotFound\", streamId);\n\t\t\t}\n\n\t\t\tif (streamEntity.closed) {\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tAuditableItemStreamMetricIds.ClosedStreamRejections,\n\t\t\t\t\t{ operation: \"updateEntry\" }\n\t\t\t\t);\n\t\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"streamClosed\", {\n\t\t\t\t\tid: streamId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (streamEntity.mode === AuditableItemStreamModes.AppendOnly) {\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tAuditableItemStreamMetricIds.AppendOnlyRejections,\n\t\t\t\t\t{ operation: \"updateEntry\" }\n\t\t\t\t);\n\t\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"appendOnlyNoEntryUpdates\", {\n\t\t\t\t\tid: streamId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst entryNamespaceId = urnParsedEntry.namespaceSpecific(1);\n\t\t\tconst existing = await this.findEntry(streamEntity.id, entryNamespaceId);\n\t\t\tif (Is.empty(existing)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\t\"streamEntryNotFound\",\n\t\t\t\t\tentryId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\t\tconst ownerOrganizationId =\n\t\t\t\tcontextIds?.[ContextIdKeys.UserOrganization] ?? contextIds?.[ContextIdKeys.Organization];\n\n\t\t\tconst context: IAuditableItemStreamServiceContext = {\n\t\t\t\tnow: new Date(Date.now()).toISOString(),\n\t\t\t\tcontextIds,\n\t\t\t\tindexCounter: streamEntity.numberOfItems,\n\t\t\t\timmutableInterval: streamEntity.immutableInterval,\n\t\t\t\torganizationIdentity: streamEntity.organizationIdentity ?? ownerOrganizationId\n\t\t\t};\n\n\t\t\tawait this.setEntry(context, streamEntity.id, {\n\t\t\t\t...existing.entity,\n\t\t\t\tentryObject\n\t\t\t});\n\n\t\t\tstreamEntity.dateModified = context.now;\n\t\t\tstreamEntity.numberOfItems = context.indexCounter;\n\n\t\t\tawait this._streamStorage.set(streamEntity);\n\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemStreamMetricIds.EntriesUpdated\n\t\t\t);\n\n\t\t\tawait this._eventBusComponent?.publish<IAuditableItemStreamEventBusStreamEntryUpdated>(\n\t\t\t\tAuditableItemStreamTopics.StreamEntryUpdated,\n\t\t\t\t{ id: streamId, entryId }\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\"updatingEntryFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tMutex.unlock(streamNamespaceId);\n\t\t}\n\t}\n\n\t/**\n\t * Delete from the stream.\n\t * @param streamId The id of the stream to remove from.\n\t * @param entryId The id of the entry to remove.\n\t * @returns Nothing.\n\t */\n\tpublic async removeEntry(streamId: string, entryId: string): Promise<void> {\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(streamId), streamId);\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(entryId), entryId);\n\n\t\tconst urnParsed = Urn.fromValidString(streamId);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: streamId\n\t\t\t});\n\t\t}\n\n\t\tconst urnParsedEntry = Urn.fromValidString(entryId);\n\t\tif (urnParsedEntry.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: entryId\n\t\t\t});\n\t\t}\n\n\t\tconst streamNamespaceId = urnParsed.namespaceSpecific(0);\n\t\tawait Mutex.lock(streamNamespaceId, { throwOnTimeout: true });\n\t\ttry {\n\t\t\tconst streamEntryNamespaceId = urnParsedEntry.namespaceMethod();\n\n\t\t\tif (streamNamespaceId !== streamEntryNamespaceId) {\n\t\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\t\tnamespace: streamNamespaceId,\n\t\t\t\t\tid: streamEntryNamespaceId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst streamEntity = await this._streamStorage.get(streamNamespaceId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemStreamService.CLASS_NAME, \"streamNotFound\", streamId);\n\t\t\t}\n\n\t\t\tif (streamEntity.mode === AuditableItemStreamModes.AppendOnly) {\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tAuditableItemStreamMetricIds.AppendOnlyRejections,\n\t\t\t\t\t{ operation: \"removeEntry\" }\n\t\t\t\t);\n\t\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"appendOnlyNoEntryRemovals\", {\n\t\t\t\t\tid: streamId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst entryNamespaceId = urnParsedEntry.namespaceSpecific(1);\n\t\t\tconst result = await this.findEntry(streamNamespaceId, entryNamespaceId);\n\t\t\tif (Is.empty(result)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\t\"streamEntryNotFound\",\n\t\t\t\t\tentryId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (Is.empty(result.entity.dateDeleted)) {\n\t\t\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\t\t\tconst ownerOrganizationId =\n\t\t\t\t\tcontextIds?.[ContextIdKeys.UserOrganization] ?? contextIds?.[ContextIdKeys.Organization];\n\n\t\t\t\tconst context: IAuditableItemStreamServiceContext = {\n\t\t\t\t\tnow: new Date(Date.now()).toISOString(),\n\t\t\t\t\tcontextIds,\n\t\t\t\t\tindexCounter: streamEntity.numberOfItems,\n\t\t\t\t\timmutableInterval: streamEntity.immutableInterval,\n\t\t\t\t\torganizationIdentity: streamEntity.organizationIdentity ?? ownerOrganizationId\n\t\t\t\t};\n\n\t\t\t\tawait this.setEntry(context, streamEntity.id, {\n\t\t\t\t\t...result.entity,\n\t\t\t\t\tdateDeleted: context.now\n\t\t\t\t});\n\n\t\t\t\tstreamEntity.dateModified = context.now;\n\t\t\t\tstreamEntity.numberOfItems = context.indexCounter;\n\t\t\t\tawait this._streamStorage.set(streamEntity);\n\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tAuditableItemStreamMetricIds.EntriesDeleted\n\t\t\t\t);\n\n\t\t\t\tawait this._eventBusComponent?.publish<IAuditableItemStreamEventBusStreamEntryDeleted>(\n\t\t\t\t\tAuditableItemStreamTopics.StreamEntryDeleted,\n\t\t\t\t\t{ id: streamId, entryId }\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\"removingEntryFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tMutex.unlock(streamNamespaceId);\n\t\t}\n\t}\n\n\t/**\n\t * Get the entries for the stream.\n\t * @param streamId The id of the stream to get, if undefined returns all matching entries.\n\t * @param options Additional options for the get operation.\n\t * @param options.conditions The conditions to filter the stream.\n\t * @param options.includeDeleted Whether to include deleted entries, defaults to false.\n\t * @param options.verifyEntries Should the entries be verified, defaults to false.\n\t * @param options.limit How many entries to return.\n\t * @param options.cursor Cursor to use for next chunk of data.\n\t * @param options.order Retrieve the entries in ascending/descending time order, defaults to Ascending.\n\t * @returns The stream and entries if found.\n\t * @throws NotFoundError if the stream is not found.\n\t */\n\tpublic async getEntries(\n\t\tstreamId?: string,\n\t\toptions?: {\n\t\t\tconditions?: IComparator[];\n\t\t\tincludeDeleted?: boolean;\n\t\t\tverifyEntries?: boolean;\n\t\t\tlimit?: number;\n\t\t\tcursor?: string;\n\t\t\torder?: SortDirection;\n\t\t}\n\t): Promise<{\n\t\tentries: IAuditableItemStreamEntryList;\n\t\tcursor?: string;\n\t}> {\n\t\tlet streamNamespaceId;\n\t\tif (!Is.empty(streamId)) {\n\t\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(streamId), streamId);\n\n\t\t\tconst urnParsed = Urn.fromValidString(streamId);\n\n\t\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\t\tid: streamId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tstreamNamespaceId = urnParsed.namespaceSpecific(0);\n\t\t}\n\n\t\ttry {\n\t\t\tif (Is.stringValue(streamNamespaceId)) {\n\t\t\t\tconst streamEntity = await this._streamStorage.get(streamNamespaceId);\n\n\t\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\t\t\"streamNotFound\",\n\t\t\t\t\t\tstreamId\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst verifyEntries = options?.verifyEntries ?? false;\n\n\t\t\tconst result = await this.findEntries(\n\t\t\t\tstreamNamespaceId,\n\t\t\t\toptions?.includeDeleted,\n\t\t\t\tverifyEntries,\n\t\t\t\toptions?.conditions,\n\t\t\t\toptions?.order,\n\t\t\t\tundefined,\n\t\t\t\toptions?.limit,\n\t\t\t\toptions?.cursor\n\t\t\t);\n\n\t\t\tconst list: IAuditableItemStreamEntryList = {\n\t\t\t\t\"@context\": [\n\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\tAuditableItemStreamContexts.Context,\n\t\t\t\t\tAuditableItemStreamContexts.ContextCommon\n\t\t\t\t],\n\t\t\t\ttype: [SchemaOrgTypes.ItemList, AuditableItemStreamTypes.StreamEntryList],\n\t\t\t\t[SchemaOrgTypes.ItemListElement]: result.entries\n\t\t\t};\n\n\t\t\tif (verifyEntries) {\n\t\t\t\tlist[\"@context\"].push(ImmutableProofContexts.Context);\n\t\t\t}\n\n\t\t\tconst result2 = await JsonLdProcessor.compact(list, list[\"@context\"]);\n\t\t\treturn {\n\t\t\t\tentries: result2,\n\t\t\t\tcursor: result.cursor\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\"gettingEntriesFailed\",\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 the entry objects for the stream.\n\t * @param streamId The id of the stream to get, if undefined returns all matching entries.\n\t * @param options Additional options for the get operation.\n\t * @param options.conditions The conditions to filter the stream.\n\t * @param options.includeDeleted Whether to include deleted entries, defaults to false.\n\t * @param options.limit How many entries to return.\n\t * @param options.cursor Cursor to use for next chunk of data.\n\t * @param options.order Retrieve the entries in ascending/descending time order, defaults to Ascending.\n\t * @returns The stream and entries if found.\n\t * @throws NotFoundError if the stream is not found.\n\t */\n\tpublic async getEntryObjects(\n\t\tstreamId?: string,\n\t\toptions?: {\n\t\t\tconditions?: IComparator[];\n\t\t\tincludeDeleted?: boolean;\n\t\t\tlimit?: number;\n\t\t\tcursor?: string;\n\t\t\torder?: SortDirection;\n\t\t}\n\t): Promise<{\n\t\tentries: IAuditableItemStreamEntryObjectList;\n\t\tcursor?: string;\n\t}> {\n\t\tlet streamNamespaceId;\n\t\tif (!Is.empty(streamId)) {\n\t\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(streamId), streamId);\n\n\t\t\tconst urnParsed = Urn.fromValidString(streamId);\n\n\t\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\t\tid: streamId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tstreamNamespaceId = urnParsed.namespaceSpecific(0);\n\t\t}\n\n\t\ttry {\n\t\t\tif (Is.stringValue(streamNamespaceId)) {\n\t\t\t\tconst streamEntity = await this._streamStorage.get(streamNamespaceId);\n\n\t\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\t\t\"streamNotFound\",\n\t\t\t\t\t\tstreamId\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst result = await this.findEntries(\n\t\t\t\tstreamNamespaceId,\n\t\t\t\toptions?.includeDeleted,\n\t\t\t\tfalse,\n\t\t\t\toptions?.conditions,\n\t\t\t\toptions?.order,\n\t\t\t\tundefined,\n\t\t\t\toptions?.limit,\n\t\t\t\toptions?.cursor\n\t\t\t);\n\n\t\t\tconst list: IAuditableItemStreamEntryObjectList = {\n\t\t\t\t\"@context\": [\n\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\tAuditableItemStreamContexts.Context,\n\t\t\t\t\tAuditableItemStreamContexts.ContextCommon\n\t\t\t\t],\n\t\t\t\ttype: [SchemaOrgTypes.ItemList, AuditableItemStreamTypes.StreamEntryObjectList],\n\t\t\t\t[SchemaOrgTypes.ItemListElement]: result.entries.map(m => m.entryObject)\n\t\t\t};\n\n\t\t\tconst result2 = await JsonLdProcessor.compact(list, list[\"@context\"]);\n\t\t\treturn {\n\t\t\t\tentries: result2,\n\t\t\t\tcursor: result.cursor\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\"gettingEntryObjectsFailed\",\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 the stream and entries.\n\t * @param streamId The id of the stream 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(streamId: string): Promise<void> {\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(streamId), streamId);\n\n\t\tconst urnParsed = Urn.fromValidString(streamId);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: streamId\n\t\t\t});\n\t\t}\n\n\t\tconst streamIdParts = urnParsed.namespaceSpecific(0);\n\t\tawait Mutex.lock(streamIdParts, { throwOnTimeout: true });\n\n\t\ttry {\n\t\t\tconst streamEntity = await this._streamStorage.get(streamIdParts);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\t\"streamNotFound\",\n\t\t\t\t\tstreamIdParts\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tawait this.internalRemoveEntries(streamEntity, true);\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.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(streamIdParts);\n\t\t}\n\t}\n\n\t/**\n\t * Create an immutable proof for the stream entity if the conditions are met.\n\t * @param streamEntity The stream entity to create the proof for.\n\t * @param immutableInterval The immutable interval for the stream.\n\t * @returns The proof id.\n\t * @internal\n\t */\n\tprivate async createStreamProof(\n\t\tstreamEntity: AuditableItemStream,\n\t\timmutableInterval: number\n\t): Promise<string> {\n\t\tconst streamModel = this.streamEntityToJsonLd(\n\t\t\tObjectHelper.pick(streamEntity, AuditableItemStreamService._PROOF_KEYS_STREAM)\n\t\t);\n\n\t\tif (immutableInterval > 0 && Is.stringValue(streamModel.organizationIdentity)) {\n\t\t\tstreamEntity.proofId = await this._immutableProofComponent.create(streamModel);\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemStreamMetricIds.ProofsCreatedStream\n\t\t\t);\n\t\t}\n\n\t\treturn streamModel.id;\n\t}\n\n\t/**\n\t * Map the stream entity to a JSON-LD model.\n\t * @param streamEntity The stream entity.\n\t * @returns The model.\n\t * @internal\n\t */\n\tprivate streamEntityToJsonLd(\n\t\tstreamEntity: AuditableItemStream\n\t): IAuditableItemStream & IJsonLdNodeObject {\n\t\tconst model: IAuditableItemStream & IJsonLdNodeObject = {\n\t\t\t\"@context\": [\n\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\tAuditableItemStreamContexts.Context,\n\t\t\t\tAuditableItemStreamContexts.ContextCommon\n\t\t\t],\n\t\t\ttype: AuditableItemStreamTypes.Stream,\n\t\t\tid: `${AuditableItemStreamService._NAMESPACE}:${streamEntity.id}`,\n\t\t\tdateCreated: streamEntity.dateCreated,\n\t\t\tdateModified: streamEntity.dateModified,\n\t\t\torganizationIdentity: streamEntity.organizationIdentity,\n\t\t\tuserIdentity: streamEntity.userIdentity,\n\t\t\tannotationObject: streamEntity.annotationObject,\n\t\t\timmutableInterval: streamEntity.immutableInterval,\n\t\t\tproofId: streamEntity.proofId,\n\t\t\tnumberOfItems: streamEntity.numberOfItems,\n\t\t\tclosed: streamEntity.closed,\n\t\t\tmode: streamEntity.mode\n\t\t};\n\n\t\treturn model;\n\t}\n\n\t/**\n\t * Map the stream entry entity to a JSON-LD model.\n\t * @param streamEntryEntity The stream entry entity.\n\t * @returns The model\n\t * @internal\n\t */\n\tprivate streamEntryEntityToJsonLd(\n\t\tstreamEntryEntity: AuditableItemStreamEntry\n\t): IAuditableItemStreamEntry {\n\t\tconst streamEntryModel: IAuditableItemStreamEntry = {\n\t\t\t\"@context\": [\n\t\t\t\tAuditableItemStreamContexts.Context,\n\t\t\t\tAuditableItemStreamContexts.ContextCommon,\n\t\t\t\tSchemaOrgContexts.Context\n\t\t\t],\n\t\t\ttype: AuditableItemStreamTypes.StreamEntry,\n\t\t\tid: `${AuditableItemStreamService._NAMESPACE}:${streamEntryEntity.streamId}:${streamEntryEntity.id}`,\n\t\t\tdateCreated: streamEntryEntity.dateCreated,\n\t\t\tdateModified: streamEntryEntity.dateModified,\n\t\t\tdateDeleted: streamEntryEntity.dateDeleted,\n\t\t\tentryObject: streamEntryEntity.entryObject,\n\t\t\tuserIdentity: streamEntryEntity.userIdentity,\n\t\t\tindex: streamEntryEntity.index,\n\t\t\tproofId: streamEntryEntity.proofId\n\t\t};\n\t\treturn streamEntryModel;\n\t}\n\n\t/**\n\t * Set a stream entry.\n\t * @param context The context for the operation.\n\t * @param streamId The stream id.\n\t * @param entry The entry.\n\t * @returns The id of the entry.\n\t * @internal\n\t */\n\tprivate async setEntry(\n\t\tcontext: IAuditableItemStreamServiceContext,\n\t\tstreamId: string,\n\t\tentry: Partial<IAuditableItemStreamEntry>\n\t): Promise<string> {\n\t\tGuards.object(AuditableItemStreamService.CLASS_NAME, nameof(entry), entry);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\n\t\tif (Is.object(entry.entryObject)) {\n\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\tawait JsonLdHelper.validate(entry.entryObject, validationFailures);\n\t\t\tValidation.asValidationError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\tnameof(entry.entryObject),\n\t\t\t\tvalidationFailures\n\t\t\t);\n\t\t}\n\n\t\tconst entity: AuditableItemStreamEntry = {\n\t\t\tid: entry.id ?? RandomHelper.generateUuidV7(\"compact\"),\n\t\t\tstreamId,\n\t\t\tdateCreated: entry.dateCreated ?? context.now,\n\t\t\tdateDeleted: entry.dateDeleted,\n\t\t\tentryObject: entry.entryObject ?? {},\n\t\t\tuserIdentity: contextIds?.[ContextIdKeys.User],\n\t\t\tindex: entry.index ?? context.indexCounter++\n\t\t};\n\n\t\t// If the created date is not the same as the context now, then we are modifying the entry.\n\t\tif (entity.dateCreated !== context.now) {\n\t\t\tentity.dateModified = context.now;\n\t\t}\n\n\t\tif (context.immutableInterval > 0 && entity.index % context.immutableInterval === 0) {\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 stream entry object.\n\t\t\tconst streamEntryModel = this.streamEntryEntityToJsonLd(\n\t\t\t\tObjectHelper.pick(entity, AuditableItemStreamService._PROOF_KEYS_STREAM_ENTRY)\n\t\t\t);\n\n\t\t\t// Create the proof for the stream object but only if we have an organization identity,\n\t\t\t// either from the stream or the context, as this is needed for the proof creation and immutability.\n\t\t\tif (Is.stringValue(context.organizationIdentity)) {\n\t\t\t\tentity.proofId = await this._immutableProofComponent.create(\n\t\t\t\t\tJsonLdHelper.toNodeObject(streamEntryModel)\n\t\t\t\t);\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tAuditableItemStreamMetricIds.ProofsCreatedEntry,\n\t\t\t\t\t{ index: entity.index }\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tawait this._streamEntryStorage.set(entity);\n\n\t\treturn entity.id;\n\t}\n\n\t/**\n\t * Find a stream entry.\n\t * @param streamId The stream id.\n\t * @param entryId The entry id.\n\t * @param verifyEntry Should the entry be verified.\n\t * @returns The entry entity and optional verification result, or undefined if not found.\n\t * @internal\n\t */\n\tprivate async findEntry(\n\t\tstreamId: string,\n\t\tentryId: string,\n\t\tverifyEntry?: boolean\n\t): Promise<\n\t\t| {\n\t\t\t\tentity: AuditableItemStreamEntry;\n\t\t\t\tverification?: IImmutableProofVerification;\n\t\t }\n\t\t| undefined\n\t> {\n\t\tconst conditions: IComparatorGroup<AuditableItemStreamEntry> = {\n\t\t\tconditions: [\n\t\t\t\t{\n\t\t\t\t\tproperty: \"streamId\",\n\t\t\t\t\tcomparison: ComparisonOperator.Equals,\n\t\t\t\t\tvalue: streamId\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tproperty: \"id\",\n\t\t\t\t\tcomparison: ComparisonOperator.Equals,\n\t\t\t\t\tvalue: entryId\n\t\t\t\t}\n\t\t\t],\n\t\t\tlogicalOperator: LogicalOperator.And\n\t\t};\n\n\t\tconst result = await this._streamEntryStorage.query(\n\t\t\tconditions,\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tproperty: \"dateCreated\",\n\t\t\t\t\tsortDirection: SortDirection.Descending\n\t\t\t\t}\n\t\t\t],\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\t1\n\t\t);\n\n\t\tif (result.entities.length > 0) {\n\t\t\tconst entity = result.entities[0] as AuditableItemStreamEntry;\n\n\t\t\tlet verification: IImmutableProofVerification | undefined;\n\t\t\tif ((verifyEntry ?? false) && Is.stringValue(entity.proofId)) {\n\t\t\t\tverification = await this._immutableProofComponent.verify(entity.proofId);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tentity,\n\t\t\t\tverification\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * Find stream entries.\n\t * @param streamId The stream id.\n\t * @param includeDeleted Should deleted entries be included.\n\t * @param verifyEntries Should the entries be verified.\n\t * @param conditions The conditions to filter the entries.\n\t * @param sortDirection The sort direction.\n\t * @param propertiesToReturn The properties to return.\n\t * @param limit Limit the number of entities when finding.\n\t * @param cursor The cursor.\n\t * @returns The stream entries and optional next cursor.\n\t * @internal\n\t */\n\tprivate async findEntries(\n\t\tstreamId?: string,\n\t\tincludeDeleted?: boolean,\n\t\tverifyEntries?: boolean,\n\t\tconditions?: IComparator[],\n\t\tsortDirection?: SortDirection,\n\t\tpropertiesToReturn?: (keyof AuditableItemStreamEntry)[],\n\t\tlimit?: number,\n\t\tcursor?: string\n\t): Promise<{\n\t\tentries: IAuditableItemStreamEntry[];\n\t\tcursor?: string;\n\t}> {\n\t\tconst needToVerify = verifyEntries ?? false;\n\n\t\tconst combinedConditions: IComparator[] = [];\n\n\t\tif (Is.stringValue(streamId)) {\n\t\t\tcombinedConditions.push({\n\t\t\t\tproperty: \"streamId\",\n\t\t\t\tcomparison: ComparisonOperator.Equals,\n\t\t\t\tvalue: streamId\n\t\t\t});\n\t\t}\n\n\t\tif (Is.stringValue(cursor)) {\n\t\t\tconst parts = cursor.split(\"|\");\n\t\t\tif (parts.length > 1) {\n\t\t\t\tincludeDeleted = Coerce.boolean(parts[1]);\n\t\t\t}\n\t\t}\n\n\t\tif (!(includeDeleted ?? false)) {\n\t\t\tcombinedConditions.push({\n\t\t\t\tproperty: \"dateDeleted\",\n\t\t\t\tcomparison: ComparisonOperator.Equals,\n\t\t\t\tvalue: undefined\n\t\t\t});\n\t\t}\n\n\t\t// If we need to verify the entries, we need to make sure we have\n\t\t// specific properties in the data, if the properties to return are not\n\t\t// an array then all will be retrieved anyway.\n\t\tif (needToVerify && Is.array(propertiesToReturn)) {\n\t\t\tpropertiesToReturn ??= [];\n\n\t\t\tfor (const property of AuditableItemStreamService._PROOF_KEYS_STREAM_ENTRY) {\n\t\t\t\tif (!propertiesToReturn.includes(property)) {\n\t\t\t\t\tpropertiesToReturn.push(property);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Is.arrayValue(conditions)) {\n\t\t\tcombinedConditions.push(...conditions);\n\t\t}\n\n\t\tconst result = await this._streamEntryStorage.query(\n\t\t\t{\n\t\t\t\tconditions: combinedConditions,\n\t\t\t\tlogicalOperator: LogicalOperator.And\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 ?? SortDirection.Descending\n\t\t\t\t}\n\t\t\t],\n\t\t\tpropertiesToReturn,\n\t\t\tcursor,\n\t\t\tlimit\n\t\t);\n\n\t\tlet returnCursor: string | undefined;\n\n\t\tif (Is.stringValue(result.cursor)) {\n\t\t\treturnCursor = result.cursor;\n\t\t}\n\t\tif (includeDeleted) {\n\t\t\treturnCursor = `${returnCursor ?? \"\"}|true`;\n\t\t}\n\n\t\tconst entryModels: IAuditableItemStreamEntry[] = [];\n\n\t\tfor (const entry of result.entities) {\n\t\t\tconst entryModel = this.streamEntryEntityToJsonLd(entry as AuditableItemStreamEntry);\n\n\t\t\tif (needToVerify && Is.stringValue(entry.proofId)) {\n\t\t\t\tentryModel.verification = await this._immutableProofComponent.verify(entry.proofId);\n\t\t\t}\n\t\t\tentryModels.push(entryModel);\n\t\t}\n\n\t\treturn {\n\t\t\tentries: entryModels,\n\t\t\tcursor: returnCursor\n\t\t};\n\t}\n\n\t/**\n\t * Remove the verifiable storage for the stream and entries.\n\t * @param streamEntity The stream entity.\n\t * @param removeOnlyProof Should only the proof be removed.\n\t * @returns Nothing.\n\t * @internal\n\t */\n\tprivate async internalRemoveEntries(\n\t\tstreamEntity: AuditableItemStream,\n\t\tremoveOnlyProof: boolean\n\t): Promise<void> {\n\t\tif (Is.stringValue(streamEntity.proofId)) {\n\t\t\tawait this._immutableProofComponent.removeNotarization(streamEntity.proofId);\n\t\t\tdelete streamEntity.proofId;\n\n\t\t\tawait this._streamStorage.set(streamEntity);\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemStreamMetricIds.ProofsRemovedStream\n\t\t\t);\n\t\t}\n\n\t\tconst entryIds: string[] = [];\n\t\tlet entriesResult;\n\t\tdo {\n\t\t\tentriesResult = await this._streamEntryStorage.query(\n\t\t\t\t{\n\t\t\t\t\tproperty: \"streamId\",\n\t\t\t\t\tvalue: streamEntity.id,\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\tentriesResult?.cursor\n\t\t\t);\n\n\t\t\tfor (const streamEntry of entriesResult.entities) {\n\t\t\t\tentryIds.push(streamEntry.id as string);\n\t\t\t\tif (Is.stringValue(streamEntry.proofId)) {\n\t\t\t\t\tawait this._immutableProofComponent.removeNotarization(streamEntry.proofId);\n\t\t\t\t\tdelete streamEntry.proofId;\n\n\t\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\t\tAuditableItemStreamMetricIds.ProofsRemovedEntry\n\t\t\t\t\t);\n\n\t\t\t\t\t// If we are only removing the proof, we need to set the entry\n\t\t\t\t\t// otherwise the entry is going to be removed later anyway.\n\t\t\t\t\tif (removeOnlyProof) {\n\t\t\t\t\t\tawait this._streamEntryStorage.set(streamEntry as AuditableItemStreamEntry);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} while (Is.stringValue(entriesResult.cursor));\n\n\t\tif (!removeOnlyProof) {\n\t\t\tfor (const entryId of entryIds) {\n\t\t\t\tawait this._streamEntryStorage.remove(entryId);\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"auditableItemStreamService.js","sourceRoot":"","sources":["../../src/auditableItemStreamService.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport {\n\tAuditableItemStreamContexts,\n\tAuditableItemStreamDataTypes,\n\tAuditableItemStreamMetricIds,\n\tAuditableItemStreamMetrics,\n\tAuditableItemStreamModes,\n\tAuditableItemStreamTopics,\n\tAuditableItemStreamTypes,\n\ttype IAuditableItemStream,\n\ttype IAuditableItemStreamBase,\n\ttype IAuditableItemStreamComponent,\n\ttype IAuditableItemStreamEntry,\n\ttype IAuditableItemStreamEntryList,\n\ttype IAuditableItemStreamEntryObjectList,\n\ttype IAuditableItemStreamEventBusStreamCreated,\n\ttype IAuditableItemStreamEventBusStreamDeleted,\n\ttype IAuditableItemStreamEventBusStreamEntryCreated,\n\ttype IAuditableItemStreamEventBusStreamEntryDeleted,\n\ttype IAuditableItemStreamEventBusStreamEntryUpdated,\n\ttype IAuditableItemStreamEventBusStreamUpdated,\n\ttype IAuditableItemStreamList\n} from \"@twin.org/auditable-item-stream-models\";\nimport { ContextIdHelper, ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport {\n\tCoerce,\n\tComponentFactory,\n\tGeneralError,\n\tGuards,\n\tIs,\n\tMutex,\n\tNotFoundError,\n\tObjectHelper,\n\tRandomHelper,\n\tUrn,\n\tValidation,\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\ttype IComparatorGroup\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\tImmutableProofDataTypes,\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 { AuditableItemStream } from \"./entities/auditableItemStream.js\";\nimport type { AuditableItemStreamEntry } from \"./entities/auditableItemStreamEntry.js\";\nimport type { IAuditableItemStreamServiceConfig } from \"./models/IAuditableItemStreamServiceConfig.js\";\nimport type { IAuditableItemStreamServiceConstructorOptions } from \"./models/IAuditableItemStreamServiceConstructorOptions.js\";\nimport type { IAuditableItemStreamServiceContext } from \"./models/IAuditableItemStreamServiceContext.js\";\n\n/**\n * Class for performing auditable item stream operations.\n */\nexport class AuditableItemStreamService implements IAuditableItemStreamComponent {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<AuditableItemStreamService>();\n\n\t/**\n\t * The namespace for the service.\n\t * @internal\n\t */\n\tprivate static readonly _NAMESPACE: string = \"ais\";\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_STREAM: (keyof AuditableItemStream)[] = [\n\t\t\"id\",\n\t\t\"organizationIdentity\",\n\t\t\"userIdentity\",\n\t\t\"dateCreated\"\n\t];\n\n\t/**\n\t * The keys to pick when creating the proof for the stream entry.\n\t * @internal\n\t */\n\tprivate static readonly _PROOF_KEYS_STREAM_ENTRY: (keyof AuditableItemStreamEntry)[] = [\n\t\t\"id\",\n\t\t\"streamId\",\n\t\t\"userIdentity\",\n\t\t\"dateCreated\",\n\t\t\"entryObject\",\n\t\t\"index\"\n\t];\n\n\t/**\n\t * The configuration for the connector.\n\t * @internal\n\t */\n\tprivate readonly _config: IAuditableItemStreamServiceConfig;\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 streams.\n\t * @internal\n\t */\n\tprivate readonly _streamStorage: IEntityStorageConnector<AuditableItemStream>;\n\n\t/**\n\t * The entity storage for stream entries.\n\t * @internal\n\t */\n\tprivate readonly _streamEntryStorage: IEntityStorageConnector<AuditableItemStreamEntry>;\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 * The default interval for the integrity checks.\n\t * @internal\n\t */\n\tprivate readonly _defaultImmutableInterval: number;\n\n\t/**\n\t * Create a new instance of AuditableItemStreamService.\n\t * @param options The dependencies for the auditable item stream connector.\n\t */\n\tconstructor(options?: IAuditableItemStreamServiceConstructorOptions) {\n\t\tthis._immutableProofComponent = ComponentFactory.get(\n\t\t\toptions?.immutableProofComponentType ?? \"immutable-proof\"\n\t\t);\n\n\t\tthis._streamStorage = EntityStorageConnectorFactory.get(\n\t\t\toptions?.streamEntityStorageType ?? nameofKebabCase<AuditableItemStream>()\n\t\t);\n\n\t\tthis._streamEntryStorage = EntityStorageConnectorFactory.get(\n\t\t\toptions?.streamEntryEntityStorageType ?? nameofKebabCase<AuditableItemStreamEntry>()\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\tthis._telemetryComponent = ComponentFactory.getIfExists<ITelemetryComponent>(\n\t\t\toptions?.telemetryComponentType\n\t\t);\n\n\t\tthis._config = options?.config ?? {};\n\t\tthis._defaultImmutableInterval = this._config.defaultImmutableInterval ?? 10;\n\n\t\tSchemaOrgDataTypes.registerRedirects();\n\t\tAuditableItemStreamDataTypes.registerTypes();\n\t\tJsonLdDataTypes.registerTypes();\n\t\tImmutableProofDataTypes.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 AuditableItemStreamService.CLASS_NAME;\n\t}\n\n\t/**\n\t * Register all AIS metrics with the telemetry component.\n\t * @returns A promise that resolves when the metrics have been registered.\n\t */\n\tpublic async start(): Promise<void> {\n\t\tif (Is.undefined(this._telemetryComponent)) {\n\t\t\treturn;\n\t\t}\n\t\tawait MetricHelper.createMetrics(this._telemetryComponent, AuditableItemStreamMetrics);\n\t}\n\n\t/**\n\t * Create a new stream.\n\t * @param stream The stream to create.\n\t * @returns The id of the new stream item.\n\t */\n\tpublic async create(stream: IAuditableItemStreamBase): Promise<string> {\n\t\tGuards.object(AuditableItemStreamService.CLASS_NAME, nameof(stream), stream);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tContextIdHelper.guard(contextIds, ContextIdKeys.Organization);\n\n\t\ttry {\n\t\t\tconst ownerOrganizationId =\n\t\t\t\tcontextIds[ContextIdKeys.UserOrganization] ?? contextIds[ContextIdKeys.Organization];\n\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(stream),\n\t\t\t\t`${AuditableItemStreamContexts.Namespace}${AuditableItemStreamTypes.Stream}Base`,\n\t\t\t\tstream,\n\t\t\t\tschemaValidationFailures\n\t\t\t);\n\t\t\tValidation.asValidationError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\tnameof(stream),\n\t\t\t\tschemaValidationFailures\n\t\t\t);\n\n\t\t\tif (stream.closed && !Is.arrayValue(stream.entries?.[SchemaOrgTypes.ItemListElement])) {\n\t\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"closedRequiresEntries\");\n\t\t\t}\n\n\t\t\tif (Is.object(stream.annotationObject)) {\n\t\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\t\tawait JsonLdHelper.validate(stream.annotationObject, validationFailures);\n\t\t\t\tValidation.asValidationError(\n\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\tnameof(stream.annotationObject),\n\t\t\t\t\tvalidationFailures\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst context: IAuditableItemStreamServiceContext = {\n\t\t\t\tnow: new Date(Date.now()).toISOString(),\n\t\t\t\tcontextIds,\n\t\t\t\tindexCounter: 0,\n\t\t\t\timmutableInterval: stream?.immutableInterval ?? this._defaultImmutableInterval,\n\t\t\t\torganizationIdentity: ownerOrganizationId\n\t\t\t};\n\n\t\t\tconst streamEntity: AuditableItemStream = {\n\t\t\t\tid,\n\t\t\t\torganizationIdentity: ownerOrganizationId,\n\t\t\t\tuserIdentity: contextIds?.[ContextIdKeys.User],\n\t\t\t\tdateCreated: context.now,\n\t\t\t\timmutableInterval: context.immutableInterval,\n\t\t\t\tclosed: stream.closed,\n\t\t\t\tmode: stream.mode,\n\t\t\t\tnumberOfItems: 0\n\t\t\t};\n\n\t\t\tconst streamUrn = await this.createStreamProof(streamEntity, context.immutableInterval);\n\n\t\t\tif (Is.arrayValue(stream.entries?.[SchemaOrgTypes.ItemListElement])) {\n\t\t\t\tfor (const entry of stream.entries[SchemaOrgTypes.ItemListElement]) {\n\t\t\t\t\tawait this.setEntry(context, id, entry);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add these dynamic properties to the stream object after the proof has been created.\n\t\t\tstreamEntity.dateModified = context.now;\n\t\t\tstreamEntity.annotationObject = stream.annotationObject;\n\t\t\tstreamEntity.numberOfItems = context.indexCounter;\n\n\t\t\tawait this._streamStorage.set(streamEntity);\n\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemStreamMetricIds.StreamsCreated,\n\t\t\t\t{\n\t\t\t\t\tmode: streamEntity.mode ?? AuditableItemStreamModes.Default,\n\t\t\t\t\timmutableInterval: context.immutableInterval\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tawait this._eventBusComponent?.publish<IAuditableItemStreamEventBusStreamCreated>(\n\t\t\t\tAuditableItemStreamTopics.StreamCreated,\n\t\t\t\t{ id: streamUrn }\n\t\t\t);\n\n\t\t\treturn streamUrn;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.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 * Close a stream.\n\t * @param id The id of the stream to close.\n\t * @returns A promise that resolves when the stream has been closed.\n\t */\n\tpublic async close(id: string): Promise<void> {\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\tconst streamId = urnParsed.namespaceSpecific(0);\n\t\tawait Mutex.lock(streamId, { throwOnTimeout: true });\n\t\ttry {\n\t\t\tconst streamEntity = await this._streamStorage.get(streamId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemStreamService.CLASS_NAME, \"streamNotFound\", id);\n\t\t\t}\n\n\t\t\tif (!streamEntity.closed) {\n\t\t\t\tstreamEntity.closed = true;\n\t\t\t\tstreamEntity.dateModified = new Date(Date.now()).toISOString();\n\n\t\t\t\tawait this._streamStorage.set(streamEntity);\n\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tAuditableItemStreamMetricIds.StreamsClosed\n\t\t\t\t);\n\n\t\t\t\tawait this._eventBusComponent?.publish<IAuditableItemStreamEventBusStreamUpdated>(\n\t\t\t\t\tAuditableItemStreamTopics.StreamUpdated,\n\t\t\t\t\t{ id }\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\"closeFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tMutex.unlock(streamId);\n\t\t}\n\t}\n\n\t/**\n\t * Update a stream.\n\t * @param stream The stream to update, does not update entries.\n\t * @returns A promise that resolves when the stream has been updated.\n\t */\n\tpublic async update(\n\t\tstream: Pick<IAuditableItemStream, \"@context\" | \"type\" | \"id\" | \"annotationObject\">\n\t): Promise<void> {\n\t\tGuards.object(AuditableItemStreamService.CLASS_NAME, nameof(stream), stream);\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(stream.id), stream.id);\n\n\t\tconst urnParsed = Urn.fromValidString(stream.id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: stream.id\n\t\t\t});\n\t\t}\n\n\t\tconst streamId = urnParsed.namespaceSpecific(0);\n\t\tawait Mutex.lock(streamId, { throwOnTimeout: true });\n\t\ttry {\n\t\t\tconst schemaValidationFailures: IValidationFailure[] = [];\n\t\t\tawait DataTypeHelper.validate(\n\t\t\t\tnameof(stream),\n\t\t\t\t`${AuditableItemStreamContexts.Namespace}${AuditableItemStreamTypes.Stream}`,\n\t\t\t\tstream,\n\t\t\t\tschemaValidationFailures\n\t\t\t);\n\t\t\tValidation.asValidationError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\tnameof(stream),\n\t\t\t\tschemaValidationFailures\n\t\t\t);\n\n\t\t\tconst streamEntity = await this._streamStorage.get(streamId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemStreamService.CLASS_NAME, \"streamNotFound\", stream.id);\n\t\t\t}\n\n\t\t\tif (Is.object(stream.annotationObject)) {\n\t\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\t\tawait JsonLdHelper.validate(stream.annotationObject, validationFailures);\n\t\t\t\tValidation.asValidationError(\n\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\tnameof(stream.annotationObject),\n\t\t\t\t\tvalidationFailures\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tlet changed = false;\n\n\t\t\tif (!ObjectHelper.equal(streamEntity.annotationObject, stream.annotationObject, false)) {\n\t\t\t\tstreamEntity.annotationObject = stream.annotationObject;\n\t\t\t\tchanged = true;\n\t\t\t}\n\n\t\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\t\tconst ownerOrganizationId =\n\t\t\t\tcontextIds?.[ContextIdKeys.UserOrganization] ?? contextIds?.[ContextIdKeys.Organization];\n\t\t\tif (\n\t\t\t\t!Is.stringValue(streamEntity.organizationIdentity) &&\n\t\t\t\tIs.stringValue(ownerOrganizationId)\n\t\t\t) {\n\t\t\t\tstreamEntity.organizationIdentity = ownerOrganizationId;\n\t\t\t\tchanged = true;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!Is.stringValue(streamEntity.proofId) &&\n\t\t\t\tIs.stringValue(streamEntity.organizationIdentity)\n\t\t\t) {\n\t\t\t\tawait this.createStreamProof(\n\t\t\t\t\tstreamEntity,\n\t\t\t\t\tstreamEntity.immutableInterval ?? this._defaultImmutableInterval\n\t\t\t\t);\n\t\t\t\tif (Is.stringValue(streamEntity.proofId)) {\n\t\t\t\t\tchanged = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (changed) {\n\t\t\t\tstreamEntity.dateModified = new Date(Date.now()).toISOString();\n\n\t\t\t\tawait this._streamStorage.set(streamEntity);\n\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tAuditableItemStreamMetricIds.StreamsUpdated\n\t\t\t\t);\n\n\t\t\t\tawait this._eventBusComponent?.publish<IAuditableItemStreamEventBusStreamUpdated>(\n\t\t\t\t\tAuditableItemStreamTopics.StreamUpdated,\n\t\t\t\t\t{ id: stream.id }\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.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} finally {\n\t\t\tMutex.unlock(streamId);\n\t\t}\n\t}\n\n\t/**\n\t * Get a stream header without the entries.\n\t * @param id The id of the stream to get.\n\t * @param cursor Cursor to use for next chunk of entries.\n\t * @param limit Limit the number of entries to return, only applicable if includeEntries is true.\n\t * @param options Additional options for the get operation.\n\t * @param options.includeEntries Whether to include the entries, defaults to false.\n\t * @param options.includeDeleted Whether to include deleted entries, defaults to false.\n\t * @param options.verifyStream Should the stream be verified, defaults to false.\n\t * @param options.verifyEntries Should the entries be verified, defaults to false.\n\t * @returns The stream and entries if found.\n\t * @throws NotFoundError if the stream is not found\n\t */\n\tpublic async get(\n\t\tid: string,\n\t\tcursor?: string,\n\t\tlimit?: number,\n\t\toptions?: {\n\t\t\tincludeEntries?: boolean;\n\t\t\tincludeDeleted?: boolean;\n\t\t\tverifyStream?: boolean;\n\t\t\tverifyEntries?: boolean;\n\t\t}\n\t): Promise<{\n\t\tstream: IAuditableItemStream;\n\t\tcursor?: string;\n\t}> {\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst streamId = urnParsed.namespaceSpecific(0);\n\n\t\t\tconst streamEntity = await this._streamStorage.get(streamId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemStreamService.CLASS_NAME, \"streamNotFound\", id);\n\t\t\t}\n\n\t\t\tconst verifyStream = options?.verifyStream ?? false;\n\t\t\tconst verifyEntries = options?.verifyEntries ?? false;\n\n\t\t\tconst streamModel = this.streamEntityToJsonLd(streamEntity);\n\t\t\tlet returnCursor;\n\n\t\t\tif (options?.includeEntries) {\n\t\t\t\tconst result = await this.findEntries(\n\t\t\t\t\tstreamId,\n\t\t\t\t\toptions?.includeDeleted,\n\t\t\t\t\tverifyEntries,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tlimit,\n\t\t\t\t\tcursor\n\t\t\t\t);\n\t\t\t\tstreamModel.entries = {\n\t\t\t\t\ttype: SchemaOrgTypes.ItemList,\n\t\t\t\t\t[SchemaOrgTypes.ItemListElement]: result.entries\n\t\t\t\t};\n\t\t\t\treturnCursor = result.cursor;\n\t\t\t}\n\n\t\t\tif (verifyStream && Is.stringValue(streamEntity.proofId)) {\n\t\t\t\tstreamModel.verification = await this._immutableProofComponent.verify(streamEntity.proofId);\n\t\t\t}\n\n\t\t\tif (verifyStream || verifyEntries) {\n\t\t\t\tstreamModel[\"@context\"].push(ImmutableProofContexts.Context);\n\t\t\t}\n\n\t\t\tconst result = await JsonLdProcessor.compact(streamModel, streamModel[\"@context\"]);\n\t\t\treturn {\n\t\t\t\tstream: result,\n\t\t\t\tcursor: returnCursor\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"getFailed\", undefined, error);\n\t\t}\n\t}\n\n\t/**\n\t * Delete the stream.\n\t * @param id The id of the stream to remove.\n\t * @returns A promise that resolves when the stream has been removed.\n\t */\n\tpublic async remove(id: string): Promise<void> {\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(id), id);\n\n\t\tconst urnParsed = Urn.fromValidString(id);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid\n\t\t\t});\n\t\t}\n\n\t\tconst streamId = urnParsed.namespaceSpecific(0);\n\t\tawait Mutex.lock(streamId, { throwOnTimeout: true });\n\n\t\ttry {\n\t\t\tconst streamEntity = await this._streamStorage.get(streamId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemStreamService.CLASS_NAME, \"streamNotFound\", id);\n\t\t\t}\n\n\t\t\tawait this.internalRemoveEntries(streamEntity, false);\n\n\t\t\tawait this._streamStorage.remove(streamEntity.id);\n\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemStreamMetricIds.StreamsDeleted\n\t\t\t);\n\n\t\t\tawait this._eventBusComponent?.publish<IAuditableItemStreamEventBusStreamDeleted>(\n\t\t\t\tAuditableItemStreamTopics.StreamDeleted,\n\t\t\t\t{ id }\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\"removingFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tMutex.unlock(streamId);\n\t\t}\n\t}\n\n\t/**\n\t * Query all the streams, will not return entries.\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 descending.\n\t * @param properties The properties to return, if not provided defaults to id, created 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\tconditions?: IComparator[],\n\t\torderBy?: keyof Pick<IAuditableItemStream, \"dateCreated\" | \"dateModified\">,\n\t\torderByDirection?: SortDirection,\n\t\tproperties?: (keyof IAuditableItemStream)[],\n\t\tcursor?: string,\n\t\tlimit?: number\n\t): Promise<{\n\t\tentries: IAuditableItemStreamList;\n\t\tcursor?: string;\n\t}> {\n\t\ttry {\n\t\t\tlet propertiesToReturn: (keyof IAuditableItemStream)[] = properties ?? [\n\t\t\t\t\"id\",\n\t\t\t\t\"dateCreated\",\n\t\t\t\t\"dateModified\",\n\t\t\t\t\"annotationObject\"\n\t\t\t];\n\t\t\tconst orderProperty: keyof IAuditableItemStream = orderBy ?? \"dateCreated\";\n\t\t\tconst orderDirection = orderByDirection ?? SortDirection.Descending;\n\n\t\t\t// We never return entries from this method as this would involve a lot of lookups\n\t\t\t// and we want to keep this method fast.\n\t\t\tif (propertiesToReturn.includes(\"entries\")) {\n\t\t\t\tpropertiesToReturn = propertiesToReturn.filter(p => p !== \"entries\");\n\t\t\t}\n\n\t\t\tconditions ??= [];\n\n\t\t\tconst results = await this._streamStorage.query(\n\t\t\t\tconditions.length > 0\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tconditions,\n\t\t\t\t\t\t\tlogicalOperator: LogicalOperator.And\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 AuditableItemStream)[],\n\t\t\t\tcursor,\n\t\t\t\tlimit\n\t\t\t);\n\n\t\t\tconst list: IAuditableItemStreamList = {\n\t\t\t\t\"@context\": [\n\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\tAuditableItemStreamContexts.Context,\n\t\t\t\t\tAuditableItemStreamContexts.ContextCommon\n\t\t\t\t],\n\t\t\t\ttype: [SchemaOrgTypes.ItemList, AuditableItemStreamTypes.StreamList],\n\t\t\t\t[SchemaOrgTypes.ItemListElement]: (results.entities as AuditableItemStream[]).map(e =>\n\t\t\t\t\tthis.streamEntityToJsonLd(e)\n\t\t\t\t)\n\t\t\t};\n\n\t\t\tconst result = await JsonLdProcessor.compact(list, list[\"@context\"]);\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\tAuditableItemStreamService.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 * Create an entry in the stream.\n\t * @param streamId The id of the stream to update.\n\t * @param entryObject The object for the stream as JSON-LD.\n\t * @returns The id of the created entry, if not provided.\n\t */\n\tpublic async createEntry(streamId: string, entryObject: IJsonLdNodeObject): Promise<string> {\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(streamId), streamId);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\n\t\tconst urnParsed = Urn.fromValidString(streamId);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: streamId\n\t\t\t});\n\t\t}\n\n\t\tconst streamIdParts = urnParsed.namespaceSpecific(0);\n\t\tawait Mutex.lock(streamIdParts, { throwOnTimeout: true });\n\t\ttry {\n\t\t\tconst streamEntity = await this._streamStorage.get(streamIdParts);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\t\"streamNotFound\",\n\t\t\t\t\tstreamIdParts\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (streamEntity.closed) {\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tAuditableItemStreamMetricIds.ClosedStreamRejections,\n\t\t\t\t\t{ operation: \"createEntry\" }\n\t\t\t\t);\n\t\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"streamClosed\", {\n\t\t\t\t\tid: streamId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst context: IAuditableItemStreamServiceContext = {\n\t\t\t\tnow: new Date(Date.now()).toISOString(),\n\t\t\t\tcontextIds,\n\t\t\t\tindexCounter: streamEntity.numberOfItems,\n\t\t\t\timmutableInterval: streamEntity.immutableInterval,\n\t\t\t\torganizationIdentity:\n\t\t\t\t\tstreamEntity.organizationIdentity ?? contextIds?.[ContextIdKeys.Organization]\n\t\t\t};\n\n\t\t\tconst createdId = await this.setEntry(context, streamEntity.id, {\n\t\t\t\tentryObject\n\t\t\t});\n\n\t\t\tstreamEntity.dateModified = context.now;\n\t\t\tstreamEntity.numberOfItems = context.indexCounter;\n\n\t\t\tawait this._streamStorage.set(streamEntity);\n\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemStreamMetricIds.EntriesCreated,\n\t\t\t\t{\n\t\t\t\t\thasProof:\n\t\t\t\t\t\tcontext.immutableInterval > 0 &&\n\t\t\t\t\t\t(context.indexCounter - 1) % context.immutableInterval === 0\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tconst fullId = new Urn(AuditableItemStreamService._NAMESPACE, [\n\t\t\t\tstreamEntity.id,\n\t\t\t\tcreatedId\n\t\t\t]).toString();\n\n\t\t\tawait this._eventBusComponent?.publish<IAuditableItemStreamEventBusStreamEntryCreated>(\n\t\t\t\tAuditableItemStreamTopics.StreamEntryCreated,\n\t\t\t\t{ id: streamId, entryId: 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\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\"creatingEntryFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tMutex.unlock(streamIdParts);\n\t\t}\n\t}\n\n\t/**\n\t * Get the entry from the stream.\n\t * @param streamId The id of the stream to get.\n\t * @param entryId The id of the stream entry to get.\n\t * @param options Additional options for the get operation.\n\t * @param options.verifyEntry Should the entry be verified, defaults to false.\n\t * @returns The stream and entries if found.\n\t * @throws NotFoundError if the stream is not found.\n\t */\n\tpublic async getEntry(\n\t\tstreamId: string,\n\t\tentryId: string,\n\t\toptions?: {\n\t\t\tverifyEntry?: boolean;\n\t\t}\n\t): Promise<IAuditableItemStreamEntry> {\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(streamId), streamId);\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(entryId), entryId);\n\n\t\tconst urnParsed = Urn.fromValidString(streamId);\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: streamId\n\t\t\t});\n\t\t}\n\n\t\tconst urnParsedEntry = Urn.fromValidString(entryId);\n\t\tif (urnParsedEntry.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: entryId\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst streamNamespaceId = urnParsed.namespaceSpecific(0);\n\n\t\t\tconst streamEntity = await this._streamStorage.get(streamNamespaceId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemStreamService.CLASS_NAME, \"streamNotFound\", streamId);\n\t\t\t}\n\n\t\t\tconst verifyEntry = options?.verifyEntry ?? false;\n\n\t\t\tconst entryNamespaceId = urnParsedEntry.namespaceSpecific(1);\n\t\t\tconst result = await this.findEntry(streamEntity.id, entryNamespaceId, verifyEntry);\n\t\t\tif (Is.empty(result)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\t\"streamEntryNotFound\",\n\t\t\t\t\tentryId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst entry = this.streamEntryEntityToJsonLd(result.entity);\n\n\t\t\tif (verifyEntry) {\n\t\t\t\tentry[\"@context\"] = JsonLdProcessor.combineContexts(\n\t\t\t\t\tentry[\"@context\"],\n\t\t\t\t\tImmutableProofContexts.Context\n\t\t\t\t) as IAuditableItemStreamEntry[\"@context\"];\n\t\t\t\tentry.verification = result.verification;\n\t\t\t}\n\n\t\t\tconst result2 = await JsonLdProcessor.compact(entry, entry[\"@context\"]);\n\t\t\treturn result2;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\"gettingEntryFailed\",\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 the entry object from the stream.\n\t * @param streamId The id of the stream to get.\n\t * @param entryId The id of the stream entry to get.\n\t * @returns The stream and entries if found.\n\t * @throws NotFoundError if the stream is not found.\n\t */\n\tpublic async getEntryObject(streamId: string, entryId: string): Promise<IJsonLdNodeObject> {\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(streamId), streamId);\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(entryId), entryId);\n\n\t\tconst urnParsed = Urn.fromValidString(streamId);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: streamId\n\t\t\t});\n\t\t}\n\n\t\tconst urnParsedEntry = Urn.fromValidString(entryId);\n\n\t\tif (urnParsedEntry.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: entryId\n\t\t\t});\n\t\t}\n\n\t\ttry {\n\t\t\tconst streamNamespaceId = urnParsed.namespaceSpecific(0);\n\n\t\t\tconst streamEntity = await this._streamStorage.get(streamNamespaceId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemStreamService.CLASS_NAME, \"streamNotFound\", streamId);\n\t\t\t}\n\n\t\t\tconst entryNamespaceId = urnParsedEntry.namespaceSpecific(1);\n\t\t\tconst result = await this.findEntry(streamEntity.id, entryNamespaceId);\n\t\t\tif (Is.empty(result)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\t\"streamEntryNotFound\",\n\t\t\t\t\tentryId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn result.entity.entryObject;\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\"gettingEntryObjectFailed\",\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 an entry in the stream.\n\t * @param streamId The id of the stream to update.\n\t * @param entryId The id of the entry to update.\n\t * @param entryObject The object for the entry as JSON-LD.\n\t * @returns A promise that resolves when the entry has been updated.\n\t */\n\tpublic async updateEntry(\n\t\tstreamId: string,\n\t\tentryId: string,\n\t\tentryObject: IJsonLdNodeObject\n\t): Promise<void> {\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(streamId), streamId);\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(entryId), entryId);\n\n\t\tconst urnParsed = Urn.fromValidString(streamId);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: streamId\n\t\t\t});\n\t\t}\n\n\t\tconst urnParsedEntry = Urn.fromValidString(entryId);\n\n\t\tif (urnParsedEntry.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: entryId\n\t\t\t});\n\t\t}\n\n\t\tconst streamNamespaceId = urnParsed.namespaceSpecific(0);\n\t\tawait Mutex.lock(streamNamespaceId, { throwOnTimeout: true });\n\t\ttry {\n\t\t\tconst streamEntryNamespaceId = urnParsedEntry.namespaceMethod();\n\n\t\t\tif (streamNamespaceId !== streamEntryNamespaceId) {\n\t\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\t\tnamespace: streamNamespaceId,\n\t\t\t\t\tid: streamEntryNamespaceId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst streamEntity = await this._streamStorage.get(streamNamespaceId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemStreamService.CLASS_NAME, \"streamNotFound\", streamId);\n\t\t\t}\n\n\t\t\tif (streamEntity.closed) {\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tAuditableItemStreamMetricIds.ClosedStreamRejections,\n\t\t\t\t\t{ operation: \"updateEntry\" }\n\t\t\t\t);\n\t\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"streamClosed\", {\n\t\t\t\t\tid: streamId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (streamEntity.mode === AuditableItemStreamModes.AppendOnly) {\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tAuditableItemStreamMetricIds.AppendOnlyRejections,\n\t\t\t\t\t{ operation: \"updateEntry\" }\n\t\t\t\t);\n\t\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"appendOnlyNoEntryUpdates\", {\n\t\t\t\t\tid: streamId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst entryNamespaceId = urnParsedEntry.namespaceSpecific(1);\n\t\t\tconst existing = await this.findEntry(streamEntity.id, entryNamespaceId);\n\t\t\tif (Is.empty(existing)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\t\"streamEntryNotFound\",\n\t\t\t\t\tentryId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\t\tconst ownerOrganizationId =\n\t\t\t\tcontextIds?.[ContextIdKeys.UserOrganization] ?? contextIds?.[ContextIdKeys.Organization];\n\n\t\t\tconst context: IAuditableItemStreamServiceContext = {\n\t\t\t\tnow: new Date(Date.now()).toISOString(),\n\t\t\t\tcontextIds,\n\t\t\t\tindexCounter: streamEntity.numberOfItems,\n\t\t\t\timmutableInterval: streamEntity.immutableInterval,\n\t\t\t\torganizationIdentity: streamEntity.organizationIdentity ?? ownerOrganizationId\n\t\t\t};\n\n\t\t\tawait this.setEntry(context, streamEntity.id, {\n\t\t\t\t...existing.entity,\n\t\t\t\tentryObject\n\t\t\t});\n\n\t\t\tstreamEntity.dateModified = context.now;\n\t\t\tstreamEntity.numberOfItems = context.indexCounter;\n\n\t\t\tawait this._streamStorage.set(streamEntity);\n\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemStreamMetricIds.EntriesUpdated\n\t\t\t);\n\n\t\t\tawait this._eventBusComponent?.publish<IAuditableItemStreamEventBusStreamEntryUpdated>(\n\t\t\t\tAuditableItemStreamTopics.StreamEntryUpdated,\n\t\t\t\t{ id: streamId, entryId }\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\"updatingEntryFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tMutex.unlock(streamNamespaceId);\n\t\t}\n\t}\n\n\t/**\n\t * Delete from the stream.\n\t * @param streamId The id of the stream to remove from.\n\t * @param entryId The id of the entry to remove.\n\t * @returns A promise that resolves when the entry has been removed.\n\t */\n\tpublic async removeEntry(streamId: string, entryId: string): Promise<void> {\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(streamId), streamId);\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(entryId), entryId);\n\n\t\tconst urnParsed = Urn.fromValidString(streamId);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: streamId\n\t\t\t});\n\t\t}\n\n\t\tconst urnParsedEntry = Urn.fromValidString(entryId);\n\t\tif (urnParsedEntry.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: entryId\n\t\t\t});\n\t\t}\n\n\t\tconst streamNamespaceId = urnParsed.namespaceSpecific(0);\n\t\tawait Mutex.lock(streamNamespaceId, { throwOnTimeout: true });\n\t\ttry {\n\t\t\tconst streamEntryNamespaceId = urnParsedEntry.namespaceMethod();\n\n\t\t\tif (streamNamespaceId !== streamEntryNamespaceId) {\n\t\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\t\tnamespace: streamNamespaceId,\n\t\t\t\t\tid: streamEntryNamespaceId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst streamEntity = await this._streamStorage.get(streamNamespaceId);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(AuditableItemStreamService.CLASS_NAME, \"streamNotFound\", streamId);\n\t\t\t}\n\n\t\t\tif (streamEntity.mode === AuditableItemStreamModes.AppendOnly) {\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tAuditableItemStreamMetricIds.AppendOnlyRejections,\n\t\t\t\t\t{ operation: \"removeEntry\" }\n\t\t\t\t);\n\t\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"appendOnlyNoEntryRemovals\", {\n\t\t\t\t\tid: streamId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst entryNamespaceId = urnParsedEntry.namespaceSpecific(1);\n\t\t\tconst result = await this.findEntry(streamNamespaceId, entryNamespaceId);\n\t\t\tif (Is.empty(result)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\t\"streamEntryNotFound\",\n\t\t\t\t\tentryId\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (Is.empty(result.entity.dateDeleted)) {\n\t\t\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\t\t\tconst ownerOrganizationId =\n\t\t\t\t\tcontextIds?.[ContextIdKeys.UserOrganization] ?? contextIds?.[ContextIdKeys.Organization];\n\n\t\t\t\tconst context: IAuditableItemStreamServiceContext = {\n\t\t\t\t\tnow: new Date(Date.now()).toISOString(),\n\t\t\t\t\tcontextIds,\n\t\t\t\t\tindexCounter: streamEntity.numberOfItems,\n\t\t\t\t\timmutableInterval: streamEntity.immutableInterval,\n\t\t\t\t\torganizationIdentity: streamEntity.organizationIdentity ?? ownerOrganizationId\n\t\t\t\t};\n\n\t\t\t\tawait this.setEntry(context, streamEntity.id, {\n\t\t\t\t\t...result.entity,\n\t\t\t\t\tdateDeleted: context.now\n\t\t\t\t});\n\n\t\t\t\tstreamEntity.dateModified = context.now;\n\t\t\t\tstreamEntity.numberOfItems = context.indexCounter;\n\t\t\t\tawait this._streamStorage.set(streamEntity);\n\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tAuditableItemStreamMetricIds.EntriesDeleted\n\t\t\t\t);\n\n\t\t\t\tawait this._eventBusComponent?.publish<IAuditableItemStreamEventBusStreamEntryDeleted>(\n\t\t\t\t\tAuditableItemStreamTopics.StreamEntryDeleted,\n\t\t\t\t\t{ id: streamId, entryId }\n\t\t\t\t);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\"removingEntryFailed\",\n\t\t\t\tundefined,\n\t\t\t\terror\n\t\t\t);\n\t\t} finally {\n\t\t\tMutex.unlock(streamNamespaceId);\n\t\t}\n\t}\n\n\t/**\n\t * Get the entries for the stream.\n\t * @param streamId The id of the stream to get, if undefined returns all matching entries.\n\t * @param options Additional options for the get operation.\n\t * @param options.conditions The conditions to filter the stream.\n\t * @param options.includeDeleted Whether to include deleted entries, defaults to false.\n\t * @param options.verifyEntries Should the entries be verified, defaults to false.\n\t * @param options.limit How many entries to return.\n\t * @param options.cursor Cursor to use for next chunk of data.\n\t * @param options.order Retrieve the entries in ascending/descending time order, defaults to Ascending.\n\t * @returns The stream and entries if found.\n\t * @throws NotFoundError if the stream is not found.\n\t */\n\tpublic async getEntries(\n\t\tstreamId?: string,\n\t\toptions?: {\n\t\t\tconditions?: IComparator[];\n\t\t\tincludeDeleted?: boolean;\n\t\t\tverifyEntries?: boolean;\n\t\t\tlimit?: number;\n\t\t\tcursor?: string;\n\t\t\torder?: SortDirection;\n\t\t}\n\t): Promise<{\n\t\tentries: IAuditableItemStreamEntryList;\n\t\tcursor?: string;\n\t}> {\n\t\tlet streamNamespaceId;\n\t\tif (!Is.empty(streamId)) {\n\t\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(streamId), streamId);\n\n\t\t\tconst urnParsed = Urn.fromValidString(streamId);\n\n\t\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\t\tid: streamId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tstreamNamespaceId = urnParsed.namespaceSpecific(0);\n\t\t}\n\n\t\ttry {\n\t\t\tif (Is.stringValue(streamNamespaceId)) {\n\t\t\t\tconst streamEntity = await this._streamStorage.get(streamNamespaceId);\n\n\t\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\t\t\"streamNotFound\",\n\t\t\t\t\t\tstreamId\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst verifyEntries = options?.verifyEntries ?? false;\n\n\t\t\tconst result = await this.findEntries(\n\t\t\t\tstreamNamespaceId,\n\t\t\t\toptions?.includeDeleted,\n\t\t\t\tverifyEntries,\n\t\t\t\toptions?.conditions,\n\t\t\t\toptions?.order,\n\t\t\t\tundefined,\n\t\t\t\toptions?.limit,\n\t\t\t\toptions?.cursor\n\t\t\t);\n\n\t\t\tconst list: IAuditableItemStreamEntryList = {\n\t\t\t\t\"@context\": [\n\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\tAuditableItemStreamContexts.Context,\n\t\t\t\t\tAuditableItemStreamContexts.ContextCommon\n\t\t\t\t],\n\t\t\t\ttype: [SchemaOrgTypes.ItemList, AuditableItemStreamTypes.StreamEntryList],\n\t\t\t\t[SchemaOrgTypes.ItemListElement]: result.entries\n\t\t\t};\n\n\t\t\tif (verifyEntries) {\n\t\t\t\tlist[\"@context\"].push(ImmutableProofContexts.Context);\n\t\t\t}\n\n\t\t\tconst result2 = await JsonLdProcessor.compact(list, list[\"@context\"]);\n\t\t\treturn {\n\t\t\t\tentries: result2,\n\t\t\t\tcursor: result.cursor\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\"gettingEntriesFailed\",\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 the entry objects for the stream.\n\t * @param streamId The id of the stream to get, if undefined returns all matching entries.\n\t * @param options Additional options for the get operation.\n\t * @param options.conditions The conditions to filter the stream.\n\t * @param options.includeDeleted Whether to include deleted entries, defaults to false.\n\t * @param options.limit How many entries to return.\n\t * @param options.cursor Cursor to use for next chunk of data.\n\t * @param options.order Retrieve the entries in ascending/descending time order, defaults to Ascending.\n\t * @returns The stream and entries if found.\n\t * @throws NotFoundError if the stream is not found.\n\t */\n\tpublic async getEntryObjects(\n\t\tstreamId?: string,\n\t\toptions?: {\n\t\t\tconditions?: IComparator[];\n\t\t\tincludeDeleted?: boolean;\n\t\t\tlimit?: number;\n\t\t\tcursor?: string;\n\t\t\torder?: SortDirection;\n\t\t}\n\t): Promise<{\n\t\tentries: IAuditableItemStreamEntryObjectList;\n\t\tcursor?: string;\n\t}> {\n\t\tlet streamNamespaceId;\n\t\tif (!Is.empty(streamId)) {\n\t\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(streamId), streamId);\n\n\t\t\tconst urnParsed = Urn.fromValidString(streamId);\n\n\t\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\t\tid: streamId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tstreamNamespaceId = urnParsed.namespaceSpecific(0);\n\t\t}\n\n\t\ttry {\n\t\t\tif (Is.stringValue(streamNamespaceId)) {\n\t\t\t\tconst streamEntity = await this._streamStorage.get(streamNamespaceId);\n\n\t\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\t\t\"streamNotFound\",\n\t\t\t\t\t\tstreamId\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst result = await this.findEntries(\n\t\t\t\tstreamNamespaceId,\n\t\t\t\toptions?.includeDeleted,\n\t\t\t\tfalse,\n\t\t\t\toptions?.conditions,\n\t\t\t\toptions?.order,\n\t\t\t\tundefined,\n\t\t\t\toptions?.limit,\n\t\t\t\toptions?.cursor\n\t\t\t);\n\n\t\t\tconst list: IAuditableItemStreamEntryObjectList = {\n\t\t\t\t\"@context\": [\n\t\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\t\tAuditableItemStreamContexts.Context,\n\t\t\t\t\tAuditableItemStreamContexts.ContextCommon\n\t\t\t\t],\n\t\t\t\ttype: [SchemaOrgTypes.ItemList, AuditableItemStreamTypes.StreamEntryObjectList],\n\t\t\t\t[SchemaOrgTypes.ItemListElement]: result.entries.map(m => m.entryObject)\n\t\t\t};\n\n\t\t\tconst result2 = await JsonLdProcessor.compact(list, list[\"@context\"]);\n\t\t\treturn {\n\t\t\t\tentries: result2,\n\t\t\t\tcursor: result.cursor\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\"gettingEntryObjectsFailed\",\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 the stream and entries.\n\t * @param streamId The id of the stream to remove the proof from.\n\t * @returns A promise that resolves when the proof has been removed.\n\t * @throws NotFoundError if the vertex is not found.\n\t */\n\tpublic async removeProof(streamId: string): Promise<void> {\n\t\tGuards.stringValue(AuditableItemStreamService.CLASS_NAME, nameof(streamId), streamId);\n\n\t\tconst urnParsed = Urn.fromValidString(streamId);\n\n\t\tif (urnParsed.namespaceIdentifier() !== AuditableItemStreamService._NAMESPACE) {\n\t\t\tthrow new GeneralError(AuditableItemStreamService.CLASS_NAME, \"namespaceMismatch\", {\n\t\t\t\tnamespace: AuditableItemStreamService._NAMESPACE,\n\t\t\t\tid: streamId\n\t\t\t});\n\t\t}\n\n\t\tconst streamIdParts = urnParsed.namespaceSpecific(0);\n\t\tawait Mutex.lock(streamIdParts, { throwOnTimeout: true });\n\n\t\ttry {\n\t\t\tconst streamEntity = await this._streamStorage.get(streamIdParts);\n\n\t\t\tif (Is.empty(streamEntity)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\t\t\"streamNotFound\",\n\t\t\t\t\tstreamIdParts\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tawait this.internalRemoveEntries(streamEntity, true);\n\t\t} catch (error) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tAuditableItemStreamService.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(streamIdParts);\n\t\t}\n\t}\n\n\t/**\n\t * Create an immutable proof for the stream entity if the conditions are met.\n\t * @param streamEntity The stream entity to create the proof for.\n\t * @param immutableInterval The immutable interval for the stream.\n\t * @returns The proof id.\n\t * @internal\n\t */\n\tprivate async createStreamProof(\n\t\tstreamEntity: AuditableItemStream,\n\t\timmutableInterval: number\n\t): Promise<string> {\n\t\tconst streamModel = this.streamEntityToJsonLd(\n\t\t\tObjectHelper.pick(streamEntity, AuditableItemStreamService._PROOF_KEYS_STREAM)\n\t\t);\n\n\t\tif (immutableInterval > 0 && Is.stringValue(streamModel.organizationIdentity)) {\n\t\t\tstreamEntity.proofId = await this._immutableProofComponent.create(streamModel);\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemStreamMetricIds.ProofsCreatedStream\n\t\t\t);\n\t\t}\n\n\t\treturn streamModel.id;\n\t}\n\n\t/**\n\t * Map the stream entity to a JSON-LD model.\n\t * @param streamEntity The stream entity.\n\t * @returns The model.\n\t * @internal\n\t */\n\tprivate streamEntityToJsonLd(\n\t\tstreamEntity: AuditableItemStream\n\t): IAuditableItemStream & IJsonLdNodeObject {\n\t\tconst model: IAuditableItemStream & IJsonLdNodeObject = {\n\t\t\t\"@context\": [\n\t\t\t\tSchemaOrgContexts.Context,\n\t\t\t\tAuditableItemStreamContexts.Context,\n\t\t\t\tAuditableItemStreamContexts.ContextCommon\n\t\t\t],\n\t\t\ttype: AuditableItemStreamTypes.Stream,\n\t\t\tid: `${AuditableItemStreamService._NAMESPACE}:${streamEntity.id}`,\n\t\t\tdateCreated: streamEntity.dateCreated,\n\t\t\tdateModified: streamEntity.dateModified,\n\t\t\torganizationIdentity: streamEntity.organizationIdentity,\n\t\t\tuserIdentity: streamEntity.userIdentity,\n\t\t\tannotationObject: streamEntity.annotationObject,\n\t\t\timmutableInterval: streamEntity.immutableInterval,\n\t\t\tproofId: streamEntity.proofId,\n\t\t\tnumberOfItems: streamEntity.numberOfItems,\n\t\t\tclosed: streamEntity.closed,\n\t\t\tmode: streamEntity.mode\n\t\t};\n\n\t\treturn model;\n\t}\n\n\t/**\n\t * Map the stream entry entity to a JSON-LD model.\n\t * @param streamEntryEntity The stream entry entity.\n\t * @returns The model\n\t * @internal\n\t */\n\tprivate streamEntryEntityToJsonLd(\n\t\tstreamEntryEntity: AuditableItemStreamEntry\n\t): IAuditableItemStreamEntry {\n\t\tconst streamEntryModel: IAuditableItemStreamEntry = {\n\t\t\t\"@context\": [\n\t\t\t\tAuditableItemStreamContexts.Context,\n\t\t\t\tAuditableItemStreamContexts.ContextCommon,\n\t\t\t\tSchemaOrgContexts.Context\n\t\t\t],\n\t\t\ttype: AuditableItemStreamTypes.StreamEntry,\n\t\t\tid: `${AuditableItemStreamService._NAMESPACE}:${streamEntryEntity.streamId}:${streamEntryEntity.id}`,\n\t\t\tdateCreated: streamEntryEntity.dateCreated,\n\t\t\tdateModified: streamEntryEntity.dateModified,\n\t\t\tdateDeleted: streamEntryEntity.dateDeleted,\n\t\t\tentryObject: streamEntryEntity.entryObject,\n\t\t\tuserIdentity: streamEntryEntity.userIdentity,\n\t\t\tindex: streamEntryEntity.index,\n\t\t\tproofId: streamEntryEntity.proofId\n\t\t};\n\t\treturn streamEntryModel;\n\t}\n\n\t/**\n\t * Set a stream entry.\n\t * @param context The context for the operation.\n\t * @param streamId The stream id.\n\t * @param entry The entry.\n\t * @returns The id of the entry.\n\t * @internal\n\t */\n\tprivate async setEntry(\n\t\tcontext: IAuditableItemStreamServiceContext,\n\t\tstreamId: string,\n\t\tentry: Partial<IAuditableItemStreamEntry>\n\t): Promise<string> {\n\t\tGuards.object(AuditableItemStreamService.CLASS_NAME, nameof(entry), entry);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\n\t\tif (Is.object(entry.entryObject)) {\n\t\t\tconst validationFailures: IValidationFailure[] = [];\n\t\t\tawait JsonLdHelper.validate(entry.entryObject, validationFailures);\n\t\t\tValidation.asValidationError(\n\t\t\t\tAuditableItemStreamService.CLASS_NAME,\n\t\t\t\tnameof(entry.entryObject),\n\t\t\t\tvalidationFailures\n\t\t\t);\n\t\t}\n\n\t\tconst entity: AuditableItemStreamEntry = {\n\t\t\tid: entry.id ?? RandomHelper.generateUuidV7(\"compact\"),\n\t\t\tstreamId,\n\t\t\tdateCreated: entry.dateCreated ?? context.now,\n\t\t\tdateDeleted: entry.dateDeleted,\n\t\t\tentryObject: entry.entryObject ?? {},\n\t\t\tuserIdentity: contextIds?.[ContextIdKeys.User],\n\t\t\tindex: entry.index ?? context.indexCounter++\n\t\t};\n\n\t\t// If the created date is not the same as the context now, then we are modifying the entry.\n\t\tif (entity.dateCreated !== context.now) {\n\t\t\tentity.dateModified = context.now;\n\t\t}\n\n\t\tif (context.immutableInterval > 0 && entity.index % context.immutableInterval === 0) {\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 stream entry object.\n\t\t\tconst streamEntryModel = this.streamEntryEntityToJsonLd(\n\t\t\t\tObjectHelper.pick(entity, AuditableItemStreamService._PROOF_KEYS_STREAM_ENTRY)\n\t\t\t);\n\n\t\t\t// Create the proof for the stream object but only if we have an organization identity,\n\t\t\t// either from the stream or the context, as this is needed for the proof creation and immutability.\n\t\t\tif (Is.stringValue(context.organizationIdentity)) {\n\t\t\t\tentity.proofId = await this._immutableProofComponent.create(\n\t\t\t\t\tJsonLdHelper.toNodeObject(streamEntryModel)\n\t\t\t\t);\n\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\tAuditableItemStreamMetricIds.ProofsCreatedEntry,\n\t\t\t\t\t{ index: entity.index }\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tawait this._streamEntryStorage.set(entity);\n\n\t\treturn entity.id;\n\t}\n\n\t/**\n\t * Find a stream entry.\n\t * @param streamId The stream id.\n\t * @param entryId The entry id.\n\t * @param verifyEntry Should the entry be verified.\n\t * @returns The entry entity and optional verification result, or undefined if not found.\n\t * @internal\n\t */\n\tprivate async findEntry(\n\t\tstreamId: string,\n\t\tentryId: string,\n\t\tverifyEntry?: boolean\n\t): Promise<\n\t\t| {\n\t\t\t\tentity: AuditableItemStreamEntry;\n\t\t\t\tverification?: IImmutableProofVerification;\n\t\t }\n\t\t| undefined\n\t> {\n\t\tconst conditions: IComparatorGroup<AuditableItemStreamEntry> = {\n\t\t\tconditions: [\n\t\t\t\t{\n\t\t\t\t\tproperty: \"streamId\",\n\t\t\t\t\tcomparison: ComparisonOperator.Equals,\n\t\t\t\t\tvalue: streamId\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tproperty: \"id\",\n\t\t\t\t\tcomparison: ComparisonOperator.Equals,\n\t\t\t\t\tvalue: entryId\n\t\t\t\t}\n\t\t\t],\n\t\t\tlogicalOperator: LogicalOperator.And\n\t\t};\n\n\t\tconst result = await this._streamEntryStorage.query(\n\t\t\tconditions,\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tproperty: \"dateCreated\",\n\t\t\t\t\tsortDirection: SortDirection.Descending\n\t\t\t\t}\n\t\t\t],\n\t\t\tundefined,\n\t\t\tundefined,\n\t\t\t1\n\t\t);\n\n\t\tif (result.entities.length > 0) {\n\t\t\tconst entity = result.entities[0] as AuditableItemStreamEntry;\n\n\t\t\tlet verification: IImmutableProofVerification | undefined;\n\t\t\tif ((verifyEntry ?? false) && Is.stringValue(entity.proofId)) {\n\t\t\t\tverification = await this._immutableProofComponent.verify(entity.proofId);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tentity,\n\t\t\t\tverification\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\t * Find stream entries.\n\t * @param streamId The stream id.\n\t * @param includeDeleted Should deleted entries be included.\n\t * @param verifyEntries Should the entries be verified.\n\t * @param conditions The conditions to filter the entries.\n\t * @param sortDirection The sort direction.\n\t * @param propertiesToReturn The properties to return.\n\t * @param limit Limit the number of entities when finding.\n\t * @param cursor The cursor.\n\t * @returns The stream entries and optional next cursor.\n\t * @internal\n\t */\n\tprivate async findEntries(\n\t\tstreamId?: string,\n\t\tincludeDeleted?: boolean,\n\t\tverifyEntries?: boolean,\n\t\tconditions?: IComparator[],\n\t\tsortDirection?: SortDirection,\n\t\tpropertiesToReturn?: (keyof AuditableItemStreamEntry)[],\n\t\tlimit?: number,\n\t\tcursor?: string\n\t): Promise<{\n\t\tentries: IAuditableItemStreamEntry[];\n\t\tcursor?: string;\n\t}> {\n\t\tconst needToVerify = verifyEntries ?? false;\n\n\t\tconst combinedConditions: IComparator[] = [];\n\n\t\tif (Is.stringValue(streamId)) {\n\t\t\tcombinedConditions.push({\n\t\t\t\tproperty: \"streamId\",\n\t\t\t\tcomparison: ComparisonOperator.Equals,\n\t\t\t\tvalue: streamId\n\t\t\t});\n\t\t}\n\n\t\tif (Is.stringValue(cursor)) {\n\t\t\tconst parts = cursor.split(\"|\");\n\t\t\tif (parts.length > 1) {\n\t\t\t\tincludeDeleted = Coerce.boolean(parts[1]);\n\t\t\t}\n\t\t}\n\n\t\tif (!(includeDeleted ?? false)) {\n\t\t\tcombinedConditions.push({\n\t\t\t\tproperty: \"dateDeleted\",\n\t\t\t\tcomparison: ComparisonOperator.Equals,\n\t\t\t\tvalue: undefined\n\t\t\t});\n\t\t}\n\n\t\t// If we need to verify the entries, we need to make sure we have\n\t\t// specific properties in the data, if the properties to return are not\n\t\t// an array then all will be retrieved anyway.\n\t\tif (needToVerify && Is.array(propertiesToReturn)) {\n\t\t\tpropertiesToReturn ??= [];\n\n\t\t\tfor (const property of AuditableItemStreamService._PROOF_KEYS_STREAM_ENTRY) {\n\t\t\t\tif (!propertiesToReturn.includes(property)) {\n\t\t\t\t\tpropertiesToReturn.push(property);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Is.arrayValue(conditions)) {\n\t\t\tcombinedConditions.push(...conditions);\n\t\t}\n\n\t\tconst result = await this._streamEntryStorage.query(\n\t\t\t{\n\t\t\t\tconditions: combinedConditions,\n\t\t\t\tlogicalOperator: LogicalOperator.And\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 ?? SortDirection.Descending\n\t\t\t\t}\n\t\t\t],\n\t\t\tpropertiesToReturn,\n\t\t\tcursor,\n\t\t\tlimit\n\t\t);\n\n\t\tlet returnCursor: string | undefined;\n\n\t\tif (Is.stringValue(result.cursor)) {\n\t\t\treturnCursor = result.cursor;\n\t\t}\n\t\tif (includeDeleted) {\n\t\t\treturnCursor = `${returnCursor ?? \"\"}|true`;\n\t\t}\n\n\t\tconst entryModels: IAuditableItemStreamEntry[] = [];\n\n\t\tfor (const entry of result.entities) {\n\t\t\tconst entryModel = this.streamEntryEntityToJsonLd(entry as AuditableItemStreamEntry);\n\n\t\t\tif (needToVerify && Is.stringValue(entry.proofId)) {\n\t\t\t\tentryModel.verification = await this._immutableProofComponent.verify(entry.proofId);\n\t\t\t}\n\t\t\tentryModels.push(entryModel);\n\t\t}\n\n\t\treturn {\n\t\t\tentries: entryModels,\n\t\t\tcursor: returnCursor\n\t\t};\n\t}\n\n\t/**\n\t * Remove the verifiable storage for the stream and entries.\n\t * @param streamEntity The stream entity.\n\t * @param removeOnlyProof Should only the proof be removed.\n\t * @returns A promise that resolves when the entries have been processed.\n\t * @internal\n\t */\n\tprivate async internalRemoveEntries(\n\t\tstreamEntity: AuditableItemStream,\n\t\tremoveOnlyProof: boolean\n\t): Promise<void> {\n\t\tif (Is.stringValue(streamEntity.proofId)) {\n\t\t\tawait this._immutableProofComponent.removeNotarization(streamEntity.proofId);\n\t\t\tdelete streamEntity.proofId;\n\n\t\t\tawait this._streamStorage.set(streamEntity);\n\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\tthis._telemetryComponent,\n\t\t\t\tAuditableItemStreamMetricIds.ProofsRemovedStream\n\t\t\t);\n\t\t}\n\n\t\tconst entryIds: string[] = [];\n\t\tlet entriesResult;\n\t\tdo {\n\t\t\tentriesResult = await this._streamEntryStorage.query(\n\t\t\t\t{\n\t\t\t\t\tproperty: \"streamId\",\n\t\t\t\t\tvalue: streamEntity.id,\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\tentriesResult?.cursor\n\t\t\t);\n\n\t\t\tfor (const streamEntry of entriesResult.entities) {\n\t\t\t\tentryIds.push(streamEntry.id as string);\n\t\t\t\tif (Is.stringValue(streamEntry.proofId)) {\n\t\t\t\t\tawait this._immutableProofComponent.removeNotarization(streamEntry.proofId);\n\t\t\t\t\tdelete streamEntry.proofId;\n\n\t\t\t\t\tawait MetricHelper.metricIncrement(\n\t\t\t\t\t\tthis._telemetryComponent,\n\t\t\t\t\t\tAuditableItemStreamMetricIds.ProofsRemovedEntry\n\t\t\t\t\t);\n\n\t\t\t\t\t// If we are only removing the proof, we need to set the entry\n\t\t\t\t\t// otherwise the entry is going to be removed later anyway.\n\t\t\t\t\tif (removeOnlyProof) {\n\t\t\t\t\t\tawait this._streamEntryStorage.set(streamEntry as AuditableItemStreamEntry);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} while (Is.stringValue(entriesResult.cursor));\n\n\t\tif (!removeOnlyProof) {\n\t\t\tfor (const entryId of entryIds) {\n\t\t\t\tawait this._streamEntryStorage.remove(entryId);\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restEntryPoints.js","sourceRoot":"","sources":["../../src/restEntryPoints.ts"],"names":[],"mappings":"AAGA,OAAO,EACN,qCAAqC,EACrC,uBAAuB,EACvB,MAAM,gCAAgC,CAAC;AAExC,MAAM,CAAC,MAAM,eAAe,GAA2B;IACtD;QACC,IAAI,EAAE,uBAAuB;QAC7B,gBAAgB,EAAE,uBAAuB;QACzC,IAAI,EAAE,uBAAuB;QAC7B,cAAc,EAAE,qCAAqC;KACrD;CACD,CAAC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IRestRouteEntryPoint } from \"@twin.org/api-models\";\nimport {\n\tgenerateRestRoutesAuditableItemStream,\n\ttagsAuditableItemStream\n} from \"./auditableItemStreamRoutes.js\";\n\nexport const restEntryPoints: IRestRouteEntryPoint[] = [\n\t{\n\t\tname: \"auditable-item-stream\",\n\t\tdefaultBaseRoute: \"auditable-item-stream\",\n\t\ttags: tagsAuditableItemStream,\n\t\tgenerateRoutes: generateRestRoutesAuditableItemStream\n\t}\n];\n"]}
|
|
1
|
+
{"version":3,"file":"restEntryPoints.js","sourceRoot":"","sources":["../../src/restEntryPoints.ts"],"names":[],"mappings":"AAGA,OAAO,EACN,qCAAqC,EACrC,uBAAuB,EACvB,MAAM,gCAAgC,CAAC;AAExC;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAA2B;IACtD;QACC,IAAI,EAAE,uBAAuB;QAC7B,gBAAgB,EAAE,uBAAuB;QACzC,IAAI,EAAE,uBAAuB;QAC7B,cAAc,EAAE,qCAAqC;KACrD;CACD,CAAC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IRestRouteEntryPoint } from \"@twin.org/api-models\";\nimport {\n\tgenerateRestRoutesAuditableItemStream,\n\ttagsAuditableItemStream\n} from \"./auditableItemStreamRoutes.js\";\n\n/**\n * The REST route entry points for the auditable item stream service.\n */\nexport const restEntryPoints: IRestRouteEntryPoint[] = [\n\t{\n\t\tname: \"auditable-item-stream\",\n\t\tdefaultBaseRoute: \"auditable-item-stream\",\n\t\ttags: tagsAuditableItemStream,\n\t\tgenerateRoutes: generateRestRoutesAuditableItemStream\n\t}\n];\n"]}
|
|
@@ -52,7 +52,7 @@ export declare function auditableItemStreamDelete(httpRequestContext: IHttpReque
|
|
|
52
52
|
*/
|
|
53
53
|
export declare function auditableItemStreamClose(httpRequestContext: IHttpRequestContext, componentName: string, request: IAuditableItemStreamCloseRequest): Promise<INoContentResponse>;
|
|
54
54
|
/**
|
|
55
|
-
*
|
|
55
|
+
* List all streams.
|
|
56
56
|
* @param httpRequestContext The request context for the API.
|
|
57
57
|
* @param componentName The name of the component to use in the routes.
|
|
58
58
|
* @param request The request.
|
|
@@ -68,7 +68,7 @@ export declare function auditableItemStreamList(httpRequestContext: IHttpRequest
|
|
|
68
68
|
*/
|
|
69
69
|
export declare function auditableItemStreamCreateEntry(httpRequestContext: IHttpRequestContext, componentName: string, request: IAuditableItemStreamCreateEntryRequest): Promise<ICreatedResponse>;
|
|
70
70
|
/**
|
|
71
|
-
*
|
|
71
|
+
* Delete an entry from the stream.
|
|
72
72
|
* @param httpRequestContext The request context for the API.
|
|
73
73
|
* @param componentName The name of the component to use in the routes.
|
|
74
74
|
* @param request The request.
|
|
@@ -100,7 +100,7 @@ export declare function auditableItemStreamGetEntry(httpRequestContext: IHttpReq
|
|
|
100
100
|
*/
|
|
101
101
|
export declare function auditableItemStreamGetEntryObject(httpRequestContext: IHttpRequestContext, componentName: string, request: IAuditableItemStreamGetEntryObjectRequest): Promise<IAuditableItemStreamGetEntryObjectResponse>;
|
|
102
102
|
/**
|
|
103
|
-
*
|
|
103
|
+
* List the entries for a stream.
|
|
104
104
|
* @param httpRequestContext The request context for the API.
|
|
105
105
|
* @param componentName The name of the component to use in the routes.
|
|
106
106
|
* @param request The request.
|
|
@@ -108,7 +108,7 @@ export declare function auditableItemStreamGetEntryObject(httpRequestContext: IH
|
|
|
108
108
|
*/
|
|
109
109
|
export declare function auditableItemStreamListEntries(httpRequestContext: IHttpRequestContext, componentName: string, request: IAuditableItemStreamListEntriesRequest): Promise<IAuditableItemStreamListEntriesResponse>;
|
|
110
110
|
/**
|
|
111
|
-
*
|
|
111
|
+
* List entries across all streams.
|
|
112
112
|
* @param httpRequestContext The request context for the API.
|
|
113
113
|
* @param componentName The name of the component to use in the routes.
|
|
114
114
|
* @param request The request.
|
|
@@ -116,7 +116,7 @@ export declare function auditableItemStreamListEntries(httpRequestContext: IHttp
|
|
|
116
116
|
*/
|
|
117
117
|
export declare function auditableItemStreamListEntriesNoStream(httpRequestContext: IHttpRequestContext, componentName: string, request: IAuditableItemStreamListEntriesNoStreamRequest): Promise<IAuditableItemStreamListEntriesResponse>;
|
|
118
118
|
/**
|
|
119
|
-
*
|
|
119
|
+
* List the entry objects for a stream.
|
|
120
120
|
* @param httpRequestContext The request context for the API.
|
|
121
121
|
* @param componentName The name of the component to use in the routes.
|
|
122
122
|
* @param request The request.
|
|
@@ -124,7 +124,7 @@ export declare function auditableItemStreamListEntriesNoStream(httpRequestContex
|
|
|
124
124
|
*/
|
|
125
125
|
export declare function auditableItemStreamListEntryObjects(httpRequestContext: IHttpRequestContext, componentName: string, request: IAuditableItemStreamListEntryObjectsRequest): Promise<IAuditableItemStreamListEntryObjectsResponse>;
|
|
126
126
|
/**
|
|
127
|
-
*
|
|
127
|
+
* List entry objects across all streams.
|
|
128
128
|
* @param httpRequestContext The request context for the API.
|
|
129
129
|
* @param componentName The name of the component to use in the routes.
|
|
130
130
|
* @param request The request.
|
|
@@ -22,6 +22,7 @@ export declare class AuditableItemStreamService implements IAuditableItemStreamC
|
|
|
22
22
|
className(): string;
|
|
23
23
|
/**
|
|
24
24
|
* Register all AIS metrics with the telemetry component.
|
|
25
|
+
* @returns A promise that resolves when the metrics have been registered.
|
|
25
26
|
*/
|
|
26
27
|
start(): Promise<void>;
|
|
27
28
|
/**
|
|
@@ -33,13 +34,13 @@ export declare class AuditableItemStreamService implements IAuditableItemStreamC
|
|
|
33
34
|
/**
|
|
34
35
|
* Close a stream.
|
|
35
36
|
* @param id The id of the stream to close.
|
|
36
|
-
* @returns
|
|
37
|
+
* @returns A promise that resolves when the stream has been closed.
|
|
37
38
|
*/
|
|
38
39
|
close(id: string): Promise<void>;
|
|
39
40
|
/**
|
|
40
41
|
* Update a stream.
|
|
41
42
|
* @param stream The stream to update, does not update entries.
|
|
42
|
-
* @returns
|
|
43
|
+
* @returns A promise that resolves when the stream has been updated.
|
|
43
44
|
*/
|
|
44
45
|
update(stream: Pick<IAuditableItemStream, "@context" | "type" | "id" | "annotationObject">): Promise<void>;
|
|
45
46
|
/**
|
|
@@ -67,7 +68,7 @@ export declare class AuditableItemStreamService implements IAuditableItemStreamC
|
|
|
67
68
|
/**
|
|
68
69
|
* Delete the stream.
|
|
69
70
|
* @param id The id of the stream to remove.
|
|
70
|
-
* @returns
|
|
71
|
+
* @returns A promise that resolves when the stream has been removed.
|
|
71
72
|
*/
|
|
72
73
|
remove(id: string): Promise<void>;
|
|
73
74
|
/**
|
|
@@ -116,14 +117,14 @@ export declare class AuditableItemStreamService implements IAuditableItemStreamC
|
|
|
116
117
|
* @param streamId The id of the stream to update.
|
|
117
118
|
* @param entryId The id of the entry to update.
|
|
118
119
|
* @param entryObject The object for the entry as JSON-LD.
|
|
119
|
-
* @returns
|
|
120
|
+
* @returns A promise that resolves when the entry has been updated.
|
|
120
121
|
*/
|
|
121
122
|
updateEntry(streamId: string, entryId: string, entryObject: IJsonLdNodeObject): Promise<void>;
|
|
122
123
|
/**
|
|
123
124
|
* Delete from the stream.
|
|
124
125
|
* @param streamId The id of the stream to remove from.
|
|
125
126
|
* @param entryId The id of the entry to remove.
|
|
126
|
-
* @returns
|
|
127
|
+
* @returns A promise that resolves when the entry has been removed.
|
|
127
128
|
*/
|
|
128
129
|
removeEntry(streamId: string, entryId: string): Promise<void>;
|
|
129
130
|
/**
|
|
@@ -175,7 +176,7 @@ export declare class AuditableItemStreamService implements IAuditableItemStreamC
|
|
|
175
176
|
/**
|
|
176
177
|
* Remove the proof for the stream and entries.
|
|
177
178
|
* @param streamId The id of the stream to remove the proof from.
|
|
178
|
-
* @returns
|
|
179
|
+
* @returns A promise that resolves when the proof has been removed.
|
|
179
180
|
* @throws NotFoundError if the vertex is not found.
|
|
180
181
|
*/
|
|
181
182
|
removeProof(streamId: string): Promise<void>;
|