@atlasauth/emulator-core 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adopt.d.ts +50 -0
- package/dist/adopt.js +57 -0
- package/dist/adopt.js.map +1 -0
- package/dist/coverage.d.ts +15 -0
- package/dist/coverage.js +31 -0
- package/dist/coverage.js.map +1 -0
- package/dist/crypto-util.d.ts +10 -0
- package/dist/crypto-util.js +76 -0
- package/dist/crypto-util.js.map +1 -0
- package/dist/custom-html.d.ts +57 -0
- package/dist/custom-html.js +491 -0
- package/dist/custom-html.js.map +1 -0
- package/dist/engine.d.ts +34 -3
- package/dist/engine.js +57 -8
- package/dist/engine.js.map +1 -1
- package/dist/error-catalog.js +16 -0
- package/dist/error-catalog.js.map +1 -1
- package/dist/event-gate.d.ts +3 -0
- package/dist/event-gate.js +430 -0
- package/dist/event-gate.js.map +1 -0
- package/dist/generic.js +14 -2
- package/dist/generic.js.map +1 -1
- package/dist/handlers/access-signals.d.ts +48 -0
- package/dist/handlers/access-signals.js +76 -0
- package/dist/handlers/access-signals.js.map +1 -0
- package/dist/handlers/approvals.d.ts +2 -0
- package/dist/handlers/approvals.js +418 -0
- package/dist/handlers/approvals.js.map +1 -0
- package/dist/handlers/authz-data.d.ts +2 -0
- package/dist/handlers/authz-data.js +627 -0
- package/dist/handlers/authz-data.js.map +1 -0
- package/dist/handlers/authz-layers.d.ts +229 -0
- package/dist/handlers/authz-layers.js +786 -0
- package/dist/handlers/authz-layers.js.map +1 -0
- package/dist/handlers/authz-state.d.ts +80 -0
- package/dist/handlers/authz-state.js +175 -0
- package/dist/handlers/authz-state.js.map +1 -0
- package/dist/handlers/authz.d.ts +2 -0
- package/dist/handlers/authz.js +410 -0
- package/dist/handlers/authz.js.map +1 -0
- package/dist/handlers/billing.d.ts +100 -0
- package/dist/handlers/billing.js +877 -0
- package/dist/handlers/billing.js.map +1 -0
- package/dist/handlers/cedar-ext.d.ts +35 -0
- package/dist/handlers/cedar-ext.js +174 -0
- package/dist/handlers/cedar-ext.js.map +1 -0
- package/dist/handlers/cedar.d.ts +146 -0
- package/dist/handlers/cedar.js +689 -0
- package/dist/handlers/cedar.js.map +1 -0
- package/dist/handlers/connections.d.ts +5 -0
- package/dist/handlers/connections.js +561 -0
- package/dist/handlers/connections.js.map +1 -0
- package/dist/handlers/control.js +6 -1
- package/dist/handlers/control.js.map +1 -1
- package/dist/handlers/device.d.ts +47 -0
- package/dist/handlers/device.js +665 -0
- package/dist/handlers/device.js.map +1 -0
- package/dist/handlers/emu3-misc.d.ts +38 -0
- package/dist/handlers/emu3-misc.js +1056 -0
- package/dist/handlers/emu3-misc.js.map +1 -0
- package/dist/handlers/emu4-actions-access.d.ts +46 -0
- package/dist/handlers/emu4-actions-access.js +107 -0
- package/dist/handlers/emu4-actions-access.js.map +1 -0
- package/dist/handlers/emu4-actions-catalog-extra.d.ts +3 -0
- package/dist/handlers/emu4-actions-catalog-extra.js +204 -0
- package/dist/handlers/emu4-actions-catalog-extra.js.map +1 -0
- package/dist/handlers/emu4-actions-catalog.d.ts +3 -0
- package/dist/handlers/emu4-actions-catalog.js +143 -0
- package/dist/handlers/emu4-actions-catalog.js.map +1 -0
- package/dist/handlers/emu4-actions-def.d.ts +50 -0
- package/dist/handlers/emu4-actions-def.js +250 -0
- package/dist/handlers/emu4-actions-def.js.map +1 -0
- package/dist/handlers/emu4-actions-sandbox.d.ts +36 -0
- package/dist/handlers/emu4-actions-sandbox.js +318 -0
- package/dist/handlers/emu4-actions-sandbox.js.map +1 -0
- package/dist/handlers/emu4-actions-typegen.d.ts +5 -0
- package/dist/handlers/emu4-actions-typegen.js +73 -0
- package/dist/handlers/emu4-actions-typegen.js.map +1 -0
- package/dist/handlers/emu4-actions.d.ts +2 -0
- package/dist/handlers/emu4-actions.js +506 -0
- package/dist/handlers/emu4-actions.js.map +1 -0
- package/dist/handlers/emu4-authz-trust.d.ts +40 -0
- package/dist/handlers/emu4-authz-trust.js +488 -0
- package/dist/handlers/emu4-authz-trust.js.map +1 -0
- package/dist/handlers/emu4-authz.d.ts +2 -0
- package/dist/handlers/emu4-authz.js +752 -0
- package/dist/handlers/emu4-authz.js.map +1 -0
- package/dist/handlers/emu4-billing-core.d.ts +23 -0
- package/dist/handlers/emu4-billing-core.js +22 -0
- package/dist/handlers/emu4-billing-core.js.map +1 -0
- package/dist/handlers/emu4-billing-x.d.ts +2 -0
- package/dist/handlers/emu4-billing-x.js +489 -0
- package/dist/handlers/emu4-billing-x.js.map +1 -0
- package/dist/handlers/emu4-billing.d.ts +14 -0
- package/dist/handlers/emu4-billing.js +846 -0
- package/dist/handlers/emu4-billing.js.map +1 -0
- package/dist/handlers/emu4-clones.d.ts +2 -0
- package/dist/handlers/emu4-clones.js +322 -0
- package/dist/handlers/emu4-clones.js.map +1 -0
- package/dist/handlers/emu4-compliance.d.ts +8 -0
- package/dist/handlers/emu4-compliance.js +39 -0
- package/dist/handlers/emu4-compliance.js.map +1 -0
- package/dist/handlers/emu4-config.d.ts +14 -0
- package/dist/handlers/emu4-config.js +148 -0
- package/dist/handlers/emu4-config.js.map +1 -0
- package/dist/handlers/emu4-cookies.d.ts +8 -0
- package/dist/handlers/emu4-cookies.js +248 -0
- package/dist/handlers/emu4-cookies.js.map +1 -0
- package/dist/handlers/emu4-erasure.d.ts +2 -0
- package/dist/handlers/emu4-erasure.js +587 -0
- package/dist/handlers/emu4-erasure.js.map +1 -0
- package/dist/handlers/emu4-federation.d.ts +8 -0
- package/dist/handlers/emu4-federation.js +18 -0
- package/dist/handlers/emu4-federation.js.map +1 -0
- package/dist/handlers/emu4-journey-math.d.ts +42 -0
- package/dist/handlers/emu4-journey-math.js +99 -0
- package/dist/handlers/emu4-journey-math.js.map +1 -0
- package/dist/handlers/emu4-messaging.d.ts +21 -0
- package/dist/handlers/emu4-messaging.js +595 -0
- package/dist/handlers/emu4-messaging.js.map +1 -0
- package/dist/handlers/emu4-minors.d.ts +7 -0
- package/dist/handlers/emu4-minors.js +408 -0
- package/dist/handlers/emu4-minors.js.map +1 -0
- package/dist/handlers/emu4-oauth-audit.d.ts +5 -0
- package/dist/handlers/emu4-oauth-audit.js +17 -0
- package/dist/handlers/emu4-oauth-audit.js.map +1 -0
- package/dist/handlers/emu4-oauth-auth.d.ts +83 -0
- package/dist/handlers/emu4-oauth-auth.js +363 -0
- package/dist/handlers/emu4-oauth-auth.js.map +1 -0
- package/dist/handlers/emu4-oauth-delivery.d.ts +68 -0
- package/dist/handlers/emu4-oauth-delivery.js +207 -0
- package/dist/handlers/emu4-oauth-delivery.js.map +1 -0
- package/dist/handlers/emu4-oauth-keys.d.ts +11 -0
- package/dist/handlers/emu4-oauth-keys.js +268 -0
- package/dist/handlers/emu4-oauth-keys.js.map +1 -0
- package/dist/handlers/emu4-oauth-pub.d.ts +36 -0
- package/dist/handlers/emu4-oauth-pub.js +420 -0
- package/dist/handlers/emu4-oauth-pub.js.map +1 -0
- package/dist/handlers/emu4-oauth.d.ts +10 -0
- package/dist/handlers/emu4-oauth.js +23 -0
- package/dist/handlers/emu4-oauth.js.map +1 -0
- package/dist/handlers/emu4-policies.d.ts +2 -0
- package/dist/handlers/emu4-policies.js +408 -0
- package/dist/handlers/emu4-policies.js.map +1 -0
- package/dist/handlers/emu4-region.d.ts +2 -0
- package/dist/handlers/emu4-region.js +189 -0
- package/dist/handlers/emu4-region.js.map +1 -0
- package/dist/handlers/emu4-saml.d.ts +12 -0
- package/dist/handlers/emu4-saml.js +532 -0
- package/dist/handlers/emu4-saml.js.map +1 -0
- package/dist/handlers/emu4-shared.d.ts +44 -0
- package/dist/handlers/emu4-shared.js +90 -0
- package/dist/handlers/emu4-shared.js.map +1 -0
- package/dist/handlers/emu4-snapshots.d.ts +38 -0
- package/dist/handlers/emu4-snapshots.js +231 -0
- package/dist/handlers/emu4-snapshots.js.map +1 -0
- package/dist/handlers/emu4-sns.d.ts +9 -0
- package/dist/handlers/emu4-sns.js +21 -0
- package/dist/handlers/emu4-sns.js.map +1 -0
- package/dist/handlers/emu4-trust-binding.d.ts +27 -0
- package/dist/handlers/emu4-trust-binding.js +344 -0
- package/dist/handlers/emu4-trust-binding.js.map +1 -0
- package/dist/handlers/emu4-trust.d.ts +35 -0
- package/dist/handlers/emu4-trust.js +543 -0
- package/dist/handlers/emu4-trust.js.map +1 -0
- package/dist/handlers/federation.d.ts +2 -0
- package/dist/handlers/federation.js +481 -0
- package/dist/handlers/federation.js.map +1 -0
- package/dist/handlers/fga-engine.d.ts +78 -0
- package/dist/handlers/fga-engine.js +663 -0
- package/dist/handlers/fga-engine.js.map +1 -0
- package/dist/handlers/governance.d.ts +2 -0
- package/dist/handlers/governance.js +460 -0
- package/dist/handlers/governance.js.map +1 -0
- package/dist/handlers/hooks.js +17 -1
- package/dist/handlers/hooks.js.map +1 -1
- package/dist/handlers/index.d.ts +5 -1
- package/dist/handlers/index.js +45 -3
- package/dist/handlers/index.js.map +1 -1
- package/dist/handlers/keys.js +6 -1
- package/dist/handlers/keys.js.map +1 -1
- package/dist/handlers/machines.js +61 -8
- package/dist/handlers/machines.js.map +1 -1
- package/dist/handlers/messaging.d.ts +6 -0
- package/dist/handlers/messaging.js +893 -0
- package/dist/handlers/messaging.js.map +1 -0
- package/dist/handlers/oauth-adv.d.ts +191 -0
- package/dist/handlers/oauth-adv.js +1305 -0
- package/dist/handlers/oauth-adv.js.map +1 -0
- package/dist/handlers/oauth-flows.d.ts +52 -0
- package/dist/handlers/oauth-flows.js +480 -0
- package/dist/handlers/oauth-flows.js.map +1 -0
- package/dist/handlers/oauth.d.ts +96 -0
- package/dist/handlers/oauth.js +793 -0
- package/dist/handlers/oauth.js.map +1 -0
- package/dist/handlers/orgs.js +6 -0
- package/dist/handlers/orgs.js.map +1 -1
- package/dist/handlers/passkeys.d.ts +3 -0
- package/dist/handlers/passkeys.js +293 -0
- package/dist/handlers/passkeys.js.map +1 -0
- package/dist/handlers/platform.d.ts +20 -0
- package/dist/handlers/platform.js +472 -0
- package/dist/handlers/platform.js.map +1 -0
- package/dist/handlers/round2.d.ts +8 -0
- package/dist/handlers/round2.js +372 -0
- package/dist/handlers/round2.js.map +1 -0
- package/dist/handlers/scim.d.ts +4 -0
- package/dist/handlers/scim.js +595 -0
- package/dist/handlers/scim.js.map +1 -0
- package/dist/handlers/sessions.d.ts +9 -3
- package/dist/handlers/sessions.js +76 -38
- package/dist/handlers/sessions.js.map +1 -1
- package/dist/handlers/support.d.ts +20 -0
- package/dist/handlers/support.js +62 -0
- package/dist/handlers/support.js.map +1 -0
- package/dist/handlers/users.js +7 -0
- package/dist/handlers/users.js.map +1 -1
- package/dist/handlers/workflows.d.ts +2 -0
- package/dist/handlers/workflows.js +428 -0
- package/dist/handlers/workflows.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +23 -1
- package/dist/index.js.map +1 -1
- package/dist/jwe.d.ts +18 -0
- package/dist/jwe.js +101 -0
- package/dist/jwe.js.map +1 -0
- package/dist/jws.d.ts +41 -0
- package/dist/jws.js +135 -0
- package/dist/jws.js.map +1 -0
- package/dist/messages.d.ts +7 -0
- package/dist/messages.js +8 -4
- package/dist/messages.js.map +1 -1
- package/dist/messaging-callbacks.d.ts +100 -0
- package/dist/messaging-callbacks.js +767 -0
- package/dist/messaging-callbacks.js.map +1 -0
- package/dist/openapi.js +41 -1
- package/dist/openapi.js.map +1 -1
- package/dist/parity-bin.js +3 -1
- package/dist/parity-bin.js.map +1 -1
- package/dist/parity-emu3-authz.d.ts +3 -0
- package/dist/parity-emu3-authz.js +61 -0
- package/dist/parity-emu3-authz.js.map +1 -0
- package/dist/parity-emu3-billing.d.ts +3 -0
- package/dist/parity-emu3-billing.js +25 -0
- package/dist/parity-emu3-billing.js.map +1 -0
- package/dist/parity-emu3-messaging.d.ts +3 -0
- package/dist/parity-emu3-messaging.js +27 -0
- package/dist/parity-emu3-messaging.js.map +1 -0
- package/dist/parity-emu3-misc.d.ts +2 -0
- package/dist/parity-emu3-misc.js +63 -0
- package/dist/parity-emu3-misc.js.map +1 -0
- package/dist/parity-emu3-oauth.d.ts +2 -0
- package/dist/parity-emu3-oauth.js +39 -0
- package/dist/parity-emu3-oauth.js.map +1 -0
- package/dist/parity-emu4-actions.d.ts +2 -0
- package/dist/parity-emu4-actions.js +38 -0
- package/dist/parity-emu4-actions.js.map +1 -0
- package/dist/parity-emu4-authz.d.ts +3 -0
- package/dist/parity-emu4-authz.js +68 -0
- package/dist/parity-emu4-authz.js.map +1 -0
- package/dist/parity-emu4-billing.d.ts +6 -0
- package/dist/parity-emu4-billing.js +44 -0
- package/dist/parity-emu4-billing.js.map +1 -0
- package/dist/parity-emu4-compliance.d.ts +2 -0
- package/dist/parity-emu4-compliance.js +92 -0
- package/dist/parity-emu4-compliance.js.map +1 -0
- package/dist/parity-emu4-federation.d.ts +2 -0
- package/dist/parity-emu4-federation.js +33 -0
- package/dist/parity-emu4-federation.js.map +1 -0
- package/dist/parity-emu4-messaging.d.ts +3 -0
- package/dist/parity-emu4-messaging.js +42 -0
- package/dist/parity-emu4-messaging.js.map +1 -0
- package/dist/parity-emu4-oauth.d.ts +2 -0
- package/dist/parity-emu4-oauth.js +55 -0
- package/dist/parity-emu4-oauth.js.map +1 -0
- package/dist/parity-emu4-trust.d.ts +2 -0
- package/dist/parity-emu4-trust.js +41 -0
- package/dist/parity-emu4-trust.js.map +1 -0
- package/dist/parity-routes.d.ts +14 -0
- package/dist/parity-routes.js +439 -0
- package/dist/parity-routes.js.map +1 -0
- package/dist/parity.d.ts +10 -3
- package/dist/parity.js +14 -5
- package/dist/parity.js.map +1 -1
- package/dist/sns-cert.d.ts +9 -0
- package/dist/sns-cert.js +101 -0
- package/dist/sns-cert.js.map +1 -0
- package/dist/tokens.d.ts +85 -3
- package/dist/tokens.js +196 -24
- package/dist/tokens.js.map +1 -1
- package/dist/webauthn-virtual.d.ts +70 -0
- package/dist/webauthn-virtual.js +186 -0
- package/dist/webauthn-virtual.js.map +1 -0
- package/dist/webhook-ext.d.ts +16 -0
- package/dist/webhook-ext.js +218 -0
- package/dist/webhook-ext.js.map +1 -0
- package/dist/webhooks.d.ts +3 -0
- package/dist/webhooks.js +37 -3
- package/dist/webhooks.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.configProblems = configProblems;
|
|
4
|
+
exports.applyConfigPatch = applyConfigPatch;
|
|
5
|
+
const emu4_shared_1 = require("./emu4-shared");
|
|
6
|
+
const emu4_cookies_1 = require("./emu4-cookies");
|
|
7
|
+
const emu4_minors_1 = require("./emu4-minors");
|
|
8
|
+
const LEGAL_BASES = ['consent', 'contract', 'legal_obligation', 'vital_interests', 'public_task', 'legitimate_interests'];
|
|
9
|
+
const KEY_RE = /^[a-z][a-z0-9_]{0,47}$/;
|
|
10
|
+
const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
11
|
+
function validateDataPolicy(raw) {
|
|
12
|
+
const p = 'compliance.dataPolicy';
|
|
13
|
+
if (!(0, emu4_shared_1.isObj)(raw))
|
|
14
|
+
return [{ param: p, message: 'Expected an object.' }];
|
|
15
|
+
const out = [];
|
|
16
|
+
for (const k of Object.keys(raw))
|
|
17
|
+
if (!['controller', 'activities'].includes(k))
|
|
18
|
+
out.push({ param: `${p}.${k}`, message: 'Unknown field. Expected controller, activities.' });
|
|
19
|
+
if (raw.controller !== undefined) {
|
|
20
|
+
if (!(0, emu4_shared_1.isObj)(raw.controller))
|
|
21
|
+
out.push({ param: `${p}.controller`, message: 'Expected an object.' });
|
|
22
|
+
else {
|
|
23
|
+
for (const k of Object.keys(raw.controller))
|
|
24
|
+
if (!['name', 'contactEmail', 'dpoEmail'].includes(k))
|
|
25
|
+
out.push({ param: `${p}.controller.${k}`, message: 'Unknown field.' });
|
|
26
|
+
if (raw.controller.name != null && !(typeof raw.controller.name === 'string' && raw.controller.name.trim() && raw.controller.name.length <= 200))
|
|
27
|
+
out.push({ param: `${p}.controller.name`, message: 'Text of at most 200 characters, or null.' });
|
|
28
|
+
for (const k of ['contactEmail', 'dpoEmail'])
|
|
29
|
+
if (raw.controller[k] != null && (typeof raw.controller[k] !== 'string' || !EMAIL_RE.test(raw.controller[k])))
|
|
30
|
+
out.push({ param: `${p}.controller.${k}`, message: 'An email address, or null.' });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (raw.activities !== undefined) {
|
|
34
|
+
if (!Array.isArray(raw.activities))
|
|
35
|
+
out.push({ param: `${p}.activities`, message: 'Expected an array.' });
|
|
36
|
+
else if (raw.activities.length > 100)
|
|
37
|
+
out.push({ param: `${p}.activities`, message: 'At most 100 processing activities.' });
|
|
38
|
+
else {
|
|
39
|
+
const seen = new Set();
|
|
40
|
+
raw.activities.forEach((a, i) => {
|
|
41
|
+
const at = `${p}.activities.${i}`;
|
|
42
|
+
if (!(0, emu4_shared_1.isObj)(a))
|
|
43
|
+
return void out.push({ param: at, message: 'Expected an object.' });
|
|
44
|
+
const known = ['key', 'name', 'purpose', 'legalBasis', 'dataCategories', 'dataSubjects', 'recipients', 'transfersTo', 'retentionDays'];
|
|
45
|
+
for (const k of Object.keys(a))
|
|
46
|
+
if (!known.includes(k))
|
|
47
|
+
out.push({ param: `${at}.${k}`, message: `Unknown field. Expected ${known.join(', ')}.` });
|
|
48
|
+
if (typeof a.key !== 'string' || !KEY_RE.test(a.key))
|
|
49
|
+
out.push({ param: `${at}.key`, message: 'A slug: lowercase letters, digits and _, starting with a letter (at most 48).' });
|
|
50
|
+
else if (seen.has(a.key))
|
|
51
|
+
out.push({ param: `${at}.key`, message: 'Duplicate activity key.' });
|
|
52
|
+
else
|
|
53
|
+
seen.add(a.key);
|
|
54
|
+
if (!(typeof a.name === 'string' && a.name.trim() && a.name.length <= 120))
|
|
55
|
+
out.push({ param: `${at}.name`, message: 'Required text of at most 120 characters.' });
|
|
56
|
+
if (!(typeof a.purpose === 'string' && a.purpose.trim() && a.purpose.length <= 500))
|
|
57
|
+
out.push({ param: `${at}.purpose`, message: 'Required text of at most 500 characters.' });
|
|
58
|
+
if (!LEGAL_BASES.includes(a.legalBasis))
|
|
59
|
+
out.push({ param: `${at}.legalBasis`, message: `One of ${LEGAL_BASES.join(', ')}.` });
|
|
60
|
+
if (a.transfersTo !== undefined && (!Array.isArray(a.transfersTo) || a.transfersTo.some((x) => typeof x !== 'string' || !/^[A-Z]{2}$/.test(x))))
|
|
61
|
+
out.push({ param: `${at}.transfersTo`, message: 'ISO 3166-1 alpha-2 country codes.' });
|
|
62
|
+
if (a.retentionDays != null && !(typeof a.retentionDays === 'number' && Number.isInteger(a.retentionDays) && a.retentionDays >= 1 && a.retentionDays <= 36500))
|
|
63
|
+
out.push({ param: `${at}.retentionDays`, message: 'Whole days from 1 to 36500, or null.' });
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return out;
|
|
68
|
+
}
|
|
69
|
+
function validateInactive(raw) {
|
|
70
|
+
const p = 'compliance.inactiveUsers';
|
|
71
|
+
if (!(0, emu4_shared_1.isObj)(raw))
|
|
72
|
+
return [{ param: p, message: 'Expected an object.' }];
|
|
73
|
+
const out = [];
|
|
74
|
+
for (const k of Object.keys(raw))
|
|
75
|
+
if (!['enabled', 'afterDays', 'warnDays', 'action'].includes(k))
|
|
76
|
+
out.push({ param: `${p}.${k}`, message: 'Unknown field. Expected enabled, afterDays, warnDays, action.' });
|
|
77
|
+
if (raw.enabled !== undefined && typeof raw.enabled !== 'boolean')
|
|
78
|
+
out.push({ param: `${p}.enabled`, message: 'Expected a boolean.' });
|
|
79
|
+
if (raw.afterDays !== undefined && !(typeof raw.afterDays === 'number' && Number.isInteger(raw.afterDays) && raw.afterDays >= 30 && raw.afterDays <= 3650))
|
|
80
|
+
out.push({ param: `${p}.afterDays`, message: 'Whole days from 30 to 3650.' });
|
|
81
|
+
if (raw.warnDays !== undefined && !(typeof raw.warnDays === 'number' && Number.isInteger(raw.warnDays) && raw.warnDays >= 0 && raw.warnDays < (typeof raw.afterDays === 'number' ? raw.afterDays : 730)))
|
|
82
|
+
out.push({ param: `${p}.warnDays`, message: 'Whole days from 0, fewer than afterDays.' });
|
|
83
|
+
if (raw.action !== undefined && !['notify', 'ban', 'schedule_deletion'].includes(raw.action))
|
|
84
|
+
out.push({ param: `${p}.action`, message: 'One of notify, ban, schedule_deletion.' });
|
|
85
|
+
return out;
|
|
86
|
+
}
|
|
87
|
+
/** Merge a validated patch into the compliance configuration; one problem list for the whole patch, like a configuration write. */
|
|
88
|
+
function configProblems(patch) {
|
|
89
|
+
const problems = [];
|
|
90
|
+
const known = ['compliance', 'localization'];
|
|
91
|
+
for (const k of Object.keys(patch))
|
|
92
|
+
if (!known.includes(k))
|
|
93
|
+
problems.push({ param: k, message: `Unknown section. Expected ${known.join(', ')}.` });
|
|
94
|
+
const c = patch.compliance;
|
|
95
|
+
if (c !== undefined && !(0, emu4_shared_1.isObj)(c))
|
|
96
|
+
problems.push({ param: 'compliance', message: 'Expected an object.' });
|
|
97
|
+
if ((0, emu4_shared_1.isObj)(c)) {
|
|
98
|
+
const blocks = ['minors', 'cookieConsent', 'dataPolicy', 'inactiveUsers', 'dataRegion', 'consents', 'retention'];
|
|
99
|
+
for (const k of Object.keys(c))
|
|
100
|
+
if (!blocks.includes(k))
|
|
101
|
+
problems.push({ param: `compliance.${k}`, message: `Unknown field. Expected ${blocks.join(', ')}.` });
|
|
102
|
+
if (c.minors !== undefined)
|
|
103
|
+
problems.push(...(0, emu4_minors_1.validateMinors)(c.minors));
|
|
104
|
+
if (c.cookieConsent !== undefined)
|
|
105
|
+
problems.push(...(0, emu4_cookies_1.validateCookieConsent)(c.cookieConsent));
|
|
106
|
+
if (c.dataPolicy !== undefined)
|
|
107
|
+
problems.push(...validateDataPolicy(c.dataPolicy));
|
|
108
|
+
if (c.inactiveUsers !== undefined)
|
|
109
|
+
problems.push(...validateInactive(c.inactiveUsers));
|
|
110
|
+
if (c.dataRegion !== undefined && c.dataRegion !== null && (typeof c.dataRegion !== 'string' || !c.dataRegion))
|
|
111
|
+
problems.push({ param: 'compliance.dataRegion', message: 'A region id, or null.' });
|
|
112
|
+
if (c.consents !== undefined && !Array.isArray(c.consents))
|
|
113
|
+
problems.push({ param: 'compliance.consents', message: 'Expected an array.' });
|
|
114
|
+
if (c.retention !== undefined && !(0, emu4_shared_1.isObj)(c.retention))
|
|
115
|
+
problems.push({ param: 'compliance.retention', message: 'Expected an object.' });
|
|
116
|
+
}
|
|
117
|
+
const l = patch.localization;
|
|
118
|
+
if (l !== undefined) {
|
|
119
|
+
if (!(0, emu4_shared_1.isObj)(l))
|
|
120
|
+
problems.push({ param: 'localization', message: 'Expected an object.' });
|
|
121
|
+
else
|
|
122
|
+
for (const k of Object.keys(l)) {
|
|
123
|
+
if (!['requireReview', 'requireFourEyes'].includes(k))
|
|
124
|
+
problems.push({ param: `localization.${k}`, message: 'Unknown field. Expected requireReview, requireFourEyes.' });
|
|
125
|
+
else if (typeof l[k] !== 'boolean')
|
|
126
|
+
problems.push({ param: `localization.${k}`, message: 'Expected a boolean.' });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return problems;
|
|
130
|
+
}
|
|
131
|
+
/** Merge a patch after it passed `configProblems`; throws one validation error listing the first problems otherwise. */
|
|
132
|
+
function applyConfigPatch(cfg, patch) {
|
|
133
|
+
const problems = configProblems(patch);
|
|
134
|
+
if (problems.length > 0)
|
|
135
|
+
throw (0, emu4_shared_1.bad)(`The configuration is not valid: ${problems.slice(0, 5).map((x) => `${x.param}: ${x.message}`).join('; ')}`, problems[0].param);
|
|
136
|
+
const c = patch.compliance;
|
|
137
|
+
const l = patch.localization;
|
|
138
|
+
if ((0, emu4_shared_1.isObj)(c)) {
|
|
139
|
+
for (const [k, v] of Object.entries(c)) {
|
|
140
|
+
cfg.compliance[k] = (0, emu4_shared_1.isObj)(v) && (0, emu4_shared_1.isObj)(cfg.compliance[k]) ? { ...cfg.compliance[k], ...v } : v;
|
|
141
|
+
}
|
|
142
|
+
const cats = cfg.compliance.cookieConsent.categories;
|
|
143
|
+
cfg.compliance.cookieConsent.categories = ['necessary', ...cats.filter((x) => x !== 'necessary')];
|
|
144
|
+
}
|
|
145
|
+
if ((0, emu4_shared_1.isObj)(l))
|
|
146
|
+
Object.assign(cfg.localization, l);
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=emu4-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emu4-config.js","sourceRoot":"","sources":["../../src/handlers/emu4-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Engine, RouteDef } from '../engine';
|
|
2
|
+
export declare function cookieHandlers(): RouteDef[];
|
|
3
|
+
/** Erasing a user deletes the cookie choices linked to them (called from the erasure hook). */
|
|
4
|
+
export declare const eraseCookieRecordsOfUser: (e: Engine, userId: string) => number;
|
|
5
|
+
export declare function validateCookieConsent(raw: unknown): Array<{
|
|
6
|
+
param: string;
|
|
7
|
+
message: string;
|
|
8
|
+
}>;
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.eraseCookieRecordsOfUser = void 0;
|
|
4
|
+
exports.cookieHandlers = cookieHandlers;
|
|
5
|
+
exports.validateCookieConsent = validateCookieConsent;
|
|
6
|
+
const errors_1 = require("../errors");
|
|
7
|
+
const store_1 = require("../store");
|
|
8
|
+
const support_1 = require("./support");
|
|
9
|
+
const emu4_shared_1 = require("./emu4-shared");
|
|
10
|
+
/**
|
|
11
|
+
* The cookie consent store: an append-only ledger of each visitor's choice, honoring Global Privacy Control (and Do Not Track when
|
|
12
|
+
* the instance says so), asking again when the policy version changed, the choice expired or a category was added. The visitor id
|
|
13
|
+
* is the credential for its own records. Settings: `compliance.cookieConsent`. The emulator does not check the publishable key.
|
|
14
|
+
*/
|
|
15
|
+
const SUBJECT_RE = /^[A-Za-z0-9_-]{16,128}$/;
|
|
16
|
+
const MAX_CHOICES_PER_HOUR = 30;
|
|
17
|
+
const FIELDS = ['subject', 'categories', 'gpc', 'dnt', 'source', 'region', 'locale', 'policy_version'];
|
|
18
|
+
const ledger = (0, support_1.engineState)((e) => new store_1.Table('cookie_consent_records', e.clock.now, 'cc'));
|
|
19
|
+
const readSubject = (v) => {
|
|
20
|
+
if (typeof v !== 'string' || !SUBJECT_RE.test(v))
|
|
21
|
+
throw (0, emu4_shared_1.bad)('subject is an opaque visitor id of 16 to 128 characters (letters, digits, - and _). Generate a random one in the browser.', 'subject');
|
|
22
|
+
return v;
|
|
23
|
+
};
|
|
24
|
+
const requireEnabled = (cfg) => {
|
|
25
|
+
if (!cfg.enabled)
|
|
26
|
+
throw (0, emu4_shared_1.bad)('The cookie consent store is off for this application (compliance.cookieConsent.enabled).', 'compliance.cookieConsent.enabled');
|
|
27
|
+
};
|
|
28
|
+
const anonymizeIp = (ip) => {
|
|
29
|
+
if (!ip)
|
|
30
|
+
return null;
|
|
31
|
+
const v4 = /^(\d{1,3}\.\d{1,3}\.\d{1,3})\.\d{1,3}$/.exec(ip);
|
|
32
|
+
if (v4)
|
|
33
|
+
return `${v4[1]}.0`;
|
|
34
|
+
return ip.includes(':') ? `${ip.split(':').slice(0, 3).join(':')}::` : null;
|
|
35
|
+
};
|
|
36
|
+
/** `necessary` is always on; a signal the instance honors forces every other category off. */
|
|
37
|
+
function effective(cfg, sent, s) {
|
|
38
|
+
const signal = s.gpc && cfg.honorGpc ? 'gpc' : s.dnt && cfg.honorDnt ? 'dnt' : null;
|
|
39
|
+
const categories = {};
|
|
40
|
+
for (const c of cfg.categories)
|
|
41
|
+
categories[c] = c === 'necessary' ? true : signal ? false : sent[c] === true;
|
|
42
|
+
return { categories, signal };
|
|
43
|
+
}
|
|
44
|
+
function stale(e, cfg, rec) {
|
|
45
|
+
if (!rec)
|
|
46
|
+
return 'no_choice';
|
|
47
|
+
if (cfg.policyVersion !== null && rec.policy_version !== cfg.policyVersion)
|
|
48
|
+
return 'policy_changed';
|
|
49
|
+
if (cfg.repromptDays > 0 && e.clock.now() - rec.created_at > cfg.repromptDays * emu4_shared_1.DAY)
|
|
50
|
+
return 'expired';
|
|
51
|
+
if (cfg.categories.some((c) => !(c in rec.categories)))
|
|
52
|
+
return 'categories_changed';
|
|
53
|
+
return 'none';
|
|
54
|
+
}
|
|
55
|
+
const present = (r, includeSubject = true) => ({
|
|
56
|
+
object: 'cookie_consent_record',
|
|
57
|
+
id: r.id,
|
|
58
|
+
...(includeSubject ? { subject: r.subject } : {}),
|
|
59
|
+
user_id: r.user_id ?? null,
|
|
60
|
+
categories: r.categories,
|
|
61
|
+
policy_version: r.policy_version ?? null,
|
|
62
|
+
source: r.source,
|
|
63
|
+
gpc: r.gpc,
|
|
64
|
+
dnt: r.dnt,
|
|
65
|
+
signal_applied: r.signal_applied ?? null,
|
|
66
|
+
region: r.region ?? null,
|
|
67
|
+
locale: r.locale ?? null,
|
|
68
|
+
created_at: r.created_at,
|
|
69
|
+
});
|
|
70
|
+
const latestOf = (e, subject) => ledger(e).filter((r) => r.subject === subject)[0];
|
|
71
|
+
const signals = (c) => ({ gpc: c.request.headers.get('sec-gpc') === '1', dnt: c.request.headers.get('dnt') === '1' });
|
|
72
|
+
function cookieHandlers() {
|
|
73
|
+
const READ = 'data_subject_requests:read';
|
|
74
|
+
const WRITE = 'data_subject_requests:write';
|
|
75
|
+
const erase = (e, by) => {
|
|
76
|
+
let n = 0;
|
|
77
|
+
for (const r of ledger(e).all())
|
|
78
|
+
if ((by.subject && r.subject === by.subject) || (by.userId && r.user_id === by.userId))
|
|
79
|
+
n += ledger(e).delete(r.id) ? 1 : 0;
|
|
80
|
+
return n;
|
|
81
|
+
};
|
|
82
|
+
return [
|
|
83
|
+
// ── the application's own site (publishable key) ──
|
|
84
|
+
{ method: 'GET', pattern: '/v1/client/cookie_consent', public: true, handler: (c) => {
|
|
85
|
+
const e = c.engine;
|
|
86
|
+
const cfg = (0, emu4_shared_1.cookieCfg)(e);
|
|
87
|
+
requireEnabled(cfg);
|
|
88
|
+
const subject = readSubject(c.query.get('subject'));
|
|
89
|
+
const latest = latestOf(e, subject);
|
|
90
|
+
const reason = stale(e, cfg, latest);
|
|
91
|
+
const fallback = effective(cfg, {}, signals(c));
|
|
92
|
+
return { headers: { 'cache-control': 'no-store' }, body: {
|
|
93
|
+
object: 'cookie_consent_state', enabled: cfg.enabled, subject, categories: latest?.categories ?? fallback.categories, decided: !!latest,
|
|
94
|
+
reprompt: reason !== 'none', reprompt_reason: reason === 'none' ? null : reason, policy_version: cfg.policyVersion,
|
|
95
|
+
config: { categories: cfg.categories, honor_gpc: cfg.honorGpc, honor_dnt: cfg.honorDnt, reprompt_days: cfg.repromptDays },
|
|
96
|
+
signal_applied: fallback.signal, recorded_at: latest?.created_at ?? null,
|
|
97
|
+
} };
|
|
98
|
+
} },
|
|
99
|
+
{ method: 'POST', pattern: '/v1/client/cookie_consent', public: true, handler: (c) => {
|
|
100
|
+
const e = c.engine;
|
|
101
|
+
const b = c.body;
|
|
102
|
+
const unknown = Object.keys(b).find((k) => !FIELDS.includes(k));
|
|
103
|
+
if (unknown)
|
|
104
|
+
throw (0, emu4_shared_1.bad)(`Unrecognised field ${unknown}. Expected any of ${FIELDS.join(', ')}.`, unknown);
|
|
105
|
+
const cfg = (0, emu4_shared_1.cookieCfg)(e);
|
|
106
|
+
requireEnabled(cfg);
|
|
107
|
+
const subject = readSubject(b.subject);
|
|
108
|
+
if (!(0, emu4_shared_1.isObj)(b.categories))
|
|
109
|
+
throw (0, emu4_shared_1.bad)('categories is an object of category name to true or false.', 'categories');
|
|
110
|
+
const sent = {};
|
|
111
|
+
for (const [k, v] of Object.entries(b.categories)) {
|
|
112
|
+
if (!cfg.categories.includes(k))
|
|
113
|
+
throw (0, emu4_shared_1.bad)(`Unknown category "${k}". This application asks about: ${cfg.categories.join(', ')}.`, `categories.${k}`);
|
|
114
|
+
if (typeof v !== 'boolean')
|
|
115
|
+
throw (0, emu4_shared_1.bad)('Each category is true or false.', `categories.${k}`);
|
|
116
|
+
sent[k] = v;
|
|
117
|
+
}
|
|
118
|
+
for (const k of ['gpc', 'dnt'])
|
|
119
|
+
if (b[k] !== undefined && typeof b[k] !== 'boolean')
|
|
120
|
+
throw (0, emu4_shared_1.bad)(`${k} is a boolean.`, k);
|
|
121
|
+
const source = b.source === undefined ? 'banner' : b.source;
|
|
122
|
+
if (source !== 'banner' && source !== 'api' && source !== 'signal')
|
|
123
|
+
throw (0, emu4_shared_1.bad)('source is banner, api or signal.', 'source');
|
|
124
|
+
for (const k of ['region', 'locale'])
|
|
125
|
+
if (b[k] !== undefined && (typeof b[k] !== 'string' || b[k].length > 35))
|
|
126
|
+
throw (0, emu4_shared_1.bad)(`${k} is text of at most 35 characters.`, k);
|
|
127
|
+
if (b.policy_version !== undefined && cfg.policyVersion !== null && b.policy_version !== cfg.policyVersion) {
|
|
128
|
+
throw new errors_1.EmulatorError('CONFLICT', `The banner showed policy version "${String(b.policy_version)}"; the current one is "${cfg.policyVersion}". Show it again and record the new choice.`, undefined, { meta: { policy_version: cfg.policyVersion } });
|
|
129
|
+
}
|
|
130
|
+
const s = signals(c);
|
|
131
|
+
const gpc = s.gpc || b.gpc === true;
|
|
132
|
+
const dnt = s.dnt || b.dnt === true;
|
|
133
|
+
const idem = c.request.headers.get('idempotency-key')?.slice(0, 128) || null;
|
|
134
|
+
const prior = idem ? ledger(e).find((r) => r.subject === subject && r.idempotency_key === idem) : undefined;
|
|
135
|
+
if (prior)
|
|
136
|
+
return { status: 200, headers: { 'cache-control': 'no-store' }, body: { ...present(prior), reprompt: false } };
|
|
137
|
+
if (ledger(e).filter((r) => r.subject === subject && r.created_at >= e.clock.now() - 3_600_000).length >= MAX_CHOICES_PER_HOUR)
|
|
138
|
+
throw new errors_1.EmulatorError('RATE_LIMITED', 'Too many choices recorded for this visitor. Try again later.');
|
|
139
|
+
const out = effective(cfg, sent, { gpc, dnt });
|
|
140
|
+
const row = ledger(e).insert({ subject, user_id: null, categories: out.categories, policy_version: cfg.policyVersion, source, gpc, dnt, signal_applied: out.signal, region: b.region ?? null, locale: b.locale ?? null, ip_anon: anonymizeIp(c.request.headers.get('x-forwarded-for')?.split(',')[0]?.trim() ?? null), idempotency_key: idem, created_at: e.clock.now() });
|
|
141
|
+
e.webhooks.emit('cookie_consent.recorded', { object: 'cookie_consent', subject, categories: out.categories, policy_version: row.policy_version, signal_applied: out.signal, user_id: null, recorded_at: row.created_at });
|
|
142
|
+
return { status: 201, headers: { 'cache-control': 'no-store' }, body: { ...present(row), reprompt: false } };
|
|
143
|
+
} },
|
|
144
|
+
{ method: 'DELETE', pattern: '/v1/client/cookie_consent', public: true, handler: (c) => {
|
|
145
|
+
const subject = readSubject(c.query.get('subject'));
|
|
146
|
+
return { headers: { 'cache-control': 'no-store' }, body: { object: 'cookie_consent_erasure', subject, removed: erase(c.engine, { subject }) } };
|
|
147
|
+
} },
|
|
148
|
+
{ method: 'POST', pattern: '/v1/client/me/cookie_consent/link', public: true, handler: async (c) => {
|
|
149
|
+
const e = c.engine;
|
|
150
|
+
const me = await (0, support_1.sessionFromBearer)(c);
|
|
151
|
+
const unknown = Object.keys(c.body).find((k) => k !== 'subject');
|
|
152
|
+
if (unknown)
|
|
153
|
+
throw (0, emu4_shared_1.bad)(`Unrecognised field ${unknown}. Expected any of subject.`, unknown);
|
|
154
|
+
const subject = readSubject(c.body.subject);
|
|
155
|
+
let linked = 0;
|
|
156
|
+
for (const r of ledger(e).all())
|
|
157
|
+
if (r.subject === subject && !r.user_id) {
|
|
158
|
+
r.user_id = me.userId;
|
|
159
|
+
linked += 1;
|
|
160
|
+
}
|
|
161
|
+
return { headers: { 'cache-control': 'no-store' }, body: { object: 'cookie_consent_link', linked } };
|
|
162
|
+
} },
|
|
163
|
+
// ── the operator ──
|
|
164
|
+
{ method: 'GET', pattern: '/v1/cookie_consents', scope: READ, handler: (c) => {
|
|
165
|
+
const e = c.engine;
|
|
166
|
+
const rows = ledger(e).filter((r) => (!c.query.get('user_id') || r.user_id === c.query.get('user_id')) && (!c.query.get('subject') || r.subject === c.query.get('subject')));
|
|
167
|
+
return { body: (0, emu4_shared_1.pageReply)(c, rows.map((r) => present(r))) };
|
|
168
|
+
} },
|
|
169
|
+
{ method: 'GET', pattern: '/v1/cookie_consents/summary', scope: READ, handler: (c) => {
|
|
170
|
+
const e = c.engine;
|
|
171
|
+
const days = c.query.get('days') === null ? 30 : Number(c.query.get('days'));
|
|
172
|
+
if (!Number.isInteger(days) || days < 1 || days > 365)
|
|
173
|
+
throw (0, emu4_shared_1.bad)('days is a whole number from 1 to 365.', 'days');
|
|
174
|
+
const cfg = (0, emu4_shared_1.cookieCfg)(e);
|
|
175
|
+
const since = e.clock.now() - days * emu4_shared_1.DAY;
|
|
176
|
+
const rows = ledger(e).filter((r) => r.created_at >= since);
|
|
177
|
+
const latest = new Map();
|
|
178
|
+
for (const r of [...rows].reverse())
|
|
179
|
+
latest.set(r.subject, r);
|
|
180
|
+
return { body: {
|
|
181
|
+
object: 'cookie_consent_summary', enabled: cfg.enabled, days, policy_version: cfg.policyVersion, choices_recorded: rows.length, visitors: latest.size,
|
|
182
|
+
global_privacy_control: rows.filter((r) => r.gpc).length,
|
|
183
|
+
opted_in: Object.fromEntries(cfg.categories.map((k) => [k, [...latest.values()].filter((r) => r.categories[k] === true).length])),
|
|
184
|
+
} };
|
|
185
|
+
} },
|
|
186
|
+
{ method: 'GET', pattern: '/v1/cookie_consents/subjects/:subject', scope: READ, handler: (c) => {
|
|
187
|
+
const subject = readSubject(c.params.subject);
|
|
188
|
+
const history = ledger(c.engine).filter((r) => r.subject === subject);
|
|
189
|
+
if (history.length === 0)
|
|
190
|
+
throw (0, errors_1.notFound)('No choices recorded for this visitor.');
|
|
191
|
+
return { body: { object: 'cookie_consent_subject', subject, current: present(history[0]), history: history.map((r) => present(r, false)) } };
|
|
192
|
+
} },
|
|
193
|
+
{ method: 'DELETE', pattern: '/v1/cookie_consents/subjects/:subject', scope: WRITE, handler: (c) => {
|
|
194
|
+
const subject = readSubject(c.params.subject);
|
|
195
|
+
const removed = erase(c.engine, { subject });
|
|
196
|
+
(0, emu4_shared_1.audit)(c.engine, c, 'cookie_consent.erased', 'cookie_consent', subject.slice(0, 8), { removed, by: 'subject' });
|
|
197
|
+
return { body: { object: 'cookie_consent_erasure', removed } };
|
|
198
|
+
} },
|
|
199
|
+
{ method: 'DELETE', pattern: '/v1/users/:id/cookie_consents', scope: WRITE, handler: (c) => {
|
|
200
|
+
const removed = erase(c.engine, { userId: c.params.id });
|
|
201
|
+
(0, emu4_shared_1.audit)(c.engine, c, 'cookie_consent.erased', 'cookie_consent', c.params.id, { removed, by: 'user' });
|
|
202
|
+
return { body: { object: 'cookie_consent_erasure', removed } };
|
|
203
|
+
} },
|
|
204
|
+
// ── emulator helper: the worker's retention pass (compliance.cookieConsent.retentionDays) ──
|
|
205
|
+
{ method: 'POST', pattern: '/__emulator/compliance/cookie_consent/sweep', public: true, handler: (c) => {
|
|
206
|
+
const e = c.engine;
|
|
207
|
+
const days = (0, emu4_shared_1.cookieCfg)(e).retentionDays;
|
|
208
|
+
let removed = 0;
|
|
209
|
+
if (days > 0)
|
|
210
|
+
for (const r of ledger(e).all())
|
|
211
|
+
if (e.clock.now() - r.created_at > days * emu4_shared_1.DAY)
|
|
212
|
+
removed += ledger(e).delete(r.id) ? 1 : 0;
|
|
213
|
+
return { body: { object: 'cookie_consent_sweep', retention_days: days, removed } };
|
|
214
|
+
} },
|
|
215
|
+
];
|
|
216
|
+
}
|
|
217
|
+
/** Erasing a user deletes the cookie choices linked to them (called from the erasure hook). */
|
|
218
|
+
const eraseCookieRecordsOfUser = (e, userId) => {
|
|
219
|
+
let n = 0;
|
|
220
|
+
for (const r of ledger(e).all())
|
|
221
|
+
if (r.user_id === userId)
|
|
222
|
+
n += ledger(e).delete(r.id) ? 1 : 0;
|
|
223
|
+
return n;
|
|
224
|
+
};
|
|
225
|
+
exports.eraseCookieRecordsOfUser = eraseCookieRecordsOfUser;
|
|
226
|
+
function validateCookieConsent(raw) {
|
|
227
|
+
const p = 'compliance.cookieConsent';
|
|
228
|
+
if (!(0, emu4_shared_1.isObj)(raw))
|
|
229
|
+
return [{ param: p, message: 'Expected an object.' }];
|
|
230
|
+
const out = [];
|
|
231
|
+
const known = ['enabled', 'categories', 'policyVersion', 'honorGpc', 'honorDnt', 'repromptDays', 'retentionDays'];
|
|
232
|
+
for (const k of Object.keys(raw))
|
|
233
|
+
if (!known.includes(k))
|
|
234
|
+
out.push({ param: `${p}.${k}`, message: `Unknown field. Expected ${known.join(', ')}.` });
|
|
235
|
+
for (const k of ['enabled', 'honorGpc', 'honorDnt'])
|
|
236
|
+
if (raw[k] !== undefined && typeof raw[k] !== 'boolean')
|
|
237
|
+
out.push({ param: `${p}.${k}`, message: 'Expected a boolean.' });
|
|
238
|
+
if (raw.categories !== undefined && (!Array.isArray(raw.categories) || raw.categories.length > 20 || raw.categories.some((x) => typeof x !== 'string' || !/^[a-z][a-z0-9_]{0,31}$/.test(x))))
|
|
239
|
+
out.push({ param: `${p}.categories`, message: 'Up to 20 lowercase names (letters, digits, _).' });
|
|
240
|
+
if (raw.policyVersion != null && !(typeof raw.policyVersion === 'string' && raw.policyVersion.trim() && raw.policyVersion.length <= 64))
|
|
241
|
+
out.push({ param: `${p}.policyVersion`, message: 'Text of at most 64 characters, or null.' });
|
|
242
|
+
if (raw.repromptDays !== undefined && !(typeof raw.repromptDays === 'number' && Number.isInteger(raw.repromptDays) && raw.repromptDays >= 0 && raw.repromptDays <= 3650))
|
|
243
|
+
out.push({ param: `${p}.repromptDays`, message: 'Whole days from 0 to 3650.' });
|
|
244
|
+
if (raw.retentionDays !== undefined && !(typeof raw.retentionDays === 'number' && Number.isInteger(raw.retentionDays) && raw.retentionDays >= 0 && raw.retentionDays <= 36500))
|
|
245
|
+
out.push({ param: `${p}.retentionDays`, message: 'Whole days from 0 to 36500.' });
|
|
246
|
+
return out;
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=emu4-cookies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emu4-cookies.js","sourceRoot":"","sources":["../../src/handlers/emu4-cookies.ts"],"names":[],"mappings":"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"}
|