webclient/ts/index.ts
2020-10-20 21:50:21 +00:00

73 lines
2.5 KiB
TypeScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import * as plugins from './webclient.plugins';
export class CsWebclient {
webstore: plugins.webstore.WebStore<plugins.csInterfaces.IWebclientSettings>;
constructor() {
this.webstore = new plugins.webstore.WebStore<plugins.csInterfaces.IWebclientSettings>({
dbName: 'consentsoftware',
storeName: 'webclient',
});
}
public async isCookieLevelSet(): Promise<boolean> {
const result = await this.webstore.get('acceptedCookieLevels');
return !!result;
}
public async setCookieLevels(
cookieLevelsArg: plugins.csInterfaces.TCookieLevel[]
): Promise<boolean> {
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<boolean> {
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(domainArg?: string) {
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 domainToRequest = domainArg || window.location.hostname;
const response = await csGetDomainSettingsRequest.fire({
domain: domainToRequest
});
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}`);
}
}
}
}