UNPKG

@sphereon/ssi-sdk.data-store

Version:

124 lines (113 loc) 4.23 kB
import { IBitstringStatusListEntity, IOAuthStatusListEntity, IStatusList2021Entity, IStatusListEntity } from '../../types' import { StatusListType } from '@sphereon/ssi-types' import { BitstringStatusListEntity, OAuthStatusListEntity, StatusList2021Entity, StatusListEntity, } from '../../entities/statusList/StatusListEntities' import { replaceNullWithUndefined } from '../FormattingUtils' export const statusListEntityFrom = (args: IStatusListEntity): StatusListEntity => { switch (args.type) { case StatusListType.StatusList2021: { const entity = new StatusList2021Entity() const sl2021 = args as IStatusList2021Entity entity.indexingDirection = sl2021.indexingDirection entity.statusPurpose = sl2021.statusPurpose setBaseFields(entity, args) Object.defineProperty(entity, 'type', { value: StatusListType.StatusList2021, enumerable: true, configurable: true, }) return entity } case StatusListType.OAuthStatusList: { const entity = new OAuthStatusListEntity() const oauthSl = args as IOAuthStatusListEntity entity.bitsPerStatus = oauthSl.bitsPerStatus entity.expiresAt = oauthSl.expiresAt setBaseFields(entity, args) Object.defineProperty(entity, 'type', { value: StatusListType.OAuthStatusList, enumerable: true, configurable: true, }) return entity } case StatusListType.BitstringStatusList: { const entity = new BitstringStatusListEntity() const bitstringsl = args as IBitstringStatusListEntity if (!bitstringsl.bitsPerStatus) { throw Error('bitsPerStatus must be set for BitstringStatusList') } entity.statusPurpose = bitstringsl.statusPurpose entity.bitsPerStatus = bitstringsl.bitsPerStatus entity.validFrom = bitstringsl.validFrom entity.validUntil = bitstringsl.validUntil entity.ttl = bitstringsl.ttl setBaseFields(entity, args) Object.defineProperty(entity, 'type', { value: StatusListType.BitstringStatusList, enumerable: true, configurable: true, }) return entity } default: throw new Error(`Invalid status list type ${args.type}`) } } export const statusListFrom = (entity: StatusListEntity): IStatusListEntity | IBitstringStatusListEntity => { if (entity instanceof StatusList2021Entity) { const result: IStatusList2021Entity = { ...getBaseFields(entity), type: StatusListType.StatusList2021, indexingDirection: entity.indexingDirection, statusPurpose: entity.statusPurpose, } return replaceNullWithUndefined(result) } if (entity instanceof OAuthStatusListEntity) { const result: IOAuthStatusListEntity = { ...getBaseFields(entity), type: StatusListType.OAuthStatusList, bitsPerStatus: entity.bitsPerStatus, expiresAt: entity.expiresAt, } return replaceNullWithUndefined(result) } if (entity instanceof BitstringStatusListEntity) { const result: IBitstringStatusListEntity = { ...getBaseFields(entity), type: StatusListType.BitstringStatusList, statusPurpose: entity.statusPurpose, bitsPerStatus: entity.bitsPerStatus, validFrom: entity.validFrom, validUntil: entity.validUntil, ttl: entity.ttl, } return replaceNullWithUndefined(result) } throw new Error(`Invalid status list type ${typeof entity}`) } const setBaseFields = (entity: StatusListEntity, args: IStatusListEntity) => { entity.id = args.id entity.correlationId = args.correlationId entity.length = args.length entity.issuer = args.issuer entity.driverType = args.driverType entity.credentialIdMode = args.credentialIdMode entity.proofFormat = args.proofFormat entity.statusListCredential = args.statusListCredential } const getBaseFields = (entity: StatusListEntity): Omit<IStatusListEntity, 'type'> => ({ id: entity.id, correlationId: entity.correlationId, length: entity.length, issuer: entity.issuer, driverType: entity.driverType, credentialIdMode: entity.credentialIdMode, proofFormat: entity.proofFormat, statusListCredential: entity.statusListCredential, })