import type { GigyaSdkRequiredConsentsKeysType } from '../types' import getAccountInfo from './getAccountInfo' import getRequiredConsentSchemas from './getRequiredConsentSchemas' export type PreferencesType = Record< ConsentType, | Record<'isConsentGranted', boolean> | Record< ConsentId, { isConsentGranted: boolean } > > export default function (): Promise { return new Promise(async (resolve, reject) => { try { const mandatoryConsentSchemas = await getRequiredConsentSchemas() const acceptanceRequiredConsentIds = mandatoryConsentSchemas.acceptanceRequired.map((schema) => schema.key) const instantiationRequiredConsentIds = mandatoryConsentSchemas.instantiationRequired.map((schema) => schema.key) const preferences = (await getAccountInfo({ noUID: true }))?.preferences as PreferencesType | undefined if ((acceptanceRequiredConsentIds.length < 1 && instantiationRequiredConsentIds.length < 1) || !preferences) return resolve(null) const output: GigyaSdkRequiredConsentsKeysType = { instantiationRequired: [], acceptanceRequired: [], } acceptanceRequiredConsentIds.forEach((consentId) => { const [consentTypeOrId, subConsentId] = consentId.split('.') if ( !preferences?.[consentId]?.isConsentGranted && !(preferences?.[consentTypeOrId] as Omit | undefined)?.[subConsentId] ?.isConsentGranted ) { output.acceptanceRequired = [...output.acceptanceRequired, consentId] } }) instantiationRequiredConsentIds.forEach((consentId) => { const [consentTypeOrId, subConsentId] = consentId.split('.') if ( !preferences?.[consentId]?.isConsentGranted && !(preferences?.[consentTypeOrId] as Omit | undefined)?.[subConsentId] ?.isConsentGranted ) { output.instantiationRequired = [...output.instantiationRequired, consentId] } }) if (!output.acceptanceRequired.length && !output.instantiationRequired.length) { return resolve(null) } resolve(output) } catch (e) { reject(e) } }) }