-
Berend Sliedrecht authored
Signed-off-by:
Berend Sliedrecht <berend@animo.id>
Berend Sliedrecht authoredSigned-off-by:
Berend Sliedrecht <berend@animo.id>
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
credentialDefinitions.service.ts 2.86 KiB
import type { IndyVdrRegisterCredentialDefinitionOptions } from '@credo-ts/indy-vdr';
import type {
EventAnonCredsCredentialDefinitionsGetAll,
EventAnonCredsCredentialDefinitionsGetAllInput,
EventAnonCredsCredentialDefinitionsGetById,
EventAnonCredsCredentialDefinitionsGetByIdInput,
EventAnonCredsCredentialDefinitionsRegister,
EventAnonCredsCredentialDefinitionsRegisterInput,
} from '@ocm/shared';
import { Injectable } from '@nestjs/common';
import { WithTenantService } from '../withTenantService.js';
@Injectable()
export class CredentialDefinitionsService {
public constructor(private withTenantService: WithTenantService) {}
public async getAll({
tenantId,
}: EventAnonCredsCredentialDefinitionsGetAllInput): Promise<
EventAnonCredsCredentialDefinitionsGetAll['data']
> {
return this.withTenantService.invoke(tenantId, async (t) =>
(await t.modules.anoncreds.getCreatedCredentialDefinitions({})).map(
({ credentialDefinitionId, credentialDefinition }) => ({
credentialDefinitionId,
...credentialDefinition,
}),
),
);
}
public async getById({
tenantId,
credentialDefinitionId,
}: EventAnonCredsCredentialDefinitionsGetByIdInput): Promise<
EventAnonCredsCredentialDefinitionsGetById['data']
> {
return this.withTenantService.invoke(tenantId, async (t) => {
const { credentialDefinition } =
await t.modules.anoncreds.getCredentialDefinition(
credentialDefinitionId,
);
return credentialDefinition
? { credentialDefinitionId, ...credentialDefinition }
: null;
});
}
public async register({
tenantId,
schemaId,
issuerDid,
supportsRevocation,
tag,
}: EventAnonCredsCredentialDefinitionsRegisterInput): Promise<
EventAnonCredsCredentialDefinitionsRegister['data']
> {
return this.withTenantService.invoke(tenantId, async (t) => {
const { credentialDefinitionState } =
await t.modules.anoncreds.registerCredentialDefinition<IndyVdrRegisterCredentialDefinitionOptions>(
{
credentialDefinition: {
issuerId: issuerDid,
schemaId,
tag,
},
options: {
endorserMode: 'internal',
endorserDid: issuerDid,
supportRevocation: supportsRevocation,
},
},
);
if (credentialDefinitionState.state !== 'finished') {
throw new Error(
`Error registering credentialDefinition: ${
credentialDefinitionState.state === 'failed'
? credentialDefinitionState.reason
: 'Not Finished'
}`,
);
}
return {
credentialDefinitionId:
credentialDefinitionState.credentialDefinitionId,
...credentialDefinitionState.credentialDefinition,
};
});
}
}