Trust Models Examples
Use these patterns to register trust components, resolve them from factories, and enforce trust checks before handling protected actions.
TrustGeneratorFactory
import { TrustGeneratorFactory, type ITrustGenerator } from '@twin.org/trust-models';
const signedPayloadGenerator: ITrustGenerator = {
className: () => 'SignedPayloadGenerator',
generate: async (identity, info) => ({
identity,
issuedAt: new Date('2026-03-09T10:00:00Z').toISOString(),
subject: info?.subject
})
};
TrustGeneratorFactory.register('signedPayload', () => signedPayloadGenerator);
const availableGeneratorTypes = TrustGeneratorFactory.names();
console.log(availableGeneratorTypes); // ["signedPayload"]
const generator = TrustGeneratorFactory.get('signedPayload');
const generated = await generator.generate('did:example:issuer', {
subject: {
id: 'did:example:subject',
category: 'manufacturer'
}
});
console.log(generated); // { identity: "did:example:issuer", issuedAt: "2026-03-09T10:00:00.000Z", subject: { id: "did:example:subject", category: "manufacturer" } }
TrustGeneratorFactory.unregister('signedPayload');
TrustVerifierFactory
import {
TrustVerifierFactory,
type ITrustVerificationInfo,
type ITrustVerifier
} from '@twin.org/trust-models';
import type { IError } from '@twin.org/core';
const audienceVerifier: ITrustVerifier = {
className: () => 'AudienceVerifier',
verify: async (payload, info, _errors) => {
const audience =
typeof payload === 'object' && payload !== null ? Reflect.get(payload, 'aud') : '';
const trustedAudience = typeof audience === 'string' && audience === 'did:example:api';
if (!trustedAudience) {
return false;
}
info.identity = 'did:example:issuer';
info.data = {
audience: {
id: 'did:example:api'
}
};
return true;
}
};
TrustVerifierFactory.register('audience', () => audienceVerifier);
const verifier = TrustVerifierFactory.get('audience');
const info: ITrustVerificationInfo = { identity: '' };
const errors: IError[] = [];
const verified = await verifier.verify({ aud: 'did:example:api' }, info, errors);
console.log(verified); // true
console.log(info.identity); // did:example:issuer
TrustVerifierFactory.unregister('audience');
TrustHelper
import { TrustHelper, type ITrustComponent } from '@twin.org/trust-models';
const trustComponent: ITrustComponent = {
className: () => 'MockTrustComponent',
verify: async () => ({
verified: true,
info: {
identity: 'did:example:issuer',
data: {
subject: {
id: 'did:example:subject',
status: 'active'
}
}
}
}),
generate: async () => 'not-used-in-this-example'
};
const trustInfo = await TrustHelper.verifyTrust(
trustComponent,
'eyJhbGciOiJFZERTQSJ9.eyJpc3MiOiJkaWQ6ZXhhbXBsZTppc3N1ZXIifQ.signature',
'createCredential',
['audience']
);
console.log(trustInfo.identity); // did:example:issuer