diff --git a/libs/@guardian/libs/src/consent-management-platform/lib/participants.ts b/libs/@guardian/libs/src/consent-management-platform/lib/participants.ts new file mode 100644 index 000000000..3bc097495 --- /dev/null +++ b/libs/@guardian/libs/src/consent-management-platform/lib/participants.ts @@ -0,0 +1,23 @@ +import { isObject } from '../../isObject/isObject'; +import { isString } from '../../isString/isString'; +import { storage } from '../../storage/storage'; + +export type Participations = Record; + +const participationsKey = 'gu.ab.participations'; +export const getParticipationsFromLocalStorage = (): Participations => { + const participations = storage.local.get(participationsKey); + return isParticipations(participations) ? participations : {}; +}; + +const isParticipations = ( + participations: unknown, +): participations is Participations => { + return ( + isObject(participations) && + Object.values(participations).every( + (participation) => + isObject(participation) && isString(participation.variant), + ) + ); +};