import * as plugins from './webclient.plugins'; export class CsWebclient { webstore: plugins.webstore.WebStore; constructor() { this.webstore = new plugins.webstore.WebStore({ dbName: 'consentsoftware', storeName: 'webclient', }); } public async isCookieLevelSet(): Promise { const result = await this.webstore.get('acceptedCookieLevels'); return !!result; } public async setCookieLevels( cookieLevelsArg: plugins.csInterfaces.TCookieLevel[] ): Promise { await this.webstore.set('acceptedCookieLevels', { acceptanceTimestamp: Date.now(), acceptedCookieLevels: cookieLevelsArg, }); return true; } public async getCookieLevels(): Promise< plugins.csInterfaces.IWebclientSettings['acceptedCookieLevels'] > { const result = await this.webstore.get('acceptedCookieLevels'); return result.acceptedCookieLevels; } public async isCookieLevelStillValid(): Promise { if (!this.isCookieLevelSet) { return false; } const result = await this.webstore.get('acceptedCookieLevels'); if ( result.acceptanceTimestamp < Date.now() - plugins.smarttime.getMilliSecondsFromUnits({ months: 3 }) ) { return false; } return true; } public async getAndRunConsentTuples() { const acceptedCookieLevels = await this.getCookieLevels(); if (!acceptedCookieLevels) { console.log('You need to set accepted cookielevels first'); return; } const csGetDomainSettingsRequest = new plugins.typedrequest.TypedRequest< plugins.csInterfaces.IRequest_Client_ConsentSoftwareServer_GetDomainSettings >('https://connect.api.global/consentsoftware', 'getDomainSettings'); const response = await csGetDomainSettingsRequest.fire({ domain: window.location.hostname }); for (const consentTuple of response.consentTuples) { if (consentTuple.level === 'functional' || acceptedCookieLevels.includes(consentTuple.level)) { const scriptString = consentTuple.script as string; // tslint:disable-next-line: function-constructor const tupleFunction = new Function(scriptString); await tupleFunction(); console.log (`Successfully executed ConsentTuple >>${consentTuple.name}<< -> ${consentTuple.description}`); } } } }