Identity Service Examples
These examples show how to orchestrate identity operations through service-level abstractions for connectors, resolvers, and profile storage.
IdentityService
import { IdentityService } from '@twin.org/identity-service';
const identityService = new IdentityService({
config: {
defaultNamespace: 'iota'
}
});
const className = identityService.className();
const didDocument = await identityService.identityCreate('iota', 'controller-1');
await identityService.identityRemove(didDocument.id, 'controller-1');
console.log(className); // IdentityService
console.log(didDocument.id); // did:iota:tst:0x...
import { IdentityService } from '@twin.org/identity-service';
import { DidVerificationMethodType, ProofTypes } from '@twin.org/standards-w3c-did';
const identityService = new IdentityService({
config: {
defaultNamespace: 'iota'
}
});
const identity = 'did:iota:tst:0x1234abcd';
const verificationMethod = await identityService.verificationMethodCreate(
identity,
DidVerificationMethodType.VerificationMethod,
'signing-key',
'controller-1'
);
await identityService.verificationMethodRemove(verificationMethod.id, 'controller-1');
const service = await identityService.serviceCreate(
identity,
'linked-domain',
'LinkedDomains',
'https://example.org',
'controller-1'
);
await identityService.serviceRemove(service.id, 'controller-1');
const createdCredential = await identityService.verifiableCredentialCreate(
`${identity}#signing-key`,
'urn:uuid:credential-001',
{
id: 'did:iota:tst:0x5678efab',
role: 'Engineer'
},
{
revocationIndex: 7
},
'controller-1'
);
const verifiedCredential = await identityService.verifiableCredentialVerify(createdCredential.jwt);
await identityService.verifiableCredentialRevoke(identity, 7, 'controller-1');
await identityService.verifiableCredentialUnrevoke(identity, 7, 'controller-1');
const createdPresentation = await identityService.verifiablePresentationCreate(
`${identity}#signing-key`,
'urn:uuid:presentation-001',
['https://www.w3.org/2018/credentials/v1'],
['VerifiablePresentation'],
[createdCredential.jwt],
{
expirationDate: new Date('2027-01-01T00:00:00.000Z')
},
'controller-1'
);
const verifiedPresentation = await identityService.verifiablePresentationVerify(
createdPresentation.jwt
);
const proof = await identityService.proofCreate(
`${identity}#signing-key`,
ProofTypes.DataIntegrityProof,
{
id: 'urn:example:document-1',
value: 'hello'
},
'controller-1'
);
const proofIsValid = await identityService.proofVerify(
{
id: 'urn:example:document-1',
value: 'hello'
},
proof
);
console.log(verifiedCredential.revoked); // false
console.log(verifiedPresentation.revoked); // false
console.log(proofIsValid); // true
IdentityProfileService
import { IdentityProfileService } from '@twin.org/identity-service';
interface PublicProfile {
displayName: string;
location: string;
}
interface PrivateProfile {
email: string;
}
const profileService = new IdentityProfileService<PublicProfile, PrivateProfile>({
profileEntityConnectorType: 'identity-profile'
});
const className = profileService.className();
const identity = 'did:iota:tst:0x1234abcd';
await profileService.create(
{
displayName: 'Alice',
location: 'London'
},
{
email: '[email protected]'
},
identity
);
const profile = await profileService.get(['displayName'], ['email'], identity);
const publicProfile = await profileService.getPublic(identity, ['displayName']);
await profileService.update(
{
displayName: 'Alice Doe',
location: 'London'
},
{
email: '[email protected]'
},
identity
);
const profiles = await profileService.list(
[
{
propertyName: 'displayName',
propertyValue: 'Alice Doe'
}
],
['displayName'],
undefined,
10
);
await profileService.remove(identity);
console.log(className); // IdentityService
console.log(profile.identity); // did:iota:tst:0x1234abcd
console.log(publicProfile.displayName); // Alice
console.log(profiles.items.length); // 1
IdentityResolverService
import { IdentityResolverService } from '@twin.org/identity-service';
const resolverService = new IdentityResolverService({
config: {
defaultNamespace: 'iota'
},
fallbackResolverConnectorType: 'universal'
});
const className = resolverService.className();
const didDocument = await resolverService.identityResolve('did:iota:tst:0x1234abcd');
console.log(className); // IdentityService
console.log(didDocument.id); // did:iota:tst:0x1234abcd