Auditable Item Stream Service Examples
Use these examples to wire the service with your storage components and run full stream and entry lifecycles.
AuditableItemStreamService
import { AuditableItemStreamService, initSchema } from '@twin.org/auditable-item-stream-service';
initSchema();
const service = new AuditableItemStreamService({
immutableProofComponentType: 'immutable-proof',
streamEntityStorageType: 'auditable-item-stream',
streamEntryEntityStorageType: 'auditable-item-stream-entry'
});
console.log(service.className()); // AuditableItemStreamService
import { AuditableItemStreamService } from '@twin.org/auditable-item-stream-service';
const service = new AuditableItemStreamService({
immutableProofComponentType: 'immutable-proof',
streamEntityStorageType: 'auditable-item-stream',
streamEntryEntityStorageType: 'auditable-item-stream-entry'
});
const streamId = await service.create(
{
annotationObject: {
'@context': 'https://schema.org',
'@type': 'Project',
name: 'Quarterly Assurance'
},
entries: [
{
entryObject: {
'@context': 'https://schema.org',
'@type': 'Event',
name: 'Project opened'
}
}
]
},
{
immutableInterval: 3
}
);
const stream = await service.get(streamId, {
includeEntries: true,
verifyStream: true,
verifyEntries: true
});
await service.update({
id: streamId,
annotationObject: {
'@context': 'https://schema.org',
'@type': 'Project',
name: 'Quarterly Assurance Updated'
}
});
console.log(stream.id); // ais:...
console.log(stream.numberOfItems); // 1
import { AuditableItemStreamService } from '@twin.org/auditable-item-stream-service';
import { ComparisonOperator, SortDirection } from '@twin.org/entity';
const service = new AuditableItemStreamService({
immutableProofComponentType: 'immutable-proof',
streamEntityStorageType: 'auditable-item-stream',
streamEntryEntityStorageType: 'auditable-item-stream-entry'
});
const streams = await service.query(
[
{
property: 'organizationIdentity',
comparison: ComparisonOperator.Equals,
value: 'did:iota:org:123'
}
],
'dateCreated',
SortDirection.Descending,
['id', 'dateCreated', 'dateModified', 'numberOfItems'],
'cursor:page-1',
10
);
const entries = await service.getEntries('ais:0f4f9de65dc44f31b4a474a0cc93ce69', {
includeDeleted: false,
verifyEntries: true,
limit: 10,
order: SortDirection.Ascending
});
const entryObjects = await service.getEntryObjects('ais:0f4f9de65dc44f31b4a474a0cc93ce69', {
includeDeleted: true,
limit: 10,
order: SortDirection.Descending
});
console.log(streams.entries.itemListElement.length); // 10
console.log(entries.entries.itemListElement.length); // 10
console.log(entryObjects.entries.itemListElement.length); // 10
import { AuditableItemStreamService } from '@twin.org/auditable-item-stream-service';
const service = new AuditableItemStreamService({
immutableProofComponentType: 'immutable-proof',
streamEntityStorageType: 'auditable-item-stream',
streamEntryEntityStorageType: 'auditable-item-stream-entry'
});
const streamId = 'ais:0f4f9de65dc44f31b4a474a0cc93ce69';
const entryId = await service.createEntry(streamId, {
'@context': 'https://schema.org',
'@type': 'Message',
text: 'The item passed validation'
});
const entry = await service.getEntry(streamId, entryId, {
verifyEntry: true
});
const entryObject = await service.getEntryObject(streamId, entryId);
await service.updateEntry(streamId, entryId, {
'@context': 'https://schema.org',
'@type': 'Message',
text: 'The item passed validation and was approved'
});
await service.removeEntry(streamId, entryId);
console.log(entry.id); // ais:0f4f9de65dc44f31b4a474a0cc93ce69:...
console.log(entryObject['@type']); // Message
import { AuditableItemStreamService } from '@twin.org/auditable-item-stream-service';
const service = new AuditableItemStreamService({
immutableProofComponentType: 'immutable-proof',
streamEntityStorageType: 'auditable-item-stream',
streamEntryEntityStorageType: 'auditable-item-stream-entry'
});
const streamId = 'ais:0f4f9de65dc44f31b4a474a0cc93ce69';
await service.removeVerifiable(streamId);
await service.remove(streamId);
console.log(streamId); // ais:0f4f9de65dc44f31b4a474a0cc93ce69
AuditableItemStream
import { AuditableItemStream } from '@twin.org/auditable-item-stream-service';
const streamEntity = new AuditableItemStream();
streamEntity.id = '0f4f9de65dc44f31b4a474a0cc93ce69';
streamEntity.dateCreated = '2026-03-10T09:00:00.000Z';
streamEntity.dateModified = '2026-03-10T09:05:00.000Z';
streamEntity.organizationIdentity = 'did:iota:org:123';
streamEntity.userIdentity = 'did:iota:user:456';
streamEntity.numberOfItems = 2;
streamEntity.immutableInterval = 5;
console.log(streamEntity.id); // 0f4f9de65dc44f31b4a474a0cc93ce69
console.log(streamEntity.numberOfItems); // 2
AuditableItemStreamEntry
import { AuditableItemStreamEntry } from '@twin.org/auditable-item-stream-service';
const streamEntryEntity = new AuditableItemStreamEntry();
streamEntryEntity.id = '1c7dd4e0e2a6428fa2d9b8f02fd5ce39';
streamEntryEntity.streamId = '0f4f9de65dc44f31b4a474a0cc93ce69';
streamEntryEntity.dateCreated = '2026-03-10T09:02:00.000Z';
streamEntryEntity.index = 1;
streamEntryEntity.entryObject = {
'@context': 'https://schema.org',
'@type': 'Message',
text: 'Second event in the stream'
};
console.log(streamEntryEntity.id); // 1c7dd4e0e2a6428fa2d9b8f02fd5ce39
console.log(streamEntryEntity.index); // 1
Schema Initialisation
import { initSchema } from '@twin.org/auditable-item-stream-service';
initSchema();
console.log('Entity schemas registered'); // Entity schemas registered